标签: codesniffer

PHP CodeSniffer有用吗?一般的代码标准执行?

我正在考虑在我们的持续集成服务器上设置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 codesniffer

54
推荐指数
4
解决办法
4万
查看次数

忽略PHP_CodeSniffer中的代码片段

当它被分析时,可以忽略来自php文件的代码的某些部分PHP_CodeSniffer

php codesniffer

51
推荐指数
3
解决办法
2万
查看次数

如何忽略行长度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)

我怎么能忽略行长警告?

php continuous-integration pear codesniffer jenkins

28
推荐指数
3
解决办法
2万
查看次数

根据PhpStorm上的PSR-2在文件末尾添加一个空行

我使用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.

除了新线以外,一切都是固定的.我错过了什么吗?

php codesniffer phpstorm psr-2 phpcodesniffer

19
推荐指数
4
解决办法
1万
查看次数

是否有针对PHP docblock的PHPCS标准?

是否有一个PHPCS编码标准,将检查适当的注释(@param,@return,@throws等)存在于文档块,包括它们之间的适当的间距?

php phpdoc codesniffer

17
推荐指数
2
解决办法
6962
查看次数

PHP CodeSniffer include_once错误

我正在尝试在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存在,令我困惑

php macos codesniffer

17
推荐指数
4
解决办法
1万
查看次数

phpcs:如何修改PSR2来检查大括号与方法在同一行?

我现在花了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)

但我想补充上面的规则.

php rules codesniffer phpcs

17
推荐指数
2
解决办法
4289
查看次数

Git:使用PHP_CodeSniffer预接收挂钩

从SVN切换到Git后,我们失去了通过pre-commitsubversion服务器上的钩子强制执行编码标准的能力.

使用Git,您只能在客户端上使用预提交挂钩,而这些挂钩无法以任何方式强制执行.更糟糕的是,我们让开发人员使用所有三个主要操作系统,因此在Linux或OS X上运行的预提交挂钩不会自动在Windows上运行.

要走的路是pre-receive在服务器上实现一个钩子,但解决方案并不像看起来那么容易:

想象一下,开发人员做了20次提交并希望推动它们.所有预提交和预收到钩,我知道(的1,2)只检查单的提交,这将最终失败,并防止推.现在,开发人员修复了问题并进行了另一次提交,并尝试再次推送.由于钩子检查单个提交,它将再次失败.

所以我们需要一个pre-receive钩子,它会在所有要推送的提交中生成所有已更改文件的列表,并仅在当前状态下运行phpcs.

这样的钩子脚本是否已存在?哪里?

编辑:似乎有一个脚本可以创建该文件列表 - 不幸的是在Python中,但可以移植.我仍然对PHPCS的预制解决方案感兴趣:)

php git coding-style codesniffer

13
推荐指数
1
解决办法
4280
查看次数

大型PHP应用程序的依赖关系图

我最近继承了一个没有对象/模块/命名空间的大型PHP应用程序...只有很多包含函数的文件.

当然,有很多依赖项(和所有文件,几乎总是包括在内).

我正在寻找一种可以分析文件并生成依赖图的工具.然后,更容易检测独立文件/文件集并重新考虑整个事件.

到目前为止,我发现的最佳解决方案是编写CodeSniffer嗅探器以检测所有函数调用,然后使用它来生成图形.

它似乎对其他人有用,所以我确信工具已经存在.

你会推荐什么 ?

php dependencies static-analysis graph codesniffer

13
推荐指数
1
解决办法
5872
查看次数

与PHP_CodeSniffer一起使用的标准是什么?

我的代码库遵循(或应该)Zend Coding Standard.我一直在使用Zend标准和PHP_CodeSniffer,但我看到讨论说phpcs的Zend标准不一致且没有维护,并且不一定坚持Zend Coding Standard.所以我正在寻找一种更加一致,最新和广泛使用的标准.我该怎么用?

我听说过"Squiz","PEAR"和"PSR2",但我对它们一无所知.它们之间有什么区别?

php codesniffer

13
推荐指数
1
解决办法
3068
查看次数