-
-
Couldn't load subscription status.
- Fork 206
Description
What version of eslint are you using? 7.21.0
What version of prettier are you using? 2.2.1
What version of eslint-plugin-prettier are you using? 3.3.1
{
"script": {
"test": "eslint README.md"
},
"devDependencies": {
"eslint": "^7.21.0",
"eslint-config-prettier": "^8.1.0",
"eslint-plugin-markdown": "^2.0.0",
"eslint-plugin-prettier": "^3.3.1",
"prettier": "^2.2.1"
}
}Please paste any applicable config files that you're using (e.g. .prettierrc or .eslintrc files)
No .prettierrc.
// .eslintrc.js
module.exports = {
root: true,
extends: ['plugin:prettier/recommended', 'plugin:markdown/recommended'],
};What source code are you linting?
# README.md
```js
var x = 123;
```What did you expect to happen?
npm test should run without throwing an exception.
What actually happened?
$ npm test
Oops! Something went wrong! :(
ESLint: 7.21.0
Error: ENOTDIR: not a directory, stat '.../README.md/0_0.js'
Occurred while linting .../README.md/0_0.js:1
at Object.statSync (node:fs:1128:3)
at isTypeSync (.../node_modules/prettier/third-party.js:9748:46)
at getDirectorySync (.../node_modules/prettier/third-party.js:9802:62)
at ExplorerSync.searchSync (.../node_modules/prettier/third-party.js:9950:66)
at _resolveConfig (.../node_modules/prettier/index.js:25592:50)
at Function.resolveConfig.sync (.../node_modules/prettier/index.js:25621:42)
at Program (.../node_modules/eslint-plugin-prettier/eslint-plugin-prettier.js:167:40)
at .../node_modules/eslint/lib/linter/safe-emitter.js:45:58
at Array.forEach (<anonymous>)
at Object.emit (.../node_modules/eslint/lib/linter/safe-emitter.js:45:38)
Credit to eslint/markdown#174 for originally reporting this. My examples are based on that issue.
eslint-plugin-markdown v2 switched to use the new processor API that was released as part of ESLint v6. Instead of returning each extracted code block as a string, processors can now return both the source code text and a filename. In the example code above, the code block's returned filename would be 0.js, with the extension coming from the code block's syntax tag.
The new processor API uses the code block's filename to construct a virtual filename as parentFilename + path.sep + index + filenameFromPreprocess. In the example above, the code block's virtual filename becomes README.md/0_0.js.
Based on the stack trace and a bit of stepping in a debugger, it looks like the exception is thrown when the rule tries to load the .prettierrc for the file. If I set usePrettierrc: false, a very similar exception is thrown in a call a few lines later.
This exception would occur with any processor that uses the new processor API and yields virtual filenames.
Depending on what it might take to handle code blocks with virtual filenames, eslint/eslint#11989 may be a related issue.