1 of 16

優雅導入 PHP CS_Sniffer Linter

kylinyu.win

2021. 08. 10

2 of 16

Outline

  • phpcs/phpcbf
  • 設置 CS_Sniffer Configuration File
  • 專案整合

3 of 16

composer install

讓 codesniffer 工具跟著各專案使用 composer 作版本控制

composer require squizlabs/php_codesniffer --dev

4 of 16

phpcs 檢查

  • phpcs --standard=phpcs.xml

(指定設定檔,優先抓設定檔內指定的位置)

  • phpcs --standard=phpcs.xml path_you_want

(也可自行指定檢查 folder 位置或者 file

  • phpcs --standard=phpcs.xml -n

(不顯示 Warning 項目)

5 of 16

phpcbf 修正

  • phpcbf --standard=phpcs.xml

(根據設定檔作修正)

6 of 16

設置 CS_Sniffer Configuration File

7 of 16

CS Sniffer 術語

Sniff 條規

意指: Standard 內的細目規則

PSR2 (12 sniffs)

  • PSR2.Classes.ClassDeclaration
  • PSR2.Classes.PropertyDeclaration
  • PSR2.ControlStructures.ControlStructureSpacing
  • PSR2.ControlStructures.ElseIfDeclaration

….

Standard 標準

  • Generic
  • MySource
  • PEAR
  • PSR1
  • PSR12
  • PSR2
  • Squiz
  • Zend

https://github.com/squizlabs/PHP_CodeSniffer/tree/master/src/Standards

8 of 16

掃描檔案設定

  • file 為要掃描的子目錄或者檔案皆可
  • exclude-pattern 排除不想要的檔案

Standard 標準設定:

  • PSR2: Legacy Project
  • PSR12: Modern Project
  • exclude: 排除標準內的某些準則

其餘設定:

  • 僅列長度限制

9 of 16

如何微調規則 (Sniff)?

遇到某些錯誤如果是不適合修正的,e.g. namespace or class naming ...

10 of 16

phpcs --standard=phpcs.xml -e

> 找出 Sniff 名稱,再將對應條規新增到 phpcs.xml 作 exclude

11 of 16

單行 Ignore

PS. 還是建議修正不要使用 Ignore

// phpcs:disable Sniff Item

12 of 16

專案整合至 Legacy 專案

避免大量異動所產生的副作用及風險

採漸進式導入的方式做整合

13 of 16

coverageChecker

  1. git diff 存成 txt
  2. phpcs 跑完 export to JSON format
  3. coverageChecker 會用 1 的 diff 去 Parse 2 警告的內容並顯示

14 of 16

Makefile (半自動?

15 of 16

文章好讀版

16 of 16

Thank You

Any questions?