Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Don't work for PHPCS, make PHPCS work for you

Don't work for PHPCS, make PHPCS work for you

Presented on February 3 2017 at SunshinePHP, Miami, Florida, United States.
http://2017.sunshinephp.com/
---------------------------------------------------------------
Congratulations! Your team has chosen a coding standard to use and you're well on your way to a consistent code style for all your projects. But... there are some extra things you'd like to check for, some rules you really can't be bothered with and some which sort of fit your needs, but not completely. Now what?

Come and learn how to make the PHP Codesniffer work for you and how to streamline the PHPCS related work-flow along the way.

Links:
* Code: https://github.com/jrfnl/make-phpcs-work-for-you
* Docs: https://github.com/squizlabs/PHP_Codesniffer/wiki
* Customizable sniff properties: https://gist.github.com/jrfnl/ff1555af507a03f3df00462b94d029ab (will be added to the PHPCS wiki in due time)
* Step-by-step strategy: https://github.com/xwp/wp-dev-lib#limiting-scope-of-checks
* Feedback: https://joind.in/20086

Juliette Reinders Folmer

February 03, 2017
Tweet

More Decks by Juliette Reinders Folmer

Other Decks in Programming

Transcript

  1. Static Analysis • Tokenizes • Per file • Light weight

    Dynamic Analysis • Parses • Across files
  2. <?xml version="1.0"?> <ruleset name="MyProject"> <rule ref="PSR1" /> <rule ref="PSR2"> <exclude

    name="Generic.Files.LineEndings" /> </rule> <config name="testVersion" value="5.1-99.0"/> <rule ref="PHPCompatibility"> <exclude name="PHPCompatibility.PHP. DeprecatedIniDirectives.safe_modeRemoved"> </rule> </ruleset> Standard A Standard B
  3. <?xml version="1.0"?> <ruleset name="MyProject"> <exclude-pattern>*/vendor/*</exclude-pattern> <rule ref="PSR1" /> <rule ref="PSR2">

    <exclude name="Generic.Files.LineEndings" /> </rule> <config name="testVersion" value="5.1-99.0"/> <rule ref="PHPCompatibility"> <exclude name="PHPCompatibility.PHP. DeprecatedIniDirectives.safe_modeRemoved"> </rule> <rule ref="PHPCompatibility.PHP.Deprecated IniDirectives.magic_quotes_runtimeRemoved"> <exclude-pattern>*/MyFile.php</exclude-pattern> </rule> <rule ref="Generic.Metrics.NestingLevelSniff" /> <rule ref="PEAR.Commenting" /> </ruleset> Standard A Standard B
  4. <?xml version="1.0"?> <ruleset name="MyProject"> <arg value="ps"/> <arg name="report" value="summary"/> <arg

    name="extensions" value="php,inc,js,css,lib/php"/> <ini name="memory_limit" value="128M" /> </ruleset> phpcs . -p –s -report=summary -extensions= php,inc,js,css,lib/php -d memory_limit=128M
  5. Customizing Messages <?xml version="1.0"?> <ruleset name="MyProject"> <rule ref="Generic.Commenting.Todo.CommentFound"> <message>Please review

    this TODO comment: %s</message> <severity>8</severity> <type>error</type> </rule> </ruleset>
  6. Customizing Sniffs <?xml version="1.0"?> <ruleset name="MyProject"> <rule ref="Generic.Files.LineLength"> <properties> <property

    name="lineLimit" value="90"/> <property name="absoluteLineLimit" value="100"/> </properties> </rule> </ruleset>
  7. Customizing Sniffs <?xml version="1.0"?> <ruleset name="MyProject"> <rule ref="Generic.PHP.ForbiddenFunctions"> <properties> <property

    name="forbiddenFunctions" type="array" value="delete=>unset,print=>echo, create_function=>null" /> </properties> </rule> </ruleset>
  8. fui

  9. Handling Rule Exceptions // @codingStandardsIgnoreLine <code line to be ignored>

    // @codingStandardsIgnoreStart ... <code> ... // @codingStandardsIgnoreEnd // @codingStandardsIgnoreFile
  10. Running PHPCS via Travis before_install: - export PHPCS_DIR=/tmp/phpcs - export

    PHPCOMPAT_DIR=/tmp/phpcompat/stnd - git clone -b master --depth 1 https://github.com/squizlabs/PHP_CodeSniffer.git $PHPCS_DIR - git clone -b master --depth 1 https://github.com/wimg/PHPCompatibility.git $PHPCOMPAT_DIR - cd $PHPCS_DIR - $PHPCS_DIR/scripts/phpcs --config-set installed_paths /tmp/phpcompat - cd $TRAVIS_BUILD_DIR - phpenv rehash script: - $PHPCS_DIR/scripts/phpcs . –-standard=phpcs.xml
  11. Running PHPCS Selectively matrix: include: ... - php: '5.6' env:

    SNIFF=1 before_install: ... - if [[ "$SNIFF" == "1" ]]; then git clone -b master --depth 1 https://github.com/squizlabs/PHP_CodeSniffer.git $PHPCS_DIR; fi script: - if [[ "$SNIFF" == "1" ]]; then $PHPCS_DIR/scripts/phpcs; fi