vuejs / vue-eslint-parser

The ESLint custom parser for `.vue` files.
MIT License
435 stars 74 forks source link

Syntax error when generic type parameter contains `=` #233

Closed auvred closed 1 month ago

auvred commented 1 month ago

Before You File a Bug Report Please Confirm You Have Done The Following...

What version of ESLint are you using?

n/a

What version of eslint-plugin-vue and vue-eslint-parser are you using?

What did you do?

<!-- app.vue -->
<script lang="ts" setup generic="T extends () => string">
</script>
// index.js
const { parse } = require('vue-eslint-parser')
parse(require('fs').readFileSync('./app.vue', 'utf-8'), { parser: require('@typescript-eslint/parser') })

What did you expect to happen?

Parse the Vue SFC with no errors.

What actually happened?

/.../node_modules/vue-eslint-parser/index.js:894
            throw perr;
            ^

SyntaxError: '=>' expected.
    at ParseError.normalize (/.../node_modules/vue-eslint-parser/index.js:98:20)
    at parseScriptFragmentWithOption (/.../node_modules/vue-eslint-parser/index.js:891:33)
    at parseScriptFragment (/.../node_modules/vue-eslint-parser/index.js:880:12)
    at parseScriptElement (/.../node_modules/vue-eslint-parser/index.js:1171:20)
    at parseAsSFC (/.../node_modules/vue-eslint-parser/index.js:6438:18)
    at parseForESLint (/.../node_modules/vue-eslint-parser/index.js:6398:53)
    at Object.parse (/.../node_modules/vue-eslint-parser/index.js:6406:12)
    at [eval]:1:30
    at runScriptInThisContext (node:internal/vm:209:10)
    at node:internal/process/execution:109:14 {
  code: undefined,
  index: 55,
  lineNumber: 1,
  column: 55
}

Link to Minimal Reproducible Example

mkdir repro
cd repro
echo '{"dependencies":{"@typescript-eslint/parser":"^7.8.0","vue-eslint-parser":"9.4.2"}}' > package.json
npm i
node -p "require('vue-eslint-parser').parse('<script lang=\"ts\" setup generic=\"T extends () => string\">\n</script>', {parser: require('@typescript-eslint/parser')})"

Additional comments

This issue seems to have appeared after https://github.com/vuejs/vue-eslint-parser/issues/221 -> https://github.com/vuejs/vue-eslint-parser/issues/222