diff --git a/.eslintrc.js b/.eslintrc.js index a5617aa..8cc9b2f 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,5 +1,24 @@ 'use strict'; +const { + version: typescriptESLintPluginVersion, +} = require('@typescript-eslint/eslint-plugin/package.json'); +const semver = require('semver'); + +const typescriptBanTypesRules = () => { + if (semver.major(typescriptESLintPluginVersion) === 8) { + return { + '@typescript-eslint/no-empty-object-type': 'error', + '@typescript-eslint/no-unsafe-function-type': 'error', + '@typescript-eslint/no-wrapper-object-types': 'error', + }; + } + + return { + '@typescript-eslint/ban-types': 'error', + }; +}; + module.exports = { parser: require.resolve('@typescript-eslint/parser'), extends: [ @@ -27,7 +46,7 @@ module.exports = { '@typescript-eslint/array-type': ['error', { default: 'array-simple' }], '@typescript-eslint/no-require-imports': 'error', '@typescript-eslint/ban-ts-comment': 'warn', - '@typescript-eslint/ban-types': 'error', + ...typescriptBanTypesRules(), '@typescript-eslint/consistent-type-imports': [ 'error', { disallowTypeAnnotations: false, fixStyle: 'inline-type-imports' }, diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 2f687af..fabc12f 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -66,17 +66,30 @@ jobs: test-node: name: # prettier-ignore - Test on Node.js v${{ matrix.node-version }}, eslint v${{ matrix.eslint-version }} + Test on Node.js v${{ matrix.node-version }}, eslint v${{ matrix.eslint-version }}, and ts-eslint v${{ matrix.ts-eslint-plugin-version }} needs: prepare-yarn-cache-ubuntu strategy: fail-fast: false matrix: node-version: [16.x, 18.x, 19.x, 20.x, 21.x] eslint-version: [7, 8, 9] + ts-eslint-plugin-version: [6, 7, 8] exclude: + # ts-eslint/plugin@7 doesn't support node@16 + - node-version: 16.x + ts-eslint-plugin-version: 7 + # ts-eslint/plugin@8 doesn't support node@16 + - node-version: 16.x + ts-eslint-plugin-version: 8 # eslint@9 doesn't support node@16 - node-version: 16.x eslint-version: 9 + # ts-eslint/plugin@7 doesn't support eslint@7 + - eslint-version: 7 + ts-eslint-plugin-version: 7 + # ts-eslint/plugin@8 doesn't support eslint@7 + - eslint-version: 7 + ts-eslint-plugin-version: 8 runs-on: ubuntu-latest steps: @@ -93,7 +106,9 @@ jobs: install with eslint v${{ matrix.eslint-version }} run: | yarn - yarn add --dev eslint@${{ matrix.eslint-version }} + yarn add @typescript-eslint/utils@${{ matrix.ts-eslint-plugin-version }} + # prettier-ignore + yarn add --dev eslint@${{ matrix.eslint-version }} @typescript-eslint/eslint-plugin@${{ matrix.ts-eslint-plugin-version }} @typescript-eslint/parser@${{ matrix.ts-eslint-plugin-version }} - name: run tests # only collect coverage on eslint versions that support dynamic import run: yarn test --coverage ${{ matrix.eslint-version == 8 }} diff --git a/package.json b/package.json index 93cb0bc..ffe2d07 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ ] }, "dependencies": { - "@typescript-eslint/utils": "^6.0.0" + "@typescript-eslint/utils": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "devDependencies": { "@babel/cli": "^7.4.4", @@ -87,8 +87,10 @@ "@types/dedent": "^0.7.0", "@types/jest": "^29.0.0", "@types/node": "^14.17.0", + "@types/semver": "^7.5.8", "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", + "@typescript-eslint/utils": "^6.0.0", "babel-jest": "^29.0.0", "babel-plugin-replace-ts-export-assignment": "^0.0.2", "dedent": "^1.0.0", diff --git a/src/rules/__tests__/test-utils.ts b/src/rules/__tests__/test-utils.ts index e7cc846..02b13c0 100644 --- a/src/rules/__tests__/test-utils.ts +++ b/src/rules/__tests__/test-utils.ts @@ -17,7 +17,7 @@ export class FlatCompatRuleTester extends TSESLint.RuleTester { public override run< TMessageIds extends string, - TOptions extends Readonly, + TOptions extends readonly unknown[], >( ruleName: string, rule: TSESLint.RuleModule, diff --git a/yarn.lock b/yarn.lock index 3a8f3ef..d5b9ec4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2833,7 +2833,7 @@ __metadata: languageName: node linkType: hard -"@types/semver@npm:^7.3.12, @types/semver@npm:^7.5.0, @types/semver@npm:^7.5.5": +"@types/semver@npm:^7.3.12, @types/semver@npm:^7.5.0, @types/semver@npm:^7.5.5, @types/semver@npm:^7.5.8": version: 7.5.8 resolution: "@types/semver@npm:7.5.8" checksum: ea6f5276f5b84c55921785a3a27a3cd37afee0111dfe2bcb3e03c31819c197c782598f17f0b150a69d453c9584cd14c4c4d7b9a55d2c5e6cacd4d66fdb3b3663 @@ -5128,6 +5128,7 @@ __metadata: "@types/dedent": ^0.7.0 "@types/jest": ^29.0.0 "@types/node": ^14.17.0 + "@types/semver": ^7.5.8 "@typescript-eslint/eslint-plugin": ^6.0.0 "@typescript-eslint/parser": ^6.0.0 "@typescript-eslint/utils": ^6.0.0