This reproducer demonstrates a bug that occurs when using eslint-plugin-vue combined with @typescript-eslint/parser versions 1.5.0 and later.
It appears to have been introduced by the following pull request typescript-eslint/typescript-eslint#367.
From what I can tell, it looks like the calculateProjectParserOptions function gets called multiple times for the same file when the eslint-vue-plugin is involved for different portions of the file. For example, if your SFC has an interpolation / mustache block in the template:
<template>
<div>{{ test }}</div>
</template>
<script>
<script lang="ts">
import {Component, Vue} from 'vue-property-decorator';
@Component({})
export default class SomeComponent extends Vue {
test = "World";
}
</script>then calculateProjectParserOptions winds up getting called twice on this file with the same filePath given, but the code provided contains first the contents of the interpolation from the template, and then a second time with contents from the script tag.
This seems to break the assumption made in typescript-eslint/typescript-eslint#367 which stated:
Here we cut down the number of times this happens by ensuring we only tell the TS API that a file has changed when we lint a file for a second time (thereby implying a --fix mode or "watch" mode).
yarn
yarn lint2:28 error Parsing error: Unexpected end of expression vue/no-parsing-error
✖ 1 problem (1 error, 0 warnings)
set "@typescript-eslint": "1.4.2" in package.json and use the same steps as above. Should provide no linter errors.