eslint-plugin-mpx 0.0.21 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/README.md +3 -0
  2. package/lib/.DS_Store +0 -0
  3. package/lib/configs/base.js +10 -5
  4. package/lib/configs/mpx-essential.js +0 -30
  5. package/lib/index.js +1 -150
  6. package/lib/rules/comment-directive.js +2 -2
  7. package/lib/rules/component-tags-order.js +2 -2
  8. package/lib/rules/eqeqeq.js +4 -2
  9. package/lib/rules/html-end-tags.js +1 -1
  10. package/lib/rules/no-arrow-functions-in-watch.js +2 -2
  11. package/lib/rules/no-async-in-computed-properties.js +5 -5
  12. package/lib/rules/no-dupe-keys.js +3 -3
  13. package/lib/rules/no-dupe-wx-elif.js +8 -3
  14. package/lib/rules/no-duplicate-attributes.js +6 -16
  15. package/lib/rules/no-parsing-error.js +2 -2
  16. package/lib/rules/no-reserved-keys.js +3 -3
  17. package/lib/rules/no-side-effects-in-computed-properties.js +8 -9
  18. package/lib/rules/return-in-computed-property.js +3 -3
  19. package/lib/rules/syntaxes/dynamic-directive-arguments.js +2 -1
  20. package/lib/rules/syntaxes/scope-attribute.js +2 -1
  21. package/lib/rules/syntaxes/slot-attribute.js +2 -1
  22. package/lib/rules/syntaxes/v-bind-prop-modifier-shorthand.js +2 -1
  23. package/lib/rules/valid-wx-elif.js +1 -1
  24. package/lib/rules/valid-wx-else.js +1 -1
  25. package/lib/rules/valid-wx-for.js +2 -2
  26. package/lib/rules/valid-wx-if.js +1 -1
  27. package/lib/rules/valid-wx-model.js +2 -2
  28. package/lib/utils/index.js +504 -490
  29. package/lib/utils/keycode-to-key.js +60 -60
  30. package/lib/utils/{vue-reserved.json → mpx-reserved.json} +2 -2
  31. package/package.json +18 -15
  32. package/lib/configs/essential.js +0 -51
  33. package/lib/configs/no-layout-rules.js +0 -47
  34. package/lib/configs/recommended.js +0 -17
  35. package/lib/configs/strongly-recommended.js +0 -32
  36. package/lib/configs/vue3-essential.js +0 -71
  37. package/lib/configs/vue3-recommended.js +0 -17
  38. package/lib/configs/vue3-strongly-recommended.js +0 -33
  39. package/lib/rules/array-bracket-spacing.js +0 -12
  40. package/lib/rules/arrow-spacing.js +0 -9
  41. package/lib/rules/attribute-hyphenation.js +0 -121
  42. package/lib/rules/attributes-order.js +0 -281
  43. package/lib/rules/block-spacing.js +0 -11
  44. package/lib/rules/brace-style.js +0 -11
  45. package/lib/rules/camelcase.js +0 -9
  46. package/lib/rules/comma-dangle.js +0 -9
  47. package/lib/rules/comma-spacing.js +0 -12
  48. package/lib/rules/comma-style.js +0 -20
  49. package/lib/rules/component-definition-name-casing.js +0 -108
  50. package/lib/rules/component-name-in-template-casing.js +0 -164
  51. package/lib/rules/custom-event-name-casing.js +0 -214
  52. package/lib/rules/dot-location.js +0 -9
  53. package/lib/rules/dot-notation.js +0 -9
  54. package/lib/rules/func-call-spacing.js +0 -11
  55. package/lib/rules/html-closing-bracket-newline.js +0 -115
  56. package/lib/rules/html-closing-bracket-spacing.js +0 -137
  57. package/lib/rules/html-comment-content-newline.js +0 -215
  58. package/lib/rules/html-comment-content-spacing.js +0 -179
  59. package/lib/rules/html-comment-indent.js +0 -258
  60. package/lib/rules/html-indent.js +0 -81
  61. package/lib/rules/html-quotes.js +0 -107
  62. package/lib/rules/html-self-closing.js +0 -222
  63. package/lib/rules/jsx-uses-vars.js +0 -73
  64. package/lib/rules/key-spacing.js +0 -11
  65. package/lib/rules/keyword-spacing.js +0 -11
  66. package/lib/rules/match-component-file-name.js +0 -151
  67. package/lib/rules/max-attributes-per-line.js +0 -194
  68. package/lib/rules/max-len.js +0 -561
  69. package/lib/rules/multiline-html-element-content-newline.js +0 -246
  70. package/lib/rules/mustache-interpolation-spacing.js +0 -107
  71. package/lib/rules/name-property-casing.js +0 -71
  72. package/lib/rules/no-bare-strings-in-template.js +0 -275
  73. package/lib/rules/no-boolean-default.js +0 -114
  74. package/lib/rules/no-confusing-v-for-v-if.js +0 -69
  75. package/lib/rules/no-custom-modifiers-on-v-model.js +0 -59
  76. package/lib/rules/no-deprecated-data-object-declaration.js +0 -95
  77. package/lib/rules/no-deprecated-destroyed-lifecycle.js +0 -101
  78. package/lib/rules/no-deprecated-dollar-listeners-api.js +0 -72
  79. package/lib/rules/no-deprecated-dollar-scopedslots-api.js +0 -79
  80. package/lib/rules/no-deprecated-events-api.js +0 -69
  81. package/lib/rules/no-deprecated-filter.js +0 -44
  82. package/lib/rules/no-deprecated-functional-template.js +0 -56
  83. package/lib/rules/no-deprecated-html-element-is.js +0 -54
  84. package/lib/rules/no-deprecated-inline-template.js +0 -47
  85. package/lib/rules/no-deprecated-scope-attribute.js +0 -31
  86. package/lib/rules/no-deprecated-slot-attribute.js +0 -29
  87. package/lib/rules/no-deprecated-slot-scope-attribute.js +0 -34
  88. package/lib/rules/no-deprecated-v-bind-sync.js +0 -62
  89. package/lib/rules/no-deprecated-v-on-native-modifier.js +0 -50
  90. package/lib/rules/no-deprecated-v-on-number-modifiers.js +0 -61
  91. package/lib/rules/no-deprecated-vue-config-keycodes.js +0 -53
  92. package/lib/rules/no-duplicate-attr-inheritance.js +0 -67
  93. package/lib/rules/no-empty-component-block.js +0 -109
  94. package/lib/rules/no-empty-pattern.js +0 -9
  95. package/lib/rules/no-extra-parens.js +0 -182
  96. package/lib/rules/no-irregular-whitespace.js +0 -251
  97. package/lib/rules/no-lifecycle-after-await.js +0 -133
  98. package/lib/rules/no-lone-template.js +0 -129
  99. package/lib/rules/no-multi-spaces.js +0 -107
  100. package/lib/rules/no-multiple-objects-in-class.js +0 -59
  101. package/lib/rules/no-multiple-slot-args.js +0 -118
  102. package/lib/rules/no-multiple-template-root.js +0 -101
  103. package/lib/rules/no-mutating-props.js +0 -323
  104. package/lib/rules/no-potential-component-option-typo.js +0 -125
  105. package/lib/rules/no-ref-as-operand.js +0 -189
  106. package/lib/rules/no-reserved-component-names.js +0 -187
  107. package/lib/rules/no-restricted-component-options.js +0 -215
  108. package/lib/rules/no-restricted-static-attribute.js +0 -164
  109. package/lib/rules/no-restricted-syntax.js +0 -9
  110. package/lib/rules/no-restricted-v-bind.js +0 -184
  111. package/lib/rules/no-setup-props-destructure.js +0 -149
  112. package/lib/rules/no-spaces-around-equal-signs-in-attribute.js +0 -57
  113. package/lib/rules/no-sparse-arrays.js +0 -9
  114. package/lib/rules/no-static-inline-styles.js +0 -141
  115. package/lib/rules/no-template-key.js +0 -48
  116. package/lib/rules/no-template-shadow.js +0 -101
  117. package/lib/rules/no-template-target-blank.js +0 -138
  118. package/lib/rules/no-textarea-mustache.js +0 -46
  119. package/lib/rules/no-unregistered-components.js +0 -187
  120. package/lib/rules/no-unsupported-features.js +0 -157
  121. package/lib/rules/no-unused-components.js +0 -143
  122. package/lib/rules/no-unused-properties.js +0 -742
  123. package/lib/rules/no-unused-vars.js +0 -147
  124. package/lib/rules/no-use-v-if-with-v-for.js +0 -119
  125. package/lib/rules/no-useless-concat.js +0 -9
  126. package/lib/rules/no-useless-mustaches.js +0 -154
  127. package/lib/rules/no-useless-v-bind.js +0 -150
  128. package/lib/rules/no-v-html.js +0 -36
  129. package/lib/rules/no-v-model-argument.js +0 -49
  130. package/lib/rules/no-watch-after-await.js +0 -142
  131. package/lib/rules/object-curly-newline.js +0 -12
  132. package/lib/rules/object-curly-spacing.js +0 -12
  133. package/lib/rules/object-property-newline.js +0 -12
  134. package/lib/rules/one-component-per-file.js +0 -50
  135. package/lib/rules/operator-linebreak.js +0 -9
  136. package/lib/rules/order-in-components.js +0 -341
  137. package/lib/rules/padding-line-between-blocks.js +0 -220
  138. package/lib/rules/prefer-template.js +0 -9
  139. package/lib/rules/prop-name-casing.js +0 -66
  140. package/lib/rules/require-component-is.js +0 -45
  141. package/lib/rules/require-default-prop.js +0 -190
  142. package/lib/rules/require-direct-export.js +0 -128
  143. package/lib/rules/require-explicit-emits.js +0 -511
  144. package/lib/rules/require-name-property.js +0 -43
  145. package/lib/rules/require-prop-type-constructor.js +0 -99
  146. package/lib/rules/require-prop-types.js +0 -103
  147. package/lib/rules/require-render-return.js +0 -50
  148. package/lib/rules/require-slots-as-functions.js +0 -120
  149. package/lib/rules/require-toggle-inside-transition.js +0 -89
  150. package/lib/rules/require-v-for-key.js +0 -62
  151. package/lib/rules/require-valid-default-prop.js +0 -338
  152. package/lib/rules/return-in-emits-validator.js +0 -141
  153. package/lib/rules/script-indent.js +0 -56
  154. package/lib/rules/singleline-html-element-content-newline.js +0 -215
  155. package/lib/rules/sort-keys.js +0 -282
  156. package/lib/rules/space-in-parens.js +0 -12
  157. package/lib/rules/space-infix-ops.js +0 -11
  158. package/lib/rules/space-unary-ops.js +0 -11
  159. package/lib/rules/static-class-names-order.js +0 -61
  160. package/lib/rules/template-curly-spacing.js +0 -12
  161. package/lib/rules/this-in-template.js +0 -128
  162. package/lib/rules/use-v-on-exact.js +0 -228
  163. package/lib/rules/v-bind-style.js +0 -76
  164. package/lib/rules/v-for-delimiter-style.js +0 -69
  165. package/lib/rules/v-on-function-call.js +0 -172
  166. package/lib/rules/v-on-style.js +0 -58
  167. package/lib/rules/v-slot-style.js +0 -155
  168. package/lib/rules/valid-template-root.js +0 -69
  169. package/lib/rules/valid-v-bind-sync.js +0 -179
  170. package/lib/rules/valid-v-bind.js +0 -62
  171. package/lib/rules/valid-v-cloak.js +0 -58
  172. package/lib/rules/valid-v-html.js +0 -58
  173. package/lib/rules/valid-v-is.js +0 -95
  174. package/lib/rules/valid-v-on.js +0 -153
  175. package/lib/rules/valid-v-once.js +0 -58
  176. package/lib/rules/valid-v-pre.js +0 -58
  177. package/lib/rules/valid-v-show.js +0 -58
  178. package/lib/rules/valid-v-slot.js +0 -290
  179. package/lib/rules/valid-v-text.js +0 -58
  180. package/lib/utils/indent-common.js +0 -2085
package/README.md CHANGED
@@ -16,6 +16,9 @@ Next, install `eslint-plugin-mpx`:
16
16
  $ npm install eslint-plugin-mpx --save-dev
17
17
  ```
18
18
 
19
+ ## Docs
20
+
21
+ https://mpx-ecology.github.io/eslint-plugin-mpx/
19
22
 
20
23
  ## Usage
21
24
 
package/lib/.DS_Store ADDED
Binary file
@@ -10,21 +10,26 @@ module.exports = {
10
10
  sourceType: 'module'
11
11
  },
12
12
  env: {
13
+ node: true,
13
14
  browser: true,
14
15
  es6: true
15
16
  },
16
17
  globals: {
17
18
  wx: 'readonly',
19
+ my: 'readonly',
20
+ getCurrentPages: 'readonly',
18
21
  getApp: 'readonly',
19
22
  App: 'readonly',
23
+ Page: 'readonly',
24
+ Component: 'readonly',
25
+ Behavior: 'readonly',
26
+ requirePlugin: 'readonly',
27
+ requireMiniProgram: 'readonly',
20
28
  __mpx_mode__: 'readonly',
21
- __mpx_env__: 'readonly',
22
- requirePlugin: 'readonly'
29
+ __mpx_env__: 'readonly'
23
30
  },
24
31
  plugins: ['mpx'],
25
32
  rules: {
26
- 'mpx/comment-directive': 'error',
27
- // 'mpx/jsx-uses-vars': 'error',
28
- camelcase: ['error', { allow: ['__mpx_mode__', '__mpx_env__'] }]
33
+ 'mpx/comment-directive': 'error'
29
34
  }
30
35
  }
@@ -6,37 +6,7 @@
6
6
  module.exports = {
7
7
  extends: require.resolve('./base'),
8
8
  rules: {
9
- // 'mpx/no-deprecated-html-element-is': 'error',
10
- // 'mpx/no-multiple-template-root': 'error',
11
- // 'mpx/attribute-hyphenation': 'error',
12
- // 'mpx/html-closing-bracket-newline': 'error',
13
- // 'mpx/html-closing-bracket-spacing': 'error',
14
9
  'mpx/html-end-tags': 'error',
15
- // 'mpx/html-indent': 'error',
16
- // 'mpx/html-quotes': 'error',
17
- // 'mpx/html-self-closing': 'error',
18
- // 'mpx/max-attributes-per-line': 'error',
19
- // 'mpx/multiline-html-element-content-newline': 'error',
20
- // 'mpx/mustache-interpolation-spacing': 'error',
21
- // 'mpx/no-multi-spaces': 'error',
22
- // 'mpx/no-spaces-around-equal-signs-in-attribute': 'error',
23
- // 'mpx/no-template-shadow': 'error',
24
- // 'mpx/prop-name-casing': 'error',
25
- // 'mpx/require-default-prop': 'error',
26
- // 'mpx/require-prop-types': 'error',
27
- // 'mpx/html-comment-content-newline': 'error',
28
- // 'mpx/html-comment-content-spacing': 'error',
29
- // 'mpx/html-comment-indent': 'error',
30
- // 'mpx/no-empty-component-block': 'error',
31
- // 'mpx/no-potential-component-option-typo': 'error',
32
- // 'mpx/no-restricted-component-options': 'error',
33
- // 'mpx/no-unused-properties': 'error',
34
- // 'mpx/no-useless-mustaches': 'error',
35
- // 'mpx/padding-line-between-blocks': 'error',
36
- // 'mpx/script-indent': 'error',
37
- // 'mpx/array-bracket-spacing': 'error',
38
- // 'mpx/arrow-spacing': 'error',
39
- // 'mpx/block-spacing': 'error',
40
10
  'mpx/no-arrow-functions-in-watch': 'error',
41
11
  'mpx/no-async-in-computed-properties': 'error',
42
12
  'mpx/no-dupe-keys': 'error',
package/lib/index.js CHANGED
@@ -7,175 +7,26 @@
7
7
 
8
8
  module.exports = {
9
9
  rules: {
10
- 'array-bracket-spacing': require('./rules/array-bracket-spacing'),
11
- 'arrow-spacing': require('./rules/arrow-spacing'),
12
- 'attribute-hyphenation': require('./rules/attribute-hyphenation'),
13
- 'attributes-order': require('./rules/attributes-order'),
14
- 'block-spacing': require('./rules/block-spacing'),
15
- 'brace-style': require('./rules/brace-style'),
16
- camelcase: require('./rules/camelcase'),
17
- 'comma-dangle': require('./rules/comma-dangle'),
18
- 'comma-spacing': require('./rules/comma-spacing'),
19
- 'comma-style': require('./rules/comma-style'),
20
10
  'comment-directive': require('./rules/comment-directive'),
21
- 'component-definition-name-casing': require('./rules/component-definition-name-casing'),
22
- 'component-name-in-template-casing': require('./rules/component-name-in-template-casing'),
23
11
  'component-tags-order': require('./rules/component-tags-order'),
24
- 'custom-event-name-casing': require('./rules/custom-event-name-casing'),
25
- 'dot-location': require('./rules/dot-location'),
26
- 'dot-notation': require('./rules/dot-notation'),
27
- eqeqeq: require('./rules/eqeqeq'),
28
- 'func-call-spacing': require('./rules/func-call-spacing'),
29
- 'html-closing-bracket-newline': require('./rules/html-closing-bracket-newline'),
30
- 'html-closing-bracket-spacing': require('./rules/html-closing-bracket-spacing'),
31
- 'html-comment-content-newline': require('./rules/html-comment-content-newline'),
32
- 'html-comment-content-spacing': require('./rules/html-comment-content-spacing'),
33
- 'html-comment-indent': require('./rules/html-comment-indent'),
34
12
  'html-end-tags': require('./rules/html-end-tags'),
35
- 'html-indent': require('./rules/html-indent'),
36
- 'html-quotes': require('./rules/html-quotes'),
37
- 'html-self-closing': require('./rules/html-self-closing'),
38
- 'jsx-uses-vars': require('./rules/jsx-uses-vars'),
39
- 'key-spacing': require('./rules/key-spacing'),
40
- 'keyword-spacing': require('./rules/keyword-spacing'),
41
- 'match-component-file-name': require('./rules/match-component-file-name'),
42
- 'max-attributes-per-line': require('./rules/max-attributes-per-line'),
43
- 'max-len': require('./rules/max-len'),
44
- 'multiline-html-element-content-newline': require('./rules/multiline-html-element-content-newline'),
45
- 'mustache-interpolation-spacing': require('./rules/mustache-interpolation-spacing'),
46
- 'name-property-casing': require('./rules/name-property-casing'),
47
13
  'no-arrow-functions-in-watch': require('./rules/no-arrow-functions-in-watch'),
48
14
  'no-async-in-computed-properties': require('./rules/no-async-in-computed-properties'),
49
- 'no-bare-strings-in-template': require('./rules/no-bare-strings-in-template'),
50
- 'no-boolean-default': require('./rules/no-boolean-default'),
51
- 'no-confusing-v-for-v-if': require('./rules/no-confusing-v-for-v-if'),
52
- 'no-custom-modifiers-on-v-model': require('./rules/no-custom-modifiers-on-v-model'),
53
- 'no-deprecated-data-object-declaration': require('./rules/no-deprecated-data-object-declaration'),
54
- 'no-deprecated-destroyed-lifecycle': require('./rules/no-deprecated-destroyed-lifecycle'),
55
- 'no-deprecated-dollar-listeners-api': require('./rules/no-deprecated-dollar-listeners-api'),
56
- 'no-deprecated-dollar-scopedslots-api': require('./rules/no-deprecated-dollar-scopedslots-api'),
57
- 'no-deprecated-events-api': require('./rules/no-deprecated-events-api'),
58
- 'no-deprecated-filter': require('./rules/no-deprecated-filter'),
59
- 'no-deprecated-functional-template': require('./rules/no-deprecated-functional-template'),
60
- 'no-deprecated-html-element-is': require('./rules/no-deprecated-html-element-is'),
61
- 'no-deprecated-inline-template': require('./rules/no-deprecated-inline-template'),
62
- 'no-deprecated-scope-attribute': require('./rules/no-deprecated-scope-attribute'),
63
- 'no-deprecated-slot-attribute': require('./rules/no-deprecated-slot-attribute'),
64
- 'no-deprecated-slot-scope-attribute': require('./rules/no-deprecated-slot-scope-attribute'),
65
- 'no-deprecated-v-bind-sync': require('./rules/no-deprecated-v-bind-sync'),
66
- 'no-deprecated-v-on-native-modifier': require('./rules/no-deprecated-v-on-native-modifier'),
67
- 'no-deprecated-v-on-number-modifiers': require('./rules/no-deprecated-v-on-number-modifiers'),
68
- 'no-deprecated-vue-config-keycodes': require('./rules/no-deprecated-vue-config-keycodes'),
69
15
  'no-dupe-keys': require('./rules/no-dupe-keys'),
70
16
  'no-dupe-wx-elif': require('./rules/no-dupe-wx-elif'),
71
- 'no-duplicate-attr-inheritance': require('./rules/no-duplicate-attr-inheritance'),
72
17
  'no-duplicate-attributes': require('./rules/no-duplicate-attributes'),
73
- 'no-empty-component-block': require('./rules/no-empty-component-block'),
74
- 'no-empty-pattern': require('./rules/no-empty-pattern'),
75
- 'no-extra-parens': require('./rules/no-extra-parens'),
76
- 'no-irregular-whitespace': require('./rules/no-irregular-whitespace'),
77
- 'no-lifecycle-after-await': require('./rules/no-lifecycle-after-await'),
78
- 'no-lone-template': require('./rules/no-lone-template'),
79
- 'no-multi-spaces': require('./rules/no-multi-spaces'),
80
- 'no-multiple-objects-in-class': require('./rules/no-multiple-objects-in-class'),
81
- 'no-multiple-slot-args': require('./rules/no-multiple-slot-args'),
82
- 'no-multiple-template-root': require('./rules/no-multiple-template-root'),
83
- 'no-mutating-props': require('./rules/no-mutating-props'),
84
18
  'no-parsing-error': require('./rules/no-parsing-error'),
85
- 'no-potential-component-option-typo': require('./rules/no-potential-component-option-typo'),
86
- 'no-ref-as-operand': require('./rules/no-ref-as-operand'),
87
- 'no-reserved-component-names': require('./rules/no-reserved-component-names'),
88
19
  'no-reserved-keys': require('./rules/no-reserved-keys'),
89
- 'no-restricted-component-options': require('./rules/no-restricted-component-options'),
90
- 'no-restricted-static-attribute': require('./rules/no-restricted-static-attribute'),
91
- 'no-restricted-syntax': require('./rules/no-restricted-syntax'),
92
- 'no-restricted-v-bind': require('./rules/no-restricted-v-bind'),
93
- 'no-setup-props-destructure': require('./rules/no-setup-props-destructure'),
94
20
  'no-side-effects-in-computed-properties': require('./rules/no-side-effects-in-computed-properties'),
95
- 'no-spaces-around-equal-signs-in-attribute': require('./rules/no-spaces-around-equal-signs-in-attribute'),
96
- 'no-sparse-arrays': require('./rules/no-sparse-arrays'),
97
- 'no-static-inline-styles': require('./rules/no-static-inline-styles'),
98
- 'no-template-key': require('./rules/no-template-key'),
99
- 'no-template-shadow': require('./rules/no-template-shadow'),
100
- 'no-template-target-blank': require('./rules/no-template-target-blank'),
101
- 'no-textarea-mustache': require('./rules/no-textarea-mustache'),
102
- 'no-unregistered-components': require('./rules/no-unregistered-components'),
103
- 'no-unsupported-features': require('./rules/no-unsupported-features'),
104
- 'no-unused-components': require('./rules/no-unused-components'),
105
- 'no-unused-properties': require('./rules/no-unused-properties'),
106
- 'no-unused-vars': require('./rules/no-unused-vars'),
107
- 'no-use-v-if-with-v-for': require('./rules/no-use-v-if-with-v-for'),
108
- 'no-useless-concat': require('./rules/no-useless-concat'),
109
- 'no-useless-mustaches': require('./rules/no-useless-mustaches'),
110
- 'no-useless-v-bind': require('./rules/no-useless-v-bind'),
111
- 'no-v-html': require('./rules/no-v-html'),
112
- 'no-v-model-argument': require('./rules/no-v-model-argument'),
113
- 'no-watch-after-await': require('./rules/no-watch-after-await'),
114
- 'object-curly-newline': require('./rules/object-curly-newline'),
115
- 'object-curly-spacing': require('./rules/object-curly-spacing'),
116
- 'object-property-newline': require('./rules/object-property-newline'),
117
- 'one-component-per-file': require('./rules/one-component-per-file'),
118
- 'operator-linebreak': require('./rules/operator-linebreak'),
119
- 'order-in-components': require('./rules/order-in-components'),
120
- 'padding-line-between-blocks': require('./rules/padding-line-between-blocks'),
121
- 'prefer-template': require('./rules/prefer-template'),
122
- 'prop-name-casing': require('./rules/prop-name-casing'),
123
- 'require-component-is': require('./rules/require-component-is'),
124
- 'require-default-prop': require('./rules/require-default-prop'),
125
- 'require-direct-export': require('./rules/require-direct-export'),
126
- 'require-explicit-emits': require('./rules/require-explicit-emits'),
127
- 'require-name-property': require('./rules/require-name-property'),
128
- 'require-prop-type-constructor': require('./rules/require-prop-type-constructor'),
129
- 'require-prop-types': require('./rules/require-prop-types'),
130
- 'require-render-return': require('./rules/require-render-return'),
131
- 'require-slots-as-functions': require('./rules/require-slots-as-functions'),
132
- 'require-toggle-inside-transition': require('./rules/require-toggle-inside-transition'),
133
- 'require-v-for-key': require('./rules/require-v-for-key'),
134
- 'require-valid-default-prop': require('./rules/require-valid-default-prop'),
135
21
  'return-in-computed-property': require('./rules/return-in-computed-property'),
136
- 'return-in-emits-validator': require('./rules/return-in-emits-validator'),
137
- 'script-indent': require('./rules/script-indent'),
138
- 'singleline-html-element-content-newline': require('./rules/singleline-html-element-content-newline'),
139
- 'sort-keys': require('./rules/sort-keys'),
140
- 'space-in-parens': require('./rules/space-in-parens'),
141
- 'space-infix-ops': require('./rules/space-infix-ops'),
142
- 'space-unary-ops': require('./rules/space-unary-ops'),
143
- 'static-class-names-order': require('./rules/static-class-names-order'),
144
- 'template-curly-spacing': require('./rules/template-curly-spacing'),
145
- 'this-in-template': require('./rules/this-in-template'),
146
- 'use-v-on-exact': require('./rules/use-v-on-exact'),
147
- 'v-bind-style': require('./rules/v-bind-style'),
148
- 'v-for-delimiter-style': require('./rules/v-for-delimiter-style'),
149
- 'v-on-function-call': require('./rules/v-on-function-call'),
150
- 'v-on-style': require('./rules/v-on-style'),
151
- 'v-slot-style': require('./rules/v-slot-style'),
152
- 'valid-template-root': require('./rules/valid-template-root'),
153
- 'valid-v-bind-sync': require('./rules/valid-v-bind-sync'),
154
- 'valid-v-bind': require('./rules/valid-v-bind'),
155
- 'valid-v-cloak': require('./rules/valid-v-cloak'),
156
22
  'valid-wx-elif': require('./rules/valid-wx-elif'),
157
23
  'valid-wx-else': require('./rules/valid-wx-else'),
158
- 'valid-wx-for': require('./rules/valid-wx-for'),
159
- 'valid-v-html': require('./rules/valid-v-html'),
160
24
  'valid-wx-if': require('./rules/valid-wx-if'),
161
- 'valid-v-is': require('./rules/valid-v-is'),
162
25
  'valid-wx-model': require('./rules/valid-wx-model'),
163
- 'valid-v-on': require('./rules/valid-v-on'),
164
- 'valid-v-once': require('./rules/valid-v-once'),
165
- 'valid-v-pre': require('./rules/valid-v-pre'),
166
- 'valid-v-show': require('./rules/valid-v-show'),
167
- 'valid-v-slot': require('./rules/valid-v-slot'),
168
- 'valid-v-text': require('./rules/valid-v-text')
26
+ eqeqeq: require('./rules/eqeqeq')
169
27
  },
170
28
  configs: {
171
29
  base: require('./configs/base'),
172
- essential: require('./configs/essential'),
173
- 'no-layout-rules': require('./configs/no-layout-rules'),
174
- recommended: require('./configs/recommended'),
175
- 'strongly-recommended': require('./configs/strongly-recommended'),
176
- 'vue3-essential': require('./configs/vue3-essential'),
177
- 'vue3-recommended': require('./configs/vue3-recommended'),
178
- 'vue3-strongly-recommended': require('./configs/vue3-strongly-recommended'),
179
30
  'mpx-essential': require('./configs/mpx-essential')
180
31
  },
181
32
  processors: {
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @author Toru Nagashima <https://github.com/mysticatea>
3
3
  */
4
- /* eslint-disable eslint-plugin/report-message-format, consistent-docs-description */
4
+ /* eslint-disable eslint-plugin/report-message-format */
5
5
 
6
6
  'use strict'
7
7
 
@@ -287,7 +287,7 @@ module.exports = {
287
287
  docs: {
288
288
  description: 'support comment-directives in `<template>`',
289
289
  categories: ['base'],
290
- url: 'https://eslint.vuejs.org/rules/comment-directive.html'
290
+ url: 'https://mpx-ecology.github.io/eslint-plugin-mpx/rules/comment-directive.html'
291
291
  },
292
292
  schema: [
293
293
  {
@@ -21,8 +21,8 @@ module.exports = {
21
21
  type: 'suggestion',
22
22
  docs: {
23
23
  description: 'enforce order of component top-level elements',
24
- categories: ['vue3-recommended', 'recommended'],
25
- url: 'https://eslint.vuejs.org/rules/component-tags-order.html'
24
+ categories: ['recommended'],
25
+ url: 'https://mpx-ecology.github.io/eslint-plugin-mpx/rules/component-tags-order.html'
26
26
  },
27
27
  fixable: null,
28
28
  schema: [
@@ -5,5 +5,7 @@
5
5
 
6
6
  const { wrapCoreRule } = require('../utils')
7
7
 
8
- // eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
9
- module.exports = wrapCoreRule(require('eslint/lib/rules/eqeqeq'))
8
+ // eslint-disable-next-line
9
+ module.exports = wrapCoreRule('eqeqeq', {
10
+ applyDocument: true
11
+ })
@@ -21,7 +21,7 @@ module.exports = {
21
21
  docs: {
22
22
  description: 'enforce end tag style',
23
23
  categories: ['mpx-essential'],
24
- url: 'https://eslint.vuejs.org/rules/html-end-tags.html'
24
+ url: 'https://mpx-ecology.github.io/eslint-plugin-mpx/rules/html-end-tags.html'
25
25
  },
26
26
  fixable: 'code',
27
27
  schema: []
@@ -11,14 +11,14 @@ module.exports = {
11
11
  docs: {
12
12
  description: 'disallow using arrow functions to define watcher',
13
13
  categories: ['mpx-essential'],
14
- url: 'https://eslint.vuejs.org/rules/no-arrow-functions-in-watch.html'
14
+ url: 'https://mpx-ecology.github.io/eslint-plugin-mpx/rules/no-arrow-functions-in-watch.html'
15
15
  },
16
16
  fixable: null,
17
17
  schema: []
18
18
  },
19
19
  /** @param {RuleContext} context */
20
20
  create(context) {
21
- return utils.executeOnVue(context, (obj) => {
21
+ return utils.executeOnMpx(context, (obj) => {
22
22
  const watchNode = utils.findProperty(obj, 'watch')
23
23
  if (watchNode == null) {
24
24
  return
@@ -7,7 +7,7 @@
7
7
  const utils = require('../utils')
8
8
 
9
9
  /**
10
- * @typedef {import('../utils').VueObjectData} VueObjectData
10
+ * @typedef {import('../utils').MpxObjectData} MpxObjectData
11
11
  * @typedef {import('../utils').ComponentComputedProperty} ComponentComputedProperty
12
12
  */
13
13
 
@@ -70,7 +70,7 @@ module.exports = {
70
70
  docs: {
71
71
  description: 'disallow asynchronous actions in computed properties',
72
72
  categories: ['mpx-essential'],
73
- url: 'https://eslint.vuejs.org/rules/no-async-in-computed-properties.html'
73
+ url: 'https://mpx-ecology.github.io/eslint-plugin-mpx/rules/no-async-in-computed-properties.html'
74
74
  },
75
75
  fixable: null,
76
76
  schema: []
@@ -97,7 +97,7 @@ module.exports = {
97
97
 
98
98
  /**
99
99
  * @param {FunctionExpression | FunctionDeclaration | ArrowFunctionExpression} node
100
- * @param {VueObjectData} data
100
+ * @param {MpxObjectData} data
101
101
  */
102
102
  function onFunctionEnter(node, { node: vueNode }) {
103
103
  if (node.async) {
@@ -140,8 +140,8 @@ module.exports = {
140
140
  }
141
141
  })
142
142
  }
143
- return utils.defineVueVisitor(context, {
144
- onVueObjectEnter(node) {
143
+ return utils.defineMpxVisitor(context, {
144
+ onMpxObjectEnter(node) {
145
145
  computedPropertiesMap.set(node, utils.getComputedProperties(node))
146
146
  },
147
147
  ':function': onFunctionEnter,
@@ -14,7 +14,7 @@ const utils = require('../utils')
14
14
  // Rule Definition
15
15
  // ------------------------------------------------------------------------------
16
16
  /** @type {GroupName[]} */
17
- const GROUP_NAMES = ['properties', 'computed', 'data', 'methods']
17
+ const GROUP_NAMES = ['properties', 'computed', 'data', 'methods', 'setup']
18
18
 
19
19
  module.exports = {
20
20
  meta: {
@@ -22,7 +22,7 @@ module.exports = {
22
22
  docs: {
23
23
  description: 'disallow duplication of field names',
24
24
  categories: ['mpx-essential'],
25
- url: 'https://eslint.vuejs.org/rules/no-dupe-keys.html'
25
+ url: 'https://mpx-ecology.github.io/eslint-plugin-mpx/rules/no-dupe-keys.html'
26
26
  },
27
27
  fixable: null, // or "code" or "whitespace"
28
28
  schema: [
@@ -46,7 +46,7 @@ module.exports = {
46
46
  // Public
47
47
  // ----------------------------------------------------------------------
48
48
 
49
- return utils.executeOnVue(context, (obj) => {
49
+ return utils.executeOnMpx(context, (obj) => {
50
50
  const usedNames = []
51
51
  const properties = utils.iterateProperties(obj, groups)
52
52
 
@@ -84,7 +84,7 @@ module.exports = {
84
84
  description:
85
85
  'disallow duplicate conditions in `wx:if` / `wx:elif` chains',
86
86
  categories: ['mpx-essential'],
87
- url: 'https://eslint.vuejs.org/rules/no-dupe-wx-elif.html'
87
+ url: 'https://mpx-ecology.github.io/eslint-plugin-mpx/rules/no-dupe-wx-elif.html'
88
88
  },
89
89
  fixable: null,
90
90
  schema: [],
@@ -139,10 +139,15 @@ module.exports = {
139
139
  operandsB.operands.some((operandB) => equal(operandA, operandB))
140
140
  )
141
141
  }
142
-
142
+ const sourceCode = context.getSourceCode()
143
143
  return utils.defineTemplateBodyVisitor(context, {
144
144
  "VAttribute[directive=true][key.name.name='elif']"(node) {
145
- if (!node.value || !node.value.expression) {
145
+ const text = sourceCode.getText(node).slice(-3)
146
+ if (
147
+ !node.value ||
148
+ !node.value.expression ||
149
+ !['}}"', "}}'"].includes(text)
150
+ ) {
146
151
  return
147
152
  }
148
153
  const test = node.value.expression
@@ -24,11 +24,12 @@ function getName(attribute) {
24
24
  if (!attribute.directive) {
25
25
  return attribute.key.name
26
26
  }
27
- if (attribute.key.name.name === 'bind') {
27
+ if (attribute.key.name.name.startsWith('bind')) {
28
28
  return (
29
29
  (attribute.key.argument &&
30
30
  attribute.key.argument.type === 'VIdentifier' &&
31
- attribute.key.argument.name) ||
31
+ attribute.key.name.name + attribute.key.argument.name) ||
32
+ attribute.key.name.name ||
32
33
  null
33
34
  )
34
35
  }
@@ -45,7 +46,7 @@ module.exports = {
45
46
  docs: {
46
47
  description: 'disallow duplication of attributes',
47
48
  categories: ['mpx-essential'],
48
- url: 'https://eslint.vuejs.org/rules/no-duplicate-attributes.html'
49
+ url: 'https://mpx-ecology.github.io/eslint-plugin-mpx/rules/no-duplicate-attributes.html'
49
50
  },
50
51
  fixable: null,
51
52
 
@@ -65,10 +66,6 @@ module.exports = {
65
66
  },
66
67
  /** @param {RuleContext} context */
67
68
  create(context) {
68
- const options = context.options[0] || {}
69
- const allowCoexistStyle = options.allowCoexistStyle !== false
70
- const allowCoexistClass = options.allowCoexistClass !== false
71
-
72
69
  /** @type {Set<string>} */
73
70
  const directiveNames = new Set()
74
71
  /** @type {Set<string>} */
@@ -76,15 +73,8 @@ module.exports = {
76
73
 
77
74
  /**
78
75
  * @param {string} name
79
- * @param {boolean} isDirective
80
76
  */
81
- function isDuplicate(name, isDirective) {
82
- if (
83
- (allowCoexistStyle && name === 'style') ||
84
- (allowCoexistClass && name === 'class')
85
- ) {
86
- return isDirective ? directiveNames.has(name) : attributeNames.has(name)
87
- }
77
+ function isDuplicate(name) {
88
78
  return directiveNames.has(name) || attributeNames.has(name)
89
79
  }
90
80
 
@@ -99,7 +89,7 @@ module.exports = {
99
89
  return
100
90
  }
101
91
 
102
- if (isDuplicate(name, node.directive)) {
92
+ if (isDuplicate(name)) {
103
93
  context.report({
104
94
  node,
105
95
  loc: node.loc,
@@ -60,8 +60,8 @@ module.exports = {
60
60
  type: 'problem',
61
61
  docs: {
62
62
  description: 'disallow parsing errors in `<template>`',
63
- categories: ['vue3-essential', 'essential'],
64
- url: 'https://eslint.vuejs.org/rules/no-parsing-error.html'
63
+ categories: ['mpx-essential'],
64
+ url: 'https://mpx-ecology.github.io/eslint-plugin-mpx/rules/no-parsing-error.html'
65
65
  },
66
66
  fixable: null,
67
67
  schema: [
@@ -14,7 +14,7 @@ const utils = require('../utils')
14
14
  // Rule Definition
15
15
  // ------------------------------------------------------------------------------
16
16
 
17
- const RESERVED_KEYS = require('../utils/vue-reserved.json')
17
+ const RESERVED_KEYS = require('../utils/mpx-reserved.json')
18
18
  /** @type {GroupName[]} */
19
19
  const GROUP_NAMES = ['properties', 'computed', 'data', 'methods', 'setup']
20
20
 
@@ -24,7 +24,7 @@ module.exports = {
24
24
  docs: {
25
25
  description: 'disallow overwriting reserved keys',
26
26
  categories: ['mpx-essential'],
27
- url: 'https://eslint.vuejs.org/rules/no-reserved-keys.html'
27
+ url: 'https://mpx-ecology.github.io/eslint-plugin-mpx/rules/no-reserved-keys.html'
28
28
  },
29
29
  fixable: null,
30
30
  schema: [
@@ -52,7 +52,7 @@ module.exports = {
52
52
  // Public
53
53
  // ----------------------------------------------------------------------
54
54
 
55
- return utils.executeOnVue(context, (obj) => {
55
+ return utils.executeOnMpx(context, (obj) => {
56
56
  const properties = utils.iterateProperties(obj, groups)
57
57
  for (const o of properties) {
58
58
  if (o.groupName === 'data' && o.name[0] === '_') {
@@ -7,7 +7,7 @@
7
7
  const utils = require('../utils')
8
8
 
9
9
  /**
10
- * @typedef {import('../utils').VueObjectData} VueObjectData
10
+ * @typedef {import('../utils').MpxObjectData} MpxObjectData
11
11
  * @typedef {import('../utils').ComponentComputedProperty} ComponentComputedProperty
12
12
  */
13
13
 
@@ -21,8 +21,7 @@ module.exports = {
21
21
  docs: {
22
22
  description: 'disallow side effects in computed properties',
23
23
  categories: ['mpx-essential'],
24
- url:
25
- 'https://eslint.vuejs.org/rules/no-side-effects-in-computed-properties.html'
24
+ url: 'https://mpx-ecology.github.io/eslint-plugin-mpx/rules/no-side-effects-in-computed-properties.html'
26
25
  },
27
26
  fixable: null,
28
27
  schema: []
@@ -54,8 +53,8 @@ module.exports = {
54
53
  scopeStack = scopeStack && scopeStack.upper
55
54
  }
56
55
 
57
- return utils.defineVueVisitor(context, {
58
- onVueObjectEnter(node) {
56
+ return utils.defineMpxVisitor(context, {
57
+ onMpxObjectEnter(node) {
59
58
  computedPropertiesMap.set(node, utils.getComputedProperties(node))
60
59
  },
61
60
  ':function': onFunctionEnter,
@@ -63,7 +62,7 @@ module.exports = {
63
62
 
64
63
  /**
65
64
  * @param {(Identifier | ThisExpression) & {parent: MemberExpression}} node
66
- * @param {VueObjectData} data
65
+ * @param {MpxObjectData} data
67
66
  */
68
67
  'MemberExpression > :matches(Identifier, ThisExpression)'(
69
68
  node,
@@ -73,9 +72,9 @@ module.exports = {
73
72
  return
74
73
  }
75
74
  const targetBody = scopeStack.body
76
- const computedProperty = /** @type {ComponentComputedProperty[]} */ (computedPropertiesMap.get(
77
- vueNode
78
- )).find((cp) => {
75
+ const computedProperty = /** @type {ComponentComputedProperty[]} */ (
76
+ computedPropertiesMap.get(vueNode)
77
+ ).find((cp) => {
79
78
  return (
80
79
  cp.value &&
81
80
  node.loc.start.line >= cp.value.loc.start.line &&
@@ -21,7 +21,7 @@ module.exports = {
21
21
  description:
22
22
  'enforce that a return statement is present in computed property',
23
23
  categories: ['mpx-essential'],
24
- url: 'https://eslint.vuejs.org/rules/return-in-computed-property.html'
24
+ url: 'https://mpx-ecology.github.io/eslint-plugin-mpx/rules/return-in-computed-property.html'
25
25
  },
26
26
  fixable: null, // or "code" or "whitespace"
27
27
  schema: [
@@ -54,8 +54,8 @@ module.exports = {
54
54
 
55
55
  return Object.assign(
56
56
  {},
57
- utils.defineVueVisitor(context, {
58
- onVueObjectEnter(obj) {
57
+ utils.defineMpxVisitor(context, {
58
+ onMpxObjectEnter(obj) {
59
59
  for (const computedProperty of utils.getComputedProperties(obj)) {
60
60
  computedProperties.add(computedProperty)
61
61
  }
@@ -20,7 +20,8 @@ module.exports = {
20
20
  }
21
21
 
22
22
  return {
23
- 'VAttribute[directive=true] > VDirectiveKey > VExpressionContainer': reportDynamicArgument
23
+ 'VAttribute[directive=true] > VDirectiveKey > VExpressionContainer':
24
+ reportDynamicArgument
24
25
  }
25
26
  }
26
27
  }
@@ -23,7 +23,8 @@ module.exports = {
23
23
  }
24
24
 
25
25
  return {
26
- "VAttribute[directive=true] > VDirectiveKey[name.name='scope']": reportScope
26
+ "VAttribute[directive=true] > VDirectiveKey[name.name='scope']":
27
+ reportScope
27
28
  }
28
29
  }
29
30
  }
@@ -128,7 +128,8 @@ module.exports = {
128
128
 
129
129
  return {
130
130
  "VAttribute[directive=false][key.name='slot']": reportSlot,
131
- "VAttribute[directive=true][key.name.name='bind'][key.argument.name='slot']": reportVBindSlot
131
+ "VAttribute[directive=true][key.name.name='bind'][key.argument.name='slot']":
132
+ reportVBindSlot
132
133
  }
133
134
  }
134
135
  }
@@ -27,7 +27,8 @@ module.exports = {
27
27
  }
28
28
 
29
29
  return {
30
- "VAttribute[directive=true] > VDirectiveKey[name.name='bind'][name.rawName='.']": reportPropModifierShorthand
30
+ "VAttribute[directive=true] > VDirectiveKey[name.name='bind'][name.rawName='.']":
31
+ reportPropModifierShorthand
31
32
  }
32
33
  }
33
34
  }