@diphyx/eslint-plugin 1.0.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 (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +130 -0
  3. package/package.json +55 -0
  4. package/src/configs/index.mjs +11 -0
  5. package/src/configs/recommended.mjs +184 -0
  6. package/src/index.mjs +22 -0
  7. package/src/rules/composable-naming.mjs +63 -0
  8. package/src/rules/index.mjs +105 -0
  9. package/src/rules/radash-prefer-call.mjs +33 -0
  10. package/src/rules/radash-prefer-clone.mjs +33 -0
  11. package/src/rules/radash-prefer-is.mjs +51 -0
  12. package/src/rules/radash-prefer-sleep.mjs +53 -0
  13. package/src/rules/radash-prefer-sum.mjs +71 -0
  14. package/src/rules/radash-prefer-unique.mjs +30 -0
  15. package/src/rules/script-define-object.mjs +49 -0
  16. package/src/rules/script-section-order.mjs +159 -0
  17. package/src/rules/store-config-order.mjs +55 -0
  18. package/src/rules/store-mode-enum.mjs +41 -0
  19. package/src/rules/store-name-match.mjs +56 -0
  20. package/src/rules/store-no-unknown-key.mjs +42 -0
  21. package/src/rules/store-require-action.mjs +5 -0
  22. package/src/rules/store-require-model.mjs +5 -0
  23. package/src/rules/store-require-name.mjs +5 -0
  24. package/src/rules/store-require-view.mjs +5 -0
  25. package/src/rules/store-section-function.mjs +47 -0
  26. package/src/rules/store-section-method.mjs +53 -0
  27. package/src/rules/store-section-return-shorthand.mjs +81 -0
  28. package/src/rules/store-shape-suffix.mjs +37 -0
  29. package/src/rules/store-suffix.mjs +39 -0
  30. package/src/rules/template-text.mjs +80 -0
  31. package/src/rules/template-v-else.mjs +8 -0
  32. package/src/rules/template-v-for.mjs +8 -0
  33. package/src/rules/template-v-if.mjs +8 -0
  34. package/src/rules/vueuse-prefer-clipboard.mjs +29 -0
  35. package/src/rules/vueuse-prefer-member-call.mjs +39 -0
  36. package/src/rules/vueuse-prefer-observer.mjs +34 -0
  37. package/src/rules/vueuse-prefer-route.mjs +64 -0
  38. package/src/rules/vueuse-prefer-storage.mjs +44 -0
  39. package/src/rules/vueuse-prefer-timer.mjs +32 -0
  40. package/src/utils/ast.mjs +24 -0
  41. package/src/utils/docs.mjs +8 -0
  42. package/src/utils/store.mjs +66 -0
  43. package/src/utils/vue.mjs +70 -0
@@ -0,0 +1,70 @@
1
+ // Helpers for rules that operate on Vue SFCs (*.vue).
2
+
3
+ export function isVueFile(context) {
4
+ return context.filename.endsWith(".vue");
5
+ }
6
+
7
+ // Wraps a template-body visitor with the shared .vue + parserServices guards.
8
+ export function defineTemplateRule(meta, createVisitor) {
9
+ return {
10
+ meta,
11
+ create(context) {
12
+ if (!isVueFile(context)) {
13
+ return {};
14
+ }
15
+
16
+ const services = context.sourceCode.parserServices;
17
+ if (!services || !services.defineTemplateBodyVisitor) {
18
+ return {};
19
+ }
20
+
21
+ return services.defineTemplateBodyVisitor(createVisitor(context));
22
+ },
23
+ };
24
+ }
25
+
26
+ // Factory for "directive must live on a <template> wrapper" rules.
27
+ export function createDirectiveWrapperRule({ directives, label }) {
28
+ const targets = new Set(directives);
29
+
30
+ return defineTemplateRule(
31
+ {
32
+ type: "suggestion",
33
+ docs: {
34
+ description: `${label} must be used on a <template> wrapper`,
35
+ },
36
+ messages: {
37
+ requireWrapper: "v-{{directive}} on <{{element}}> should be wrapped with <template>.",
38
+ },
39
+ schema: [],
40
+ },
41
+ (context) => ({
42
+ VElement(node) {
43
+ if (node.name === "template") {
44
+ return;
45
+ }
46
+
47
+ const directive = node.startTag.attributes.find((attribute) => {
48
+ if (!attribute.directive || !attribute.key || !attribute.key.name) {
49
+ return false;
50
+ }
51
+
52
+ return targets.has(attribute.key.name.name);
53
+ });
54
+
55
+ if (!directive) {
56
+ return;
57
+ }
58
+
59
+ context.report({
60
+ node: directive,
61
+ messageId: "requireWrapper",
62
+ data: {
63
+ directive: directive.key.name.name,
64
+ element: node.name,
65
+ },
66
+ });
67
+ },
68
+ }),
69
+ );
70
+ }