--- pageClass: rule-details sidebarDepth: 0 title: vue/attribute-hyphenation description: enforce attribute naming style on custom components in template since: v3.9.0 --- # vue/attribute-hyphenation > enforce attribute naming style on custom components in template - :gear: This rule is included in the following preset configs: - `*.configs["flat/strongly-recommended"]` - `*.configs["flat/vue2-strongly-recommended"]` - `*.configs["flat/recommended"]` - `*.configs["flat/vue2-recommended"]` - `"plugin:vue/strongly-recommended"` - `"plugin:vue/vue2-strongly-recommended"` - `"plugin:vue/recommended"` - `"plugin:vue/vue2-recommended"` - :wrench: The `--fix` option on the [command line](https://eslint.org/docs/user-guide/command-line-interface#fix-problems) can automatically fix some of the problems reported by this rule. ## :book: Rule Details This rule enforces using hyphenated attribute names on custom components in Vue templates. ```vue ``` ## :wrench: Options ```json { "vue/attribute-hyphenation": ["error", "always" | "never", { "ignore": [], "ignoreTags": [] }] } ``` Default casing is set to `always`. By default the following attributes are ignored: `data-`, `aria-`, `slot-scope`, and all the [SVG attributes](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute) with either an upper case letter or an hyphen. - `"always"` (default) ... Use hyphenated attribute name. - `"never"` ... Don't use hyphenated attribute name. - `"ignore"` ... Array of attribute names that don't need to follow the specified casing. - `"ignoreTags"` ... Array of tag names whose attributes don't need to follow the specified casing. ### `"always"` It errors on upper case letters. ```vue ``` ### `"never"` It errors on hyphens except on the attributes in the ignored attributes list. ```vue ``` ### `"never", { "ignore": ["custom-prop"] }` Don't use hyphenated name but allow custom attributes ```vue ``` ### `"never", { "ignoreTags": ["/^custom-/"] }` ```vue ``` ## :couple: Related Rules - [vue/v-on-event-hyphenation](./v-on-event-hyphenation.md) - [vue/prop-name-casing](./prop-name-casing.md) ## :rocket: Version This rule was introduced in eslint-plugin-vue v3.9.0 ## :mag: Implementation - [Rule source](https://github.com/vuejs/eslint-plugin-vue/blob/master/lib/rules/attribute-hyphenation.ts) - [Test source](https://github.com/vuejs/eslint-plugin-vue/blob/master/tests/lib/rules/attribute-hyphenation.test.ts)