@ethlete/eslint-plugin 1.0.0-next.22 → 1.0.0-next.24

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 (61) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/package.json +4 -5
  3. package/src/configs/recommended.js +23 -10
  4. package/src/index.js +6 -1
  5. package/src/rules/angular-decorator-property-order.js +20 -20
  6. package/src/rules/class-constant-property.js +35 -14
  7. package/src/rules/class-member-order.js +77 -46
  8. package/src/rules/guard-return-newline.js +5 -4
  9. package/src/rules/inject-member-accessibility.js +22 -24
  10. package/src/rules/internals/angular-io.js +31 -14
  11. package/src/rules/internals/angular-member-visibility.js +16 -12
  12. package/src/rules/internals/angular-metadata-fix.js +22 -0
  13. package/src/rules/internals/import-resolution.js +191 -0
  14. package/src/rules/internals/member-accessibility-fix.js +26 -0
  15. package/src/rules/no-angular-router-api.js +23 -29
  16. package/src/rules/no-angular-seo-services.js +21 -16
  17. package/src/rules/no-cdk-import.js +7 -14
  18. package/src/rules/no-direct-dom-manipulation.js +17 -0
  19. package/src/rules/no-document-cookie.js +3 -0
  20. package/src/rules/no-effect-cleanup-return.js +15 -9
  21. package/src/rules/no-empty-angular-metadata-arrays.js +6 -36
  22. package/src/rules/no-enum.js +115 -0
  23. package/src/rules/no-inject-chain.js +3 -1
  24. package/src/rules/no-leading-underscore-class-member.js +33 -3
  25. package/src/rules/no-legacy-angular-decorators.js +17 -21
  26. package/src/rules/no-legacy-prepare-without-injector.js +42 -26
  27. package/src/rules/no-legacy-query-import.js +7 -16
  28. package/src/rules/no-locale-id.js +6 -18
  29. package/src/rules/no-member-alias.js +21 -0
  30. package/src/rules/no-native-html-input-name.js +1 -1
  31. package/src/rules/no-pipe-logic.js +11 -17
  32. package/src/rules/no-readonly-signal.js +13 -5
  33. package/src/rules/no-redundant-internal.js +21 -2
  34. package/src/rules/no-redundant-on-push-change-detection.js +32 -56
  35. package/src/rules/no-rxjs-in-effect.js +12 -8
  36. package/src/rules/no-screaming-case-local.js +1 -0
  37. package/src/rules/no-standalone-flag.js +7 -36
  38. package/src/rules/no-subscribe-in-pipe.js +3 -2
  39. package/src/rules/no-template-literal-before-inline-template.js +3 -14
  40. package/src/rules/no-trivial-return-type.js +2 -0
  41. package/src/rules/no-trivial-wrapper-method.js +13 -16
  42. package/src/rules/no-type-only-import.js +7 -2
  43. package/src/rules/no-typed-injected-element-ref.js +23 -19
  44. package/src/rules/no-unused-class-member.js +34 -14
  45. package/src/rules/prefer-clone-equal.js +8 -6
  46. package/src/rules/prefer-concise-angular-host-directives.js +23 -29
  47. package/src/rules/prefer-concise-angular-style-metadata.js +8 -16
  48. package/src/rules/prefer-element-dimensions.js +9 -10
  49. package/src/rules/prefer-linked-signal.js +7 -4
  50. package/src/rules/prefer-match-media.js +12 -16
  51. package/src/rules/prefer-present-tense-output.js +1 -1
  52. package/src/rules/prefer-rxjs-timer.js +3 -1
  53. package/src/rules/prefer-scroll-state.js +3 -67
  54. package/src/rules/prefer-static-boolean-properties.js +30 -0
  55. package/src/rules/prefer-viewport-size.js +1 -7
  56. package/src/rules/require-dollar-suffix.js +7 -4
  57. package/src/rules/require-form-submit.js +2 -28
  58. package/src/rules/require-on-push-change-detection.js +48 -36
  59. package/src/rules/require-view-encapsulation-none.js +48 -34
  60. package/src/rules/take-until-destroyed-last.js +64 -0
  61. package/src/rules/template-member-accessibility.js +12 -27
@@ -7,32 +7,17 @@ const {
7
7
  isReferencedFromTemplateOrHost,
8
8
  } = require('./internals/angular-member-visibility');
9
9
  const { getImplementedContractMemberNames } = require('./internals/implemented-contract-members');
10
+ const { isImportedAs } = require('./internals/import-resolution');
11
+ const { buildAccessibilityFix } = require('./internals/member-accessibility-fix');
10
12
 
11
13
  /**
14
+ * @param {import('eslint').SourceCode} sourceCode
12
15
  * @param {any} node
13
16
  */
14
- const isInjectCall = (node) => {
17
+ const isInjectCall = (sourceCode, node) => {
15
18
  if (!node || node.type !== 'PropertyDefinition' || !node.value) return false;
16
19
  if (node.value.type !== 'CallExpression') return false;
17
- return node.value.callee.type === 'Identifier' && node.value.callee.name === 'inject';
18
- };
19
-
20
- /**
21
- * @param {any} node
22
- * @param {import('eslint').SourceCode} sourceCode
23
- */
24
- const buildPublicFix = (node, sourceCode) => {
25
- const keyToken = sourceCode.getFirstToken(node.key);
26
- if (!keyToken) return null;
27
-
28
- if (node.accessibility) {
29
- const firstToken = sourceCode.getFirstToken(node);
30
- if (!firstToken) return null;
31
-
32
- return (fixer) => fixer.replaceText(firstToken, 'public');
33
- }
34
-
35
- return (fixer) => fixer.insertTextBefore(keyToken, 'public ');
20
+ return isImportedAs(sourceCode, node.value.callee, 'inject');
36
21
  };
37
22
 
38
23
  /**
@@ -108,11 +93,11 @@ const templateMemberAccessibility = {
108
93
  */
109
94
  const checkMember = (node) => {
110
95
  if (!isSupportedMember(node)) return;
111
- if (node.type === 'PropertyDefinition' && isInjectCall(node)) return;
96
+ if (node.type === 'PropertyDefinition' && isInjectCall(context.sourceCode, node)) return;
112
97
 
113
98
  const classNode = node.parent && node.parent.type === 'ClassBody' ? node.parent.parent : null;
114
99
  if (!classNode || (classNode.type !== 'ClassDeclaration' && classNode.type !== 'ClassExpression')) return;
115
- if (!getAngularMetadata(classNode)) return;
100
+ if (!getAngularMetadata(context.sourceCode, classNode)) return;
116
101
 
117
102
  const memberName = getMemberName(node);
118
103
  if (!memberName) return;
@@ -127,7 +112,7 @@ const templateMemberAccessibility = {
127
112
  node,
128
113
  messageId: 'shouldBePublic',
129
114
  data: { name: memberName },
130
- fix: buildPublicFix(node, sourceCode),
115
+ fix: buildAccessibilityFix(node, sourceCode, 'public'),
131
116
  });
132
117
 
133
118
  return;
@@ -142,7 +127,7 @@ const templateMemberAccessibility = {
142
127
  node,
143
128
  messageId: 'shouldBeExplicit',
144
129
  data: { name: memberName },
145
- fix: buildPublicFix(node, sourceCode),
130
+ fix: buildAccessibilityFix(node, sourceCode, 'public'),
146
131
  });
147
132
 
148
133
  return;
@@ -165,11 +150,11 @@ const templateMemberAccessibility = {
165
150
  */
166
151
  const checkImplicitPublicMember = (node) => {
167
152
  if (!isSupportedMember(node)) return;
168
- if (node.type === 'PropertyDefinition' && isInjectCall(node)) return;
153
+ if (node.type === 'PropertyDefinition' && isInjectCall(context.sourceCode, node)) return;
169
154
 
170
155
  const classNode = node.parent && node.parent.type === 'ClassBody' ? node.parent.parent : null;
171
156
  if (!classNode || (classNode.type !== 'ClassDeclaration' && classNode.type !== 'ClassExpression')) return;
172
- if (!getAngularMetadata(classNode)) return;
157
+ if (!getAngularMetadata(context.sourceCode, classNode)) return;
173
158
 
174
159
  const memberName = getMemberName(node);
175
160
  if (!memberName) return;
@@ -184,7 +169,7 @@ const templateMemberAccessibility = {
184
169
  node,
185
170
  messageId: 'shouldBeExplicitPublic',
186
171
  data: { name: memberName },
187
- fix: buildPublicFix(node, sourceCode),
172
+ fix: buildAccessibilityFix(node, sourceCode, 'public'),
188
173
  });
189
174
  };
190
175