$30 off During Our Annual Pro Sale. View Details »

Managing Code Quality and Code Consistency

Managing Code Quality and Code Consistency

Presented on December 16 2022 for final year Composer Science students at De Montfort University, Leicester, UK.
---------------------------------------------------------------

Juliette Reinders Folmer

December 16, 2022
Tweet

More Decks by Juliette Reinders Folmer

Other Decks in Programming

Transcript

  1. Managing Code Quality
    and Code Consistency
    Juliette Reinders Folmer

    View Slide

  2. “ Only half of
    programming is coding.
    The other 90% is
    debugging.

    View Slide

  3. hotblack

    View Slide

  4. Functional Technical
    Architectural
    Conceptual

    View Slide

  5. Importance
    Conceptual
    Architectural
    Functional
    Technical

    View Slide

  6. Attention
    Conceptual
    Architectural
    Functional
    Technical

    View Slide

  7. Pull request
    Merged
    ... typo in documentation ...
    ... whitespace ...
    ... please add some
    tests ...
    ... is situation x handled ...
    ... use early
    return ...
    ... using PHP 8.0
    syntax ...
    ... use strict checking in
    your tests ...

    View Slide

  8. Pull request
    Merged
    ... please add some
    tests ...
    ... is situation x handled ...

    View Slide

  9. Marnhe du Plooy

    View Slide

  10. Psalm
    CS-
    Fixer
    PHP
    Stan
    PHP
    CS
    Exakat
    PHP
    CPD
    PHP
    Insights
    PHP
    MD
    Phan
    Rector
    PHP
    DCD
    Static Analysis Tools
    PHP
    MND

    View Slide

  11. PHP
    CS
    Static Analysis Tools

    View Slide

  12. Jon Ng
    Getting Started
    with
    PHP_CodeSniffer

    View Slide

  13. Phar Composer Git clone PEAR
    Installation

    View Slide

  14. Running PHP_CodeSniffer
    phpcs /path/to/code –-standard=StandardName
    -p (show progress)
    -s (show source/errorcodes)
    -l (local, do not recurse into subdirs)
    -n (no warnings)
    -vvv (verbosity)
    -i (show installed standards)
    -h (help, shows lots more options)

    View Slide

  15. Fixing errors
    phpcs /path/to/code –-standard=StandardName
    phpcbf /path/to/code –-standard=StandardName

    View Slide

  16. Which Standard Will Be Used ?
    Command line
    .phpcs.xml
    phpcs.xml
    .phpcs.xml.dist
    phpcs.xml.dist
    --standard=Standard
    --standard=myrules.xml

    View Slide

  17. Standard: ruleset.xml .phpcs.xml.dist
    • Can add new sniffs
    • Can be used by name when
    registered with PHPCS

    View Slide

  18. Brief
    (Re-)Introduction
    to PHP_CodeSniffer
    Nightsabre

    View Slide

  19. How It Works
    Standard
    (ruleset)
    Sniffs Checks
    (errorcodes)

    View Slide

  20. Standard
    Standard
    A
    Standard
    B
    Standard
    A
    Standard
    B
    Standard
    A
    Standard
    B

    View Slide

  21. Standard.Subset.Sniff.ErrorCode
    Include:

    Exclude:

    ~~~~~~~~

    View Slide



  22. .
    */vendor/*








    */tests/*


    Standard
    A
    Standard
    B

    View Slide

  23. Customizing
    Sniffs













    View Slide



  24. .


    value="php,inc,js,css,lib/php"/>



    phpcs
    .
    -p –s
    --report=summary
    --extensions=
    php,inc,js,css,lib/php
    -d memory_limit=128M
    --parallel=8 (PHPCS 3+)

    View Slide

  25. elvis santana
    Choose Your Poison

    View Slide

  26. View Slide

  27. JS
    CSS
    PHP
    (+ inc)

    View Slide

  28. Code Style
    Documentation
    Code Smells
    Code Metrics
    Best
    Practices
    Code
    Compatibility

    View Slide

  29. PHPCS Build-in Standards
    PEAR
    PSR1 PSR2
    Zend
    MySource Squiz
    PSR12
    Generic

    View Slide

  30. Framework/CMS Standards
    Laravel
    Joomla
    Symfony2
    CodeIgniter4 Drupal
    Magento
    WordPress
    MediaWiki
    Zend
    Framework
    (WebImpress)
    TYPO3 Yii
    CakePHP

    View Slide

  31. Functional Standards and Sniff Collections
    Object
    Calisthenics
    Variable
    Analysis
    Universal Slevomat
    Cognitive
    Complexity
    PHP
    Compatibility
    Import
    Detection
    Security
    Audit
    Normalized
    Arrays
    PHPCSExtra

    View Slide

  32. Recognizing External
    Standards
    jeltovski

    View Slide

  33. Registering External Standards [1]
    phpcs --config-set installed_paths
    /path/to/dir/above/standard
    phpcs --config-show
    phpcs --config-set installed_paths
    /path/to/dir/above/standard1,/path/to/dir/above/standard2

    View Slide

  34. Registering External Standards [2]
    composer require –-dev
    dealerdirect/phpcodesniffer-composer-installer

    View Slide

  35. Tips and Tricks
    kenbrasier

    View Slide

  36. Explain

    View Slide

  37. phpcs --standard=PSR12 --generator=Text (Markdown|HTML)

    View Slide

  38. Seemann

    View Slide

  39. Report Types
    diff
    code
    svnblame
    gitblame
    emacs
    xml
    checkstyle
    source
    full
    summary
    info
    csv
    json
    junit

    View Slide

  40. Interactive Mode

    View Slide

  41. --filter=GitModified
    --filter=GitStaged

    View Slide

  42. Boni Idem
    Ignoring Issues

    View Slide

  43. Handling Rule Exceptions
    // phpcs:ignore Stnd.Cat.Sniff.ErrorCode

    // phpcs:disable StndA,StndB.Cat.Sniff -- for reasons
    ...

    ...
    // phpcs:enable
    // phpcs:ignoreFile

    View Slide

  44. --ignore-annotations

    View Slide

  45. Maintaining
    PHP_CodeSniffer
    and Standards

    View Slide

  46. Typical Tasks
    Coaching
    New Features
    PHP+
    CI/QA

    View Slide

  47. Keeping up with PHP
    ❑ Fix deprecation notices & errors
    (runtime compatible)
    ❑ Add support for new syntaxes to
    the PHPCS Tokenizer (PHP 5.4+)
    ❑ Add support to utility functions
    ❑ Update existing sniffs to support
    new features
    (feature compatible)
    ❑ Create new sniffs related to new
    features

    View Slide

  48. Architecture of External Standards
    PHP_CodeSniffer
    PHPCSUtils
    PHPCompatibility PHPCSExtra WordPressCS ??

    View Slide

  49. Links
    ✓ PHP_CodeSniffer
    https://github.com/squizlabs/PHP_CodeSniffer
    ✓ Find External Standards on Packagist
    https://packagist.org/?query=phpcs&type=phpcodesniffer-standard
    https://packagist.org/?query=php_codesniffer&type=phpcodesniffer-standard
    ✓ DealerDirect Composer PHPCS plugin
    https://github.com/PHPCSStandards/composer-installer
    ✓ PHPCSDevTools, PHPCSUtils, PHPCSExtra, PHPCompatibility et al
    https://github.com/PHPCSStandards
    https://github.com/PHPCompatibility

    View Slide

  50. Thanks!
    Slides: https://speakerdeck.com/jrf
    Follow me:
    https://twitter.com/jrf_nl
    https://phpc.social/@jrf_nl
    https://github.com/jrfnl

    View Slide