{"id":633657,"url":"https://vuejs.github.io/eslint-plugin-vue","last_synced_at":"2025-08-20T09:32:03.416Z","repository":{"id":37940907,"uuid":"66855798","full_name":"vuejs/eslint-plugin-vue","owner":"vuejs","description":"Official ESLint plugin for Vue.js","archived":false,"fork":false,"pushed_at":"2024-10-28T10:24:14.000Z","size":5127,"stargazers_count":4462,"open_issues_count":192,"forks_count":666,"subscribers_count":55,"default_branch":"master","last_synced_at":"2024-10-29T21:09:31.160Z","etag":null,"topics":["eslint","eslint-plugin","hacktoberfest","html","javascript","npm","npm-module","npm-package","static-analysis","vue"],"latest_commit_sha":null,"homepage":"https://eslint.vuejs.org/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vuejs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["ota-meshi","FloEdelmann"]}},"created_at":"2016-08-29T15:26:53.000Z","updated_at":"2024-10-29T19:31:13.000Z","dependencies_parsed_at":"2023-02-09T15:16:22.719Z","dependency_job_id":"cee4381b-2f1b-483e-92e2-faaacbf94857","html_url":"https://github.com/vuejs/eslint-plugin-vue","commit_stats":{"total_commits":1231,"total_committers":222,"mean_commits":5.545045045045045,"dds":0.5467099918765231,"last_synced_commit":"2dc606ca589ff5cdcd197c3c64ace7e575a6347d"},"previous_names":[],"tags_count":169,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vuejs%2Feslint-plugin-vue","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vuejs%2Feslint-plugin-vue/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vuejs%2Feslint-plugin-vue/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vuejs%2Feslint-plugin-vue/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vuejs","download_url":"https://codeload.github.com/vuejs/eslint-plugin-vue/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229634365,"owners_count":18101986,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["eslint","eslint-plugin","hacktoberfest","html","javascript","npm","npm-module","npm-package","static-analysis","vue"],"created_at":"2024-01-10T17:06:34.985Z","updated_at":"2025-08-20T09:32:03.406Z","avatar_url":"https://github.com/vuejs.png","language":"JavaScript","funding_links":["https://github.com/sponsors/ota-meshi","https://github.com/sponsors/FloEdelmann"],"categories":["书签"],"sub_categories":["Vue"],"readme":"# eslint-plugin-vue\n\n[![NPM version](https://img.shields.io/npm/v/eslint-plugin-vue.svg?style=flat)](https://npmjs.org/package/eslint-plugin-vue)\n[![NPM downloads](https://img.shields.io/npm/dm/eslint-plugin-vue.svg?style=flat)](https://npmjs.org/package/eslint-plugin-vue)\n[![CI](https://img.shields.io/github/actions/workflow/status/vuejs/eslint-plugin-vue/CI.yml?style=flat\u0026label=CI)](https://github.com/vuejs/eslint-plugin-vue/actions/workflows/CI.yml)\n[![License](https://img.shields.io/github/license/vuejs/eslint-plugin-vue.svg?style=flat)](https://github.com/vuejs/eslint-plugin-vue/blob/master/LICENSE)\n\n\u003e Official ESLint plugin for Vue.js\n\n## :book: Documentation\n\nPlease refer to the [official website](https://eslint.vuejs.org).\n\n## :anchor: Versioning Policy\n\nThis plugin follows [Semantic Versioning].\nHowever, please note that we do not follow [ESLint's Semantic Versioning Policy].\nIn minor version releases, this plugin may change the sharable configs provided by the plugin or the default behavior of the plugin's rules in order to add features to the plugin. Because we want to add many features to the plugin soon, so that users can easily take advantage of new features in Vue and Nuxt.\n\nAccording to our policy, any minor update may report more linting errors than the previous release. As such, we recommend using the [tilde (`~`)](https://semver.npmjs.com/#syntax-examples) in `package.json` to guarantee the results of your builds.\n\n[Semantic Versioning]: https://semver.org/\n[ESLint's Semantic Versioning Policy]: https://github.com/eslint/eslint#semantic-versioning-policy\n\n## :newspaper: Releases\n\nThis project uses [GitHub Releases](https://github.com/vuejs/eslint-plugin-vue/releases).\n\n## :beers: Contribution Guide\n\nContributing is welcome! See the [ESLint Vue Plugin Developer Guide](https://eslint.vuejs.org/developer-guide).\n\n### Working With Rules\n\nBe sure to read the [official ESLint guide](https://eslint.org/docs/developer-guide/working-with-rules) before you start writing a new rule.\n\nTo see what an abstract syntax tree (AST) of your code looks like, you may use [AST Explorer](https://astexplorer.net). After opening [AST Explorer](https://astexplorer.net), select `Vue` as the syntax and [`vue-eslint-parser`](https://github.com/vuejs/vue-eslint-parser) as the parser.\n\nThe default JavaScript parser must be replaced because [Vue.js single file components](https://vuejs.org/guide/scaling-up/sfc.html) are not plain JavaScript, but a custom file format. [`vue-eslint-parser`](https://github.com/vuejs/vue-eslint-parser) is a replacement parser that generates an enhanced AST with nodes that represent specific parts of the template syntax, as well as the contents of the `\u003cscript\u003e` tag.\n\nTo learn more about certain nodes in a produced AST, see the [ESTree project page](https://github.com/estree/estree) and the [vue-eslint-parser AST documentation](https://github.com/vuejs/vue-eslint-parser/blob/master/docs/ast.md).\n\n[`vue-eslint-parser`](https://github.com/vuejs/vue-eslint-parser) provides a few useful parser services to help traverse the produced AST and access template tokens:\n\n- `context.parserServices.defineTemplateBodyVisitor(visitor, scriptVisitor)`\n- `context.parserServices.getTemplateBodyTokenStore()`\n\nCheck out an [example rule](https://github.com/vuejs/eslint-plugin-vue/blob/master/lib/rules/mustache-interpolation-spacing.js) to see usage of these services.\n\nBe aware that depending on the code samples you write in tests, the `RuleTester` parser property must be set accordingly (this can be done on a test by test basis). See an [example here](https://github.com/vuejs/eslint-plugin-vue/blob/master/tests/lib/rules/attribute-hyphenation.js#L19).\n\nIf you're stuck, remember there are many rules available for reference. If you can't find the right solution, don't hesitate to reach out in [issues](https://github.com/vuejs/eslint-plugin-vue/issues) – we're happy to help!\n\n## :lock: License\n\nSee the [LICENSE](LICENSE) file for license rights and limitations (MIT).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/vuejs.github.io%2Feslint-plugin-vue","html_url":"https://awesome.ecosyste.ms/projects/vuejs.github.io%2Feslint-plugin-vue","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/vuejs.github.io%2Feslint-plugin-vue/lists"}