Skip to content

Commit

Permalink
⭐️New: Add vue/no-empty-pattern rule
Browse files Browse the repository at this point in the history
  • Loading branch information
ota-meshi committed Feb 3, 2019
1 parent a8b2ca0 commit 33520ad
Show file tree
Hide file tree
Showing 5 changed files with 284 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/rules/README.md
Expand Up @@ -149,6 +149,7 @@ For example:
| [vue/eqeqeq](./eqeqeq.md) | require the use of `===` and `!==` | :wrench: |
| [vue/key-spacing](./key-spacing.md) | enforce consistent spacing between keys and values in object literal properties | :wrench: |
| [vue/match-component-file-name](./match-component-file-name.md) | require component name property to match its file name | |
| [vue/no-empty-pattern](./no-empty-pattern.md) | disallow empty destructuring patterns | |
| [vue/no-restricted-syntax](./no-restricted-syntax.md) | disallow specified syntax | |
| [vue/object-curly-spacing](./object-curly-spacing.md) | enforce consistent spacing inside braces | :wrench: |
| [vue/require-direct-export](./require-direct-export.md) | require the component to be directly exported | |
Expand Down
21 changes: 21 additions & 0 deletions docs/rules/no-empty-pattern.md
@@ -0,0 +1,21 @@
---
pageClass: rule-details
sidebarDepth: 0
title: vue/no-empty-pattern
description: disallow empty destructuring patterns
---
# vue/no-empty-pattern
> disallow empty destructuring patterns
This rule is the same rule as core [no-empty-pattern] rule but it applies to the expressions in `<template>`.

## :books: Further reading

- [no-empty-pattern]

[no-empty-pattern]: https://eslint.org/docs/rules/no-empty-pattern

## :mag: Implementation

- [Rule source](https://github.com/vuejs/eslint-plugin-vue/blob/master/lib/rules/no-empty-pattern.js)
- [Test source](https://github.com/vuejs/eslint-plugin-vue/blob/master/tests/lib/rules/no-empty-pattern.js)
1 change: 1 addition & 0 deletions lib/index.js
Expand Up @@ -35,6 +35,7 @@ module.exports = {
'no-confusing-v-for-v-if': require('./rules/no-confusing-v-for-v-if'),
'no-dupe-keys': require('./rules/no-dupe-keys'),
'no-duplicate-attributes': require('./rules/no-duplicate-attributes'),
'no-empty-pattern': require('./rules/no-empty-pattern'),
'no-multi-spaces': require('./rules/no-multi-spaces'),
'no-parsing-error': require('./rules/no-parsing-error'),
'no-reserved-keys': require('./rules/no-reserved-keys'),
Expand Down
9 changes: 9 additions & 0 deletions lib/rules/no-empty-pattern.js
@@ -0,0 +1,9 @@
/**
* @author Yosuke Ota
*/
'use strict'

const { wrapCoreRule } = require('../utils')

// eslint-disable-next-line
module.exports = wrapCoreRule(require('eslint/lib/rules/no-empty-pattern'))
252 changes: 252 additions & 0 deletions tests/lib/rules/no-empty-pattern.js
@@ -0,0 +1,252 @@
/**
* @author Yosuke Ota
*/
'use strict'

const RuleTester = require('eslint').RuleTester
const rule = require('../../../lib/rules/no-empty-pattern')

const tester = new RuleTester({
parser: 'vue-eslint-parser',
parserOptions: { ecmaVersion: 2018 }
})

tester.run('no-empty-pattern', rule, {
valid: [
`<template>
<div
@attr="() => {
var {a = {}} = foo;
var {a = []} = foo;
}"
/>
</template>`,
`<template>
<div
@attr="function foo({a = {}}) {}"
/>
</template>`,
`<template>
<div
@attr="function foo({a = []}) {}"
/>
</template>`,
`<template>
<div
@attr="({a = {}}) => a"
/>
</template>`,
`<template>
<div
@attr="({a = []}) => a"
/>
</template>`,
`<template>
<div
slot-scope="{a = []}"
/>
</template>`
],
invalid: [
{
code: `
<template>
<div
@attr="() => {
var {} = foo;
var [] = foo;
var {a: {}} = foo;
var {a: []} = foo;
}"
/>
</template>`,
errors: [
{
message: 'Unexpected empty object pattern.',
line: 5
},
{
message: 'Unexpected empty array pattern.',
line: 6
},
{
message: 'Unexpected empty object pattern.',
line: 7
},
{
message: 'Unexpected empty array pattern.',
line: 8
}
]
},
{
code: `
<template>
<div
@attr="function foo({}) {}"
/>
</template>`,
errors: [
{
message: 'Unexpected empty object pattern.',
line: 4
}
]
},
{
code: `
<template>
<div
@attr="function foo([]) {}"
/>
</template>`,
errors: [
{
message: 'Unexpected empty array pattern.',
line: 4
}
]
},
{
code: `
<template>
<div
@attr="function foo({a: {}}) {}"
/>
</template>`,
errors: [
{
message: 'Unexpected empty object pattern.',
line: 4
}
]
},
{
code: `
<template>
<div
@attr="function foo({a: []}) {}"
/>
</template>`,
errors: [
{
message: 'Unexpected empty array pattern.',
line: 4
}
]
},
{
code: `
<template>
<div
@attr="({}) => foo()"
/>
</template>`,
errors: [
{
message: 'Unexpected empty object pattern.',
line: 4
}
]
},
{
code: `
<template>
<div
@attr="([]) => foo()"
/>
</template>`,
errors: [
{
message: 'Unexpected empty array pattern.',
line: 4
}
]
},
{
code: `
<template>
<div
@attr="({a: {}}) => a"
/>
</template>`,
errors: [
{
message: 'Unexpected empty object pattern.',
line: 4
}
]
},
{
code: `
<template>
<div
@attr="({a: []}) => a"
/>
</template>`,
errors: [
{
message: 'Unexpected empty array pattern.',
line: 4
}
]
},
{
code: `
<template>
<div
slot-scope="{}"
/>
</template>`,
errors: [
{
message: 'Unexpected empty object pattern.',
line: 4
}
]
},
{
code: `
<template>
<div
slot-scope="[]"
/>
</template>`,
errors: [
{
message: 'Unexpected empty array pattern.',
line: 4
}
]
},
{
code: `
<template>
<div
slot-scope="{a: {}}"
/>
</template>`,
errors: [
{
message: 'Unexpected empty object pattern.',
line: 4
}
]
},
{
code: `
<template>
<div
slot-scope="{a: []}"
/>
</template>`,
errors: [
{
message: 'Unexpected empty array pattern.',
line: 4
}
]
}

]
})

0 comments on commit 33520ad

Please sign in to comment.