Skip to content

Commit 7d670a8

Browse files
authored
Updates
1 parent bb24783 commit 7d670a8

File tree

2 files changed

+222
-14
lines changed

2 files changed

+222
-14
lines changed

phpcs.xml

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
<?xml version="1.0"?>
2+
<ruleset name="WordPress Plugin Coding Standards">
3+
<description>WordPress coding standards with spaces enforcement for Optimizations ACE MC plugin</description>
4+
5+
<!-- Files to check -->
6+
<file>.</file>
7+
8+
<!-- Exclude patterns -->
9+
<exclude-pattern>*/vendor/*</exclude-pattern>
10+
<exclude-pattern>*/node_modules/*</exclude-pattern>
11+
<exclude-pattern>*/tests/*</exclude-pattern>
12+
<exclude-pattern>*/assets/*</exclude-pattern>
13+
<exclude-pattern>*/languages/*</exclude-pattern>
14+
<exclude-pattern>*/.git/*</exclude-pattern>
15+
<exclude-pattern>*/.github/*</exclude-pattern>
16+
17+
<!-- Use WordPress coding standards -->
18+
<rule ref="WordPress">
19+
<!-- Allow short array syntax [] instead of array() -->
20+
<exclude name="Generic.Arrays.DisallowShortArraySyntax"/>
21+
22+
<!-- Allow longer lines for readability -->
23+
<exclude name="Generic.Files.LineLength"/>
24+
25+
<!-- Allow direct database queries when using $wpdb properly -->
26+
<exclude name="WordPress.DB.DirectDatabaseQuery"/>
27+
</rule>
28+
29+
<!-- ENFORCE SPACES INSTEAD OF TABS - NO TABS ALLOWED -->
30+
<rule ref="Generic.WhiteSpace.DisallowTabIndent">
31+
</rule>
32+
<rule ref="Generic.WhiteSpace.ScopeIndent">
33+
<properties>
34+
<!-- Use 4 spaces for indentation (WordPress standard) -->
35+
<property name="indent" value="4"/>
36+
<property name="tabIndent" value="false"/>
37+
</properties>
38+
</rule>
39+
40+
<!-- Additional WordPress-specific spacing rules -->
41+
<rule ref="WordPress.WhiteSpace.ControlStructureSpacing"/>
42+
<rule ref="WordPress.WhiteSpace.OperatorSpacing"/>
43+
44+
<!-- Enforce WordPress indentation standards -->
45+
<rule ref="WordPress.Arrays.ArrayIndentation"/>
46+
<rule ref="WordPress.Arrays.MultipleStatementAlignment"/>
47+
48+
<!-- WordPress function call formatting -->
49+
<rule ref="PEAR.Functions.FunctionCallSignature">
50+
<properties>
51+
<property name="allowMultipleArguments" value="false"/>
52+
</properties>
53+
</rule>
54+
55+
<!-- WordPress class and method formatting -->
56+
<rule ref="PSR2.Classes.ClassDeclaration"/>
57+
<rule ref="PSR2.Methods.MethodDeclaration"/>
58+
59+
<!-- File formatting -->
60+
<rule ref="Generic.Files.ByteOrderMark"/>
61+
<rule ref="Generic.Files.LineEndings">
62+
<properties>
63+
<property name="eolChar" value="\n"/>
64+
</properties>
65+
</rule>
66+
67+
<!-- WordPress security and best practices -->
68+
<rule ref="WordPress.Security"/>
69+
<rule ref="WordPress.WP.I18n">
70+
<properties>
71+
<!-- Set the text domain for internationalization -->
72+
<property name="text_domain" type="array">
73+
<element value="Simple-WP-Optimizer"/>
74+
</property>
75+
</properties>
76+
</rule>
77+
78+
<!-- WordPress naming conventions (snake_case) -->
79+
<rule ref="WordPress.NamingConventions.ValidFunctionName"/>
80+
<rule ref="WordPress.NamingConventions.ValidVariableName"/>
81+
<rule ref="WordPress.NamingConventions.ValidHookName"/>
82+
83+
<!-- WordPress PHP compatibility -->
84+
<rule ref="PHPCompatibilityWP"/>
85+
<config name="minimum_supported_wp_version" value="6.5"/>
86+
<config name="testVersion" value="7.4-"/>
87+
88+
<!-- Show progress -->
89+
<arg value="p"/>
90+
91+
<!-- Show sniff codes in all reports -->
92+
<arg value="s"/>
93+
94+
<!-- Use colors in output -->
95+
<arg name="colors"/>
96+
97+
</ruleset>

phpmd.xml

Lines changed: 125 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,53 +5,164 @@
55
xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
66
xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
77

8-
<description>WordPress-compatible PHPMD rules - excludes naming conventions incompatible with WordPress coding standards</description>
8+
<description>WordPress-compatible PHPMD rules - enforces WordPress coding standards and spacing conventions</description>
9+
10+
<!-- WordPress-specific file patterns to exclude -->
11+
<exclude-pattern>*/vendor/*</exclude-pattern>
12+
<exclude-pattern>*/node_modules/*</exclude-pattern>
13+
<exclude-pattern>*/tests/*</exclude-pattern>
14+
<exclude-pattern>*/assets/*</exclude-pattern>
915

1016
<!-- Clean Code Rules (with WordPress exceptions) -->
1117
<rule ref="rulesets/cleancode.xml">
1218
<!-- Exclude ElseExpression - WordPress often requires else for security patterns -->
1319
<exclude name="ElseExpression"/>
1420
<!-- Exclude MissingImport - WordPress core classes are auto-loaded -->
1521
<exclude name="MissingImport"/>
16-
<!-- Exclude StaticAccess - Allow for singleton patterns -->
22+
<!-- Exclude StaticAccess - Allow for singleton patterns common in WordPress -->
1723
<exclude name="StaticAccess"/>
24+
<!-- Exclude BooleanArgumentFlag - WordPress hooks often use boolean flags -->
25+
<exclude name="BooleanArgumentFlag"/>
1826
</rule>
1927

20-
<!-- Code Size Rules -->
28+
<!-- Code Size Rules (WordPress-adjusted) -->
2129
<rule ref="rulesets/codesize.xml">
22-
<!-- Override TooManyPublicMethods for WordPress plugins that need hook callbacks -->
30+
<!-- Exclude TooManyPublicMethods - WordPress plugins need many public hook callbacks -->
2331
<exclude name="TooManyPublicMethods"/>
32+
<!-- Exclude TooManyMethods - WordPress classes often have many methods for hooks -->
33+
<exclude name="TooManyMethods"/>
34+
<!-- Exclude ExcessiveClassComplexity - WordPress plugins can be complex -->
35+
<exclude name="ExcessiveClassComplexity"/>
2436
</rule>
2537

26-
<!-- Custom rule: Allow more public methods for WordPress plugins -->
38+
<!-- WordPress-adjusted complexity limits -->
2739
<rule ref="rulesets/codesize.xml/TooManyPublicMethods">
2840
<properties>
2941
<!-- WordPress plugins often need many public hook callbacks -->
30-
<property name="maxmethods" value="15"/>
42+
<property name="maxmethods" value="20"/>
43+
</properties>
44+
</rule>
45+
46+
<rule ref="rulesets/codesize.xml/TooManyMethods">
47+
<properties>
48+
<!-- WordPress classes often have many methods for different hooks -->
49+
<property name="maxmethods" value="25"/>
50+
</properties>
51+
</rule>
52+
53+
<rule ref="rulesets/codesize.xml/ExcessiveMethodLength">
54+
<properties>
55+
<!-- Allow longer methods for WordPress template functions -->
56+
<property name="minimum" value="150"/>
57+
</properties>
58+
</rule>
59+
60+
<rule ref="rulesets/codesize.xml/ExcessiveClassLength">
61+
<properties>
62+
<!-- WordPress plugin main classes can be large -->
63+
<property name="minimum" value="1500"/>
64+
</properties>
65+
</rule>
66+
67+
<rule ref="rulesets/codesize.xml/CyclomaticComplexity">
68+
<properties>
69+
<!-- WordPress functions often have conditional logic for hooks -->
70+
<property name="reportLevel" value="15"/>
3171
</properties>
3272
</rule>
3373

3474
<!-- Controversial Rules (with WordPress exceptions) -->
3575
<rule ref="rulesets/controversial.xml">
3676
<!-- Exclude Superglobals - WordPress securely uses $_GET, $_POST, etc. -->
3777
<exclude name="Superglobals"/>
78+
<!-- Exclude CamelCaseClassName - WordPress uses Snake_Case_Class_Names -->
79+
<exclude name="CamelCaseClassName"/>
80+
<!-- Exclude CamelCaseMethodName - WordPress uses snake_case_method_names -->
81+
<exclude name="CamelCaseMethodName"/>
82+
<!-- Exclude CamelCaseVariableName - WordPress uses $snake_case_variables -->
83+
<exclude name="CamelCaseVariableName"/>
84+
<!-- Exclude CamelCaseParameterName - WordPress uses $snake_case_parameters -->
85+
<exclude name="CamelCaseParameterName"/>
86+
<!-- Exclude CamelCasePropertyName - WordPress uses $snake_case_properties -->
87+
<exclude name="CamelCasePropertyName"/>
3888
</rule>
3989

4090
<!-- Design Rules (with WordPress exceptions) -->
4191
<rule ref="rulesets/design.xml">
42-
<!-- Exclude ExitExpression - Required for WordPress file downloads and redirects -->
92+
<!-- Exclude ExitExpression - Required for WordPress wp_die(), exit, etc. -->
4393
<exclude name="ExitExpression"/>
94+
<!-- Exclude EvalExpression - WordPress sometimes uses eval for dynamic content -->
95+
<exclude name="EvalExpression"/>
96+
<!-- Exclude GotoStatement - WordPress core sometimes uses goto -->
97+
<exclude name="GotoStatement"/>
4498
</rule>
4599

46-
<!-- SKIP ALL NAMING RULES - WordPress uses snake_case which conflicts with PHPMD defaults -->
47-
<!-- Naming rules are disabled for WordPress compatibility -->
48-
<!-- WordPress coding standards use snake_case for methods, variables, and allow underscores in class names -->
100+
<!-- WORDPRESS-SPECIFIC NAMING RULES -->
101+
<!-- WordPress uses snake_case naming which conflicts with standard camelCase rules -->
102+
<!-- Import only WordPress-compatible naming rules -->
49103

50-
<!-- Unused Code Rules -->
104+
<rule ref="rulesets/naming.xml/ShortVariable">
105+
<properties>
106+
<!-- WordPress allows short variables like $id, $wp, but avoid single letters -->
107+
<property name="minimum" value="2"/>
108+
</properties>
109+
</rule>
110+
111+
<rule ref="rulesets/naming.xml/LongVariable">
112+
<properties>
113+
<!-- WordPress descriptive variable names can be longer -->
114+
<property name="maximum" value="40"/>
115+
</properties>
116+
</rule>
117+
118+
<rule ref="rulesets/naming.xml/ShortMethodName">
119+
<properties>
120+
<!-- WordPress allows short method names like get(), set(), but avoid very short -->
121+
<property name="minimum" value="2"/>
122+
</properties>
123+
</rule>
124+
125+
<!-- Allow WordPress constructor patterns -->
126+
<rule ref="rulesets/naming.xml/ConstructorWithNameAsEnclosingClass"/>
127+
128+
<!-- WordPress constant naming (UPPER_CASE_WITH_UNDERSCORES) -->
129+
<rule ref="rulesets/naming.xml/ConstantNamingConventions"/>
130+
131+
<!-- WordPress boolean method naming (is_*, has_*, can_*) -->
132+
<rule ref="rulesets/naming.xml/BooleanGetMethodName"/>
133+
134+
<!-- EXPLICITLY EXCLUDED NAMING RULES FOR WORDPRESS COMPATIBILITY -->
135+
<!-- These rules are NOT included because they conflict with WordPress standards: -->
136+
<!-- - CamelCaseClassName (WordPress uses Class_Name_With_Underscores) -->
137+
<!-- - CamelCaseMethodName (WordPress uses method_name_with_underscores) -->
138+
<!-- - CamelCaseVariableName (WordPress uses $variable_name_with_underscores) -->
139+
<!-- - CamelCaseParameterName (WordPress uses $parameter_name_with_underscores) -->
140+
<!-- - CamelCasePropertyName (WordPress uses $property_name_with_underscores) -->
141+
142+
<!-- Unused Code Rules (always enforce) -->
51143
<rule ref="rulesets/unusedcode.xml"/>
52144

53-
<!-- WordPress-specific exclusions -->
54-
<exclude-pattern>*/vendor/*</exclude-pattern>
55-
<exclude-pattern>*/node_modules/*</exclude-pattern>
145+
<!-- WORDPRESS CODING STANDARDS ENFORCEMENT -->
146+
<!-- Note: PHPMD doesn't directly enforce spacing/indentation -->
147+
<!-- For spacing enforcement, use PHPCS with WordPress standards instead -->
148+
<!-- This PHPMD config focuses on code quality and WordPress-compatible naming -->
149+
150+
<!-- Custom WordPress-specific rules -->
151+
<rule name="WordPressSecurityRule"
152+
message="Use WordPress sanitization functions for user input"
153+
class="net.sourceforge.pmd.lang.rule.XPathRule">
154+
<description>
155+
Ensure WordPress sanitization functions are used for user input
156+
</description>
157+
<properties>
158+
<property name="xpath">
159+
<value>
160+
//FunctionCall[FunctionName/@Image='$_GET' or FunctionName/@Image='$_POST' or FunctionName/@Image='$_REQUEST']
161+
[not(ancestor::FunctionCall[FunctionName/@Image='sanitize_text_field' or FunctionName/@Image='wp_unslash' or FunctionName/@Image='esc_html' or FunctionName/@Image='esc_attr'])]
162+
</value>
163+
</property>
164+
</properties>
165+
<priority>2</priority>
166+
</rule>
56167

57168
</ruleset>

0 commit comments

Comments
 (0)