Giter Site home page Giter Site logo

extdn-phpcs's Introduction

ExtDN PHP_CodeSniffer rules for Magento 2

Build Status

Introduction

There are already many PHP CodeSniffer rules out there to aid in Magento 2 development:

However, some best practices still need to be integrated. Like not using the Object Manager in PHTML templates, not using setTemplate in Blocks and using namespaced classes for Virtual Types. This repository forms an effort to come up with more advanced rulesets than there currently are.

Usage

To install this package, go to your Magento 2 root and use the following:

composer require extdn/phpcs:dev-master

If this fails because the dependency with magento/marketplace-eqp fails to load, first add the EQP repo to your configuration and then repeat:

composer config repositories.magento-marketplace-eqp vcs https://github.com/magento/marketplace-eqp
composer require magento/marketplace-eqp:dev-master
composer require extdn/phpcs:dev-master

Once installed, you can run PHPCS from the command-line to analyse your code XYZ:

vendor/bin/phpcs --standard=./vendor/extdn/phpcs/Extdn app/code/XYZ
vendor/bin/phpcs --standard=./vendor/extdn/phpcs/Extdn vendor/XYZ

Where to contribute

We need help in the following areas:

  • Documentation of existing EQP rules (where each EQP rule could be included in this repository its ruleset.xml)
  • Creation of new PHPCS rules (see below How to contribute)
  • Braindumps on where PHPCS lacks and other tools might come in more handy (PhpStan, Phan)
  • Discussions on new rules (through periodic hangouts or discussions per GitHub Issue)

How to contribute

Any contribution is welcome. However, don't start coding just yet. Make sure first that the work is worth the effort.

  1. Add a new issue under Issues to address new rulesets that are needed or report other issues.

  2. Once the creation of the new rule has been accepted by adding a label Accepted under Issues, we're good to go.

  3. If a similar rule already exists in the Magento ECG standards and/or Magento Marketplace standards, simply try to include this rule within the ExtDN ruleset.

  4. If no rule exists yet, let's create it. As an example, you can use the SetTemplateInBlockSniff within the folder Extdn/Sniffs/Blocks. It can be tested upon a sample file under Extdn/Samples/Blocks:

vendor/bin/phpcs --standard=./vendor/extdn/phpcs/Extdn vendor/extdn/phpcs/Extdn/Samples
  1. Once this all works, feel free to create a Pull Request (PR) including the addition of this rule to the ruleset.xml file.

Using labels with GitHub issues

Some important labels, used for Github issues:

  • accepted: The rule is accepted by extdn. If nobody claimed it yet, you may start working on it
  • experimental: The rule can be implemented as well, but we will try it out with a low severity first before integrating it into the official ruleset
  • non-PHPCS: The rule is not feasibly implementable with phpcs, will need additional tools. We keep it for later.
  • organizational: Non-code related issues
  • on agenda of hangout: The rule/issue will be discussed in the next community hangout

How to create a Sniffer Rule

@todo: Fill in the gaps

Testing

All rules should be accompanied with tests.

Within a Magento installation

To run the sniff unit tests from a main repository, where the rules are installed via composer, first configure phpcs to find the rules:

vendor/bin/phpcs --config-set installed_paths vendor/extdn/phpcs/Extdn,vendor/magento/marketplace-eqp/MEQP2

Then tests can be run like this:

phpunit -c vendor/extdn/phpcs/phpunit-vendor.xml vendor/extdn/phpcs/Extdn/Tests

In a standalone installation

If you have cloned this GitHub repository on its own for development, use composer to install things and run the tests:

composer install
composer test

Each Test.php class should be accompanied by a Test.inc file to allow for unit testing based upon the PHPCS parent class AbstractSniffUnitTest. Make sure to include a Test.md Markdown description which addresses the issue at hand, explains what the rule check for and then also suggests the improvement to be made.

extdn-phpcs's People

Contributors

avstudnitz avatar jissereitsma avatar mikewhitby avatar schmengler avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.