From 2d6e11843daf364b05c83f7dc665e5ba2d938290 Mon Sep 17 00:00:00 2001 From: Wayne Zhang Date: Wed, 5 Mar 2025 12:12:24 +0800 Subject: [PATCH 01/24] feat: handle generic parameter types (#2693) --- lib/utils/ts-utils/ts-types.js | 12 ++++++++ tests/lib/rules/require-valid-default-prop.js | 30 +++++++++++++++++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/lib/utils/ts-utils/ts-types.js b/lib/utils/ts-utils/ts-types.js index 2fe354c2c..7280c8762 100644 --- a/lib/utils/ts-utils/ts-types.js +++ b/lib/utils/ts-utils/ts-types.js @@ -202,6 +202,18 @@ function inferRuntimeTypeInternal(type, services) { const { checker } = services /** @type {Set} */ const types = new Set() + + // handle generic parameter types + if (type.isTypeParameter()) { + const constraint = type.getConstraint() + if (constraint) { + for (const t of inferRuntimeTypeInternal(constraint, services)) { + types.add(t) + } + } + return [...types] + } + for (const targetType of iterateTypes(checker.getNonNullableType(type))) { if ( isAny(targetType) || diff --git a/tests/lib/rules/require-valid-default-prop.js b/tests/lib/rules/require-valid-default-prop.js index a724d36f7..103b6b7d3 100644 --- a/tests/lib/rules/require-valid-default-prop.js +++ b/tests/lib/rules/require-valid-default-prop.js @@ -222,8 +222,7 @@ ruleTester.run('require-valid-default-prop', rule, { `, languageOptions: { parser: require('@typescript-eslint/parser'), - ecmaVersion: 6, - sourceType: 'module' + ...languageOptions } }, { @@ -332,6 +331,17 @@ ruleTester.run('require-valid-default-prop', rule, { languageOptions: { parser: require('vue-eslint-parser') } + }, + { + // https://github.com/vuejs/eslint-plugin-vue/issues/2692 + filename: 'test.vue', + code: ` + + `, + ...getTypeScriptFixtureTestOptions() } ], @@ -1201,6 +1211,22 @@ ruleTester.run('require-valid-default-prop', rule, { line: 3 } ] + }, + { + filename: 'test.vue', + code: ` + + `, + errors: [ + { + message: "Type of the default value for 'foo' prop must be a string.", + line: 4 + } + ], + ...getTypeScriptFixtureTestOptions() } ] }) From ddfd67651f4dc66f87e88c7cf2cf4fe4eb74b34b Mon Sep 17 00:00:00 2001 From: Wayne Zhang Date: Wed, 5 Mar 2025 12:20:34 +0800 Subject: [PATCH 02/24] feat: add `vue/no-import-compiler-macros` rule (#2684) Co-authored-by: Flo Edelmann --- docs/rules/index.md | 2 + docs/rules/no-import-compiler-macros.md | 54 +++++ lib/index.js | 1 + lib/rules/no-import-compiler-macros.js | 101 ++++++++++ tests/lib/rules/no-import-compiler-macros.js | 201 +++++++++++++++++++ 5 files changed, 359 insertions(+) create mode 100644 docs/rules/no-import-compiler-macros.md create mode 100644 lib/rules/no-import-compiler-macros.js create mode 100644 tests/lib/rules/no-import-compiler-macros.js diff --git a/docs/rules/index.md b/docs/rules/index.md index f170f8031..4fea47058 100644 --- a/docs/rules/index.md +++ b/docs/rules/index.md @@ -233,6 +233,7 @@ For example: | [vue/no-deprecated-model-definition] | disallow deprecated `model` definition (in Vue.js 3.0.0+) | :bulb: | :warning: | | [vue/no-duplicate-attr-inheritance] | enforce `inheritAttrs` to be set to `false` when using `v-bind="$attrs"` | | :hammer: | | [vue/no-empty-component-block] | disallow the `