diff --git a/eslint.config.ts b/eslint.config.ts index e06136c8..3380a950 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -1,12 +1,14 @@ +import { defineConfig } from 'eslint/config'; +import js from '@eslint/js'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; -import js from '@eslint/js'; import { FlatCompat } from '@eslint/eslintrc'; import prettier from 'eslint-config-prettier/flat'; -import markdown from 'eslint-plugin-markdown'; -import pluginN from 'eslint-plugin-n'; +import markdown from '@eslint/markdown'; +import n from 'eslint-plugin-n'; import tseslint from 'typescript-eslint'; - +import unicorn from 'eslint-plugin-unicorn'; +import eslintComments from '@eslint-community/eslint-plugin-eslint-comments/configs'; import eslintPlugin from './lib/index.ts'; const dirname = path.dirname(fileURLToPath(import.meta.url)); @@ -15,7 +17,7 @@ const compat = new FlatCompat({ recommendedConfig: js.configs.recommended, }); -export default tseslint.config([ +export default defineConfig([ // Global ignores { ignores: [ @@ -26,19 +28,24 @@ export default tseslint.config([ 'e2e/fixtures', ], }, - // Global settings + ...compat.extends('not-an-aardvark/node'), + + // base config { + files: ['**/*.{js,ts}'], languageOptions: { parser: tseslint.parser, sourceType: 'module' }, - }, - ...compat.extends( - 'not-an-aardvark/node', - 'plugin:@eslint-community/eslint-comments/recommended', - 'plugin:unicorn/recommended', - ), - pluginN.configs['flat/recommended'], - prettier, - { + plugins: { js, n, 'eslint-plugin': eslintPlugin }, + extends: [ + prettier, + 'js/recommended', + tseslint.configs.recommended, + 'n/recommended', + unicorn.configs.recommended, + eslintComments.recommended, + ], rules: { + 'n/no-missing-import': 'off', + '@eslint-community/eslint-comments/no-unused-disable': 'error', '@eslint-community/eslint-comments/require-description': 'error', @@ -52,18 +59,13 @@ export default tseslint.config([ 'unicorn/no-nested-ternary': 'off', }, }, - // TypeScript rules - tseslint.configs.recommended.map((config) => ({ - files: ['**/*.ts', '**/*.mts', '**/*.cts'], - ...config, - rules: { ...config.rules, 'n/no-missing-import': 'off' }, - })), + { // Apply eslint-plugin rules to our own rules/tests (but not docs). files: ['lib/**/*.ts', 'tests/**/*.ts'], plugins: { 'eslint-plugin': eslintPlugin }, + extends: ['eslint-plugin/all'], rules: { - ...eslintPlugin.configs.all.rules, 'eslint-plugin/no-meta-schema-default': 'off', // TODO: enable once https://github.com/bmish/eslint-doc-generator/issues/513 is fixed and released 'eslint-plugin/report-message-format': ['error', '^[^a-z].*.$'], 'eslint-plugin/require-meta-docs-url': [ @@ -86,11 +88,11 @@ export default tseslint.config([ plugins: { markdown }, linterOptions: { noInlineConfig: true }, rules: { + strict: 'off', 'no-undef': 'off', 'no-unused-vars': 'off', '@typescript-eslint/no-unused-vars': 'off', - - strict: 'off', + '@typescript-eslint/no-require-imports': 'off', '@eslint-community/eslint-comments/require-description': 'off', diff --git a/lib/rules/meta-property-ordering.ts b/lib/rules/meta-property-ordering.ts index c4ad2019..67105932 100644 --- a/lib/rules/meta-property-ordering.ts +++ b/lib/rules/meta-property-ordering.ts @@ -86,7 +86,7 @@ const rule: Rule.RuleModule = { const knownProps = props .filter((prop) => orderMap.has(getKeyName(prop))) - .sort( + .toSorted( (a, b) => orderMap.get(getKeyName(a))! - orderMap.get(getKeyName(b))!, ); diff --git a/lib/rules/no-identical-tests.ts b/lib/rules/no-identical-tests.ts index 8454877c..7afbe341 100644 --- a/lib/rules/no-identical-tests.ts +++ b/lib/rules/no-identical-tests.ts @@ -38,7 +38,7 @@ const rule: Rule.RuleModule = { } return JSON.stringify([ test.type, - ...test.properties.map((p) => sourceCode.getText(p)).sort(), + ...test.properties.map((p) => sourceCode.getText(p)).toSorted(), ]); } diff --git a/package.json b/package.json index f96a54fb..a9c5cc87 100644 --- a/package.json +++ b/package.json @@ -52,10 +52,10 @@ "@commitlint/cli": "^20.0.0", "@commitlint/config-conventional": "^20.0.0", "@commitlint/types": "^20.0.0", - "@eslint-community/eslint-plugin-eslint-comments": "^4.3.0", + "@eslint-community/eslint-plugin-eslint-comments": "^4.6.0", "@eslint/eslintrc": "^3.3.3", "@eslint/js": "^9.39.2", - "@types/eslint-plugin-markdown": "^2.0.2", + "@eslint/markdown": "^7.5.1", "@types/eslint-scope": "^8.4.0", "@types/espree": "^10.1.0", "@types/estraverse": "^5.1.7", @@ -69,9 +69,8 @@ "eslint-config-not-an-aardvark": "^2.1.0", "eslint-config-prettier": "^10.1.8", "eslint-doc-generator": "^2.2.2", - "eslint-plugin-markdown": "^5.1.0", "eslint-plugin-n": "^17.21.0", - "eslint-plugin-unicorn": "^56.0.1", + "eslint-plugin-unicorn": "^62.0.0", "eslint-remote-tester": "^4.0.3", "eslint-scope": "^8.4.0", "espree": "^11.1.0",