File tree 4 files changed +173
-1
lines changed
4 files changed +173
-1
lines changed Original file line number Diff line number Diff line change
1
+ # enforce that each component should be in its own file
2
+
3
+ ## :book : Rule Details
4
+
5
+ This rule checks if there is oly one component per file.
6
+
7
+ :-1 : Examples of ** incorrect** code for this rule:
8
+
9
+ ``` js
10
+ Vue .component (' TodoList' , {
11
+ // ...
12
+ })
13
+
14
+ Vue .component (' TodoItem' , {
15
+ // ...
16
+ })
17
+ ```
18
+
19
+ :+1 : Examples of ** correct** code for this rule:
20
+
21
+ ``` js
22
+ export default {
23
+ name: ' my-component'
24
+ }
25
+ ```
26
+
27
+ ## :wrench : Options
28
+
29
+ Nothing.
30
+
31
+ ## :books : Further reading
32
+
33
+ - [ Style guide - Component files] ( https://vuejs.org/v2/style-guide/#Component-files-strongly-recommended )
Original file line number Diff line number Diff line change 6
6
const utils = require ( '../utils' )
7
7
8
8
// ------------------------------------------------------------------------------
9
- // Rule Definitionutilu
9
+ // Rule Definition
10
10
// ------------------------------------------------------------------------------
11
11
12
12
module . exports = {
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @fileoverview enforce that each component should be in its own file
3
+ * @author Armano
4
+ */
5
+ 'use strict'
6
+ const utils = require ( '../utils' )
7
+
8
+ // ------------------------------------------------------------------------------
9
+ // Rule Definition
10
+ // ------------------------------------------------------------------------------
11
+
12
+ module . exports = {
13
+ meta : {
14
+ type : 'suggestion' ,
15
+ docs : {
16
+ description : 'enforce that each component should be in its own file' ,
17
+ category : undefined , // strongly-recommended
18
+ url : 'https://github.com/vuejs/eslint-plugin-vue/blob/v5.0.0-beta.5/docs/rules/one-component-per-file.md'
19
+ } ,
20
+ fixable : null ,
21
+ schema : [ ] ,
22
+ messages : {
23
+ toManyComponents : 'There is more than one component in this file.'
24
+ }
25
+ } ,
26
+ create ( context ) {
27
+ let componentCount = 0
28
+
29
+ return Object . assign ( { } ,
30
+ utils . executeOnVueComponent ( context , ( ) => {
31
+ ++ componentCount
32
+ } ) ,
33
+ {
34
+ 'Program:exit' ( node ) {
35
+ if ( componentCount > 1 ) {
36
+ context . report ( {
37
+ node : node ,
38
+ messageId : 'toManyComponents'
39
+ } )
40
+ }
41
+ }
42
+ }
43
+ )
44
+ }
45
+ }
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @fileoverview enforce that each component should be in its own file
3
+ * @author Armano
4
+ */
5
+ 'use strict'
6
+
7
+ // ------------------------------------------------------------------------------
8
+ // Requirements
9
+ // ------------------------------------------------------------------------------
10
+
11
+ const rule = require ( '../../../lib/rules/one-component-per-file' )
12
+ const RuleTester = require ( 'eslint' ) . RuleTester
13
+
14
+ const ruleTester = new RuleTester ( {
15
+ parserOptions : {
16
+ ecmaVersion : 2018 ,
17
+ sourceType : 'module'
18
+ }
19
+ } )
20
+
21
+ ruleTester . run ( 'one-component-per-file' , rule , {
22
+ valid : [
23
+ {
24
+ filename : 'test.js' ,
25
+ code : `Vue.component('name', {})`
26
+ } ,
27
+ {
28
+ filename : 'test.js' ,
29
+ code : `
30
+ Vue.component('name', {})
31
+ new Vue({})
32
+ `
33
+ } ,
34
+ {
35
+ filename : 'test.js' ,
36
+ code : `
37
+ const foo = {}
38
+ new Vue({})
39
+ `
40
+ } ,
41
+ {
42
+ filename : 'test.vue' ,
43
+ code : `export default {}`
44
+ } ,
45
+ {
46
+ filename : 'test.vue' ,
47
+ code : `export default {
48
+ components: {
49
+ test: {
50
+ name: 'foo'
51
+ }
52
+ }
53
+ }`
54
+ }
55
+ ] ,
56
+ invalid : [
57
+ {
58
+ filename : 'test.js' ,
59
+ code : `
60
+ Vue.component('name', {})
61
+ Vue.component('name', {})
62
+ ` ,
63
+ errors : [ {
64
+ message : 'There is more than one component in this file.'
65
+ } ]
66
+ } ,
67
+ {
68
+ filename : 'test.js' ,
69
+ code : `
70
+ Vue.component('TodoList', {
71
+ // ...
72
+ })
73
+
74
+ Vue.component('TodoItem', {
75
+ // ...
76
+ })
77
+ export default {}
78
+ ` ,
79
+ errors : [ {
80
+ message : 'There is more than one component in this file.'
81
+ } ]
82
+ } ,
83
+ {
84
+ filename : 'test.vue' ,
85
+ code : `
86
+ Vue.component('name', {})
87
+ export default {}
88
+ ` ,
89
+ errors : [ {
90
+ message : 'There is more than one component in this file.'
91
+ } ]
92
+ }
93
+ ]
94
+ } )
You can’t perform that action at this time.
0 commit comments