Skip to content

Commit

Permalink
feat: Add new rules / change existing (#20)
Browse files Browse the repository at this point in the history
  • Loading branch information
oprypkhantc authored Jun 23, 2023
1 parent cdd365d commit 5a34ca8
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 74 deletions.
1 change: 0 additions & 1 deletion .php-cs-fixer.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
<?php

//require __DIR__ . '/vendor/tenantcloud/php-cs-fixer-rule-sets/PhpdocSingleLineVarFixer.php';
require __DIR__ . '/src/TenantCloud/PhpCsFixer/RuleSet/TenantCloudSet.php';

use PhpCsFixer\Config;
Expand Down
172 changes: 99 additions & 73 deletions src/TenantCloud/PhpCsFixer/RuleSet/TenantCloudSet.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,100 +18,123 @@ class TenantCloudSet
public function rules(): array
{
return [
'@PhpCsFixer' => true,
'@Symfony' => true,
'@Symfony:risky' => true,
'@PSR12' => true,
'@PSR12:risky' => true,
'@PhpCsFixer' => true,
'@Symfony' => true,
'@Symfony:risky' => true,
'@PSR12' => true,
'@PSR12:risky' => true,
// Use `??=` whenever possible
'assign_null_coalescing_to_coalesce_equal' => true,
'modernize_strpos' => true,
'empty_loop_condition' => true,
'declare_parentheses' => true,
'array_syntax' => ['syntax' => 'short'],
'binary_operator_spaces' => [
'default' => 'single_space',
// Single space before/after operators (=, <=, >=, ?? etc), except for `=>`
'binary_operator_spaces' => [
'operators' => [
'=>' => 'align_single_space_minimal',
],
],
// Blank line before all of those constructs.
'blank_line_before_statement' => [
'statements' => [
'break', 'continue', 'declare', 'default', 'do', 'while', 'for',
'foreach', 'goto', 'if', 'return', 'switch', 'throw', 'try', 'yield',
'break', 'continue', 'declare', 'default', 'do', 'exit', 'for', 'foreach',
'goto', 'if', 'return', 'switch', 'throw', 'try', 'while', 'yield', 'yield_from',
],
],
'braces' => [
'position_after_control_structures' => 'same',
'allow_single_line_anonymous_class_with_empty_body' => true,
],
// One blank line in between methods and properties
'class_attributes_separation' => [
'elements' => ['method' => 'one', 'property' => 'one'],
],
// Spaces around string concatenation 'asd' . 'asd'
'concat_space' => [
'spacing' => 'one',
],
'error_suppression' => [
// Mutes trigger_error() with E_USER_DEPRECATED, but we handle deprecations manually so this is needed.
'mute_deprecation_error' => false,
],
// Import global classes, but neither require nor forbid function/constant imports
'global_namespace_import' => true,
// Remove @throws from code.
'general_phpdoc_annotation_remove' => [
// We don't believe so called "checked exceptions" are a good design. We're following the logic of Kotlin:
// https://kotlinlang.org/docs/reference/exceptions.html#checked-exceptions
'annotations' => ['throws'],
],
// Rename lower case & plural form @inheritDoc
'general_phpdoc_tag_rename' => [
'replacements' => [
'inheritDocs' => 'inheritDoc',
'inheritdoc' => 'inheritDoc',
],
],
// Forces proper indentation on Heredoc/Nowdoc
'heredoc_indentation' => true,
// `$i++` instead of `++$i`
'increment_style' => [
'style' => 'post',
],
'linebreak_after_opening_tag' => true,
'native_function_invocation' => false,
'ordered_class_elements' => [
// `[$var1, $var2] = something()` instead of `list($var1, $var2) = something()`
'list_syntax' => [
'syntax' => 'short',
],
// Do not remove "unused" use($var) from closures, as some Laravel code uses reflection to access those.
'lambda_not_used_import' => false,
// Do not move semicolon to a newline after a multiline construct.
'multiline_whitespace_before_semicolons' => false,
// Replace `str*` functions with `mb_str*`
'mb_str_functions' => true,
// Allow `strpos()` instead of `\strpos()`
'native_function_invocation' => false,
// Allow `JSON_THROW_ON_ERROR` instead of `\JSON_THROW_ON_ERROR`
'native_constant_invocation' => false,
// Do not remove trailing whitespace from string as it might break something with no profit.
'no_trailing_whitespace_in_string' => false,
// Reorder constructs in a class/interface/enum
'ordered_class_elements' => [
'order' => [
// First `use SomeTrait`
'use_trait',
// Then enums `case SOMETHING`
'case',
// Then `public const` and `private const`
'constant_public', 'constant_protected', 'constant_private',
'property_static', 'property_public_static', 'property_protected_static', 'property_private_static',
// Then `public` and `private` properties, both static and regular, in no specific order.
'property_public', 'property_protected', 'property_private',
'construct', 'destruct', 'magic', 'phpunit',
'method_static', 'method_public_static', 'method_protected_static', 'method_private_static',
// `__construct` after properties, but before all methods
'construct',
// PHPUnit's `setUp` and `tearDown` before all test cases and methods
'phpunit',
// Then `public` and `private` methods, both static and regular, in no specific order.
'method_public', 'method_protected', 'method_private',
// `__magic` after all regular methods
'magic',
// __destruct always last
'destruct',
],
],
'ordered_imports' => true,
'phpdoc_no_empty_return' => false,
'phpdoc_summary' => false,
'ternary_to_null_coalescing' => true,
'visibility_required' => [
'elements' => [
'const', 'property', 'method',
],
// Sort imports by class, function and then const. Sort by alphabet in each of the groups.
'ordered_imports' => [
'imports_order' => ['class', 'function', 'const'],
'sort_algorithm' => 'alpha',
],
'yoda_style' => ['always_move_variable' => true, 'equal' => false, 'identical' => false],
'php_unit_test_class_requires_covers' => false,
'php_unit_internal_class' => false,
'protected_to_private' => false,
// Adds stupid semicolons on newlines
'multiline_whitespace_before_semicolons' => false,
// Doesn't work with "nested" chaining
'method_chaining_indentation' => true,
'mb_str_functions' => true,
'global_namespace_import' => true,
'list_syntax' => [
'syntax' => 'short',
// Forces `&&` and `||` (or similar) operators to be at the end of the line, when multiline.
'operator_linebreak' => [
'only_booleans' => true,
'position' => 'end',
],
// Allow PHPDoc summary to not end with a punctuation symbol.
'phpdoc_summary' => false,
// Do not require @coversNothing for PHPUnit test cases for now
'php_unit_test_class_requires_covers' => false,
// Do not mark PHPUnit test cases as @internal
'php_unit_internal_class' => false,
// Do not convert protected to private because it's risky. Better done with Rector
'protected_to_private' => false,
// Forces PHPDoc to be single line for constants and properties.
'phpdoc_line_span' => [
'const' => 'single',
'property' => 'single',
],
'general_phpdoc_annotation_remove' => [
// We don't believe so called "checked exceptions" are a good design. We're following the logic of Kotlin:
// https://kotlinlang.org/docs/reference/exceptions.html#checked-exceptions
'annotations' => ['throws'],
],
'error_suppression' => [
// Mutes trigger_error() with E_USER_DEPRECATED, but we handle deprecations manually so this is needed.
'mute_deprecation_error' => false,
],
'operator_linebreak' => [
'only_booleans' => true,
'position' => 'end',
],
'native_constant_invocation' => false,
'simplified_if_return' => true,
'heredoc_indentation' => true,
'use_arrow_functions' => true,
'no_trailing_whitespace_in_string' => false,
'phpdoc_no_alias_tag' => [
// Default except property-read and property-write replacement
// Do not replace `@property-read` and `@property-write` with `@property`
'phpdoc_no_alias_tag' => [
'replacements' => ['type' => 'var', 'link' => 'see'],
],
// Force {@inheritDoc} to @inheritDoc whenever possible.
Expand All @@ -120,19 +143,22 @@ public function rules(): array
'inheritDoc' => 'annotation',
],
],
// Rename lower case & plural form @inheritDoc
'general_phpdoc_tag_rename' => [
'replacements' => [
'inheritDocs' => 'inheritDoc',
'inheritdoc' => 'inheritDoc',
],
],
// Some code uses reflection to fetch seemingly unused lambda imports.
'lambda_not_used_import' => false,
'phpdoc_to_comment' => [
'phpdoc_to_comment' => [
// Avoid converting generic trait uses and return type variable declaration from PHPDoc to comments
'ignored_tags' => ['var', 'use'],
],
// Simplifies `if($cond) { return true; } return false` kind of cases into `return (bool) $cond;`
'simplified_if_return' => true,
// Use `??` whenever possible
'ternary_to_null_coalescing' => true,
// Converts closures to arrow functions whenever possible
'use_arrow_functions' => true,
// `$something === 'string'` instead of `'string' === $something`
'yoda_style' => [
'always_move_variable' => true,
'equal' => false,
'identical' => false,
],
];
}
}

0 comments on commit 5a34ca8

Please sign in to comment.