diff --git a/.changeset/hungry-days-reply.md b/.changeset/hungry-days-reply.md new file mode 100644 index 000000000..df539dd80 --- /dev/null +++ b/.changeset/hungry-days-reply.md @@ -0,0 +1,5 @@ +--- +'eslint-plugin-svelte': patch +--- + +test: use ESLint and Linter directly from eslint in tests diff --git a/packages/eslint-plugin-svelte/tests/src/configs/all.ts b/packages/eslint-plugin-svelte/tests/src/configs/all.ts index 3ad9a2a30..124b19533 100644 --- a/packages/eslint-plugin-svelte/tests/src/configs/all.ts +++ b/packages/eslint-plugin-svelte/tests/src/configs/all.ts @@ -1,16 +1,20 @@ import assert from 'assert'; -import semver from 'semver'; import plugin from '../../../src/index.js'; -import { ESLint } from '../../utils/eslint-compat.js'; +import { loadESLint, type ESLint as ESLintClass } from 'eslint'; describe('`all` config', () => { + let ESLint: typeof ESLintClass; + + before(async () => { + ESLint = await loadESLint({ useFlatConfig: true }); + }); + it('`all` config should work. ', async () => { - if (semver.satisfies(ESLint.version, '<8.0.0')) return; const code = `{@html a+b}`; const linter = new ESLint({ - overrideConfigFile: true as never, - overrideConfig: plugin.configs['flat/all'] as never + overrideConfigFile: true, + overrideConfig: plugin.configs['flat/all'] }); const result = await linter.lintText(code, { filePath: 'test.svelte' }); const messages = result[0].messages; diff --git a/packages/eslint-plugin-svelte/tests/src/configs/base.ts b/packages/eslint-plugin-svelte/tests/src/configs/base.ts index ac070c0fc..25553e8f5 100644 --- a/packages/eslint-plugin-svelte/tests/src/configs/base.ts +++ b/packages/eslint-plugin-svelte/tests/src/configs/base.ts @@ -1,17 +1,21 @@ import assert from 'assert'; -import semver from 'semver'; import plugin from '../../../src/index.js'; -import { ESLint } from '../../utils/eslint-compat.js'; +import { loadESLint, type ESLint as ESLintClass } from 'eslint'; describe('`base` config', () => { + let ESLint: typeof ESLintClass; + + before(async () => { + ESLint = await loadESLint({ useFlatConfig: true }); + }); + it('`base` config should work. ', async () => { - if (semver.satisfies(ESLint.version, '<8.0.0')) return; const code = ` {@html a+b} {@html a+b}`; const linter = new ESLint({ - overrideConfigFile: true as never, + overrideConfigFile: true, overrideConfig: [ ...plugin.configs['flat/base'], { @@ -19,7 +23,7 @@ describe('`base` config', () => { 'svelte/no-at-html-tags': 'error' } } - ] as never + ] }); const result = await linter.lintText(code, { filePath: 'test.svelte' }); const messages = result[0].messages; diff --git a/packages/eslint-plugin-svelte/tests/src/configs/recommended.ts b/packages/eslint-plugin-svelte/tests/src/configs/recommended.ts index c284e275d..0ab4e22a1 100644 --- a/packages/eslint-plugin-svelte/tests/src/configs/recommended.ts +++ b/packages/eslint-plugin-svelte/tests/src/configs/recommended.ts @@ -1,16 +1,20 @@ import assert from 'assert'; -import semver from 'semver'; import plugin from '../../../src/index.js'; -import { ESLint } from '../../utils/eslint-compat.js'; +import { loadESLint, type ESLint as ESLintClass } from 'eslint'; describe('`recommended` config', () => { + let ESLint: typeof ESLintClass; + + before(async () => { + ESLint = await loadESLint({ useFlatConfig: true }); + }); + it('`recommended` config should work. ', async () => { - if (semver.satisfies(ESLint.version, '<8.0.0')) return; const code = `{@html a+b}`; const linter = new ESLint({ - overrideConfigFile: true as never, - overrideConfig: plugin.configs['flat/recommended'] as never + overrideConfigFile: true, + overrideConfig: plugin.configs['flat/recommended'] }); const result = await linter.lintText(code, { filePath: 'test.svelte' }); const messages = result[0].messages; diff --git a/packages/eslint-plugin-svelte/tests/src/rules/comment-directive.ts b/packages/eslint-plugin-svelte/tests/src/rules/comment-directive.ts index 65efc02bb..5dec0481b 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/comment-directive.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/comment-directive.ts @@ -1,36 +1,40 @@ import assert from 'assert'; import plugin from '../../../src/index.js'; -import { ESLint } from '../../utils/eslint-compat.js'; +import { loadESLint, type ESLint as ESLintClass } from 'eslint'; import * as svelteParser from 'svelte-eslint-parser'; // ----------------------------------------------------------------------------- // Tests // ----------------------------------------------------------------------------- -// Initialize linter. -const linter = new ESLint({ - // @ts-expect-error -- Type error? - baseConfig: { - languageOptions: { - parser: svelteParser, - ecmaVersion: 2020 - }, - plugins: { - svelte: plugin - }, - rules: { - 'no-undef': 'error', - 'space-infix-ops': 'error', - 'svelte/no-at-html-tags': 'error', - 'svelte/comment-directive': 'error' - }, - processor: 'svelte/svelte', - files: ['**'] - }, - overrideConfigFile: true -}); - describe('comment-directive', () => { + let ESLint: typeof ESLintClass; + let linter: InstanceType; + + before(async () => { + ESLint = await loadESLint({ useFlatConfig: true }); + linter = new ESLint({ + baseConfig: { + languageOptions: { + parser: svelteParser, + ecmaVersion: 2020 + }, + plugins: { + svelte: plugin + }, + rules: { + 'no-undef': 'error', + 'space-infix-ops': 'error', + 'svelte/no-at-html-tags': 'error', + 'svelte/comment-directive': 'error' + }, + processor: 'svelte/svelte', + files: ['**'] + }, + overrideConfigFile: true + }); + }); + describe('eslint-disable/eslint-enable', () => { it('disable all rules if ', async () => { const code = ` @@ -351,27 +355,29 @@ describe('comment-directive', () => { }); describe('reportUnusedDisableDirectives', () => { - const linter = new ESLint({ - // @ts-expect-error -- Type error? - baseConfig: { - languageOptions: { - parser: svelteParser, - ecmaVersion: 2020 - }, - plugins: { - svelte: plugin - }, - rules: { - 'no-unused-vars': 'error', - 'svelte/comment-directive': ['error', { reportUnusedDisableDirectives: true }], - 'svelte/no-at-html-tags': 'error', - 'svelte/no-at-debug-tags': 'error' + before(() => { + linter = new ESLint({ + baseConfig: { + languageOptions: { + parser: svelteParser, + ecmaVersion: 2020 + }, + plugins: { + svelte: plugin + }, + rules: { + 'no-unused-vars': 'error', + 'svelte/comment-directive': ['error', { reportUnusedDisableDirectives: true }], + 'svelte/no-at-html-tags': 'error', + 'svelte/no-at-debug-tags': 'error' + }, + files: ['**'], + processor: 'svelte/svelte' }, - files: ['**'], - processor: 'svelte/svelte' - }, - overrideConfigFile: true + overrideConfigFile: true + }); }); + it('report unused ', async () => { const code = ` diff --git a/packages/eslint-plugin-svelte/tests/src/settings/ignore-warnings.ts b/packages/eslint-plugin-svelte/tests/src/settings/ignore-warnings.ts index e6223dcb6..685bff9b5 100644 --- a/packages/eslint-plugin-svelte/tests/src/settings/ignore-warnings.ts +++ b/packages/eslint-plugin-svelte/tests/src/settings/ignore-warnings.ts @@ -1,9 +1,15 @@ import assert from 'assert'; import plugin from '../../../src/index.js'; -import { ESLint } from '../../utils/eslint-compat.js'; +import { loadESLint, type ESLint as ESLintClass } from 'eslint'; import * as svelteParser from 'svelte-eslint-parser'; describe('ignore-warnings', () => { + let ESLint: typeof ESLintClass; + + before(async () => { + ESLint = await loadESLint({ useFlatConfig: true }); + }); + it('disable rules if ignoreWarnings: [ruleName]', async () => { const code = ` {@html a+b} diff --git a/packages/eslint-plugin-svelte/tests/utils/eslint-compat.ts b/packages/eslint-plugin-svelte/tests/utils/eslint-compat.ts index 7cfa3ddc7..d9d2b73d2 100644 --- a/packages/eslint-plugin-svelte/tests/utils/eslint-compat.ts +++ b/packages/eslint-plugin-svelte/tests/utils/eslint-compat.ts @@ -1,9 +1,3 @@ -import { getLegacyESLint, getESLint } from 'eslint-compat-utils/eslint'; -import { getLinter } from 'eslint-compat-utils/linter'; -import { getRuleTester, getRuleIdPrefix } from 'eslint-compat-utils/rule-tester'; +import { getRuleTester } from 'eslint-compat-utils/rule-tester'; -export const LegacyESLint = getLegacyESLint(); -export const ESLint = getESLint(); export const RuleTester = getRuleTester(); -export const TEST_RULE_ID_PREFIX = getRuleIdPrefix(); -export const Linter = getLinter(); diff --git a/packages/eslint-plugin-svelte/tests/utils/utils.ts b/packages/eslint-plugin-svelte/tests/utils/utils.ts index 217744733..845ea656f 100644 --- a/packages/eslint-plugin-svelte/tests/utils/utils.ts +++ b/packages/eslint-plugin-svelte/tests/utils/utils.ts @@ -7,7 +7,7 @@ import { applyFixes } from './source-code-fixer.js'; import { parse as parseYaml, stringify as stringifyYaml } from 'yaml'; import semver from 'semver'; import { writeAndFormat } from '../../tools/lib/write.js'; -import { Linter } from './eslint-compat.js'; +import { Linter } from 'eslint'; import * as svelteParser from 'svelte-eslint-parser'; import * as typescriptParser from '@typescript-eslint/parser'; import Module from 'module';