From 70235ac016b7a3361bd2fdb483c7670e3fab9319 Mon Sep 17 00:00:00 2001 From: stefanoviv Date: Sun, 12 Nov 2023 01:15:37 +0100 Subject: [PATCH] Add type aware lint fail reproduction --- tests/lib/rules-preprocessor/ember_ts/bar.gts | 5 ++ tests/lib/rules-preprocessor/ember_ts/baz.ts | 1 + tests/lib/rules-preprocessor/ember_ts/foo.gts | 14 ++++ .../rules-preprocessor/gjs-gts-parser-test.js | 72 +++++++++++++++++++ .../rules-preprocessor/tsconfig.eslint.json | 2 +- 5 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 tests/lib/rules-preprocessor/ember_ts/bar.gts create mode 100644 tests/lib/rules-preprocessor/ember_ts/baz.ts create mode 100644 tests/lib/rules-preprocessor/ember_ts/foo.gts diff --git a/tests/lib/rules-preprocessor/ember_ts/bar.gts b/tests/lib/rules-preprocessor/ember_ts/bar.gts new file mode 100644 index 0000000000..bad01493cf --- /dev/null +++ b/tests/lib/rules-preprocessor/ember_ts/bar.gts @@ -0,0 +1,5 @@ +export const fortyTwoFromGTS = '42'; + + \ No newline at end of file diff --git a/tests/lib/rules-preprocessor/ember_ts/baz.ts b/tests/lib/rules-preprocessor/ember_ts/baz.ts new file mode 100644 index 0000000000..84e700e1a6 --- /dev/null +++ b/tests/lib/rules-preprocessor/ember_ts/baz.ts @@ -0,0 +1 @@ +export const fortyTwoFromTS = '42'; diff --git a/tests/lib/rules-preprocessor/ember_ts/foo.gts b/tests/lib/rules-preprocessor/ember_ts/foo.gts new file mode 100644 index 0000000000..afb93ccec8 --- /dev/null +++ b/tests/lib/rules-preprocessor/ember_ts/foo.gts @@ -0,0 +1,14 @@ +import { fortyTwoFromGTS } from './bar.gts'; +import { fortyTwoFromTS } from './baz.ts'; + +export const fortyTwoLocal = '42'; + +const helloWorldFromGTS = fortyTwoFromGTS[0] === '4' ? 'hello' : 'world'; +const helloWorldFromTS = fortyTwoFromTS[0] === '4' ? 'hello' : 'world'; +const helloWorld = fortyTwoLocal[0] === '4' ? 'hello' : 'world'; + + diff --git a/tests/lib/rules-preprocessor/gjs-gts-parser-test.js b/tests/lib/rules-preprocessor/gjs-gts-parser-test.js index cbd5b86b8b..840813c176 100644 --- a/tests/lib/rules-preprocessor/gjs-gts-parser-test.js +++ b/tests/lib/rules-preprocessor/gjs-gts-parser-test.js @@ -761,4 +761,76 @@ describe('multiple tokens in same file', () => { expect(resultErrors[2].message).toBe("'bar' is not defined."); expect(resultErrors[2].line).toBe(17); }); + + it('lints while being type aware', async () => { + const eslint = new ESLint({ + ignore: false, + useEslintrc: false, + plugins: { ember: plugin }, + overrideConfig: { + root: true, + env: { + browser: true, + }, + plugins: ['ember'], + extends: ['plugin:ember/recommended'], + overrides: [ + { + files: ['**/*.gts'], + parser: 'eslint-plugin-ember/gjs-gts-parser', + parserOptions: { + project: './tsconfig.eslint.json', + tsconfigRootDir: __dirname, + extraFileExtensions: ['.gts'], + }, + extends: [ + 'plugin:@typescript-eslint/recommended-requiring-type-checking', + 'plugin:ember/recommended', + ], + rules: { + 'no-trailing-spaces': 'error', + '@typescript-eslint/prefer-string-starts-ends-with': 'error', + }, + }, + { + files: ['**/*.ts'], + parser: '@typescript-eslint/parser', + parserOptions: { + project: './tsconfig.eslint.json', + tsconfigRootDir: __dirname, + extraFileExtensions: ['.gts'], + }, + extends: [ + 'plugin:@typescript-eslint/recommended-requiring-type-checking', + 'plugin:ember/recommended', + ], + rules: { + 'no-trailing-spaces': 'error', + }, + }, + ], + rules: { + quotes: ['error', 'single'], + semi: ['error', 'always'], + 'object-curly-spacing': ['error', 'always'], + 'lines-between-class-members': 'error', + 'no-undef': 'error', + 'no-unused-vars': 'error', + 'ember/no-get': 'off', + 'ember/no-array-prototype-extensions': 'error', + 'ember/no-unused-services': 'error', + }, + }, + }); + + const results = await eslint.lintFiles(['**/*.gts', '**/*.ts']); + + const resultErrors = results.flatMap((result) => result.messages); + + expect(resultErrors[0].message).toBe("Use 'String#startsWith' method instead."); // Actual result is "Unsafe member access [0] on an `any` value." + + expect(resultErrors[1].message).toBe("Use 'String#startsWith' method instead."); + + expect(resultErrors[2].message).toBe("Use 'String#startsWith' method instead."); + }); }); diff --git a/tests/lib/rules-preprocessor/tsconfig.eslint.json b/tests/lib/rules-preprocessor/tsconfig.eslint.json index 2767865654..f9f80fc658 100644 --- a/tests/lib/rules-preprocessor/tsconfig.eslint.json +++ b/tests/lib/rules-preprocessor/tsconfig.eslint.json @@ -5,6 +5,6 @@ "strictNullChecks": true }, "include": [ - "*" + "**/*" ] }