2017-08-06 57 views
2

我正在使用专有的遗留代码库,有些变量是骆驼壳,而其他变量是蛇形的。我想清理和强制执行只骆驼变量的名称,但我似乎无法找到一个嗅探。以下是我的自定义规则集的内容。需要使用哪些嗅探来强制执行camelCase变量命名约定?

The ruleset.xml standard contains 68 sniffs 

Generic (22 sniffs) 
------------------- 
    Generic.Classes.DuplicateClassName 
    Generic.CodeAnalysis.ForLoopShouldBeWhileLoop 
    Generic.CodeAnalysis.UnconditionalIfStatement 
    Generic.CodeAnalysis.UnnecessaryFinalModifier 
    Generic.CodeAnalysis.UnusedFunctionParameter 
    Generic.CodeAnalysis.UselessOverridingMethod 
    Generic.Commenting.Fixme 
    Generic.Commenting.Todo 
    Generic.ControlStructures.InlineControlStructure 
    Generic.Files.ByteOrderMark 
    Generic.Files.LineEndings 
    Generic.Files.LineLength 
    Generic.Formatting.DisallowMultipleStatements 
    Generic.Formatting.NoSpaceAfterCast 
    Generic.Functions.FunctionCallArgumentSpacing 
    Generic.NamingConventions.CamelCapsFunctionName 
    Generic.NamingConventions.UpperCaseConstantName 
    Generic.PHP.DisallowShortOpenTag 
    Generic.PHP.LowerCaseConstant 
    Generic.PHP.LowerCaseKeyword 
    Generic.WhiteSpace.DisallowTabIndent 
    Generic.WhiteSpace.ScopeIndent 

PEAR (5 sniffs) 
--------------- 
    PEAR.Commenting.InlineComment 
    PEAR.Formatting.MultiLineAssignment 
    PEAR.Functions.ValidDefaultValue 
    PEAR.WhiteSpace.ScopeClosingBrace 
    PEAR.WhiteSpace.ScopeIndent 

PSR1 (3 sniffs) 
--------------- 
    PSR1.Classes.ClassDeclaration 
    PSR1.Files.SideEffects 
    PSR1.Methods.CamelCapsMethodName 

PSR2 (12 sniffs) 
---------------- 
    PSR2.Classes.ClassDeclaration 
    PSR2.Classes.PropertyDeclaration 
    PSR2.ControlStructures.ControlStructureSpacing 
    PSR2.ControlStructures.ElseIfDeclaration 
    PSR2.ControlStructures.SwitchDeclaration 
    PSR2.Files.ClosingTag 
    PSR2.Files.EndFileNewline 
    PSR2.Methods.FunctionCallSignature 
    PSR2.Methods.FunctionClosingBrace 
    PSR2.Methods.MethodDeclaration 
    PSR2.Namespaces.NamespaceDeclaration 
    PSR2.Namespaces.UseDeclaration 

Squiz (26 sniffs) 
----------------- 
    Squiz.Classes.ValidClassName 
    Squiz.ControlStructures.ControlSignature 
    Squiz.ControlStructures.ForEachLoopDeclaration 
    Squiz.ControlStructures.ForLoopDeclaration 
    Squiz.ControlStructures.LowercaseDeclaration 
    Squiz.Functions.FunctionDeclarationArgumentSpacing 
    Squiz.Functions.FunctionDeclaration 
    Squiz.Functions.LowercaseFunctionKeywords 
    Squiz.Functions.MultiLineFunctionDeclaration 
    Squiz.PHP.CommentedOutCode 
    Squiz.PHP.Eval 
    Squiz.PHP.GlobalKeyword 
    Squiz.PHP.Heredoc 
    Squiz.PHP.InnerFunctions 
    Squiz.PHP.LowercasePHPFunctions 
    Squiz.PHP.NonExecutableCode 
    Squiz.Scope.MethodScope 
    Squiz.Scope.StaticThisUsage 
    Squiz.WhiteSpace.ControlStructureSpacing 
    Squiz.WhiteSpace.ObjectOperatorSpacing 
    Squiz.WhiteSpace.OperatorSpacing 
    Squiz.WhiteSpace.PropertyLabelSpacing 
    Squiz.WhiteSpace.ScopeClosingBrace 
    Squiz.WhiteSpace.ScopeKeywordSpacing 
    Squiz.WhiteSpace.SemicolonSpacing 
    Squiz.WhiteSpace.SuperfluousWhitespace 

回答

3

您会想要使用Squiz.NamingConventions.ValidVariableName sniff来检查变量名称。

这嗅探目前包括5个不同的错误代码。其中3人正在检查字符串中的变量,成员变量和变量都是驼峰式的。其他2个代码强制私人成员变量以下划线开头。

如果只想确保变量是骆驼,套管,包括这在你的规则集,如果你正在使用PHPCS版本3:

<rule ref="Squiz.NamingConventions.ValidVariableName.NotCamelCaps"/> 

如果你也想确保成员VAR和串瓦尔的骆驼套管,包括这些,如果您使用的版本3:

<rule ref="Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps"/> 
<rule ref="Squiz.NamingConventions.ValidVariableName.StringNotCamelCaps"/> 

如果你想一大堆,包括此:

<rule ref="Squiz.NamingConventions.ValidVariableName"/> 

PHPCS版本2不允许包含特定的嗅探代码,因此您首先需要包括整个嗅探,然后通过将其严重性设置为0来排除您不需要的特定代码。因此,如果您只需要3头骆驼 - 案例检查,你使用的版本2,把这个在你的规则:

<rule ref="Squiz.NamingConventions.ValidVariableName"/> 
<rule ref="Squiz.NamingConventions.ValidVariableName.PublicHasUnderscore"> 
    <severity>0</severity> 
</rule> 
<rule ref="Squiz.NamingConventions.ValidVariableName.PrivateNoUnderscore"> 
    <severity>0</severity> 
</rule> 
+0

谢谢你的答案。这些嗅探不适用于方法参数。你有没有其他ssolution? –

+0

@TomášVotruba他们应该申请。我已经完成了'Squiz.NamingConventions.ValidVariableName'嗅探的基本检查,并且它正在拾取方法参数。如果你的代码不工作,最好向项目报告一个错误。 –

+0

它忽略私有属性 –