You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I've been working on setting up Vue support for eslint in a repo where we use ES5, and the Vue plugin doesn't work well with eslint's ES5 mode.
Installing the Vue plugin silently overwrites certain settings: ecmaVersion is set to 2018, sourceType to module, and JSX is enabled. This caused us to accidentally disable enforcement of our "no ES6" rule for about a month until I found out.
I tried to remedy this by changing these settings back in our .eslintrc.json, but that causes strange errors and even crashes to happen when linting templates that use v-for.
<template>
<divclass="foo">
<pv-for="x in xs":key="x"
>
{{ x }}
</p>
</div>
</template>
Second file (v-for using parens to get both the value and the index):
<template>
<divclass="foo">
<pv-for="(x, index) in xs":key="index"
>
{{ x }}
</p>
</div>
</template>
What did you expect to happen?
Both of these files should lint without errors, even in ES5 mode (ecmaVersion: 5 in the eslint config).
What actually happened?
For the first file, I get confusing errors about the v-for line:
4:7 error 'v-for' directives require that attribute value vue/valid-v-for
4:14 error Parsing error: Unexpected token x vue/no-parsing-error
5:7 error Expected 'v-bind:key' directive to use the variables which are defined by the 'v-for' directive vue/valid-v-for
For the second file, I get an error message that exposes a JS error / crash in the plugin code, without reference to a line number:
0:0 error Parsing error: Cannot read property 'block' of undefined
Both of these errors only happen if ecmaVersion: 5 is set. If I set ecmaVersion: 6, the errors go away.
The text was updated successfully, but these errors were encountered:
As a workaround, I'm enabling the Vue plugin only for *.vue files, leaving the ecmaVersion setting unchanged, then using es/no-2015 to prohibit ES6 features (eslint config here). But it would be great if the Vue plugin didn't break with ecmaVersion: 5, so that I can use eslint's "real" ES5 mode instead.
I have debugged and checked this. This is a problem with vue-eslint-parser.
v-for="(x, index) in xs" directive are parsed by converting them to for(let [x, index] in xs); code, which is almost invalid syntax in ES5. Here, it analyzes the invalid AST and fails to analyze the variables.
I've been working on setting up Vue support for eslint in a repo where we use ES5, and the Vue plugin doesn't work well with eslint's ES5 mode.
Installing the Vue plugin silently overwrites certain settings:
ecmaVersion
is set to 2018,sourceType
tomodule
, and JSX is enabled. This caused us to accidentally disable enforcement of our "no ES6" rule for about a month until I found out.I tried to remedy this by changing these settings back in our
.eslintrc.json
, but that causes strange errors and even crashes to happen when linting templates that usev-for
.Tell us about your environment
Please show your full configuration:
What did you do?
First file (simple
v-for
):Second file (
v-for
using parens to get both the value and the index):What did you expect to happen?
Both of these files should lint without errors, even in ES5 mode (
ecmaVersion: 5
in the eslint config).What actually happened?
For the first file, I get confusing errors about the
v-for
line:For the second file, I get an error message that exposes a JS error / crash in the plugin code, without reference to a line number:
Both of these errors only happen if
ecmaVersion: 5
is set. If I setecmaVersion: 6
, the errors go away.The text was updated successfully, but these errors were encountered: