Skip to content

Change document style for new rules added & Fixed new rule test casesto work with eslint v6 #1012

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Dec 26, 2019
3 changes: 2 additions & 1 deletion docs/rules/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ For example:
| [vue/brace-style](./brace-style.md) | enforce consistent brace style for blocks | :wrench: |
| [vue/camelcase](./camelcase.md) | enforce camelcase naming convention | |
| [vue/comma-dangle](./comma-dangle.md) | require or disallow trailing commas | :wrench: |
| [vue/component-definition-name-casing](./component-definition-name-casing.md) | enforce specific casing for component definition name | :wrench: |
| [vue/component-name-in-template-casing](./component-name-in-template-casing.md) | enforce specific casing for the component naming style in template | :wrench: |
| [vue/component-tags-order](./component-tags-order.md) | enforce order of component top-level elements | |
| [vue/dot-location](./dot-location.md) | enforce consistent newlines before and after dots | :wrench: |
Expand All @@ -153,8 +154,8 @@ For example:
| [vue/keyword-spacing](./keyword-spacing.md) | enforce consistent spacing before and after keywords | :wrench: |
| [vue/match-component-file-name](./match-component-file-name.md) | require component name property to match its file name | |
| [vue/no-boolean-default](./no-boolean-default.md) | disallow boolean defaults | :wrench: |
| [vue/no-deprecated-slot-attribute](./no-deprecated-slot-attribute.md) | disallow deprecated `slot` attribute (in Vue.js 2.6.0+) | :wrench: |
| [vue/no-deprecated-scope-attribute](./no-deprecated-scope-attribute.md) | disallow deprecated `scope` attribute (in Vue.js 2.5.0+) | :wrench: |
| [vue/no-deprecated-slot-attribute](./no-deprecated-slot-attribute.md) | disallow deprecated `slot` attribute (in Vue.js 2.6.0+) | :wrench: |
| [vue/no-deprecated-slot-scope-attribute](./no-deprecated-slot-scope-attribute.md) | disallow deprecated `slot-scope` attribute (in Vue.js 2.6.0+) | :wrench: |
| [vue/no-empty-pattern](./no-empty-pattern.md) | disallow empty destructuring patterns | |
| [vue/no-reserved-component-names](./no-reserved-component-names.md) | disallow the use of reserved names in component definitions | |
Expand Down
107 changes: 92 additions & 15 deletions docs/rules/component-definition-name-casing.md
Original file line number Diff line number Diff line change
@@ -1,47 +1,124 @@
# enforce specific casing for component definition name (vue/component-definition-name-casing)
---
pageClass: rule-details
sidebarDepth: 0
title: vue/component-definition-name-casing
description: enforce specific casing for component definition name
---
# vue/component-definition-name-casing
> enforce specific casing for component definition name

- :wrench: The `--fix` option on the [command line](https://eslint.org/docs/user-guide/command-line-interface#fixing-problems) can automatically fix some of the problems reported by this rule.

## :book: Rule Details

Define a style for component definition name casing for consistency purposes.

## :book: Rule Details
## :wrench: Options

:+1: Examples of **correct** code for `PascalCase`:
Default casing is set to `PascalCase`.

```js
```json
{
"vue/component-definition-name-casing": ["error", "PascalCase" | "kebab-case"]
}
```

- `"PascalCase"` (default) ... enforce component definition names to pascal case.
- `"kebab-case"` ... enforce component definition names to kebab case.

### `"PascalCase" (default)

<eslint-code-block fix :rules="{'vue/component-definition-name-casing': ['error']}">

```vue
<script>
export default {
/* ✓ GOOD */
name: 'MyComponent'
}
</script>
```

</eslint-code-block>

<eslint-code-block fix :rules="{'vue/component-definition-name-casing': ['error']}">

```vue
<script>
export default {
/* ✗ BAD */
name: 'my-component'
}
</script>
```

</eslint-code-block>

<eslint-code-block fix language="javascript" filename="src/MyComponent.js" :rules="{'vue/component-definition-name-casing': ['error']}">

```js
/* ✓ GOOD */
Vue.component('MyComponent', {

})

/* ✗ BAD */
Vue.component('my-component', {

})
```

:+1: Examples of **correct** code for `kebab-case`:
</eslint-code-block>

```js
### `"kebab-case"

<eslint-code-block fix :rules="{'vue/component-definition-name-casing': ['error', 'kebab-case']}">

```vue
<script>
export default {
/* ✓ GOOD */
name: 'my-component'
}
</script>
```

</eslint-code-block>

<eslint-code-block fix :rules="{'vue/component-definition-name-casing': ['error', 'kebab-case']}">

```vue
<script>
export default {
/* ✗ BAD */
name: 'MyComponent'
}
</script>
```

</eslint-code-block>

<eslint-code-block fix language="javascript" filename="src/MyComponent.js" :rules="{'vue/component-definition-name-casing': ['error', 'kebab-case']}">

```js
/* ✓ GOOD */
Vue.component('my-component', {

})

/* ✗ BAD */
Vue.component('MyComponent', {

})
```

## :wrench: Options
</eslint-code-block>

Default casing is set to `PascalCase`.
## :books: Further reading

```json
{
"vue/component-definition-name-casing": ["error", "PascalCase|kebab-case"]
}
```
- [Style guide - Component name casing in JS/JSX](https://vuejs.org/v2/style-guide/#Component-name-casing-in-JS-JSX-strongly-recommended)

## Related links
## :mag: Implementation

- [Style guide - Component name casing in JS/JSX](https://vuejs.org/v2/style-guide/#Component-name-casing-in-JS-JSX-strongly-recommended)
- [Rule source](https://github.com/vuejs/eslint-plugin-vue/blob/master/lib/rules/component-definition-name-casing.js)
- [Test source](https://github.com/vuejs/eslint-plugin-vue/blob/master/tests/lib/rules/component-definition-name-casing.js)
1 change: 0 additions & 1 deletion docs/rules/name-property-casing.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ description: enforce specific casing for the name property in Vue components

- :gear: This rule is included in `"plugin:vue/strongly-recommended"` and `"plugin:vue/recommended"`.
- :wrench: The `--fix` option on the [command line](https://eslint.org/docs/user-guide/command-line-interface#fixing-problems) can automatically fix some of the problems reported by this rule.
- :warning: This rule was **deprecated** and replaced by [vue/component-definition-name-casing](component-definition-name-casing.md) rule.

## :book: Rule Details

Expand Down
4 changes: 4 additions & 0 deletions docs/rules/no-reserved-component-names.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ export default {

</eslint-code-block>

## :wrench: Options

Nothing.

## :books: Further reading

- [List of html elements](https://developer.mozilla.org/en-US/docs/Web/HTML/Element)
Expand Down
3 changes: 2 additions & 1 deletion lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ module.exports = {
'camelcase': require('./rules/camelcase'),
'comma-dangle': require('./rules/comma-dangle'),
'comment-directive': require('./rules/comment-directive'),
'component-definition-name-casing': require('./rules/component-definition-name-casing'),
'component-name-in-template-casing': require('./rules/component-name-in-template-casing'),
'component-tags-order': require('./rules/component-tags-order'),
'dot-location': require('./rules/dot-location'),
Expand All @@ -37,8 +38,8 @@ module.exports = {
'no-async-in-computed-properties': require('./rules/no-async-in-computed-properties'),
'no-boolean-default': require('./rules/no-boolean-default'),
'no-confusing-v-for-v-if': require('./rules/no-confusing-v-for-v-if'),
'no-deprecated-slot-attribute': require('./rules/no-deprecated-slot-attribute'),
'no-deprecated-scope-attribute': require('./rules/no-deprecated-scope-attribute'),
'no-deprecated-slot-attribute': require('./rules/no-deprecated-slot-attribute'),
'no-deprecated-slot-scope-attribute': require('./rules/no-deprecated-slot-scope-attribute'),
'no-dupe-keys': require('./rules/no-dupe-keys'),
'no-duplicate-attributes': require('./rules/no-duplicate-attributes'),
Expand Down
4 changes: 3 additions & 1 deletion lib/rules/component-definition-name-casing.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ module.exports = {
docs: {
description: 'enforce specific casing for component definition name',
category: undefined,
url: 'https://github.com/vuejs/eslint-plugin-vue/blob/v5.0.0-beta.5/docs/rules/component-definition-name-casing.md'
// TODO Change with major version.
// category: 'strongly-recommended',
url: 'https://eslint.vuejs.org/rules/component-definition-name-casing.html'
},
fixable: 'code', // or "code" or "whitespace"
schema: [
Expand Down
2 changes: 2 additions & 0 deletions lib/rules/component-tags-order.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ module.exports = {
docs: {
description: 'enforce order of component top-level elements',
category: undefined,
// TODO Change with major version.
// category: 'recommended',
url: 'https://eslint.vuejs.org/rules/component-tags-order.html'
},
fixable: null,
Expand Down
4 changes: 2 additions & 2 deletions lib/rules/name-property-casing.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ module.exports = {
category: 'strongly-recommended',
url: 'https://eslint.vuejs.org/rules/name-property-casing.html'
},
deprecated: true,
replacedBy: ['component-definition-name-casing'],
// deprecated: true, // TODO Change with major version.
// replacedBy: ['component-definition-name-casing'], // TODO Change with major version.
fixable: 'code', // or "code" or "whitespace"
schema: [
{
Expand Down
2 changes: 2 additions & 0 deletions lib/rules/v-slot-style.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@ module.exports = {
docs: {
description: 'enforce `v-slot` directive style',
category: undefined, // strongly-recommended
// TODO Change with major version.
// category: 'strongly-recommended',
url: 'https://eslint.vuejs.org/rules/v-slot-style.html'
},
fixable: 'code',
Expand Down
2 changes: 2 additions & 0 deletions lib/rules/valid-v-bind-sync.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ module.exports = {
docs: {
description: 'enforce valid `.sync` modifier on `v-bind` directives',
category: undefined,
// TODO Change with major version.
// category: 'essential',
url: 'https://eslint.vuejs.org/rules/valid-v-bind-sync.html'
},
fixable: null,
Expand Down
2 changes: 2 additions & 0 deletions lib/rules/valid-v-slot.js
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@ module.exports = {
docs: {
description: 'enforce valid `v-slot` directives',
category: undefined, // essential
// TODO Change with major version.
// category: 'essential',
url: 'https://eslint.vuejs.org/rules/valid-v-slot.html'
},
fixable: null,
Expand Down
2 changes: 1 addition & 1 deletion tests/lib/rules/component-definition-name-casing.js
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,7 @@ ruleTester.run('component-definition-name-casing', rule, {
code: `(Vue as VueConstructor<Vue>).component('foo-bar', component)`,
output: `(Vue as VueConstructor<Vue>).component('FooBar', component)`,
parserOptions,
parser: 'typescript-eslint-parser',
parser: require.resolve('@typescript-eslint/parser'),
errors: [{
message: 'Property name "foo-bar" is not PascalCase.',
type: 'Literal',
Expand Down
2 changes: 1 addition & 1 deletion tests/lib/rules/no-deprecated-slot-attribute.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const RuleTester = require('eslint').RuleTester
const rule = require('../../../lib/rules/no-deprecated-slot-attribute.js')

const tester = new RuleTester({
parser: 'vue-eslint-parser',
parser: require.resolve('vue-eslint-parser'),
parserOptions: {
ecmaVersion: 2015
}
Expand Down
2 changes: 1 addition & 1 deletion tests/lib/rules/no-deprecated-slot-scope-attribute.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const RuleTester = require('eslint').RuleTester
const rule = require('../../../lib/rules/no-deprecated-slot-scope-attribute')

const tester = new RuleTester({
parser: 'vue-eslint-parser',
parser: require.resolve('vue-eslint-parser'),
parserOptions: {
ecmaVersion: 2015
}
Expand Down
2 changes: 1 addition & 1 deletion tests/lib/rules/no-static-inline-styles.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ const RuleTester = require('eslint').RuleTester
const rule = require('../../../lib/rules/no-static-inline-styles')

const tester = new RuleTester({
parser: 'vue-eslint-parser',
parser: require.resolve('vue-eslint-parser'),
parserOptions: {
ecmaVersion: 2019
}
Expand Down
2 changes: 1 addition & 1 deletion tests/lib/rules/no-unsupported-features.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const RuleTester = require('eslint').RuleTester
const rule = require('../../../lib/rules/no-unsupported-features')

const tester = new RuleTester({
parser: 'vue-eslint-parser',
parser: require.resolve('vue-eslint-parser'),
parserOptions: {
ecmaVersion: 2019
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ const utils = require('./utils')

const buildOptions = utils.optionsBuilder('dynamic-directive-arguments', '^2.5.0')
const tester = new RuleTester({
parser: 'vue-eslint-parser',
parser: require.resolve('vue-eslint-parser'),
parserOptions: {
ecmaVersion: 2019
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ const utils = require('./utils')

const buildOptions = utils.optionsBuilder('slot-scope-attribute', '^2.4.0')
const tester = new RuleTester({
parser: 'vue-eslint-parser',
parser: require.resolve('vue-eslint-parser'),
parserOptions: {
ecmaVersion: 2019
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ const utils = require('./utils')

const buildOptions = utils.optionsBuilder('v-bind-prop-modifier-shorthand', '^2.6.0')
const tester = new RuleTester({
parser: 'vue-eslint-parser',
parser: require.resolve('vue-eslint-parser'),
parserOptions: {
ecmaVersion: 2019
}
Expand Down
2 changes: 1 addition & 1 deletion tests/lib/rules/no-unsupported-features/v-slot.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ const utils = require('./utils')

const buildOptions = utils.optionsBuilder('v-slot', '^2.5.0')
const tester = new RuleTester({
parser: 'vue-eslint-parser',
parser: require.resolve('vue-eslint-parser'),
parserOptions: {
ecmaVersion: 2019
}
Expand Down
2 changes: 1 addition & 1 deletion tests/lib/rules/valid-v-bind-sync.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ const rule = require('../../../lib/rules/valid-v-bind-sync')
// ------------------------------------------------------------------------------

const tester = new RuleTester({
parser: 'vue-eslint-parser',
parser: require.resolve('vue-eslint-parser'),
parserOptions: { ecmaVersion: 2015 }
})

Expand Down