From c81d7ed686578be5f1e67a4bbd15661c02f2d1db Mon Sep 17 00:00:00 2001 From: Hannes Kirsman Date: Fri, 28 Oct 2022 16:40:03 +0300 Subject: [PATCH 1/2] #84 Add ESLint support and configure it to use Drupal standards. --- README.md | 2 + config/grumphp.yml | 2 + src/Task/ESLint/EslintExtensionLoader.php | 14 +++++++ src/Task/ESLint/EslintTask.php | 46 +++++++++++++++++++++++ src/Task/ESLint/README.md | 29 ++++++++++++++ src/Task/tasks.yml | 41 +++++++++++++++++++- 6 files changed, 132 insertions(+), 2 deletions(-) create mode 100644 src/Task/ESLint/EslintExtensionLoader.php create mode 100644 src/Task/ESLint/EslintTask.php create mode 100644 src/Task/ESLint/README.md diff --git a/README.md b/README.md index ba659d4..3ecfe86 100755 --- a/README.md +++ b/README.md @@ -38,6 +38,8 @@ composer require wunderio/code-quality --dev cp vendor/wunderio/code-quality/config/grumphp.yml ./grumphp.yml cp vendor/wunderio/code-quality/config/phpstan.neon ./phpstan.neon cp vendor/wunderio/code-quality/config/psalm.xml ./psalm.xml +npm init # If you don't have package.json does not exist yet in your project. +npm i eslint@^8.9.0 eslint-config-airbnb@^19.0.4 eslint-config-prettier@^8.4.0 eslint-plugin-import@^2.25.4 eslint-plugin-jquery@^1.5.1 eslint-plugin-jsx-a11y@^6.5.1 eslint-plugin-prettier@^4.0.0 eslint-plugin-react@^7.28.0 eslint-plugin-yml@^0.14.0 prettier@^2.5.1 ``` The commit hook for GrumPHP is automatically installed on composer require. diff --git a/config/grumphp.yml b/config/grumphp.yml index 4d3f96e..af397df 100644 --- a/config/grumphp.yml +++ b/config/grumphp.yml @@ -13,6 +13,7 @@ grumphp: yaml_lint: ~ json_lint: ~ psalm: ~ + eslint: ~ extensions: - Wunderio\GrumPHP\Task\PhpCompatibility\PhpCompatibilityExtensionLoader - Wunderio\GrumPHP\Task\PhpCheckSyntax\PhpCheckSyntaxExtensionLoader @@ -23,3 +24,4 @@ grumphp: - Wunderio\GrumPHP\Task\YamlLint\YamlLintExtensionLoader - Wunderio\GrumPHP\Task\JsonLint\JsonLintExtensionLoader - Wunderio\GrumPHP\Task\Psalm\PsalmExtensionLoader + - Wunderio\GrumPHP\Task\ESLint\EslintExtensionLoader diff --git a/src/Task/ESLint/EslintExtensionLoader.php b/src/Task/ESLint/EslintExtensionLoader.php new file mode 100644 index 0000000..416207e --- /dev/null +++ b/src/Task/ESLint/EslintExtensionLoader.php @@ -0,0 +1,14 @@ +getConfig()->getOptions(); + $arguments = ProcessArgumentsCollection::forExecutable($config['bin']); + + $arguments->add('--config=' . $config['config']); + $arguments->addOptionalArgument('--debug', $config['debug']); + $arguments->addOptionalCommaSeparatedArgument('--ext=%s', (array) $config['extensions']); + $arguments->addOptionalArgument('--format=%s', $config['format']); + // @todo Not sure if this works. + $arguments->addOptionalIntegerArgument('--max-warnings=%d', $config['max_warnings']); + $arguments->addOptionalBooleanArgument('--no-eslintrc=%s', $config['no_eslintrc'], 'true', 'false'); + $arguments->addOptionalBooleanArgument('--quiet=%s', $config['quiet'], 'true', 'false'); + foreach ($config['ignore_patterns'] as $ignore_pattern) { + $arguments->add('--ignore-pattern=' . $ignore_pattern); + } + + foreach ($files as $file) { + $files_new[] = $file; + $arguments->add($file); + } + + return $arguments; + } + +} diff --git a/src/Task/ESLint/README.md b/src/Task/ESLint/README.md new file mode 100644 index 0000000..9de88f2 --- /dev/null +++ b/src/Task/ESLint/README.md @@ -0,0 +1,29 @@ +# ESLint + +Check js code against coding standards and security standards. By default Drupal rules are loaded. + +### grumphp.yml (with current defaults): +````yml +parameters: + tasks: + eslint: + ignore_patterns: + - '**/vendor/**' + - '**/node_modules/**' + - '**/core/**' + - '**/libraries/**' + - '**/contrib/**' + extensions: ['js', 'jsx', 'ts', 'tsx', 'vue'] + run_on: [ 'web/modules/custom', 'web/themes/custom' ] + bin: 'node_modules/.bin/eslint' + config: 'web/core/.eslintrc.passing.json' + debug: false + format: ~ + max_warnings: ~ + no_eslintrc: false + quiet: ~ + extensions: + - Wunderio\GrumPHP\Task\PhpCompatibilityTask\PhpCompatibilityExtensionLoader +```` + + diff --git a/src/Task/tasks.yml b/src/Task/tasks.yml index 52fe872..f935e8d 100644 --- a/src/Task/tasks.yml +++ b/src/Task/tasks.yml @@ -271,13 +271,50 @@ Wunderio\GrumPHP\Task\Psalm\PsalmTask: allowed_types: ['bool'] report: defaults: ~ - allowed_types: ['string', 'null' ] + allowed_types: ['string', 'null'] output_format: defaults: null - allowed_types: ['string', 'null' ] + allowed_types: ['string', 'null'] threads: defaults: 6 allowed_types: ['int'] show_info: defaults: false allowed_types: ['bool'] +Wunderio\GrumPHP\Task\ESLint\EslintTask: + options: + ignore_patterns: + defaults: + - '**/vendor/**' + - '**/node_modules/**' + - '**/core/**' + - '**/libraries/**' + - '**/contrib/**' + allowed_types: ['array'] + extensions: + defaults: ['js', 'jsx', 'ts', 'tsx', 'vue'], + allowed_types: ['array'] + run_on: + defaults: ['web/modules/custom', 'web/themes/custom'] + allowed_types: ['array'] + bin: + defaults: 'node_modules/.bin/eslint' + allowed_types: ['string'] + config: + defaults: 'web/core/.eslintrc.passing.json' + allowed_types: ['string'] + debug: + defaults: false + allowed_types: ['bool'] + format: + defaults: null + allowed_types: ['string', 'null'] + max_warnings: + defaults: null + allowed_types: ['int', 'null'] + no_eslintrc: + defaults: false + allowed_types: ['bool'] + quiet: + defaults: null + allowed_types: ['bool', 'null'] From 19a2b2f90923af958e6a49ddca9bcd628f1d8b9b Mon Sep 17 00:00:00 2001 From: Hannes Kirsman Date: Fri, 28 Oct 2022 17:50:57 +0300 Subject: [PATCH 2/2] #84 Remove custom code as the official plugin as auto fix. --- config/grumphp.yml | 5 ++- src/Task/ESLint/EslintExtensionLoader.php | 14 ------- src/Task/ESLint/EslintTask.php | 46 ----------------------- src/Task/ESLint/README.md | 29 -------------- src/Task/tasks.yml | 37 ------------------ 5 files changed, 3 insertions(+), 128 deletions(-) delete mode 100644 src/Task/ESLint/EslintExtensionLoader.php delete mode 100644 src/Task/ESLint/EslintTask.php delete mode 100644 src/Task/ESLint/README.md diff --git a/config/grumphp.yml b/config/grumphp.yml index af397df..7ddc53d 100644 --- a/config/grumphp.yml +++ b/config/grumphp.yml @@ -13,7 +13,9 @@ grumphp: yaml_lint: ~ json_lint: ~ psalm: ~ - eslint: ~ + eslint: + bin: 'node_modules/.bin/eslint' + config: 'web/core/.eslintrc.passing.json' extensions: - Wunderio\GrumPHP\Task\PhpCompatibility\PhpCompatibilityExtensionLoader - Wunderio\GrumPHP\Task\PhpCheckSyntax\PhpCheckSyntaxExtensionLoader @@ -24,4 +26,3 @@ grumphp: - Wunderio\GrumPHP\Task\YamlLint\YamlLintExtensionLoader - Wunderio\GrumPHP\Task\JsonLint\JsonLintExtensionLoader - Wunderio\GrumPHP\Task\Psalm\PsalmExtensionLoader - - Wunderio\GrumPHP\Task\ESLint\EslintExtensionLoader diff --git a/src/Task/ESLint/EslintExtensionLoader.php b/src/Task/ESLint/EslintExtensionLoader.php deleted file mode 100644 index 416207e..0000000 --- a/src/Task/ESLint/EslintExtensionLoader.php +++ /dev/null @@ -1,14 +0,0 @@ -getConfig()->getOptions(); - $arguments = ProcessArgumentsCollection::forExecutable($config['bin']); - - $arguments->add('--config=' . $config['config']); - $arguments->addOptionalArgument('--debug', $config['debug']); - $arguments->addOptionalCommaSeparatedArgument('--ext=%s', (array) $config['extensions']); - $arguments->addOptionalArgument('--format=%s', $config['format']); - // @todo Not sure if this works. - $arguments->addOptionalIntegerArgument('--max-warnings=%d', $config['max_warnings']); - $arguments->addOptionalBooleanArgument('--no-eslintrc=%s', $config['no_eslintrc'], 'true', 'false'); - $arguments->addOptionalBooleanArgument('--quiet=%s', $config['quiet'], 'true', 'false'); - foreach ($config['ignore_patterns'] as $ignore_pattern) { - $arguments->add('--ignore-pattern=' . $ignore_pattern); - } - - foreach ($files as $file) { - $files_new[] = $file; - $arguments->add($file); - } - - return $arguments; - } - -} diff --git a/src/Task/ESLint/README.md b/src/Task/ESLint/README.md deleted file mode 100644 index 9de88f2..0000000 --- a/src/Task/ESLint/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# ESLint - -Check js code against coding standards and security standards. By default Drupal rules are loaded. - -### grumphp.yml (with current defaults): -````yml -parameters: - tasks: - eslint: - ignore_patterns: - - '**/vendor/**' - - '**/node_modules/**' - - '**/core/**' - - '**/libraries/**' - - '**/contrib/**' - extensions: ['js', 'jsx', 'ts', 'tsx', 'vue'] - run_on: [ 'web/modules/custom', 'web/themes/custom' ] - bin: 'node_modules/.bin/eslint' - config: 'web/core/.eslintrc.passing.json' - debug: false - format: ~ - max_warnings: ~ - no_eslintrc: false - quiet: ~ - extensions: - - Wunderio\GrumPHP\Task\PhpCompatibilityTask\PhpCompatibilityExtensionLoader -```` - - diff --git a/src/Task/tasks.yml b/src/Task/tasks.yml index f935e8d..b5f4ee1 100644 --- a/src/Task/tasks.yml +++ b/src/Task/tasks.yml @@ -281,40 +281,3 @@ Wunderio\GrumPHP\Task\Psalm\PsalmTask: show_info: defaults: false allowed_types: ['bool'] -Wunderio\GrumPHP\Task\ESLint\EslintTask: - options: - ignore_patterns: - defaults: - - '**/vendor/**' - - '**/node_modules/**' - - '**/core/**' - - '**/libraries/**' - - '**/contrib/**' - allowed_types: ['array'] - extensions: - defaults: ['js', 'jsx', 'ts', 'tsx', 'vue'], - allowed_types: ['array'] - run_on: - defaults: ['web/modules/custom', 'web/themes/custom'] - allowed_types: ['array'] - bin: - defaults: 'node_modules/.bin/eslint' - allowed_types: ['string'] - config: - defaults: 'web/core/.eslintrc.passing.json' - allowed_types: ['string'] - debug: - defaults: false - allowed_types: ['bool'] - format: - defaults: null - allowed_types: ['string', 'null'] - max_warnings: - defaults: null - allowed_types: ['int', 'null'] - no_eslintrc: - defaults: false - allowed_types: ['bool'] - quiet: - defaults: null - allowed_types: ['bool', 'null']