PHP-ის ლინტერი
Last updated
Last updated
დეველოპმენტის პროცესში გააზრებულად თუ გაუაზრებლად დეველოპერები აყალიბებენ კოდის წერის სტანდარტებს.
კოდის წერის სტანდარტი არის სტილი, რომელსაც ავრცელებ მთელს შენს codebase-ზე იმისათვის, რომ მოირგო საკუთარ თავზე, ჩამოაყალიბო დისციპლინა, გაალამაზო კოდი.
ამისათვის საფუძვლიანი მიზეზები არსებოს. ერთ-ერთი და უმთავრესი მიზეზი არის დისციპლინა. კოდში თუ გაქვს დისციპლინა დაცული და გაქვს შემუშავებული წერის სტილი, ამ შემთხვევაში კოდში გარკვევა და შემდგომი ნაწილების მიმატება გაცილებით მარტივდება. ამასთანავე გუნდში კოდის წერის სტილის არსებობა, რომელსაც თითოეული გუნდის წევრი დაიცავს — არანორმალურად მნიშვნელოვანია. ასეთი მიდგომა ამარტივებს გუნდურ მუშაობას და ახალშემატებული დეველოპერიც მარტივად ერკვევა კოდში. ასევე, როდესაც ეს სტანდარტი შემუშავებულია და დამკვიდრებული კოდში არც იმაზე გაღიზიანდები “მე, რომ სფეისები მიყვარს ფუნქციის არგუმენტების გარშემო ეს ტიპი ერთმანეთზე მიწებებულად რატო წერს, თვალები არ სტკივა?!”
…
მაგრამ კოდის სტანდარტების შენარჩუნება სუფთა ხელებით საკმაოდ დიდ ძალისხმევას და დროს მოითხოვს, ამიტომაც თითქმის ყოველ ენაში არსებობს linter-ის ცნება და შესაბამისი ხელსაწყო.
ლინტერი არის ჩვეულებრივი ხელსაწყო, რომელიც გეხმარება კონკრეტული კოდის სტილის დანერგვაში და ასევე ხარვეზების პოვნაში.
უმეტესწილად ლინტერები გამოიყენებიან IDE-სთან ერთად და კონკრეტულ მოვლენაზე(event)-ზე ხდება ლინტერის ამუშავება და კონკრეტული კოდის ნაწილის შესწორება.
ამასთანავე ლინტერი შეიგძლია გაუშვა command line-დან, რომ გადაუაროს მთელს შენ პროექტს და შეასწოროს ყველა ხარვეზი.
მოკლე პასუხი — კი.
ვრცელი პასუხი — ლარაველი დღესდღეობით ყველაზე პოპულალური ფრეიმვორქია PHP-ის სამყაროში. თითონ ლარაველი კი მრავლად იყენებს ასევე პოპულალური ფრეიმვორქის, Symfony-ის კომპონენტებს.
Symfony-ს შემქმნელმა Fabien Potencier-მა, გამოიჩინა რა კეთილგონიერება და შექმნა PHP-ის ლინტერი — მადლობა ფაბიენს 🙌
CS Fixer-ის დაყენების რამოდენიმე გზა არსებობს:
გლობალურად დაყენება composer-ის საშუალებით
გლობალურად დაყენება composer-ის გარეშე
პროექტის ჭრილში, composer-ით დაინსტალირბა
ამ მაგალითში ჩვენ განვიხილოთ, როგორ უნდა გავმართოთ CS Fixer ჩვენი პროექტის ჭრილში და ასევე დავუკავშიროთ VSCode-სა და PHPStorm-ს.
სხვა IDE-ებთან დაკავშირებაც მსგავსი პროცესია
ჩვენი ლარაველის პროექტის root ფოლდერში, ტერმინალში გავუშვათ ბრძანება, რომელიც დააინსტალირებს CS Fixer-ის composer-ის ბიბლიოთეკას:
თუ იყენებთ PHPStorm-ს მაშინ საჭიროა სპეციფიური ვერსია დააინსტალიროთ რადგან ამ მომენტისათვის(2022 - ნოემბერი) PHPStorm ახალ CS Fixer-ის ვერსიასთან არ არის თანხვედრაში:
შემდგომ, თუ ვნახავთ ჩვენს პროექტში /vendor/bin -ში არსებულ executable ფაილებს, დავინახავთ, რომ აქედან ერთ-ერთი არის php-cs-fixer.
ჩვენი პროექტის root ფოლდერში თუ გავუშვებთ, ბრძანებას:
დავინახავთ, რომ CSFixer -ი წარმათებით დაინსტალირდა და დაგვიწერს მის შესახებ ინფორმაციას.
დავრწმუნდით, რომ php cs fixer მუშაობს 🙏
ჩვენი ლარაველის პროექტი საწყის ეტაპზე არის დაუფორმატებელი. შესაბამისად როდესაც რაიმე კოდს დავწერთ და დავაფორმატებთ ფაილს, ჩვენს მიერ დაწერილი კოდის გარდა კიდევ ბევრი რამ ფორმატდება. რის გამოც გიტის კომიტებში ზოგჯერ ჭირს იმის გარჩევა თუ რა გავაკეთეთ, და ისედაც მუშაობის დროს არ არის კომფორტული. შესაბამისად საჭიროა php-cs-fixer ის გამართვისთანავე ბარემ დავაფორმატოთ ჩვენი მთელი პროექტი. ამის გასაკეთებლად სულ რამოდენიმე მარტივი step-ის განხორციელებაა საჭირო.
ჩვენს composer.json ფაილში scripts-ში ჩავამატოთ კიდევ ერთი სკრიპტი:
ხოლო ამ სკრიპტის დამატების შემდგომ გავუშვათ ბრძანება
თუ თქვენ PHPStorm-ზე აპირებთ გამართვას გადადით მომდევნო თავზე
გადავინაცვლოთ VSCode-ში.
პირველ რიგში დაგვჭირდება, რომ CS Fixer-ისთვის შესაბამისი ექსთენშენი დავაყენოთ VSCode-ში:
ყურადღება მიაქციეთ, რომ ეს ექსთენშენი junstyle-ის ავტორობით იყოს
შემდგომ ჩვენს პროექტში უნდა შევქმნათ .vscode-ის ფოლდერი, შიგნით კი settings.json ფაილი სადაც კონფიგურაციებს გავწერთ:
VSCode-ს კონფიგურაციაში უნდა ვუთხრათ სამი რაღაც: * ყოველ დასეივებაზე გაუშვას php-ის formatter-ი * ვუთხრათ php-cs-fixer -ის მისამართი(/vendor/bin/php-cs-fixer) * ვუთხრათ საიდან წაიკითხოს php-cs-fixer-ის კონფიგურაციის ფაილი
შესაბამისად JSON-ის კონფიგურაცია შემდეგ სახეს მიიღებს:
გახსენით თქვენთვის სასურველი პროექტი PHPStorm-ში.
და შევიდეთ PHPStorm-ის პარამეტრებში:
შემდგომ ვნახოთ PHP-ის Quality Tools და მანდ ვიპოვით PHP CS Fixer-ის სექციას:
დავაჭიროთ სამწერტილიან ღილაკს და მანდ უნდა მივუთითოთ ჩვენი CS Fixer-ის Binary File-ის მისამართი, რომელიც vendor/bin ფოლდერშია განთავსებული:
დავაჭიროთ ღილაკს validate და დავრწმუნდეთ, რომ ყველაფერი კარგად მუშაობს.
შემდეგ გადავიდეთ CS Fixer Inspection-ში და გავუწეროთ რამოდენიმე პარამეტრი:
Inspection-ში უნდა მოვნიშნოთ PHP CS Fixer Validation, Severity(სიმკაცრე) უნდა დავაყენოთ error-ზე და Ruleset-ში ავირჩიოთ custom, რაც იმას ნიშნავს, რომ გვინდა PHP CS Fixer-ს ჩვენი შექმნილი წესების ფაილი მივცეთ A.K.A. ის ფაილი, რომელიც ეტყვის CS Fixer-ს როგორ გვინდა, რომ ჩვენი კოდი იყოს დაფორმატებული.
ახლა შევიდეთ ისევ Inspections-ში და მივუთითოთ PHPStorm-ს ჩვენს მიერ შექმნილი კონფიგურაციის ფაილი:
ახლა შევინახოთ ჩვენი კონფიგურაცია და PHPStorm-მა უკვე უნდა აღიქვას ჩვენი კოდი და ის კონფიგურაცია, რითიც გვინდა, რომ ჩვენს კოდში ჩამოვაყალიბოთ დისციპლინა.
მაგრამ ეს საკმარისი არაა, იმისათვის რომ დეველოპმენტი სასიამოვნო იყოს. უკეთესი იქნება, რომ PHP CS Fixer-მა ჩვენი კოდი თავად გამოასწოროს ხოლმე.
ამისათვის საჭიროა File Watcher-ის დამატება.
შევიდეთ ისევ PHPStorm-ის პარამეტრებში და ვიპოვოთ File Watchers განყოფილება:
ავირჩიოთ Template-ში Custom და გავწეროთ ახალი ვოჩერის კონფიგურაცია.
Name: PHP CS Fixer File Type: PHP Program: [Your Project Path]/vendor/bin/php-cs-fixer Arguments: fix --config=$ProjectFileDir$/.php-cs-fixer.php --cache-file=$ProjectFileDir$/.php-cs-fixer.cache $FileDir$/$FileName$
ასევე Advanced Options-ში ზედა ორი ჩექბოქსი გამოვრთოთ
OK-ს დავაჭიროთ და ჩვენი ვოჩერი დაემატება.
ახლა კი, ნებისმიერ PHP ფაილში Ctrl + S ის აკრეფისას ჩვენი ფაილი დაფორმატდება PHP CS Fixer-ის მეშვეობით.
პირველად დასევებისას Alert-ს ამოგვიგდებს, რომ დავაეფრუვოთ ვოჩერის გაშვება:
დააჭირეთ Trust project and run-ს და ყველაფერი მოგვარდება.
მორჩაა 😉
ერთადერთი რაც დაგვრჩა არის ის, რომ შევქმნათ root ფოლდერში .php-cs-fixer.php ფაილი და შიგნით ჩავწეროთ ჩვენი კონფიგურაცია:
სანამ PHPStorm-ს ვეტყვით ზუსტად რომელი კონფიგურაციის ფაილით იხელმძღვანელოს, მანამდე ჩვენს Root ფოლდერში უნდა შევქმნათ .php-cs-fixer.php ფაილი და გადმოვაკოპიროთ ამ ფაილში შემდეგი კონფიგურაცია: