标签: phpcodesniffer

根据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中使用codesniffer检测对象上的动态声明字段

在重构之后,我们在其中一个类中有类似的东西:

class FooBar
{
    // $foo was $bla before
    private $foo;

    public function setBlubbOnArrayOnlyOnce($value)
    {
        // $this->bla was forgotten during refactoring. Must be $this->foo
        if(!isset($this->bla['blubb'])) {
             $this->foo['blubb'] = $value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以最后$ this-> foo ['blubb']总是被设定,不仅一次.这是因为PHP的神奇方法.我们不希望它可以动态访问字段,所以我想我只是添加了一个代码不一致的规则.但我没有发现任何问题,并问我原因.

PHPStorm显示了一个动态通知的字段,但我想在部署周期中使用代码(或类似的东西)自动失败.

有人对此有所了解吗?有一个很好的规则吗?我应该写自己的,怎么样?或者禁用它是不好的做法?

免责声明:我们使用测试,但有时你会错过一些东西......首先要防止这种情况.另外,请不要想出覆盖魔法的方法.我不想在每个班级都有任何特质/抽象.

php codesniffer magic-methods getter-setter phpcodesniffer

8
推荐指数
1
解决办法
558
查看次数

phpcodesniffer生成的错误是什么"标记不能与doc注释中的参数标记分组"

/**
  * @param Varien_Event_Observer $observer eventobserver
  * @return void
  */
Run Code Online (Sandbox Code Playgroud)

phpCodesniffer为上面的行生成以下错误.

41 | 错误| 标记不能与doc注释中的参数标记分组.

会是什么原因?

php phpcodesniffer

8
推荐指数
1
解决办法
2965
查看次数

如何在Netbeans 8.1中使用CodeSniffer

我用PHP 5.6安装了Netbeans 8.1和Xampp for Windows.

Netbeans 8.1默认安装了CodeSniffer.Xampp(梨).Netbeans检测到"标准":

Netbeans 8.1中的CodeSniffer

但是现在,我不知道如何在我的php文件中运行CodeSniffer.没有按钮,也没有菜单.

我该怎么办呢?在其他版本的Netbeans中,有一个"Eye按钮"来运行它.

php netbeans codesniffer phpcodesniffer netbeans-8.1

8
推荐指数
1
解决办法
9295
查看次数

什么规则可以防止类左大括号后出现空行?

我正在寻找一条规则来防止类的左大括号后出现空行。

我找到了函数的规则Squiz.WhiteSpace.FunctionOpeningBraceSpace,但找不到类的规则。

任何建议表示赞赏。

php phpcodesniffer

6
推荐指数
1
解决办法
1114
查看次数

判断字符串是否为驼峰命名法

我试图让 PHP_CodeSniffer 检查类名中的驼峰命名法,但在我看来,驼峰命名法检查是不可能的(没有字典,包括技术单词)。

我已经在互联网上搜索过,但到目前为止,我看到的唯一选择是字符串是否有一些通用的分隔符来爆炸 - 即下划线、单词之间的空格等。

即使这也没有什么用处,因为只有当名称准确/始终在每个单词之间包含分隔符时,检查才能准确。
“检查”的目的是确定名称的格式是否不正确,这可能包括不正确的定界。

此外,PHP_CodeSniffer 上的资源要么很少见,要么非常基础和技术性,只有作者/开发人员才能理解。

当前标准嗅探检查

我在一些当前的 Sniffs(即 Squiz 和 PEAR 标准)中找到了这段代码:

if (PHP_CodeSniffer::isCamelCaps($functionName, false, true, false) === false) 
Run Code Online (Sandbox Code Playgroud)

但是,我查看了 PHP_CodeSniffer 核心代码,该函数仅执行以下操作:

// Check the first character first.
// Check that the name only contains legal characters.
// Check that there are not two capital letters next to each other.
// The character is a number, so it cant be a capital.
Run Code Online (Sandbox Code Playgroud)

这些基本检查总比没有好,尽管可以说对于其预期目的来说毫无用处,因为它们根本不检查驼峰命名法。

问题

Sniff(或 PHP 脚本)如何知道在给定字符串中检查哪些“单词”以识别该字符串是否为 100% 驼峰命名法?


编辑

例子 …

php validation camelcasing string-formatting phpcodesniffer

5
推荐指数
1
解决办法
6003
查看次数

php代码嗅探器什么都不返回……我的代码是标准的吗?

我有一个 Laravel 应用程序(用 composer 创建),我试图确保它符合 PHP 编码标准(级别 PSR-1)。我跑:

$ phpcs --standard=PSR1 my_app/
Run Code Online (Sandbox Code Playgroud)

并在几秒钟内返回一个新的、空的、随时可用的命令行:

$
Run Code Online (Sandbox Code Playgroud)

这是否意味着我的代码符合 PSR-1 中的所有要求和标准?它只做同样的事情:

$ phpcs my_app/
$ phpcs --standard=PEAR my_app/
$ phpcs --standard=PSR1 --report=summary lauras_app/
Run Code Online (Sandbox Code Playgroud)

我只想确保如果命令什么都不返回,那意味着我的代码是标准的。谢谢!

php pear code-standards phpcodesniffer psr-1

5
推荐指数
1
解决办法
1401
查看次数

PHP Codesniffer自定义规则:constant :: class而不是string

在我的一个客户端的代码库中,我看到很多对限定类名称的引用作为字符串;

[
    'foobar' => 'My\Namespace\Class'
]
Run Code Online (Sandbox Code Playgroud)

而不是使用:

[
    'foobar' => My\Namespace\Class::class
]
Run Code Online (Sandbox Code Playgroud)

出于几个原因,我们想要添加一个PHP CodeSniffer规则来捕获这些字符串并添加一个警告,以便字符串可以重构为:: class常量.第一部分(捕获字符串)很简单,但因为我们正在进行静态代码分析,所以我们不能(例如)一个class_exists或查找get_declared_classes()的结果.

下一个选项可能是分析字符串本身([A-Za-z0-9]),但这不是很可靠,因为很多字符串会匹配,但不是一个类名.

另一种选择是首先"收集"所有类名(基于T_CLASS标记),然后根据收集的类列表分析所有字符串.实现IMHO不是很容易,因为CodeSniffer基于每个文件工作.

我能想到的最后一个选项也很脏; 因为我们总是在我们的项目中使用composer,我们可以使用composer的自动加载文件并尝试匹配类映射和命名空间.也不是很可靠和干净.

有人提出另一个我们没想过的建议吗?!

php phpcodesniffer

5
推荐指数
1
解决办法
127
查看次数

PHPcs xml 配置禁用一些规则

我了解如何使用 xml 配置 phpcs,但找不到如何禁用某些嗅探。这是我当前的配置(甚至不知道这是否正确):

\n\n
<?xml version="1.0" encoding="UTF-8"?>\n<ruleset name="custom" \n  xmlns="http://pmd.sf.net/ruleset/1.0.0" \n  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">\n  <rule ref="rulesets/codesize.xml"/>\n  <rule ref="rulesets/controversial.xml/Superglobals"/>\n  <rule ref="rulesets/controversial.xml/CamelCaseParameterName"/>\n  <rule ref="rulesets/controversial.xml/CamelCaseVariableName"/>\n  <rule ref="rulesets/design.xml"/>\n  <rule ref="rulesets/naming.xml/ShortMethodName"/>\n  <rule ref="rulesets/naming.xml/ConstructorWithNameAsEnclosingClass"/>\n  <rule ref="rulesets/naming.xml/ConstantNamingConventions"/>\n  <rule ref="rulesets/naming.xml/BooleanGetMethodName">\n    <properties>\n      <property name="checkParameterizedMethods" value="true"/>\n    </properties>\n  </rule>\n  <rule ref="rulesets/unusedcode.xml"/>\n\n  <arg name="tab-width" value="2"/>\n  <rule ref="Generic.WhiteSpace.ScopeIndent">\n    <properties>\n      <property name="indent" value="2"/>\n    </properties>\n  </rule>\n\n  <rule ref="Generic.Files.LineLength">\n    <properties>\n      <property name="lineLimit" value="140"/>\n      <property name="absoluteLineLimit" value="0"/>\n    </properties>\n  </rule>\n</ruleset>\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想禁用这些:

\n\n
    \n
  • [phpcs] @copyright tag must contain a year and the name of the …

php phpcodesniffer phpcs

5
推荐指数
3
解决办法
1万
查看次数

如何设置 PHP CodeSniffer 来扩展 WordPress 编码标准 + VSCode 中的自动修复错误?

如何使用扩展 WordPress 编码标准的个人规则为项目设置 PHP CodeSniffer + 保存时在 VSCode 中自动修复错误?

我已经全局安装了 CodeSniffer

composer global require "squizlabs/php_codesniffer=*"
Run Code Online (Sandbox Code Playgroud)

WordPress 编码标准安装在主题文件夹内(因此它们位于项目内/wp-content/themes/bideja/wpcs

git clone -b master https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards.git wpcs
Run Code Online (Sandbox Code Playgroud)

我创建的主题文件夹内部phpcs.xml应继承 WordPress 标准,以便我可以进一步自定义它

<?xml version="1.0"?>
<ruleset name="Bideja">
    <description>Sniffs</description>

    <config name="installed_paths" value="wpcs" />

    <arg value="s"/>

    <exclude-pattern>assets/*</exclude-pattern>
    <exclude-pattern>node_modules/*</exclude-pattern>
    <exclude-pattern>vendor/*</exclude-pattern>

    <rule ref="WordPress-VIP">
        <exclude name="Generic.Files.EndFileNewline.NotFound" />
        <exclude name="WordPress.PHP.YodaConditions.NotYoda" />
    </rule>

</ruleset>
Run Code Online (Sandbox Code Playgroud)

在主题内的 Bash 终端中,我可以扫描页面中的错误并修复它们

phpcs page.php
phpbcf page.php 
Run Code Online (Sandbox Code Playgroud)

但是 VSCode 如何在保存时修复它们呢?我收到弹出错误:

phpcs: Referenced sniff "WordPress-VIP" does not exist
Run Code Online (Sandbox Code Playgroud)

我应该在 User settings.json 中放置什么?

"phpcs.enable": true,
"phpcs.standard": …
Run Code Online (Sandbox Code Playgroud)

php wordpress phpcodesniffer visual-studio-code

5
推荐指数
1
解决办法
4005
查看次数