deeem / hexlet-psr-linter
此包已被 废弃 且不再维护。未建议替代包。
v1.0
2016-08-16 19:35 UTC
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
关于
Линтер,用于检查PHP代码是否符合某些规则,并输出违规报告,并提供修复代码的功能(如果规则中描述了修复函数)。该项目在hexlet.io实习期间完成。
要求
- PHP >= 7.0
- Composer
安装
- 通过克隆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": "*" }
使用命令行
例如,使用ruleset.json
中的规则在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
使用库
负责创建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);
创建规则
最初包含一些具有演示性质的规则,但实际工作需要创建自己的规则集进行检查。
规则分为两类,根据是否可以自动修复违规行为
- 定义不能自动修复的违规(例如,副作用)
- 定义并自动修复违规(例如,将变量名转换为camelCase形式)
要创建新规则,需要创建相应类的实例:在第一种情况下是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
目录中