deeem / hexlet-psr-linter
Requires
Requires (Dev)
- codeclimate/php-test-reporter: dev-master
- phpunit/phpunit: ^5.2
- squizlabs/php_codesniffer: 2.*
This package is not auto-updated.
Last update: 2020-10-16 21:39:57 UTC
README
About
Линтер, проверяющий php-код на соответствие некоторому набору правил и выводящий отчёт о нарушениях с возможностью исправить код (если функция для исправления описана в правиле). Проект в рамках стажировки на hexlet.io
Requirements
- PHP >= 7.0
- Composer
Install
- Установка клонированием git-репозитория
git clone https://github.com/deeem/hexlet-psr-linter
cd hexlet-psr-linter
make install
- Установка с использованием composer
composer require deeem/hexlet-psr-linter
- Установка с использованием composer.json
"require": { "deeem/hexlet-psr-linter": "*" }
Использование командой строки
Например, проверка кода в директории myProject
правилами, перечисленными в ruleset.json
, загруженными из директории ~/mySniffs
bin/psr-linter myProject --sniffs ~/mySniffs --ruleset ruleset.json
Формат json-файла - обычный массив
[ "FunctionsNamingForCamelCase", "VariablesNamingForCamelCase", "VariablesNamingForLeadUnderscore" ]
Дополнительные параметры описывает справка
bin/psr-linter --help
Для удобство вызова, в случае, если psr-linter установлен глобально, можно сделать ссылку на bin-файл
ln -s path-to-bin/psr-linter /usr/local/bin/psr-linter
После чего его можно вызывать набрав
psr-linter
Использование библиотеки
За создание линтера отвечает функция makeLinter
, которая принимает в качестве аргументов массив объектов наследников RulesInterface и флага автофикса и возвращает функцию, которая в качестве аргумента принимает исходный код в виде строки. А возвращает массив, содержащий ошибки и исправленный код, если был передан такой аргумент.
<?php $code = file_get_contents('tests/fixtures/sniffs/variablesNamingForLeadingUnderscore.wrong.php'); require_once 'sniffs/VariablesNamingForLeadUnderscore.php'; $lint = makeLinter([new Rules\VariablesNamingForLeadUnderscore()]); $linterReport = $lint($code);
Создание правил
Изначально идёт с несколькими правилами, носящими демонстрационный характер. Для реальной работы необходимо создать свой набор правил для проверки
Правила делятся на 2 категории, по возможности применения автоисправления нарушения:
- определяют нарушение, которые нельзя исправить автоматически (например, сайд-эфект)
- определяют нарушение и исправляют автоматически (например, приведение имени переменной к соответсвующему виду)
Для создания нового правила, нужно создать создать инстанс соответствующего класса: CheckersTemplate
- в первом случае или FixersTemplate
, в случае, если есть возможность добавить автофикс для данного правила.
Пример правила, для проверки имени переменной на соответствие стандарта именования camelCase:
<?php namespace PsrLinter\Rules; class VariablesNamingForCamelCase extends FixersTemplate implements RulesInterface { public function check(\PhpParser\Node $node) { if (( $node instanceof \PhpParser\Node\Expr\Variable ) && (!preg_match('/^[a-z]+([A-Z]?[a-z]+)+$/', $node->name))) { $this->addError($node, 'error', 'Names MUST be declared in camelCase.'); return true; } } public function fix(\PhpParser\Node $node) { $camelize = function ($word) { $allWordsAreUpperCased = implode(array_map(function ($word) { return ucfirst(strtolower($word)); }, explode('_', $word))); return lcfirst($allWordsAreUpperCased); }; $node->name = $camelize($node->name); } }
Другие примеры находятся в директории shiffs