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';