Parsing error: Cannot read file '.../tsconfig.json'.eslint
The error Parsing error: Cannot read file '.../tsconfig.json'.eslint
shows in all .ts
files in the src
folder including index.ts
.
I have no idea how to set up configs. The issue just shows a red line and makes the file red. However, everything compiles and run fine. The entire Node project was created using the firebase CLI.
tsconfig.json
file:
{
"compilerOptions": {
"module": "commonjs",
"noImplicitReturns": true,
"noUnusedLocals": true,
"outDir": "lib",
"sourceMap": true,
"strict": true,
"target": "es2017"
},
"compileOnSave": true,
"include": [
"src"
]
}
.eslintrc.js
file:
module.exports = {
env: {
browser: true,
es6: true,
node: true,
},
extends: [
"plugin:import/errors",
"plugin:import/warnings",
"plugin:import/typescript",
],
parser: "@typescript-eslint/parser",
parserOptions: {
project: "tsconfig.json",
sourceType: "module",
},
plugins: [
"@typescript-eslint",
"import",
],
rules: {
"@typescript-eslint/adjacent-overload-signatures": "error",
"@typescript-eslint/no-empty-function": "error",
"@typescript-eslint/no-empty-interface": "warn",
"@typescript-eslint/no-floating-promises": "error",
"@typescript-eslint/no-namespace": "error",
"@typescript-eslint/no-unnecessary-type-assertion": "error",
"@typescript-eslint/prefer-for-of": "warn",
"@typescript-eslint/triple-slash-reference": "error",
"@typescript-eslint/unified-signatures": "warn",
"comma-dangle": "warn",
"constructor-super": "error",
eqeqeq: ["warn", "always"],
"import/no-deprecated": "warn",
"import/no-extraneous-dependencies": "error",
"import/no-unassigned-import": "warn",
"no-cond-assign": "error",
"no-duplicate-case": "error",
"no-duplicate-imports": "error",
"no-empty": [
"error",
{
allowEmptyCatch: true,
},
],
"no-invalid-this": "error",
"no-new-wrappers": "error",
"no-param-reassign": "error",
"no-redeclare": "error",
"no-sequences": "error",
"no-shadow": [
"error",
{
hoist: "all",
},
],
"no-throw-literal": "error",
"no-unsafe-finally": "error",
"no-unused-labels": "error",
"no-var": "warn",
"no-void": "error",
"prefer-const": "warn",
},
settings: {
jsdoc: {
tagNamePreference: {
returns: "return",
},
},
},
};
I had tried restarting VScode, clearing the cache, and all to no avail. I am guessing I need to change some of the paths but I am not very good at changing the config files so I don't want to accidentally break the entire project.
Solution 1:
By default, the project
s (in parserOptions
) are resolved relative to the current working directory. If you run eslint
in a different working directory to the folder containing tsconfig.json
, @typescript-eslint/parser will not be able to locate the file.
To fix this, you can set tsconfigRootDir
to __dirname
, which would make the parser resolve the project configuration relative to .eslintrc.js
:
module.exports = {
// ...
parserOptions: {
project: "tsconfig.json",
tsconfigRootDir: __dirname,
sourceType: "module",
},
// ...
}
If you’re getting some trouble with
/path/to/.eslintrc.js
0:0 error Parsing error: "parserOptions.project" has been set for @typescript-eslint/parser.
The file does not match your project config: .eslintrc.js.
The file must be included in at least one of the projects provided
see this question.
Solution 2:
A VSCode-specific approach, that worked for me was to create a .vscode
folder in the root project directory and add the following property to the settings.json
file inside it:
{
"eslint.workingDirectories": [
"src"
]
}
The "src"
could be any directory, which should be in eslint's scope.
Solution 3:
Update your eslintrc.json file with the following line:
"project": "PROJECT_NAME/tsconfig.json"
with PROJECT_NAME being the name of your project (not a macro).
Solution 4:
For those using Angular and eslintrc.json, add the 2 stars to the project node like this:
"overrides": [
{
"files": ["*.ts"],
"parserOptions": {
"project": ["**/tsconfig.json"],
},
Solution 5:
Another approach is if you happened to open the Workspace folder one level above the Project (as was in my case), just start a new Workspace with the ACTUAL project folder. That solved my Eslint error.