@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.
- package/CHANGELOG.md +23 -0
- package/package.json +4 -5
- package/src/configs/recommended.js +23 -10
- package/src/index.js +6 -1
- package/src/rules/angular-decorator-property-order.js +20 -20
- package/src/rules/class-constant-property.js +35 -14
- package/src/rules/class-member-order.js +77 -46
- package/src/rules/guard-return-newline.js +5 -4
- package/src/rules/inject-member-accessibility.js +22 -24
- package/src/rules/internals/angular-io.js +31 -14
- package/src/rules/internals/angular-member-visibility.js +16 -12
- package/src/rules/internals/angular-metadata-fix.js +22 -0
- package/src/rules/internals/import-resolution.js +191 -0
- package/src/rules/internals/member-accessibility-fix.js +26 -0
- package/src/rules/no-angular-router-api.js +23 -29
- package/src/rules/no-angular-seo-services.js +21 -16
- package/src/rules/no-cdk-import.js +7 -14
- package/src/rules/no-direct-dom-manipulation.js +17 -0
- package/src/rules/no-document-cookie.js +3 -0
- package/src/rules/no-effect-cleanup-return.js +15 -9
- package/src/rules/no-empty-angular-metadata-arrays.js +6 -36
- package/src/rules/no-enum.js +115 -0
- package/src/rules/no-inject-chain.js +3 -1
- package/src/rules/no-leading-underscore-class-member.js +33 -3
- package/src/rules/no-legacy-angular-decorators.js +17 -21
- package/src/rules/no-legacy-prepare-without-injector.js +42 -26
- package/src/rules/no-legacy-query-import.js +7 -16
- package/src/rules/no-locale-id.js +6 -18
- package/src/rules/no-member-alias.js +21 -0
- package/src/rules/no-native-html-input-name.js +1 -1
- package/src/rules/no-pipe-logic.js +11 -17
- package/src/rules/no-readonly-signal.js +13 -5
- package/src/rules/no-redundant-internal.js +21 -2
- package/src/rules/no-redundant-on-push-change-detection.js +32 -56
- package/src/rules/no-rxjs-in-effect.js +12 -8
- package/src/rules/no-screaming-case-local.js +1 -0
- package/src/rules/no-standalone-flag.js +7 -36
- package/src/rules/no-subscribe-in-pipe.js +3 -2
- package/src/rules/no-template-literal-before-inline-template.js +3 -14
- package/src/rules/no-trivial-return-type.js +2 -0
- package/src/rules/no-trivial-wrapper-method.js +13 -16
- package/src/rules/no-type-only-import.js +7 -2
- package/src/rules/no-typed-injected-element-ref.js +23 -19
- package/src/rules/no-unused-class-member.js +34 -14
- package/src/rules/prefer-clone-equal.js +8 -6
- package/src/rules/prefer-concise-angular-host-directives.js +23 -29
- package/src/rules/prefer-concise-angular-style-metadata.js +8 -16
- package/src/rules/prefer-element-dimensions.js +9 -10
- package/src/rules/prefer-linked-signal.js +7 -4
- package/src/rules/prefer-match-media.js +12 -16
- package/src/rules/prefer-present-tense-output.js +1 -1
- package/src/rules/prefer-rxjs-timer.js +3 -1
- package/src/rules/prefer-scroll-state.js +3 -67
- package/src/rules/prefer-static-boolean-properties.js +30 -0
- package/src/rules/prefer-viewport-size.js +1 -7
- package/src/rules/require-dollar-suffix.js +7 -4
- package/src/rules/require-form-submit.js +2 -28
- package/src/rules/require-on-push-change-detection.js +48 -36
- package/src/rules/require-view-encapsulation-none.js +48 -34
- package/src/rules/take-until-destroyed-last.js +64 -0
- 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
|
|
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:
|
|
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:
|
|
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:
|
|
172
|
+
fix: buildAccessibilityFix(node, sourceCode, 'public'),
|
|
188
173
|
});
|
|
189
174
|
};
|
|
190
175
|
|