Giter Site home page Giter Site logo

phpmd-extension's Introduction

phpmd-extension

GitHub license Build Status Code Coverage Scrutinizer Code Quality Github All Releases

Features

Contains extra phpmd rules from clean code book and the best practices of my experiences.

Installation

Download the phpmd-extension.phar:

$ curl -OsL https://github.com/mi-schi/phpmd-extension/releases/download/stable/phpmd-extension.phar

Alternatively you can use tooly-composer-script for installation.

It is also possible to use composer (not recommended, see #5):

composer require mi-schi/phpmd-extension --dev

Usage

  1. Create a phpmd.xml file and import the basic rules from phpmd. The example below contains some useful changes. Afterwards you can extend the configuration with rules from this repository.
  2. Then execute the mess detection with phpmd-extension.phar [path/to/src] xml [path/to/phpmd.xml]. The phpmd-extension.phar pass all arguments to the basic phpmd command. You don't have to install phpmd. phpmd-extension.phar includes phpmd.

Basic Rules

<ruleset name="basic-rules"
         xmlns="http://pmd.sf.net/ruleset/1.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0
                      http://pmd.sf.net/ruleset_xml_schema.xsd"
         xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
    <description>mess detection</description>

    <rule ref="rulesets/cleancode.xml" />
    <rule ref="rulesets/codesize.xml">
        <exclude name="ExcessiveParameterList" />
        <exclude name="ExcessiveMethodLength" />
        <exclude name="ExcessiveClassLength" />
        <exclude name="CyclomaticComplexity" />
    </rule>
    <rule ref="rulesets/codesize.xml/ExcessiveParameterList">
        <properties>
            <property name="minimum" value="4" />
        </properties>
    </rule>
    <rule ref="rulesets/codesize.xml/ExcessiveMethodLength">
        <properties>
            <property name="minimum" value="31" />
            <property name="ignore-whitespace" value="true" />
        </properties>
    </rule>
    <rule ref="rulesets/codesize.xml/ExcessiveClassLength">
        <properties>
            <property name="minimum" value="301" />
            <property name="ignore-whitespace" value="true" />
        </properties>
    </rule>
    <rule ref="rulesets/codesize.xml/CyclomaticComplexity">
        <properties>
            <property name="reportLevel" value="6" />
            <property name="showClassesComplexity" value="true" />
            <property name="showMethodsComplexity" value="true" />
        </properties>
    </rule>
    <rule ref="rulesets/controversial.xml" />
    <rule ref="rulesets/design.xml" />
    <rule ref="rulesets/naming.xml">
        <exclude name="ShortVariable" />
        <exclude name="LongVariable" />
    </rule>
    <rule ref="rulesets/naming.xml/ShortVariable">
        <properties>
            <property name="minimum" value="2" />
        </properties>
    </rule>
    <rule ref="rulesets/naming.xml/LongVariable">
        <properties>
            <property name="maximum" value="30" />
        </properties>
    </rule>
    <rule ref="rulesets/unusedcode.xml" />
</ruleset>

Add extra rules

    <rule ref="../../../../../../rulesets/cleancode.xml" />
    <rule ref="../../../../../../rulesets/naming.xml" />
    <rule ref="../../../../../../rulesets/test.xml" />

You can also customize the rules with own properties or use only specific rules. Just take a look in the xml files. It works as the basic ruleset logic.

Exclude or customize extra rule

If you don't want the Law-of-Demeter rule MemberPrimaryPrefix exclude it.

    <rule ref="../../../../../../rulesets/cleancode.xml">
        <exclude name="MemberPrimaryPrefix" />
    </rule>

If you want to customize it, use the following code:

    <rule ref="../../../../../../rulesets/cleancode.xml/MemberPrimaryPrefix">
    	<properties>
			<property name="maxChainCount" value="3" description="max count of method chains" />
            <property name="allowedPrefixes" value="add,set" description="allowed prefixes for the method train" />
            <property name="delimiter" value="," description="delimiter for explode" />
        </properties>
    </rule>

phpmd-extension's People

Contributors

akovalyov avatar cedricziel avatar mi-schi avatar paulkliemann avatar tommy-muehle avatar zakivanovic 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.