我正在考虑在我们的持续集成服务器上设置PHP CodeSniffer,以提高代码库的质量.在阅读文档后,我对标准化和执行我们的编码标准的想法感到非常兴奋.但是,我想知道我们产品的实际改进.我很清楚,嗅探器只检测违反规定的编码标准,但干净,一致的代码库提供了哪些类型的好处?使用100k +代码行重构项目以符合PEAR标准是否值得额外工作?
对于那些不熟悉PHP CodeSniffer或一般代码嗅觉的人,这里有一个示例输出:
文件:/path/to/code/myfile.php发现
5错误(S)影响2行(S)
-
2 | 错误| 缺少文件doc评论
20 | 错误| PHP关键字必须小写; 预期"假"但发现"假"
47 | 错误| 线没有正确缩进; 预计4个空格,但发现1
51 | 错误| 缺少功能doc评论
88 | 错误| 线没有正确缩进; 预计9个车位,但发现6个
严格地说,用户/客户不会注意到被重构为符合标准的产品有任何差异,但我想知道是否还有其他隐藏的好处
现在我们的代码绝不是草率的,我们试图遵循我们自己的个人标准,这些标准在很大程度上源自Pear的编码标准,但训练有素的眼睛可以发现差异.
所以我的问题是它们能提高产品质量的程度.它带来了什么样的潜在好处?
我是否只是因为我希望将我们的产品更接近一套标准而产生强迫症?它值得吗?如果是这样,您使用了什么样的策略来实现代码嗅探器并纠正检测到的后续违规?
当它被分析时,可以忽略来自php文件的代码的某些部分PHP_CodeSniffer
?
我一直在使用jenkins的PHP_CodeSniffer,我的build.xml是为phpcs配置的,如下所示
<target name="phpcs">
<exec executable="phpcs">
<arg line="--report=checkstyle --report-file=${basedir}/build/logs/checkstyle.xml --standard=Zend ${source}"/>
</exec>
</target>
Run Code Online (Sandbox Code Playgroud)
我想忽略以下警告
FOUND 0 ERROR(S) AND 1 WARNING(S) AFFECTING 1 LINE(S)
--------------------------------------------------------------------------------
117 | WARNING | Line exceeds 80 characters; contains 85 characters
--------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
我怎么能忽略行长警告?
我使用PSR-2代码样式代码.
当我大多数时候使用Codesniffer检查文件时,我收到以下错误.
332 | ERROR | [x] Expected 1 newline at end of file; 0 found
Run Code Online (Sandbox Code Playgroud)
很明显如何解决这个问题.我需要知道的是,如果PhpStorm有办法添加1 newline at end of file
我已经加载了预定义的样式,Settings -> Editor -> Code Style -> PHP -> Set From -> PSR-1/PSR-2
并且还使用了相应Reformat Code
的更改CS.
除了新线以外,一切都是固定的.我错过了什么吗?
是否有一个PHPCS编码标准,将检查适当的注释(@param
,@return
,@throws
等)存在于文档块,包括它们之间的适当的间距?
我正在尝试在OS X Mountain Lion上安装PHP CodeSniffer - 我似乎遇到了一个奇怪的问题
运行'phpcs'时出现以下错误:
PHP Warning: include_once(PHP/CodeSniffer/CLI.php): failed to open stream: No such
file or directory in /usr/lib/php/pear/bin/phpcs on line 31
PHP Warning: include_once(): Failed opening 'PHP/CodeSniffer/CLI.php' for inclusion
(include_path='.;/usr/lib/php/pear/share/pear/') in /usr/lib/php/pear/bin/phpcs on line 31
PHP Fatal error: Class 'PHP_CodeSniffer_CLI' not found in /usr/lib/php/pear/bin/phpcs
on line 34
Run Code Online (Sandbox Code Playgroud)
文件/usr/lib/php/pear/share/pear/PHP/CodeSniffer/CLI.php存在,令我困惑
我现在花了2个多小时试图弄清楚如何要求{
与方法声明在同一行,而不是默认要求是下一行.我怎么能这样做?我已经将PSR2标准复制到一个名为PSR2的新文件夹,以便根据自己的喜好对其进行修改.所以我正在研究的基础基本上是我想要修改的PSR2标准.
我已经尝试过ruleset.xml,我试图在代码中直接修改它而没有成功.
<rule ref="PEAR.Classes.ClassDeclaration">
<properties>
<property name="eolChar" value="{"/>
</properties>
</rule>
<rule ref="PSR2R.Classes.ClassDeclaration">
<properties>
<property name="eolChar" value="{"/>
</properties>
</rule>
Run Code Online (Sandbox Code Playgroud)
我已经发现这是错的.EOL由phpcs设置.但我无法弄清楚我是否可以通过规则配置一个值.
到目前为止,这对我来说很好用(搞愚蠢的空间!):
<?xml version="1.0"?>
<ruleset name="PSR2R">
<description>PSR2 with tabs instead of spaces.</description>
<arg name="tab-width" value="4"/>
<rule ref="PSR2">
<exclude name="Generic.WhiteSpace.DisallowTabIndent"/>
</rule>
<rule ref="Generic.WhiteSpace.DisallowSpaceIndent"/>
<rule ref="Generic.WhiteSpace.ScopeIndent">
<properties>
<property name="indent" value="4"/>
<property name="tabIndent" value="true"/>
</properties>
</rule>
</ruleset>
Run Code Online (Sandbox Code Playgroud)
但我想补充上面的规则.
从SVN切换到Git后,我们失去了通过pre-commit
subversion服务器上的钩子强制执行编码标准的能力.
使用Git,您只能在客户端上使用预提交挂钩,而这些挂钩无法以任何方式强制执行.更糟糕的是,我们让开发人员使用所有三个主要操作系统,因此在Linux或OS X上运行的预提交挂钩不会自动在Windows上运行.
要走的路是pre-receive
在服务器上实现一个钩子,但解决方案并不像看起来那么容易:
想象一下,开发人员做了20次提交并希望推动它们.所有预提交和预收到钩,我知道(的1,2)只检查单的提交,这将最终失败,并防止推.现在,开发人员修复了问题并进行了另一次提交,并尝试再次推送.由于钩子检查单个提交,它将再次失败.
所以我们需要一个pre-receive
钩子,它会在所有要推送的提交中生成所有已更改文件的列表,并仅在当前状态下运行phpcs.
这样的钩子脚本是否已存在?哪里?
编辑:似乎有一个脚本可以创建该文件列表 - 不幸的是在Python中,但可以移植.我仍然对PHPCS的预制解决方案感兴趣:)
我最近继承了一个没有对象/模块/命名空间的大型PHP应用程序...只有很多包含函数的文件.
当然,有很多依赖项(和所有文件,几乎总是包括在内).
我正在寻找一种可以分析文件并生成依赖图的工具.然后,更容易检测独立文件/文件集并重新考虑整个事件.
到目前为止,我发现的最佳解决方案是编写CodeSniffer嗅探器以检测所有函数调用,然后使用它来生成图形.
它似乎对其他人有用,所以我确信工具已经存在.
你会推荐什么 ?
我的代码库遵循(或应该)Zend Coding Standard.我一直在使用Zend标准和PHP_CodeSniffer,但我看到讨论说phpcs的Zend标准不一致且没有维护,并且不一定坚持Zend Coding Standard.所以我正在寻找一种更加一致,最新和广泛使用的标准.我该怎么用?
我听说过"Squiz","PEAR"和"PSR2",但我对它们一无所知.它们之间有什么区别?
codesniffer ×10
php ×10
coding-style ×1
dependencies ×1
git ×1
graph ×1
jenkins ×1
macos ×1
pear ×1
phpcs ×1
phpdoc ×1
phpstorm ×1
psr-2 ×1
rules ×1