diff --git a/docs/usage.md b/docs/usage.md index b57d501..c2fc351 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -140,9 +140,17 @@ module.exports = { ### TypeScript -TypeScript に関連した設定はデフォルトで有効になっているため、特別に設定を追加する必要はありません。 +TypeScript に関連した設定はデフォルトで有効になっているため、特別に設定を追加する必要はありません。TypeScript の設定ファイルはデフォルトでは `./tsconfig.json` が使われます。 -TypeScript の設定ファイルはデフォルトでは `./tsconfig.json` が使われます。このファイルを変更する場合は `tsProject` オプションを使用してください。 +ESLint を実行するディレクトリが `tsconfig.json` が配置されているディレクトリと異なり、うまく `tsconfig.json` を解決できない場合は、`tsconfigRootDir` を指定してください。 + +```javascript +export default config({ + tsconfigRootDir: import.meta.dirname, +}); +``` + +参照する TypeScript の設定ファイルを変更する場合は `tsProject` オプションを使用してください。ただし、この設定をすると ESLint 以外のツールとの間で型情報の不一致が生まれる可能性があるため、非推奨です。 ```javascript export default config({ @@ -150,6 +158,15 @@ export default config({ }); ``` +typescript-eslint v8 から追加された [`projectService` オプション](https://typescript-eslint.io/packages/parser#projectservice)は、現在オプトインとして提供しています。使用する場合は `tsProjectService` を有効にしてください (`tsProject` よりも優先されます)。 + +```javascript +export default config({ + tsProjectService: true, + tsconfigRootDir: import.meta.dirname, +}); +``` + ### React React に関連した設定やルールを有効化するには、`react` オプションを有効化してください。 diff --git a/lib/config/index.js b/lib/config/index.js index fab161c..16e6d99 100644 --- a/lib/config/index.js +++ b/lib/config/index.js @@ -11,9 +11,15 @@ const rules = require('../rules/index.js'); /** * @typedef ConfigOptions - * @property {boolean | string | string[] | undefined} [tsProject] - * TypeScript の設定ファイル (languageOptions.parserOptions.project) + * @property {import('@typescript-eslint/parser').ParserOptions['project']} [tsProject] + * TypeScript の設定ファイル (https://typescript-eslint.io/packages/parser#project) * デフォルト: true (lint 対象のファイルに最も近い tsconfig.json を利用する) + * @property {import('@typescript-eslint/parser').ParserOptions['projectService']} [tsProjectService] + * TypeScript のプロジェクトの設定 (https://typescript-eslint.io/packages/parser#projectservice) + * デフォルト: false (無効) + * @property {import('@typescript-eslint/parser').ParserOptions['tsconfigRootDir']} [tsconfigRootDir] + * tsconfig.json の探索先のルートディレクトリ (https://typescript-eslint.io/packages/parser#tsconfigrootdir) + * デフォルト: undefined * @property {boolean | undefined} [react] * React を使用するか. true の場合, React に関連する設定を有効にする * デフォルト: false @@ -30,6 +36,8 @@ const rules = require('../rules/index.js'); */ function config(options, configs) { const tsProject = options?.tsProject ?? true; + const tsProjectService = options?.tsProjectService ?? false; + const tsconfigRootDir = options?.tsconfigRootDir ?? undefined; const react = options?.react ?? false; const prettier = options?.prettier ?? true; @@ -75,7 +83,10 @@ function config(options, configs) { languageOptions: { sourceType: 'module', parser: /** @type {import('eslint').Linter.Parser} */ (tsEslint.parser), - parserOptions: tsProject ? { project: tsProject } : {}, + parserOptions: { + ...(tsProjectService ? { projectService: tsProjectService } : tsProject ? { project: tsProject } : {}), + tsconfigRootDir, + }, }, settings: { ...importPlugin.configs.typescript.settings,