Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit c9dea58

Browse filesBrowse files
committed
feat(require-toggle-inside-transition): add additionalDirectives option (#2535)
1 parent 0fbe35e commit c9dea58
Copy full SHA for c9dea58

File tree

3 files changed

+87
-3
lines changed
Filter options

3 files changed

+87
-3
lines changed

‎docs/rules/require-toggle-inside-transition.md

Copy file name to clipboardExpand all lines: docs/rules/require-toggle-inside-transition.md
+36-1Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,42 @@ This rule reports elements inside `<transition>` that do not control the display
3333

3434
## :wrench: Options
3535

36-
Nothing.
36+
```json
37+
{
38+
"vue/require-toggle-inside-transition": ["error", {
39+
"additionalDirectives": []
40+
}]
41+
}
42+
```
43+
44+
- `additionalDirectives` (`string[]`) ... Custom directives which will satisfy this rule in addition to `v-show` and `v-if`. Should be added without the `v-` prefix.
45+
46+
### `additionalDirectives: ["dialog"]`
47+
48+
<eslint-code-block :rules="{'vue/require-toggle-inside-transition': ['error', {additionalDirectives: ['dialog']}]}">
49+
50+
```vue
51+
<template>
52+
<!-- ✓ GOOD -->
53+
<transition><div v-if="show" /></transition>
54+
<transition><div v-show="show" /></transition>
55+
<transition><dialog v-dialog="show" /></transition>
56+
<template>
57+
```
58+
59+
</eslint-code-block>
60+
61+
<eslint-code-block :rules="{'vue/require-toggle-inside-transition': ['error', {additionalDirectives: ['dialog']}]}">
62+
63+
```vue
64+
<template>
65+
<!-- ✗ BAD -->
66+
<transition><div /></transition>
67+
<transition><div v-custom="show" /></transition>
68+
<template>
69+
```
70+
71+
</eslint-code-block>
3772

3873
## :books: Further Reading
3974

‎lib/rules/require-toggle-inside-transition.js

Copy file name to clipboardExpand all lines: lib/rules/require-toggle-inside-transition.js
+22-2Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,31 @@ module.exports = {
3030
url: 'https://eslint.vuejs.org/rules/require-toggle-inside-transition.html'
3131
},
3232
fixable: null,
33-
schema: [],
33+
schema: [
34+
{
35+
type: 'object',
36+
properties: {
37+
additionalDirectives: {
38+
type: 'array',
39+
items: {
40+
type: 'string'
41+
}
42+
}
43+
},
44+
additionalProperties: false
45+
}
46+
],
3447
messages: {
3548
expected:
3649
'The element inside `<transition>` is expected to have a `v-if` or `v-show` directive.'
3750
}
3851
},
3952
/** @param {RuleContext} context */
4053
create(context) {
54+
/** @type {Array<string>} */
55+
const additionalDirectives =
56+
(context.options[0] && context.options[0].additionalDirectives) || []
57+
4158
/**
4259
* Check if the given element has display control.
4360
* @param {VElement} element The element node to check.
@@ -61,7 +78,10 @@ module.exports = {
6178
element.name !== 'slot' &&
6279
!utils.hasDirective(element, 'if') &&
6380
!utils.hasDirective(element, 'show') &&
64-
!utils.hasDirective(element, 'bind', 'key')
81+
!utils.hasDirective(element, 'bind', 'key') &&
82+
!additionalDirectives.some((directive) =>
83+
utils.hasDirective(element, directive)
84+
)
6585
) {
6686
context.report({
6787
node: element.startTag,

‎tests/lib/rules/require-toggle-inside-transition.js

Copy file name to clipboardExpand all lines: tests/lib/rules/require-toggle-inside-transition.js
+29Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,15 @@ tester.run('require-toggle-inside-transition', rule, {
7777
{
7878
filename: 'test.vue',
7979
code: '<template><transition :appear="true"><div /></transition></template>'
80+
},
81+
{
82+
filename: 'test.vue',
83+
code: '<template><transition><dialog v-dialog="show" /></transition></template>',
84+
options: [
85+
{
86+
additionalDirectives: ['dialog']
87+
}
88+
]
8089
}
8190
],
8291
invalid: [
@@ -132,6 +141,26 @@ tester.run('require-toggle-inside-transition', rule, {
132141
filename: 'test.vue',
133142
code: '<template><transition @appear="isLoaded"><div /></transition></template>',
134143
errors: [{ messageId: 'expected' }]
144+
},
145+
{
146+
filename: 'test.vue',
147+
code: '<template><transition><dialog v-dialog="show" /></transition></template>',
148+
options: [
149+
{
150+
additionalDirectives: []
151+
}
152+
],
153+
errors: [{ messageId: 'expected' }]
154+
},
155+
{
156+
filename: 'test.vue',
157+
code: '<template><transition><div v-custom="show" /></transition></template>',
158+
options: [
159+
{
160+
additionalDirectives: ['dialog']
161+
}
162+
],
163+
errors: [{ messageId: 'expected' }]
135164
}
136165
]
137166
})

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.