Description
Before You File a Bug Report Please Confirm You Have Done The Following...
- I'm using eslint-plugin-vue.
- 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.
- I have tried restarting my IDE and the issue persists.
- 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?
- vue-eslint-parser@9.4.2
- eslint-plugin-vue@9.24.1
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"
]
}
]
}
};
<template lang="pug">
.hello-world
span {{ "Hello world" }}
</template>
<script setup>
// NPM
import { definePageMeta, useHead } from "#imports";
import { useI18n } from "vue-i18n";
definePageMeta({
layout: "showcase"
});
useHead({
title: "Hello World"
});
</script>
<script>
export default {
methods: {
// --> EVENT LISTENERS <--
/**
* Some function
* @public
* @return {undefined}
*/
someFunction() {
console.log("test");
}
}
};
</script>
What did you expect to happen?
I have two rules:
- a custom rule
eliottvincent/import-group-comment
: it ensuresimport
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.
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.