Skip to content

Instantly share code, notes, and snippets.

@kjkorea
Last active December 7, 2023 01:35
Show Gist options
  • Select an option

  • Save kjkorea/1eb65905cc44063f713464c1e1391925 to your computer and use it in GitHub Desktop.

Select an option

Save kjkorea/1eb65905cc44063f713464c1e1391925 to your computer and use it in GitHub Desktop.
Linting and Formatting in PHP WordPress
# This file is for unifying the coding style for different editors and IDEs
# editorconfig.org
# WordPress Coding Standards
# https://make.wordpress.org/core/handbook/coding-standards/
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = tab
[*.yml]
indent_style = space
indent_size = 2
[*.md]
trim_trailing_whitespace = false
[{*.txt,wp-config-sample.php}]
end_of_line = lf
<?php
/**
* https://gist.github.com/publicarray/c409845675e2baea194a38db42fcb237
* https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues/3855
*/
$finder = PhpCsFixer\Finder::create()
->exclude( 'vendor' )
->in( __DIR__ );
$config = new PhpCsFixer\Config();
return $config->setIndent( "\t" )
->setLineEnding( "\r\n" )
->setRiskyAllowed( true )
->setRules( array(
'@PSR2' => true,
'cast_spaces' => array( 'space' => 'single' ),
'array_syntax' => array( 'syntax' => 'long' ),
'no_closing_tag' => true,
'no_trailing_whitespace_in_comment' => false,
'no_spaces_after_function_name' => false,
'general_phpdoc_annotation_remove' => false,
'array_indentation' => true,
'align_multiline_comment' => true,
'blank_line_after_namespace' => true,
'blank_line_after_opening_tag' => true,
'blank_line_before_statement' => false,
// 'blank_line_before_statement' => [
// 'statements' => ['return', 'try', 'if', 'while', 'for', 'foreach', 'do', 'case'],
// ],
'braces' => array(
'allow_single_line_closure' => true,
'position_after_anonymous_constructs' => 'same',
'position_after_control_structures' => 'same',
'position_after_functions_and_oop_constructs' => 'same',
),
'class_attributes_separation' => array(
'elements' => array(
'const' => 'one',
'method' => 'one',
'property' => 'one',
'trait_import' => 'none'
)
),
'class_definition' => array( 'single_line' => true ),
'concat_space' => array( 'spacing' => 'one' ),
'constant_case' => array( 'case' => 'lower' ),
'dir_constant' => true,
'elseif' => true,
'full_opening_tag' => true,
'fully_qualified_strict_types' => true,
'function_declaration' => array( 'closure_function_spacing' => 'one' ),
'spaces_inside_parentheses' => array( 'space' => 'single' ),
// 'WeDevs/space_inside_parenthesis' => true,
// 'WeDevs/blank_line_after_class_opening' => true,
'function_typehint_space' => true,
'global_namespace_import' => array( 'import_classes' => true ),
'include' => true,
'line_ending' => true,
'list_syntax' => array( 'syntax' => 'long' ),
'lowercase_cast' => true,
'lowercase_keywords' => true,
'lowercase_static_reference' => true,
'magic_constant_casing' => true,
'magic_method_casing' => true,
'method_argument_space' => true,
'native_function_casing' => true,
'method_chaining_indentation' => true,
'native_function_type_declaration_casing' => true,
'new_with_braces' => true,
'no_alternative_syntax' => true,
'no_blank_lines_after_class_opening' => false,
'no_blank_lines_after_phpdoc' => true,
'no_empty_comment' => true,
'no_empty_phpdoc' => true,
'no_empty_statement' => true,
'no_extra_blank_lines' => array(
'tokens' => array(
'extra',
'parenthesis_brace_block',
'square_brace_block',
'throw',
'use',
)
),
'no_leading_import_slash' => true,
'no_leading_namespace_whitespace' => true,
'no_mixed_echo_print' => true,
'no_multiline_whitespace_around_double_arrow' => true,
'no_short_bool_cast' => true,
'echo_tag_syntax' => true,
'no_singleline_whitespace_before_semicolons' => true,
'no_spaces_around_offset' => array( 'positions' => array( 'outside' ) ),
'no_spaces_inside_parenthesis' => false,
'no_superfluous_phpdoc_tags' => array(
'allow_mixed' => true,
'allow_unused_params' => true
),
'no_trailing_comma_in_list_call' => true,
'no_trailing_comma_in_singleline_array' => true,
'no_trailing_whitespace' => true,
'no_unneeded_control_parentheses' => true,
'no_unneeded_curly_braces' => true,
'no_unneeded_final_method' => true,
'no_unused_imports' => true,
'no_whitespace_before_comma_in_array' => true,
'no_whitespace_in_blank_line' => true,
'normalize_index_brace' => true,
'object_operator_without_whitespace' => true,
'ordered_imports' => true,
'php_unit_fqcn_annotation' => true,
'phpdoc_align' => array(
'align' => 'vertical',
'tags' => array(
'method',
'param',
'property',
'return',
'throws',
'type',
'var',
),
),
'phpdoc_annotation_without_dot' => true,
'phpdoc_indent' => true,
'general_phpdoc_tag_rename' => array( 'fix_inline' => false ),
// WeDevs
// 'general_phpdoc_tag_rename' => [
// 'fix_annotation' => true,
// 'fix_inline' => true,
// ],
'binary_operator_spaces' => true,
// WeDevs
// 'binary_operator_spaces' => [
// 'operators' => ['=' => 'align', '=>' => 'align'],
// ],
'phpdoc_no_access' => true,
'phpdoc_no_alias_tag' => true,
'phpdoc_no_package' => false,
'phpdoc_no_useless_inheritdoc' => true,
'phpdoc_return_self_reference' => true,
'phpdoc_scalar' => true,
'phpdoc_separation' => true,
'phpdoc_single_line_var_spacing' => true,
// 'phpdoc_to_comment' => true,
'phpdoc_trim' => true,
'phpdoc_trim_consecutive_blank_line_separation' => true,
'phpdoc_types' => true,
'phpdoc_types_order' => array(
'null_adjustment' => 'always_last',
'sort_algorithm' => 'none',
),
'phpdoc_var_without_name' => true,
'return_type_declaration' => true,
'semicolon_after_instruction' => true,
'short_scalar_cast' => true,
'single_blank_line_before_namespace' => true,
'single_class_element_per_statement' => true,
'single_line_comment_style' => array(
'comment_types' => array( 'hash' ),
),
'single_line_throw' => true,
'single_quote' => true,
'single_trait_insert_per_statement' => true,
'space_after_semicolon' => array(
'remove_in_empty_for_expressions' => true,
),
'standardize_increment' => true,
'standardize_not_equals' => true,
'ternary_operator_spaces' => true,
'trailing_comma_in_multiline' => array( 'elements' => array() ),
'trim_array_spaces' => false,
'whitespace_after_comma_in_array' => true,
) )->setFinder( $finder );
<?xml version="1.0" encoding="UTF-8"?>
<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="WordPress Custom" xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/squizlabs/PHP_CodeSniffer/master/phpcs.xsd">
<description>A custom set of rules for WordPress</description>
<file>.</file>
<exclude-pattern>/wp-admin/*</exclude-pattern>
<exclude-pattern>/wp-content/plugins/*</exclude-pattern>
<exclude-pattern>/wp-includes/*</exclude-pattern>
<exclude-pattern>/wp-*.php</exclude-pattern>
<exclude-pattern>/xmlrpc.php</exclude-pattern>
<exclude-pattern>/.idea/*</exclude-pattern>
<exclude-pattern>/.vscode/*</exclude-pattern>
<exclude-pattern>*/vendor/*</exclude-pattern>
<exclude-pattern>*/node_modules/*</exclude-pattern>
<exclude-pattern>*.min.js</exclude-pattern>
<arg name="extensions" value="php" />
<arg name="colors" />
<arg value="sp" />
<arg name="parallel" value="8" />
<arg name="cache" value=".phpcs.cache"/>
<!-- <rule ref="PHPCompatibilityWP"/>
<config name="minimum_wp_version" value="7.0"/> -->
<rule ref="WordPress-Extra" />
<rule ref="WordPress-Docs" />
<!-- <rule ref="Generic.Commenting.Todo"/> -->
<rule ref="Squiz">
<exclude name="Squiz.Commenting.FileComment.WrongStyle" />
<exclude name="Squiz.Commenting.FileComment.MissingPackageTag" />
</rule>
</ruleset>
{
// "[php]": {
// "editor.defaultFormatter": "valeryanm.vscode-phpsab"
// },
// "phpsab.snifferMode": "onType",
// "phpsab.standard": "WordPress",
// "phpsab.executablePathCS": "vendor/bin/phpcs.bat",
// "phpsab.executablePathCBF": "vendor/bin/phpcbf.bat",
// "[php]": {
// "editor.defaultFormatter": "persoderlind.vscode-phpcbf"
// },
// "phpcbf.enable": true,
// "phpcbf.standard": "/.phpcs.xml",
// "phpcbf.documentFormattingProvider": true,
// "phpcbf.executablePath": "./vendor/bin/phpcbf.bat",
// "phpcbf.onsave": true,
"phpcs.autoConfigSearch": true,
"phpcs.executablePath": "vendor/bin/phpcs.bat",
"[php]": {
"editor.defaultFormatter": "junstyle.php-cs-fixer"
},
"php-cs-fixer.allowRisky": true,
"php-cs-fixer.onsave": true,"php-cs-fixer.executablePath": "php-cs-fixer",
// @sync os=windows
"php-cs-fixer.executablePathWindows": "c:/users/kj/.composer/vendor/bin/php-cs-fixer.bat"
}
{
"name": "kj/wordpress",
"authors": [
{
"name": "kj",
"email": "kj@email.com"
}
],
"config": {
"allow-plugins": {
"dealerdirect/phpcodesniffer-composer-installer": true
}
},
"require-dev": {
"wp-coding-standards/wpcs": "^3.0",
"phpcompatibility/php-compatibility": "^9.3",
"squizlabs/php_codesniffer": "^3.7",
"phpcompatibility/phpcompatibility-wp": "^2.1",
"friendsofphp/php-cs-fixer": "^3.40",
"dealerdirect/phpcodesniffer-composer-installer": "^1.0",
"tareq1988/wp-php-cs-fixer": "^1.0"
},
"scripts": {
"phpcs": "phpcs --standard=./phpcs.xml",
"phpcbf": "phpcbf --standard=./phpcs.xml",
"php-cs-fixer": "php-cs-fixer fix --allow-risky=yes"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment