From 2bb7972030e4e9134a956dd980168ad26d0a562d Mon Sep 17 00:00:00 2001 From: patrick Date: Tue, 22 Aug 2023 16:08:17 +0200 Subject: [PATCH] non-breaking approach --- README.md | 20 +- lib/config/recommended-gjs.js | 41 ++ lib/config/recommended.js | 12 +- lib/index.js | 8 + lib/preprocessors/glimmer.js | 313 ++++++++ lib/preprocessors/noop.js | 7 + .../no-empty-glimmer-component-classes.js | 6 +- lib/rules/no-unused-services.js | 19 +- package.json | 9 +- .../rules-preprocessor/gjs-gts-parser-test.js | 686 ++++++++++++++++++ .../gjs-gts-processor-test.js | 175 +---- yarn.lock | 641 +++++++++++++++- 12 files changed, 1774 insertions(+), 163 deletions(-) create mode 100644 lib/config/recommended-gjs.js create mode 100644 lib/preprocessors/glimmer.js create mode 100644 lib/preprocessors/noop.js create mode 100644 tests/lib/rules-preprocessor/gjs-gts-parser-test.js diff --git a/README.md b/README.md index 18f2d8b52c..5bdd11620c 100644 --- a/README.md +++ b/README.md @@ -43,21 +43,29 @@ module.exports = { ``` To correctly parse gjs/gts: -Do not set an override for the parser in the global config. -To use e.g. the typescript parser, the following should be used ```js // .eslintrc.js module.exports = { plugins: ['ember'], - // parser: '@typescript-eslint/parser', <-- needs to be removed, or set the gts/gjs one - // so we could also have: - // parser: "eslint-plugin-ember/gts-parser", extends: [ 'eslint:recommended', - 'plugin:@typescript-eslint/base', // or typescript-eslint/recommended, must come before plugin:ember/recommended 'plugin:ember/recommended', // or other configuration ], + overrides: [ + { + files: ['**/*.gts'], + extends: [ + 'plugin:ember/recommended-gjs', + ] + }, + { + files: ['**/*.gjs'], + extends: [ + 'plugin:ember/recommended-gjs', + ] + } + ], rules: { // override / enable optional rules 'ember/no-replace-test-comments': 'error' diff --git a/lib/config/recommended-gjs.js b/lib/config/recommended-gjs.js new file mode 100644 index 0000000000..b4d6ae2095 --- /dev/null +++ b/lib/config/recommended-gjs.js @@ -0,0 +1,41 @@ +const rules = require('../recommended-rules'); + +module.exports = { + root: true, + + parserOptions: { + ecmaVersion: 2020, + sourceType: 'module', + }, + + env: { + browser: true, + es2020: true, + }, + + plugins: ['ember'], + + rules, + + overrides: [ + /** + * We don't want to *always* have the preprocessor active, + * it's only relevant on gjs and gts files. + * + * Additionally, we need to declare a global (which is private API) + * so that ESLint doesn't report errors about the variable being undefined. + * While this is true, it's a temporary thing for babel to do further processing + * on -- and isn't relevant to user-land code. + */ + { + files: ['**/*.gts'], + parser: 'eslint-plugin-ember/gts-parser', + processor: 'ember/', + }, + { + files: ['**/*.gjs'], + parser: 'eslint-plugin-ember/gjs-parser', + processor: 'ember/', + }, + ], +}; diff --git a/lib/config/recommended.js b/lib/config/recommended.js index 06a43f39f7..e45976c2ef 100644 --- a/lib/config/recommended.js +++ b/lib/config/recommended.js @@ -1,4 +1,5 @@ const rules = require('../recommended-rules'); +const util = require('ember-template-imports/src/util'); module.exports = { root: true, @@ -28,12 +29,11 @@ module.exports = { * on -- and isn't relevant to user-land code. */ { - files: ['**/*.gts'], - parser: require.resolve('../parsers/gts-parser'), - }, - { - files: ['**/*.gjs'], - parser: require.resolve('../parsers/gjs-parser'), + files: ['**/*.gjs', '**/*.gts'], + processor: 'ember/