@checkdigit/eslint-plugin 7.14.0-PR.117-1980 → 7.14.0-PR.57-0f87
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/dist-mjs/index.mjs +5 -5
- package/dist-mjs/no-util.mjs +47 -0
- package/dist-types/no-util.d.ts +5 -0
- package/package.json +1 -1
- package/src/file-path-comment.ts +1 -1
- package/src/index.ts +4 -4
- package/src/no-util.ts +53 -0
- package/dist-mjs/no-type-assertion-as.mjs +0 -45
- package/dist-types/no-type-assertion-as.d.ts +0 -5
- package/src/no-type-assertion-as.ts +0 -60
package/dist-mjs/index.mjs
CHANGED
|
@@ -23,7 +23,7 @@ import noEnum from "./no-enum.mjs";
|
|
|
23
23
|
import noSideEffects from "./no-side-effects.mjs";
|
|
24
24
|
import noRandomV4UUID from "./no-random-v4-uuid.mjs";
|
|
25
25
|
import noTestImport from "./no-test-import.mjs";
|
|
26
|
-
import
|
|
26
|
+
import noUtil from "./no-util.mjs";
|
|
27
27
|
import noUuid from "./no-uuid.mjs";
|
|
28
28
|
import noWallabyComment from "./no-wallaby-comment.mjs";
|
|
29
29
|
import objectLiteralResponse from "./object-literal-response.mjs";
|
|
@@ -38,6 +38,7 @@ var rules = {
|
|
|
38
38
|
"no-enum": noEnum,
|
|
39
39
|
"no-random-v4-uuid": noRandomV4UUID,
|
|
40
40
|
"no-status-code-assert": noStatusCodeAssert,
|
|
41
|
+
"no-util": noUtil,
|
|
41
42
|
"no-uuid": noUuid,
|
|
42
43
|
"require-assert-message": requireAssertMessage,
|
|
43
44
|
"require-strict-assert": requireStrictAssert,
|
|
@@ -45,7 +46,6 @@ var rules = {
|
|
|
45
46
|
"no-test-import": noTestImport,
|
|
46
47
|
"no-wallaby-comment": noWallabyComment,
|
|
47
48
|
"no-side-effects": noSideEffects,
|
|
48
|
-
"no-type-assertion-as": noTypeAssertionAs,
|
|
49
49
|
"regular-expression-comment": regexComment,
|
|
50
50
|
"require-assert-predicate-rejects-throws": requireAssertPredicateRejectsThrows,
|
|
51
51
|
"object-literal-response": objectLiteralResponse,
|
|
@@ -75,6 +75,7 @@ var configs = {
|
|
|
75
75
|
"@checkdigit/file-path-comment": "error",
|
|
76
76
|
"@checkdigit/no-random-v4-uuid": "error",
|
|
77
77
|
"@checkdigit/no-status-code-assert": "error",
|
|
78
|
+
"@checkdigit/no-util": "error",
|
|
78
79
|
"@checkdigit/no-uuid": "error",
|
|
79
80
|
"@checkdigit/require-assert-message": "error",
|
|
80
81
|
"@checkdigit/require-strict-assert": "error",
|
|
@@ -84,7 +85,6 @@ var configs = {
|
|
|
84
85
|
"error",
|
|
85
86
|
{ excludedIdentifiers: ["assert", "debug", "log", "promisify", "Symbol.for"] }
|
|
86
87
|
],
|
|
87
|
-
"@checkdigit/no-type-assertion-as": "error",
|
|
88
88
|
"@checkdigit/regular-expression-comment": "error",
|
|
89
89
|
"@checkdigit/require-assert-predicate-rejects-throws": "error",
|
|
90
90
|
"@checkdigit/object-literal-response": "error",
|
|
@@ -113,13 +113,13 @@ var configs = {
|
|
|
113
113
|
"@checkdigit/file-path-comment": "off",
|
|
114
114
|
"@checkdigit/no-random-v4-uuid": "error",
|
|
115
115
|
"@checkdigit/no-status-code-assert": "error",
|
|
116
|
+
"@checkdigit/no-util": "error",
|
|
116
117
|
"@checkdigit/no-uuid": "error",
|
|
117
118
|
"@checkdigit/require-assert-message": "error",
|
|
118
119
|
"@checkdigit/require-strict-assert": "error",
|
|
119
120
|
"@checkdigit/require-ts-extension-imports-exports": "error",
|
|
120
121
|
"@checkdigit/no-wallaby-comment": "off",
|
|
121
122
|
"@checkdigit/no-side-effects": "error",
|
|
122
|
-
"@checkdigit/no-type-assertion-as": "error",
|
|
123
123
|
"@checkdigit/regular-expression-comment": "error",
|
|
124
124
|
"@checkdigit/require-assert-predicate-rejects-throws": "error",
|
|
125
125
|
"@checkdigit/object-literal-response": "error",
|
|
@@ -145,4 +145,4 @@ var src_default = defaultToExport;
|
|
|
145
145
|
export {
|
|
146
146
|
src_default as default
|
|
147
147
|
};
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,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
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// src/no-util.ts
|
|
2
|
+
import { AST_TOKEN_TYPES, ESLintUtils } from "@typescript-eslint/utils";
|
|
3
|
+
var ruleId = "no-util";
|
|
4
|
+
var NO_UTIL = "NO_UTIL";
|
|
5
|
+
var createRule = ESLintUtils.RuleCreator((name) => name);
|
|
6
|
+
var rule = createRule({
|
|
7
|
+
name: ruleId,
|
|
8
|
+
meta: {
|
|
9
|
+
type: "problem",
|
|
10
|
+
docs: {
|
|
11
|
+
description: "Detects if file name is util"
|
|
12
|
+
},
|
|
13
|
+
schema: [],
|
|
14
|
+
messages: {
|
|
15
|
+
[NO_UTIL]: "File name '{{filename}}' contains banned 'util' pattern."
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
defaultOptions: [],
|
|
19
|
+
create(context) {
|
|
20
|
+
return {
|
|
21
|
+
Program() {
|
|
22
|
+
const filename = context.filename;
|
|
23
|
+
const utilRegex = /(?:^|[-_/])util(?=[-_./]|$)/iu;
|
|
24
|
+
if (utilRegex.test(filename)) {
|
|
25
|
+
const sourceCode = context.sourceCode;
|
|
26
|
+
const tokens = sourceCode.tokensAndComments;
|
|
27
|
+
const firstNonCommentToken = tokens.find(
|
|
28
|
+
(token) => token.type !== AST_TOKEN_TYPES.Block && token.type !== AST_TOKEN_TYPES.Line
|
|
29
|
+
);
|
|
30
|
+
if (firstNonCommentToken !== void 0) {
|
|
31
|
+
context.report({
|
|
32
|
+
messageId: NO_UTIL,
|
|
33
|
+
data: { filename },
|
|
34
|
+
node: firstNonCommentToken
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
var no_util_default = rule;
|
|
43
|
+
export {
|
|
44
|
+
no_util_default as default,
|
|
45
|
+
ruleId
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL25vLXV0aWwudHMiXSwKICAibWFwcGluZ3MiOiAiO0FBUUEsU0FBUyxpQkFBaUIsbUJBQW1CO0FBRXRDLElBQU0sU0FBUztBQUN0QixJQUFNLFVBQVU7QUFFaEIsSUFBTSxhQUFhLFlBQVksWUFBWSxDQUFDLFNBQVMsSUFBSTtBQUV6RCxJQUFNLE9BQStDLFdBQVc7QUFBQSxFQUM5RCxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsSUFDZjtBQUFBLElBQ0EsUUFBUSxDQUFDO0FBQUEsSUFDVCxVQUFVO0FBQUEsTUFDUixDQUFDLE9BQU8sR0FBRztBQUFBLElBQ2I7QUFBQSxFQUNGO0FBQUEsRUFDQSxnQkFBZ0IsQ0FBQztBQUFBLEVBQ2pCLE9BQU8sU0FBUztBQUNkLFdBQU87QUFBQSxNQUNMLFVBQVU7QUFDUixjQUFNLFdBQVcsUUFBUTtBQUN6QixjQUFNLFlBQVk7QUFDbEIsWUFBSSxVQUFVLEtBQUssUUFBUSxHQUFHO0FBQzVCLGdCQUFNLGFBQWEsUUFBUTtBQUMzQixnQkFBTSxTQUFTLFdBQVc7QUFDMUIsZ0JBQU0sdUJBQXVCLE9BQU87QUFBQSxZQUNsQyxDQUFDLFVBQVUsTUFBTSxTQUFTLGdCQUFnQixTQUFTLE1BQU0sU0FBUyxnQkFBZ0I7QUFBQSxVQUNwRjtBQUNBLGNBQUkseUJBQXlCLFFBQVc7QUFDdEMsb0JBQVEsT0FBTztBQUFBLGNBQ2IsV0FBVztBQUFBLGNBQ1gsTUFBTSxFQUFFLFNBQVM7QUFBQSxjQUNqQixNQUFNO0FBQUEsWUFDUixDQUFDO0FBQUEsVUFDSDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRixDQUFDO0FBRUQsSUFBTyxrQkFBUTsiLAogICJuYW1lcyI6IFtdCn0K
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@checkdigit/eslint-plugin","version":"7.14.0-PR.
|
|
1
|
+
{"name":"@checkdigit/eslint-plugin","version":"7.14.0-PR.57-0f87","description":"Check Digit eslint plugins","keywords":["eslint","eslintplugin"],"homepage":"https://github.com/checkdigit/eslint-plugin#readme","bugs":{"url":"https://github.com/checkdigit/eslint-plugin/issues"},"repository":{"type":"git","url":"https://github.com/checkdigit/eslint-plugin"},"license":"MIT","author":"Check Digit, LLC","sideEffects":false,"type":"module","exports":{".":{"types":"./dist-types/index.d.ts","import":"./dist-mjs/index.mjs","default":"./dist-mjs/index.mjs"}},"files":["src","dist-types","dist-mjs","!src/**/test/**","!src/**/*.test.ts","!src/**/*.spec.ts","!dist-types/**/test/**","!dist-types/**/*.test.d.ts","!dist-types/**/*.spec.d.ts","!dist-mjs/**/test/**","!dist-mjs/**/*.test.mjs","!dist-mjs/**/*.spec.mjs","SECURITY.md"],"scripts":{"build:dist-mjs":"rimraf dist-mjs && npx builder --type=module --sourceMap --outDir=dist-mjs && node dist-mjs/index.mjs","build:dist-types":"rimraf dist-types && npx builder --type=types --outDir=dist-types","ci:compile":"tsc --noEmit","ci:coverage":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=true","ci:lint":"npm run lint","ci:style":"npm run prettier","ci:test":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=false","lint":"eslint --max-warnings 0 .","lint:fix":"eslint --max-warnings 0 --fix .","prepare":"","prepublishOnly":"npm run build:dist-types && npm run build:dist-mjs","prettier":"prettier --ignore-path .gitignore --list-different .","prettier:fix":"prettier --ignore-path .gitignore --write .","test":"npm run ci:compile && npm run ci:test && npm run ci:lint && npm run ci:style"},"prettier":"@checkdigit/prettier-config","jest":{"preset":"@checkdigit/jest-config"},"dependencies":{"@typescript-eslint/type-utils":"^8.23.0","@typescript-eslint/utils":"^8.23.0","http-status-codes":"^2.3.0","ts-api-utils":"^2.0.1"},"devDependencies":{"@checkdigit/jest-config":"^6.0.2","@checkdigit/prettier-config":"^6.1.0","@checkdigit/typescript-config":"^9.0.0","@eslint/js":"^9.19.0","@types/eslint":"^9.6.1","@types/eslint-config-prettier":"^6.11.3","@typescript-eslint/parser":"^8.23.0","@typescript-eslint/rule-tester":"^8.23.0","eslint":"^9.19.0","eslint-config-prettier":"^10.0.1","eslint-import-resolver-typescript":"^3.7.0","eslint-plugin-eslint-plugin":"^6.4.0","eslint-plugin-import":"^2.31.0","eslint-plugin-no-only-tests":"^3.3.0","eslint-plugin-no-secrets":"^2.2.1","eslint-plugin-node":"^11.1.0","eslint-plugin-sonarjs":"1.0.4","rimraf":"^6.0.1","typescript-eslint":"^8.23.0"},"peerDependencies":{"eslint":">=9 <10"},"engines":{"node":">=22.14"}}
|
package/src/file-path-comment.ts
CHANGED
package/src/index.ts
CHANGED
|
@@ -32,7 +32,7 @@ import noEnum from './no-enum.ts';
|
|
|
32
32
|
import noSideEffects from './no-side-effects.ts';
|
|
33
33
|
import noRandomV4UUID from './no-random-v4-uuid.ts';
|
|
34
34
|
import noTestImport from './no-test-import.ts';
|
|
35
|
-
import
|
|
35
|
+
import noUtil from './no-util.ts';
|
|
36
36
|
import noUuid from './no-uuid.ts';
|
|
37
37
|
import noWallabyComment from './no-wallaby-comment.ts';
|
|
38
38
|
import objectLiteralResponse from './object-literal-response.ts';
|
|
@@ -48,6 +48,7 @@ const rules: Record<string, TSESLint.LooseRuleDefinition> = {
|
|
|
48
48
|
'no-enum': noEnum,
|
|
49
49
|
'no-random-v4-uuid': noRandomV4UUID,
|
|
50
50
|
'no-status-code-assert': noStatusCodeAssert,
|
|
51
|
+
'no-util': noUtil,
|
|
51
52
|
'no-uuid': noUuid,
|
|
52
53
|
'require-assert-message': requireAssertMessage,
|
|
53
54
|
'require-strict-assert': requireStrictAssert,
|
|
@@ -55,7 +56,6 @@ const rules: Record<string, TSESLint.LooseRuleDefinition> = {
|
|
|
55
56
|
'no-test-import': noTestImport,
|
|
56
57
|
'no-wallaby-comment': noWallabyComment,
|
|
57
58
|
'no-side-effects': noSideEffects,
|
|
58
|
-
'no-type-assertion-as': noTypeAssertionAs,
|
|
59
59
|
'regular-expression-comment': regexComment,
|
|
60
60
|
'require-assert-predicate-rejects-throws': requireAssertPredicateRejectsThrows,
|
|
61
61
|
'object-literal-response': objectLiteralResponse,
|
|
@@ -87,6 +87,7 @@ const configs: Record<string, TSESLint.FlatConfig.Config[]> = {
|
|
|
87
87
|
'@checkdigit/file-path-comment': 'error',
|
|
88
88
|
'@checkdigit/no-random-v4-uuid': 'error',
|
|
89
89
|
'@checkdigit/no-status-code-assert': 'error',
|
|
90
|
+
'@checkdigit/no-util': 'error',
|
|
90
91
|
'@checkdigit/no-uuid': 'error',
|
|
91
92
|
'@checkdigit/require-assert-message': 'error',
|
|
92
93
|
'@checkdigit/require-strict-assert': 'error',
|
|
@@ -96,7 +97,6 @@ const configs: Record<string, TSESLint.FlatConfig.Config[]> = {
|
|
|
96
97
|
'error',
|
|
97
98
|
{ excludedIdentifiers: ['assert', 'debug', 'log', 'promisify', 'Symbol.for'] },
|
|
98
99
|
],
|
|
99
|
-
'@checkdigit/no-type-assertion-as': 'error',
|
|
100
100
|
'@checkdigit/regular-expression-comment': 'error',
|
|
101
101
|
'@checkdigit/require-assert-predicate-rejects-throws': 'error',
|
|
102
102
|
'@checkdigit/object-literal-response': 'error',
|
|
@@ -125,13 +125,13 @@ const configs: Record<string, TSESLint.FlatConfig.Config[]> = {
|
|
|
125
125
|
'@checkdigit/file-path-comment': 'off',
|
|
126
126
|
'@checkdigit/no-random-v4-uuid': 'error',
|
|
127
127
|
'@checkdigit/no-status-code-assert': 'error',
|
|
128
|
+
'@checkdigit/no-util': 'error',
|
|
128
129
|
'@checkdigit/no-uuid': 'error',
|
|
129
130
|
'@checkdigit/require-assert-message': 'error',
|
|
130
131
|
'@checkdigit/require-strict-assert': 'error',
|
|
131
132
|
'@checkdigit/require-ts-extension-imports-exports': 'error',
|
|
132
133
|
'@checkdigit/no-wallaby-comment': 'off',
|
|
133
134
|
'@checkdigit/no-side-effects': 'error',
|
|
134
|
-
'@checkdigit/no-type-assertion-as': 'error',
|
|
135
135
|
'@checkdigit/regular-expression-comment': 'error',
|
|
136
136
|
'@checkdigit/require-assert-predicate-rejects-throws': 'error',
|
|
137
137
|
'@checkdigit/object-literal-response': 'error',
|
package/src/no-util.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// no-util.ts
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Copyright (c) 2021-2025 Check Digit, LLC
|
|
5
|
+
*
|
|
6
|
+
* This code is licensed under the MIT license (see LICENSE.txt for details).
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { AST_TOKEN_TYPES, ESLintUtils } from '@typescript-eslint/utils';
|
|
10
|
+
|
|
11
|
+
export const ruleId = 'no-util';
|
|
12
|
+
const NO_UTIL = 'NO_UTIL';
|
|
13
|
+
|
|
14
|
+
const createRule = ESLintUtils.RuleCreator((name) => name);
|
|
15
|
+
|
|
16
|
+
const rule: ESLintUtils.RuleModule<typeof NO_UTIL> = createRule({
|
|
17
|
+
name: ruleId,
|
|
18
|
+
meta: {
|
|
19
|
+
type: 'problem',
|
|
20
|
+
docs: {
|
|
21
|
+
description: 'Detects if file name is util',
|
|
22
|
+
},
|
|
23
|
+
schema: [],
|
|
24
|
+
messages: {
|
|
25
|
+
[NO_UTIL]: "File name '{{filename}}' contains banned 'util' pattern.",
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
defaultOptions: [],
|
|
29
|
+
create(context) {
|
|
30
|
+
return {
|
|
31
|
+
Program() {
|
|
32
|
+
const filename = context.filename;
|
|
33
|
+
const utilRegex = /(?:^|[-_/])util(?=[-_./]|$)/iu;
|
|
34
|
+
if (utilRegex.test(filename)) {
|
|
35
|
+
const sourceCode = context.sourceCode;
|
|
36
|
+
const tokens = sourceCode.tokensAndComments;
|
|
37
|
+
const firstNonCommentToken = tokens.find(
|
|
38
|
+
(token) => token.type !== AST_TOKEN_TYPES.Block && token.type !== AST_TOKEN_TYPES.Line,
|
|
39
|
+
);
|
|
40
|
+
if (firstNonCommentToken !== undefined) {
|
|
41
|
+
context.report({
|
|
42
|
+
messageId: NO_UTIL,
|
|
43
|
+
data: { filename },
|
|
44
|
+
node: firstNonCommentToken,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
export default rule;
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
// src/no-type-assertion-as.ts
|
|
2
|
-
import { AST_NODE_TYPES, ESLintUtils } from "@typescript-eslint/utils";
|
|
3
|
-
var ruleId = "no-as-type-assertion";
|
|
4
|
-
var NO_AS_TYPE_ASSERTION = "NO_AS_TYPE_ASSERTION";
|
|
5
|
-
var createRule = ESLintUtils.RuleCreator((name) => name);
|
|
6
|
-
var rule = createRule({
|
|
7
|
-
name: ruleId,
|
|
8
|
-
meta: {
|
|
9
|
-
type: "problem",
|
|
10
|
-
docs: {
|
|
11
|
-
description: "Disallow the use of `as` type assertions and suggest using `satisfies` instead"
|
|
12
|
-
},
|
|
13
|
-
schema: [],
|
|
14
|
-
messages: {
|
|
15
|
-
[NO_AS_TYPE_ASSERTION]: "Avoid using `as` type assertions. Use `satisfies` instead."
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
|
-
defaultOptions: [],
|
|
19
|
-
create(context) {
|
|
20
|
-
return {
|
|
21
|
-
TSAsExpression(node) {
|
|
22
|
-
const isUnknownUnionOrIntersection = (node.typeAnnotation.type === AST_NODE_TYPES.TSUnionType || node.typeAnnotation.type === AST_NODE_TYPES.TSIntersectionType) && node.typeAnnotation.types.some((type) => type.type === AST_NODE_TYPES.TSUnknownKeyword);
|
|
23
|
-
if (node.typeAnnotation.type === AST_NODE_TYPES.TSUnknownKeyword || node.expression.type === AST_NODE_TYPES.TSAsExpression && node.expression.typeAnnotation.type === AST_NODE_TYPES.TSUnknownKeyword || isUnknownUnionOrIntersection) {
|
|
24
|
-
if (node.parent.type !== AST_NODE_TYPES.TSAsExpression) {
|
|
25
|
-
context.report({
|
|
26
|
-
node,
|
|
27
|
-
messageId: NO_AS_TYPE_ASSERTION
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
} else {
|
|
31
|
-
context.report({
|
|
32
|
-
node,
|
|
33
|
-
messageId: NO_AS_TYPE_ASSERTION
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
var no_type_assertion_as_default = rule;
|
|
41
|
-
export {
|
|
42
|
-
no_type_assertion_as_default as default,
|
|
43
|
-
ruleId
|
|
44
|
-
};
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL25vLXR5cGUtYXNzZXJ0aW9uLWFzLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQVFBLFNBQVMsZ0JBQWdCLG1CQUE2QjtBQUUvQyxJQUFNLFNBQVM7QUFDdEIsSUFBTSx1QkFBdUI7QUFFN0IsSUFBTSxhQUFhLFlBQVksWUFBWSxDQUFDLFNBQVMsSUFBSTtBQUV6RCxJQUFNLE9BQTRELFdBQVc7QUFBQSxFQUMzRSxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsSUFDZjtBQUFBLElBQ0EsUUFBUSxDQUFDO0FBQUEsSUFDVCxVQUFVO0FBQUEsTUFDUixDQUFDLG9CQUFvQixHQUFHO0FBQUEsSUFDMUI7QUFBQSxFQUNGO0FBQUEsRUFDQSxnQkFBZ0IsQ0FBQztBQUFBLEVBQ2pCLE9BQU8sU0FBUztBQUNkLFdBQU87QUFBQSxNQUNMLGVBQWUsTUFBK0I7QUFDNUMsY0FBTSxnQ0FDSCxLQUFLLGVBQWUsU0FBUyxlQUFlLGVBQzNDLEtBQUssZUFBZSxTQUFTLGVBQWUsdUJBQzlDLEtBQUssZUFBZSxNQUFNLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUyxlQUFlLGdCQUFnQjtBQUV4RixZQUNFLEtBQUssZUFBZSxTQUFTLGVBQWUsb0JBQzNDLEtBQUssV0FBVyxTQUFTLGVBQWUsa0JBQ3ZDLEtBQUssV0FBVyxlQUFlLFNBQVMsZUFBZSxvQkFDekQsOEJBQ0E7QUFDQSxjQUFJLEtBQUssT0FBTyxTQUFTLGVBQWUsZ0JBQWdCO0FBQ3RELG9CQUFRLE9BQU87QUFBQSxjQUNiO0FBQUEsY0FDQSxXQUFXO0FBQUEsWUFDYixDQUFDO0FBQUEsVUFDSDtBQUFBLFFBQ0YsT0FBTztBQUNMLGtCQUFRLE9BQU87QUFBQSxZQUNiO0FBQUEsWUFDQSxXQUFXO0FBQUEsVUFDYixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGLENBQUM7QUFFRCxJQUFPLCtCQUFROyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { ESLintUtils } from '@typescript-eslint/utils';
|
|
2
|
-
export declare const ruleId = "no-as-type-assertion";
|
|
3
|
-
declare const NO_AS_TYPE_ASSERTION = "NO_AS_TYPE_ASSERTION";
|
|
4
|
-
declare const rule: ESLintUtils.RuleModule<typeof NO_AS_TYPE_ASSERTION>;
|
|
5
|
-
export default rule;
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
// no-type-assertion-as.ts
|
|
2
|
-
|
|
3
|
-
/*
|
|
4
|
-
* Copyright (c) 2021-2025 Check Digit, LLC
|
|
5
|
-
*
|
|
6
|
-
* This code is licensed under the MIT license (see LICENSE.txt for details).
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { AST_NODE_TYPES, ESLintUtils, TSESTree } from '@typescript-eslint/utils';
|
|
10
|
-
|
|
11
|
-
export const ruleId = 'no-as-type-assertion';
|
|
12
|
-
const NO_AS_TYPE_ASSERTION = 'NO_AS_TYPE_ASSERTION';
|
|
13
|
-
|
|
14
|
-
const createRule = ESLintUtils.RuleCreator((name) => name);
|
|
15
|
-
|
|
16
|
-
const rule: ESLintUtils.RuleModule<typeof NO_AS_TYPE_ASSERTION> = createRule({
|
|
17
|
-
name: ruleId,
|
|
18
|
-
meta: {
|
|
19
|
-
type: 'problem',
|
|
20
|
-
docs: {
|
|
21
|
-
description: 'Disallow the use of `as` type assertions and suggest using `satisfies` instead',
|
|
22
|
-
},
|
|
23
|
-
schema: [],
|
|
24
|
-
messages: {
|
|
25
|
-
[NO_AS_TYPE_ASSERTION]: 'Avoid using `as` type assertions. Use `satisfies` instead.',
|
|
26
|
-
},
|
|
27
|
-
},
|
|
28
|
-
defaultOptions: [],
|
|
29
|
-
create(context) {
|
|
30
|
-
return {
|
|
31
|
-
TSAsExpression(node: TSESTree.TSAsExpression) {
|
|
32
|
-
const isUnknownUnionOrIntersection =
|
|
33
|
-
(node.typeAnnotation.type === AST_NODE_TYPES.TSUnionType ||
|
|
34
|
-
node.typeAnnotation.type === AST_NODE_TYPES.TSIntersectionType) &&
|
|
35
|
-
node.typeAnnotation.types.some((type) => type.type === AST_NODE_TYPES.TSUnknownKeyword);
|
|
36
|
-
|
|
37
|
-
if (
|
|
38
|
-
node.typeAnnotation.type === AST_NODE_TYPES.TSUnknownKeyword ||
|
|
39
|
-
(node.expression.type === AST_NODE_TYPES.TSAsExpression &&
|
|
40
|
-
node.expression.typeAnnotation.type === AST_NODE_TYPES.TSUnknownKeyword) ||
|
|
41
|
-
isUnknownUnionOrIntersection
|
|
42
|
-
) {
|
|
43
|
-
if (node.parent.type !== AST_NODE_TYPES.TSAsExpression) {
|
|
44
|
-
context.report({
|
|
45
|
-
node,
|
|
46
|
-
messageId: NO_AS_TYPE_ASSERTION,
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
} else {
|
|
50
|
-
context.report({
|
|
51
|
-
node,
|
|
52
|
-
messageId: NO_AS_TYPE_ASSERTION,
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
|
-
};
|
|
57
|
-
},
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
export default rule;
|