Skip to content

Commit

Permalink
Add phpcs sniff rules
Browse files Browse the repository at this point in the history
  • Loading branch information
jtsternberg committed Aug 22, 2023
1 parent 0abf28b commit e3cff94
Show file tree
Hide file tree
Showing 2 changed files with 187 additions and 1 deletion.
181 changes: 181 additions & 0 deletions .phpcs.xml.dist
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
<?xml version="1.0"?>
<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="CMB2 Coding Standards for PHP" namespace="CMB2\CMB2\PHPCS\Standard">
<description>The coding standard for CMB2.</description>

<rule ref="PHPCompatibility" />
<config name="testVersion" value="7.3-" />

<file>.</file>

<exclude-pattern>node_modules/*</exclude-pattern>
<exclude-pattern>vendor/*</exclude-pattern>
<exclude-pattern>themes/omappv4/src/View/*</exclude-pattern>

<rule ref="WordPress-Core">
<!-- Allow with or without semicolons. -->
<exclude name="Squiz.PHP.EmbeddedPhp.NoSemicolon" />

<!-- Exclude other conflicting rules. -->
<exclude name="WordPress.Arrays.MultipleStatementAlignment.DoubleArrowNotAligned" />
<exclude name="WordPress.PHP.DevelopmentFunctions.error_log_trigger_error" />
<exclude name="Generic.Formatting.MultipleStatementAlignment.NotSameWarning" />

<exclude name="WordPress.Security.EscapeOutput" />

<exclude name="WordPress.Files.FileName.NotHyphenatedLowercase"/>
<exclude name="WordPress.PHP.StrictInArray.MissingTrueStrict" />
<exclude name="WordPress.PHP.StrictComparisons.LooseComparison" />
<exclude name="WordPress.Arrays.CommaAfterArrayItem.NoComma" />
<exclude name="WordPress.NamingConventions.ValidVariableName" />
<exclude name="WordPress.NamingConventions.ValidFunctionName" />
<exclude name="WordPress.PHP.DisallowShortTernary.Found" />
</rule>

<!-- Prefer alignment over line length. -->
<rule ref="WordPress.Arrays.MultipleStatementAlignment">
<properties>
<property name="maxColumn" value="1000" />
</properties>
</rule>

<rule ref="WordPress.DB.SlowDBQuery" />

<!-- Allow . in hook names. -->
<rule ref="WordPress.NamingConventions.ValidHookName">
<properties>
<property name="additionalWordDelimiters" value="." />
</properties>
</rule>

<rule ref="WordPress.Security.PluginMenuSlug" />
<rule ref="WordPress.Security.PluginMenuSlug.Using__FILE__">
<type>error</type>
</rule>

<!-- Disallow functions where WordPress has an alternative. -->
<rule ref="WordPress.WP.AlternativeFunctions">
<!-- ...but, allow some back in. -->
<properties>
<property name="exclude" type="array">
<element value="file_get_contents" />
<element value="file_system_read" />
<element value="json_encode" />
<element value="json_decode" />

<!-- wp_parse_url() only exists for inconsistency in PHP <5.4 -->
<element value="parse_url" />
</property>
</properties>
</rule>

<rule ref="WordPress.WP.CronInterval" />
<rule ref="WordPress.WP.CronInterval.CronSchedulesInterval">
<type>error</type>
<message>Scheduling crons at %s sec ( less than %s minutes ) is prohibited.</message>
</rule>

<rule ref="WordPress.WP.PostsPerPage" />
<rule ref="WordPress.WP.PostsPerPage.posts_per_page_numberposts">
<type>error</type>
</rule>
<rule ref="WordPress.WP.PostsPerPage.posts_per_page_posts_per_page">
<type>error</type>
</rule>

<!-- Disallow changing PHP's timezone. -->
<rule ref="WordPress.DateTime.RestrictedFunctions">
<properties>
<!-- Allow other datetime functions, just not timezone. -->
<property name="exclude" type="array">
<element value="date" />
</property>
</properties>
</rule>

<!--
Restore the ability to have multiple arguments per line
WPCS disallowed this behavior in 1.1.0, but we'd like to keep it until
there is a reason to disallow multiple arguments.
Ref: https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards/commit/bb8a48671e213a5588a6439ea52411eeefab4b0f
-->
<rule ref="PEAR.Functions.FunctionCallSignature">
<properties>
<property name="allowMultipleArguments" value="true"/>
</properties>
</rule>
<rule ref="PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket">
<severity>0</severity>
</rule>
<rule ref="PEAR.Functions.FunctionCallSignature.CloseBracketLine">
<severity>0</severity>
</rule>

<!--
HM Rules / HM RULEZZZZ
https://engineering.hmn.md/how-we-work/style/php/
-->

<!-- Disallow long array syntax. fig-r/psr2r-sniffer -->
<rule ref="Generic.Arrays.DisallowShortArraySyntax" />

<!-- Single statement on same line. fig-r/psr2r-sniffer -->
<rule ref="Generic.Formatting.DisallowMultipleStatements" />

<!-- Namespacing required for classes. fig-r/psr2r-sniffer -->
<rule ref="PSR1.Classes.ClassDeclaration" />

<!-- Declare symbols or run code, but not both. fig-r/psr2r-sniffer -->
<rule ref="PSR1.Files.SideEffects" />

<!-- Namespacing required for functions. fig-r/psr2r-sniffer -->
<rule ref="PSR2.Namespaces.NamespaceDeclaration" />

<!-- Namespacing of `use` statements. fig-r/psr2r-sniffer -->
<rule ref="PSR2.Namespaces.UseDeclaration">
<exclude name="PSR2.Namespaces.UseDeclaration.MultipleDeclarations" />
</rule>

<!--- fig-r/psr2r-sniffer -->
<rule ref="PSR2R.Namespaces.UnusedUseStatement" />
<rule ref="PSR2R.Namespaces.UseInAlphabeticalOrder" />

<!-- Ban inline assignment in control structures (see note on Yoda Conditions above). fig-r/psr2r-sniffer -->
<rule ref="PSR2R.ControlStructures.NoInlineAssignment" />

<!--
Disregard WP's class file name rules which says:
"Class file names should be based on the class name with class-
prepended and the underscores in the class name replaced with hyphens."
-->
<rule ref="WordPress.Files.FileName">
<properties>
<property name="strict_class_file_names" value="false" />
</properties>
</rule>

<!--
Forces a new line at the end of file rule (and others).
-->
<rule ref="Generic.Files">
<exclude name="Generic.Files.EndFileNoNewline" />
<exclude name="Generic.Files.LowercasedFilename.NotFound" />
<exclude name="Generic.Files.InlineHTML.Found" />
</rule>

<!--
Warn about lines longer than 200 chars,
and error for lines longer than 200 chars.
-->
<rule ref="Generic.Files.LineLength">
<properties>
<property name="lineLimit" value="200" />
<property name="absoluteLineLimit" value="200" />
</properties>
</rule>

<rule ref="PSR1.Classes.ClassDeclaration">
<exclude name="PSR1.Classes.ClassDeclaration.MissingNamespace" />
</rule>

<rule ref="VariableAnalysis"/>
</ruleset>
7 changes: 6 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
"apigen/apigen": "4.1.2",
"nette/utils": "2.5.3",
"phpunit/phpunit": "^6.5",
"awesomemotive/am-cli-tools": ">=1.3.1",
"awesomemotive/am-cli-tools": ">=1.3.7",
"yoast/phpunit-polyfills": "^1.0"
},
"repositories": [
Expand All @@ -50,5 +50,10 @@
"vendor/bin/apigen generate --config apigen/apigen.neon",
"php apigen/hook-docs.php"
]
},
"config": {
"allow-plugins": {
"dealerdirect/phpcodesniffer-composer-installer": true
}
}
}

0 comments on commit e3cff94

Please sign in to comment.