1<?xml version="1.0"?> 2<ruleset name="DokuWiki Coding Standard Standard" namespace="DokuWiki\CS\Standard"> 3 <description>Coding Standard used for DokuWiki</description> 4 5 <!-- default config --> 6 <arg name="colors"/> 7 <arg value="sp"/> 8 <arg name="extensions" value="php"/> 9 10 <ini name="memory_limit" value="-1"/> 11 12 <!-- where to look --> 13 <file>../inc</file> 14 <file>../lib</file> 15 <file>../bin</file> 16 <file>../doku.php</file> 17 <file>../index.php</file> 18 <file>../feed.php</file> 19 <file>../install.php</file> 20 21 <!-- skip these completely --> 22 <exclude-pattern>*/lang/*/lang.php</exclude-pattern> 23 <exclude-pattern>*/lang/*/settings.php</exclude-pattern> 24 <exclude-pattern>*/_test/*</exclude-pattern> 25 26 <!-- 3rd party libs, these should be moved to composer some day --> 27 <exclude-pattern>*/inc/DifferenceEngine.php</exclude-pattern> 28 <exclude-pattern>*/inc/IXR_Library.php</exclude-pattern> 29 <exclude-pattern>*/inc/JSON.php</exclude-pattern> 30 <exclude-pattern>*/inc/JpegMeta.php</exclude-pattern> 31 <exclude-pattern>*/lib/plugins/authad/adLDAP</exclude-pattern> 32 33 <!-- deprecated files to be removed soon --> 34 <exclude-pattern>*/inc/cli.php</exclude-pattern> 35 <exclude-pattern>*/inc/parser/*</exclude-pattern> 36 37 <!-- rules on top of PSR-2 --> 38 <rule ref="PSR2"> 39 <!-- the following rule is not in PSR-2 and breaks the guardian pattern --> 40 <exclude name="Generic.ControlStructures.InlineControlStructure.NotAllowed"/> 41 42 <!-- we have lots of legacy classes without name spaces --> 43 <exclude name="PSR1.Classes.ClassDeclaration.MissingNamespace"/> 44 45 <!-- Rules with automatic fixes that we want to adhere to, but currently don't --> 46 <exclude name="Generic.Formatting.DisallowMultipleStatements.SameLine"/> 47 <exclude name="Generic.Functions.FunctionCallArgumentSpacing.NoSpaceAfterComma"/> 48 <exclude name="Generic.Functions.FunctionCallArgumentSpacing.SpaceBeforeComma"/> 49 <exclude name="Generic.Functions.FunctionCallArgumentSpacing.TooMuchSpaceAfterComma"/> 50 <exclude name="Generic.PHP.LowerCaseKeyword.Found"/> 51 <exclude name="Generic.PHP.LowerCaseConstant.Found"/> 52 <exclude name="Generic.WhiteSpace.ScopeIndent.IncorrectExact"/> 53 <exclude name="Generic.WhiteSpace.ScopeIndent.Incorrect"/> 54 <exclude name="Generic.WhiteSpace.IncrementDecrementSpacing.SpaceAfterDecrement"/> 55 <exclude name="Generic.WhiteSpace.IncrementDecrementSpacing.SpaceAfterIncrement"/> 56 57 <exclude name="Squiz.ControlStructures.ControlSignature.SpaceAfterCloseParenthesis"/> 58 <exclude name="Squiz.ControlStructures.ControlSignature.SpaceAfterKeyword"/> 59 <exclude name="Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace"/> 60 <exclude name="Squiz.ControlStructures.ControlSignature.NewlineAfterOpenBrace"/> 61 <exclude name="Squiz.ControlStructures.ForEachLoopDeclaration.NoSpaceBeforeArrow"/> 62 <exclude name="Squiz.ControlStructures.ForEachLoopDeclaration.NoSpaceAfterArrow"/> 63 <exclude name="Squiz.ControlStructures.ForEachLoopDeclaration.SpacingBeforeAs"/> 64 <exclude name="Squiz.ControlStructures.ForLoopDeclaration.SpacingAfterSecond"/> 65 <exclude name="Squiz.ControlStructures.ForLoopDeclaration.NoSpaceAfterSecond"/> 66 <exclude name="Squiz.ControlStructures.ForLoopDeclaration.NoSpaceAfterFirst"/> 67 <exclude name="Squiz.Functions.FunctionDeclarationArgumentSpacing.NoSpaceBeforeArg"/> 68 <exclude name="Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals"/> 69 <exclude name="Squiz.Functions.FunctionDeclarationArgumentSpacing.SpacingAfterReference"/> 70 <exclude name="Squiz.Functions.FunctionDeclarationArgumentSpacing.SpacingBeforeClose"/> 71 <exclude name="Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals"/> 72 <exclude name="Squiz.Functions.MultiLineFunctionDeclaration.BraceOnSameLine"/> 73 <exclude name="Squiz.Functions.MultiLineFunctionDeclaration.NewlineBeforeOpenBrace"/> 74 <exclude name="Squiz.Functions.MultiLineFunctionDeclaration.CloseBracketLine"/> 75 <exclude name="Squiz.WhiteSpace.ControlStructureSpacing.SpacingAfterOpen"/> 76 <exclude name="Squiz.WhiteSpace.ControlStructureSpacing.SpacingBeforeClose"/> 77 <exclude name="Squiz.WhiteSpace.ScopeClosingBrace.ContentBefore"/> 78 <exclude name="Squiz.WhiteSpace.ScopeClosingBrace.Indent"/> 79 <exclude name="Squiz.WhiteSpace.SuperfluousWhitespace.EndLine"/> 80 81 <exclude name="PSR2.Classes.ClassDeclaration.CloseBraceAfterBody"/> 82 <exclude name="PSR2.Classes.ClassDeclaration.OpenBraceNewLine"/> 83 <exclude name="PSR2.Classes.PropertyDeclaration.StaticBeforeVisibility"/> 84 <exclude name="PSR2.ControlStructures.ControlStructureSpacing.SpacingAfterOpenBrace"/> 85 <exclude name="PSR2.ControlStructures.ControlStructureSpacing.SpaceBeforeCloseBrace"/> 86 <exclude name="PSR2.ControlStructures.ElseIfDeclaration.NotAllowed"/> 87 <exclude name="PSR2.ControlStructures.SwitchDeclaration.BreakIndent"/> 88 <exclude name="PSR2.ControlStructures.SwitchDeclaration.BreakNotNewLine"/> 89 <exclude name="PSR2.ControlStructures.SwitchDeclaration.BodyOnNextLineCASE"/> 90 <exclude name="PSR2.ControlStructures.SwitchDeclaration.SpaceBeforeColonDEFAULT"/> 91 <exclude name="PSR2.ControlStructures.SwitchDeclaration.SpaceBeforeColonCASE"/> 92 <exclude name="PSR2.Files.EndFileNewline.TooMany"/> 93 <exclude name="PSR2.Files.EndFileNewline.NoneFound"/> 94 <exclude name="PSR2.Methods.FunctionCallSignature.Indent"/> 95 <exclude name="PSR2.Methods.FunctionCallSignature.EmptyLine"/> 96 <exclude name="PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket"/> 97 <exclude name="PSR2.Methods.FunctionCallSignature.SpaceBeforeOpenBracket"/> 98 <exclude name="PSR2.Methods.FunctionCallSignature.CloseBracketLine"/> 99 <exclude name="PSR2.Methods.FunctionCallSignature.SpaceBeforeCloseBracket"/> 100 <exclude name="PSR2.Methods.FunctionCallSignature.SpaceAfterOpenBracket"/> 101 <exclude name="PSR2.Methods.FunctionCallSignature.MultipleArguments"/> 102 <exclude name="PSR2.Methods.FunctionClosingBrace.SpacingBeforeClose"/> 103 <exclude name="PSR2.Methods.MethodDeclaration.StaticBeforeVisibility"/> 104 <exclude name="PSR2.Namespaces.NamespaceDeclaration.BlankLineAfter"/> 105 <exclude name="PSR2.Namespaces.UseDeclaration.SpaceAfterLastUse"/> 106 </rule> 107 108 <!-- disable some rules for certain paths, for legacy support --> 109 <rule ref="Squiz.Classes.ValidClassName.NotCamelCaps"> 110 <exclude-pattern>*/inc/Plugin.php</exclude-pattern> 111 <exclude-pattern>*/inc/PluginInterface.php</exclude-pattern> 112 <exclude-pattern>*/inc/PluginTrait.php</exclude-pattern> 113 114 <exclude-pattern>*/lib/plugins/*.php</exclude-pattern> 115 <exclude-pattern>*/lib/plugins/*/action.php</exclude-pattern> 116 <exclude-pattern>*/lib/plugins/*/action/*.php</exclude-pattern> 117 <exclude-pattern>*/lib/plugins/*/admin.php</exclude-pattern> 118 <exclude-pattern>*/lib/plugins/*/admin/*.php</exclude-pattern> 119 <exclude-pattern>*/lib/plugins/*/auth.php</exclude-pattern> 120 <exclude-pattern>*/lib/plugins/*/auth/*.php</exclude-pattern> 121 <exclude-pattern>*/lib/plugins/*/cli.php</exclude-pattern> 122 <exclude-pattern>*/lib/plugins/*/cli/*.php</exclude-pattern> 123 <exclude-pattern>*/lib/plugins/*/helper.php</exclude-pattern> 124 <exclude-pattern>*/lib/plugins/*/helper/*.php</exclude-pattern> 125 <exclude-pattern>*/lib/plugins/*/remote.php</exclude-pattern> 126 <exclude-pattern>*/lib/plugins/*/remote/*.php</exclude-pattern> 127 <exclude-pattern>*/lib/plugins/*/syntax.php</exclude-pattern> 128 <exclude-pattern>*/lib/plugins/*/syntax/*.php</exclude-pattern> 129 </rule> 130 131 <!-- underscore skips exposing public methods to remote api --> 132 <rule ref="PSR2.Methods.MethodDeclaration.Underscore"> 133 <exclude-pattern>*/inc/Extension/RemotePlugin.php</exclude-pattern> 134 <exclude-pattern>*/lib/plugins/*/remote.php</exclude-pattern> 135 <exclude-pattern>*/lib/plugins/*/remote/*.php</exclude-pattern> 136 </rule> 137 138 <rule ref="PSR1.Methods.CamelCapsMethodName.NotCamelCaps"> 139 <exclude-pattern>*/inc/Extension/PluginInterface.php</exclude-pattern> 140 <exclude-pattern>*/inc/Extension/PluginTrait.php</exclude-pattern> 141 </rule> 142 143 <!-- for now we mix declarations and execution here (mostly for defines) --> 144 <rule ref="PSR1.Files.SideEffects"> 145 <exclude-pattern>*/index.php</exclude-pattern> 146 <exclude-pattern>*/inc/parserutils.php</exclude-pattern> 147 <exclude-pattern>*/inc/mail.php</exclude-pattern> 148 <exclude-pattern>*/inc/init.php</exclude-pattern> 149 <exclude-pattern>*/inc/farm.php</exclude-pattern> 150 <exclude-pattern>*/inc/fulltext.php</exclude-pattern> 151 <exclude-pattern>*/inc/pluginutils.php</exclude-pattern> 152 <exclude-pattern>*/inc/indexer.php</exclude-pattern> 153 <exclude-pattern>*/inc/Mailer.class.php</exclude-pattern> 154 <exclude-pattern>*/doku.php</exclude-pattern> 155 <exclude-pattern>*/install.php</exclude-pattern> 156 <exclude-pattern>*/inc/utf8.php</exclude-pattern> 157 <exclude-pattern>*/feed.php</exclude-pattern> 158 <exclude-pattern>*/inc/load.php</exclude-pattern> 159 <exclude-pattern>*/bin/*.php</exclude-pattern> 160 <exclude-pattern>*/lib/exe/*.php</exclude-pattern> 161 </rule> 162 163</ruleset> 164