[X] I'm sure the problem is a parser problem. (If you are not sure, search for the issue in eslint-plugin-vue repo and open the issue in eslint-plugin-vue repo if there is no solution.
[X] I have tried restarting my IDE and the issue persists.
[X] I have updated to the latest version of the packages.
What version of ESLint are you using?
8.45.0
What version of eslint-plugin-vue and vue-eslint-parser are you using?
a custom rule eliottvincent/import-group-comment: it ensures import statements are preceded by a comment stating their type
a rule from the official plugin jsdoc/require-jsdoc: it enforces JSDoc comments on functions and classes
I expect both these rules to work in Vue SFC files.
What actually happened?
When a Vue SFC file contains two script tags, one with setup keyword (to make use of Vue Composition API) and a regular one, both of these rules will fail (check the file res/example/not_ok.vue in the repro example).
When a Vue SFC file contains only one script tag, these rules work fine (check the file res/example/ok_1.vue in the repro example).
When a Vue SFC file contains two regular script tags (no setup keyword), these rules work fine as well (check the file res/example/ok_2.vue in the repro example).
This is the raw output:
/vue-eslint-parser-script-repro/res/example/not_ok.vue
8:1 error Import "#imports" should be in the "NPM" group eliottvincent/import-group-comment
9:1 error Import "vue-i18n" should be in the "NPM" group eliottvincent/import-group-comment
30:5 error Missing JSDoc comment jsdoc/require-jsdoc
✖ 3 problems (3 errors, 0 warnings)
1 error and 0 warnings potentially fixable with the `--fix` option.
Before You File a Bug Report Please Confirm You Have Done The Following...
What version of ESLint are you using?
8.45.0
What version of
eslint-plugin-vue
andvue-eslint-parser
are you using?What did you do?
Configuration
``` module.exports = { root: true, env: { browser: true, es6: true, node: true }, parser: "vue-eslint-parser", parserOptions: { sourceType: "module" }, extends: [ "plugin:vue/vue3-recommended" ], plugins: [ "eslint-plugin-jsdoc", "eliottvincent" ], rules: { "eliottvincent/import-group-comment": "error", "jsdoc/require-jsdoc": [ "error", { "contexts": [ "Property[key.name=\"methods\"] > ObjectExpression > Property" ] } ] } }; ```What did you expect to happen?
I have two rules:
eliottvincent/import-group-comment
: it ensuresimport
statements are preceded by a comment stating their typejsdoc/require-jsdoc
: it enforces JSDoc comments on functions and classesI expect both these rules to work in Vue SFC files.
What actually happened?
When a Vue SFC file contains two
script
tags, one withsetup
keyword (to make use of Vue Composition API) and a regular one, both of these rules will fail (check the fileres/example/not_ok.vue
in the repro example).When a Vue SFC file contains only one
script
tag, these rules work fine (check the fileres/example/ok_1.vue
in the repro example).When a Vue SFC file contains two regular
script
tags (nosetup
keyword), these rules work fine as well (check the fileres/example/ok_2.vue
in the repro example).This is the raw output:
Link to Minimal Reproducible Example
https://github.com/eliottvincent/vue-eslint-parser-script-repro
Additional comments
I suspect the culprit is the
getCommentsBefore
method which returns an empty array when both rule fails.