Skip to content
The ESLint custom parser for `.vue` files.
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
.vscode ⬆️ update dependencies Feb 5, 2019
docs 📝 fix comment of AST example (#42) Mar 5, 2019
scripts Breaking: change AST of 'scope' and support 'slot-scope' Jul 2, 2018
src 📝 fix ast traverse function comment (#43) Mar 11, 2019
.gitattributes Fix: In eslint 4.4.0 name of eslint property in context has changed t… Aug 7, 2017


npm version Downloads/month Build Status Coverage Status Dependency Status

The ESLint custom parser for .vue files.

⤴️ Motivation

This parser allows us to lint the <template> of .vue files. We can make mistakes easily on <template> if we use complex directives and expressions in the template. This parser and the rules of eslint-plugin-vue would catch some of the mistakes.

💿 Installation

$ npm install --save-dev eslint vue-eslint-parser
  • Requires Node.js 6.5.0 or later.
  • Requires ESLint 5.0.0 or later.
  • Requires babel-eslint 8.1.1 or later if you want it. (optional)
  • Requires @typescript-eslint/parser 1.0.0 or later if you want it. (optional)

📖 Usage

  1. Write parser option into your .eslintrc.* file.
  2. Use glob patterns or --ext .vue CLI option.
    "extends": "eslint:recommended",
    "parser": "vue-eslint-parser"
$ eslint "src/**/*.{js,vue}"
# or
$ eslint src --ext .vue

🔧 Options

parserOptions has the same properties as what espree, the default parser of ESLint, is supporting. For example:

    "parser": "vue-eslint-parser",
    "parserOptions": {
        "sourceType": "module",
        "ecmaVersion": 2018,
        "ecmaFeatures": {
            "globalReturn": false,
            "impliedStrict": false,
            "jsx": false


You can use parserOptions.parser property to specify a custom parser to parse <script> tags. Other properties than parser would be given to the specified parser. For example:

    "parser": "vue-eslint-parser",
    "parserOptions": {
        "parser": "babel-eslint",
        "sourceType": "module",
        "allowImportExportEverywhere": false
    "parser": "vue-eslint-parser",
    "parserOptions": {
        "parser": "@typescript-eslint/parser"

If the parserOptions.parser is false, the vue-eslint-parser skips parsing <script> tags completely. This is useful for people who use the language ESLint community doesn't provide custom parser implementation.

🎇 Usage for custom rules / plugins

  • This parser provides parserServices to traverse <template>.
    • defineTemplateBodyVisitor(templateVisitor, scriptVisitor) ... returns ESLint visitor to traverse <template>.
    • getTemplateBodyTokenStore() ... returns ESLint TokenStore to get the tokens of <template>.
  • is <template> AST specification.
  • mustache-interpolation-spacing.js is an example.

⚠️ Known Limitations

Some rules make warnings due to the outside of <script> tags. Please disable those rules for .vue files as necessary.

📰 Changelog

🍻 Contributing

Welcome contributing!

Please use GitHub's Issues/PRs.

If you want to write code, please execute npm install && npm run setup after you cloned this repository. The npm install command installs dependencies. The npm run setup command initializes ESLint as git submodules for tests.

Development Tools

  • npm test runs tests and measures coverage.
  • npm run build compiles TypeScript source code to index.js,, and index.d.ts.
  • npm run coverage shows the coverage result of npm test command with the default browser.
  • npm run clean removes the temporary files which are created by npm test and npm run build.
  • npm run lint runs ESLint.
  • npm run setup setups submodules to develop.
  • npm run update-fixtures updates files in test/fixtures/ast directory based on test/fixtures/ast/*/source.vue files.
  • npm run watch runs build, update-fixtures, and tests with --watch option.
You can’t perform that action at this time.