@checkdigit/eslint-plugin 6.6.0-PR.75-7c7f → 6.6.0-PR.75-4a28
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-cjs/index.cjs +129 -97
- package/dist-cjs/metafile.json +6 -6
- package/dist-mjs/agent/fix-function-call-arguments.mjs +68 -43
- package/dist-mjs/index.mjs +39 -32
- package/dist-types/agent/fix-function-call-arguments.d.ts +6 -1
- package/dist-types/index.d.ts +35 -30
- package/package.json +1 -1
- package/src/agent/fix-function-call-arguments.ts +76 -50
- package/src/index.ts +36 -29
package/dist-cjs/metafile.json
CHANGED
|
@@ -12324,7 +12324,7 @@
|
|
|
12324
12324
|
"format": "esm"
|
|
12325
12325
|
},
|
|
12326
12326
|
"src/agent/fix-function-call-arguments.ts": {
|
|
12327
|
-
"bytes":
|
|
12327
|
+
"bytes": 6926,
|
|
12328
12328
|
"imports": [
|
|
12329
12329
|
{
|
|
12330
12330
|
"path": "node_modules/@typescript-eslint/utils/dist/index.js",
|
|
@@ -12751,7 +12751,7 @@
|
|
|
12751
12751
|
"format": "esm"
|
|
12752
12752
|
},
|
|
12753
12753
|
"src/index.ts": {
|
|
12754
|
-
"bytes":
|
|
12754
|
+
"bytes": 8556,
|
|
12755
12755
|
"imports": [
|
|
12756
12756
|
{
|
|
12757
12757
|
"path": "src/agent/add-url-domain.ts",
|
|
@@ -15707,7 +15707,7 @@
|
|
|
15707
15707
|
"bytesInOutput": 2219
|
|
15708
15708
|
},
|
|
15709
15709
|
"src/index.ts": {
|
|
15710
|
-
"bytesInOutput":
|
|
15710
|
+
"bytesInOutput": 5199
|
|
15711
15711
|
},
|
|
15712
15712
|
"src/agent/url.ts": {
|
|
15713
15713
|
"bytesInOutput": 745
|
|
@@ -15743,10 +15743,10 @@
|
|
|
15743
15743
|
"bytesInOutput": 12231
|
|
15744
15744
|
},
|
|
15745
15745
|
"src/agent/fix-function-call-arguments.ts": {
|
|
15746
|
-
"bytesInOutput":
|
|
15746
|
+
"bytesInOutput": 6182
|
|
15747
15747
|
},
|
|
15748
15748
|
"src/invalid-json-stringify.ts": {
|
|
15749
|
-
"bytesInOutput":
|
|
15749
|
+
"bytesInOutput": 2475
|
|
15750
15750
|
},
|
|
15751
15751
|
"src/no-duplicated-imports.ts": {
|
|
15752
15752
|
"bytesInOutput": 3736
|
|
@@ -15821,7 +15821,7 @@
|
|
|
15821
15821
|
"bytesInOutput": 3362
|
|
15822
15822
|
}
|
|
15823
15823
|
},
|
|
15824
|
-
"bytes":
|
|
15824
|
+
"bytes": 4373847
|
|
15825
15825
|
}
|
|
15826
15826
|
}
|
|
15827
15827
|
}
|
|
@@ -4,6 +4,14 @@ import { strict as assert } from "node:assert";
|
|
|
4
4
|
import debug from "debug";
|
|
5
5
|
import getDocumentationUrl from "../get-documentation-url.mjs";
|
|
6
6
|
var ruleId = "fix-function-call-arguments";
|
|
7
|
+
var DEFAULT_OPTIONS = {
|
|
8
|
+
typesToCheck: [
|
|
9
|
+
"Configuration<ResolvedServices>",
|
|
10
|
+
"Fixture<ResolvedServices>",
|
|
11
|
+
"InboundContext",
|
|
12
|
+
"{ get: () => string; }"
|
|
13
|
+
]
|
|
14
|
+
};
|
|
7
15
|
var createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
8
16
|
var log = debug("eslint-plugin:fix-function-call-arguments");
|
|
9
17
|
var rule = createRule({
|
|
@@ -18,10 +26,25 @@ var rule = createRule({
|
|
|
18
26
|
unknownError: 'Unknown error occurred in file "{{fileName}}": {{ error }}.'
|
|
19
27
|
},
|
|
20
28
|
fixable: "code",
|
|
21
|
-
schema: [
|
|
29
|
+
schema: [
|
|
30
|
+
{
|
|
31
|
+
type: "object",
|
|
32
|
+
properties: {
|
|
33
|
+
typesToCheck: {
|
|
34
|
+
description: "Text representation of the types of which the function call parameters will be examine",
|
|
35
|
+
type: "array",
|
|
36
|
+
items: {
|
|
37
|
+
type: "string"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
additionalProperties: false
|
|
42
|
+
}
|
|
43
|
+
]
|
|
22
44
|
},
|
|
23
|
-
defaultOptions: [],
|
|
45
|
+
defaultOptions: [DEFAULT_OPTIONS],
|
|
24
46
|
create(context) {
|
|
47
|
+
const { typesToCheck } = context.options[0] ?? DEFAULT_OPTIONS;
|
|
25
48
|
const parserServices = ESLintUtils.getParserServices(context);
|
|
26
49
|
const typeChecker = parserServices.program.getTypeChecker();
|
|
27
50
|
const sourceCode = context.sourceCode;
|
|
@@ -36,57 +59,59 @@ var rule = createRule({
|
|
|
36
59
|
const calleeTsNode = parserServices.esTreeNodeToTSNodeMap.get(callExpression.callee);
|
|
37
60
|
const calleeType = typeChecker.getTypeAtLocation(calleeTsNode);
|
|
38
61
|
const signatures = calleeType.getCallSignatures();
|
|
39
|
-
if (
|
|
40
|
-
// ignore complex signatures with overloads
|
|
41
|
-
signatures.length > 1
|
|
42
|
-
) {
|
|
62
|
+
if (signatures.length > 1) {
|
|
43
63
|
return;
|
|
44
64
|
}
|
|
45
65
|
const signature = signatures[0];
|
|
46
|
-
|
|
47
|
-
signature.typeParameters !== void 0 && signature.typeParameters.length > 0) {
|
|
66
|
+
assert.ok(signature, "Signature not found.");
|
|
67
|
+
if (signature.typeParameters !== void 0 && signature.typeParameters.length > 0) {
|
|
48
68
|
return;
|
|
49
69
|
}
|
|
50
|
-
|
|
51
|
-
const
|
|
70
|
+
log("signature:", signature.getDeclaration().getText());
|
|
71
|
+
const expectedParameters = signature.getParameters();
|
|
72
|
+
log(
|
|
73
|
+
"expected parameters:",
|
|
74
|
+
expectedParameters.map(
|
|
75
|
+
(expectedParameter) => typeChecker.typeToString(typeChecker.getTypeOfSymbol(expectedParameter))
|
|
76
|
+
)
|
|
77
|
+
);
|
|
78
|
+
const expectedParametersCount = expectedParameters.length;
|
|
52
79
|
const actualParameters = callExpression.arguments;
|
|
53
80
|
const actualParametersCount = actualParameters.length;
|
|
54
81
|
if (actualParametersCount === 0 || actualParametersCount === expectedParametersCount) {
|
|
55
82
|
return;
|
|
56
83
|
}
|
|
57
84
|
const parametersToKeep = [];
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
);
|
|
77
|
-
log(
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
log("not matched");
|
|
89
|
-
}
|
|
85
|
+
let expectedParameterIndex = 0;
|
|
86
|
+
for (const [actualParameterIndex, actualParameter] of actualParameters.entries()) {
|
|
87
|
+
if (expectedParameterIndex >= expectedParametersCount) {
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
const expectedParameter = expectedParameters[expectedParameterIndex];
|
|
91
|
+
assert.ok(expectedParameter, "Expected parameter not found.");
|
|
92
|
+
const expectedType = typeChecker.getTypeOfSymbol(expectedParameter);
|
|
93
|
+
const actualType = typeChecker.getTypeAtLocation(parserServices.esTreeNodeToTSNodeMap.get(actualParameter));
|
|
94
|
+
const actualTypeString = typeChecker.typeToString(actualType);
|
|
95
|
+
log(
|
|
96
|
+
"expected type: #",
|
|
97
|
+
expectedParameterIndex,
|
|
98
|
+
expectedParameter.escapedName,
|
|
99
|
+
typeChecker.typeToString(expectedType)
|
|
100
|
+
);
|
|
101
|
+
log("actual type: #", actualParameterIndex, sourceCode.getText(actualParameter), actualTypeString);
|
|
102
|
+
if (!typesToCheck.includes(actualTypeString)) {
|
|
103
|
+
parametersToKeep.push(actualParameter);
|
|
104
|
+
log("skipped");
|
|
105
|
+
} else if (
|
|
106
|
+
// @ts-expect-error: this is typescript's internal API
|
|
107
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
108
|
+
typeChecker.isTypeAssignableTo(actualType, expectedType) === true
|
|
109
|
+
) {
|
|
110
|
+
parametersToKeep.push(actualParameter);
|
|
111
|
+
log("matched");
|
|
112
|
+
expectedParameterIndex++;
|
|
113
|
+
} else {
|
|
114
|
+
log("not matched");
|
|
90
115
|
}
|
|
91
116
|
}
|
|
92
117
|
if (parametersToKeep.length === actualParametersCount) {
|
|
@@ -129,4 +154,4 @@ export {
|
|
|
129
154
|
fix_function_call_arguments_default as default,
|
|
130
155
|
ruleId
|
|
131
156
|
};
|
|
132
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L2ZpeC1mdW5jdGlvbi1jYWxsLWFyZ3VtZW50cy50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxTQUFTLGFBQWEsZ0JBQWdCO0FBQ3RDLFNBQVMsVUFBVSxjQUFjO0FBQ2pDLE9BQU8sV0FBVztBQUNsQixPQUFPLHlCQUF5QjtBQUV6QixJQUFNLFNBQVM7QUFLdEIsSUFBTSxrQkFBa0I7QUFBQSxFQUN0QixjQUFjO0FBQUEsSUFDWjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFDRjtBQUVBLElBQU0sYUFBYSxZQUFZLFlBQVksQ0FBQyxTQUFTLG9CQUFvQixJQUFJLENBQUM7QUFDOUUsSUFBTSxNQUFNLE1BQU0sMkNBQTJDO0FBRTdELElBQU0sT0FBTyxXQUFXO0FBQUEsRUFDdEIsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLElBQ2Y7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLHFDQUFxQztBQUFBLE1BQ3JDLGNBQWM7QUFBQSxJQUNoQjtBQUFBLElBQ0EsU0FBUztBQUFBLElBQ1QsUUFBUTtBQUFBLE1BQ047QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLFlBQVk7QUFBQSxVQUNWLGNBQWM7QUFBQSxZQUNaLGFBQWE7QUFBQSxZQUNiLE1BQU07QUFBQSxZQUNOLE9BQU87QUFBQSxjQUNMLE1BQU07QUFBQSxZQUNSO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxRQUNBLHNCQUFzQjtBQUFBLE1BQ3hCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLGdCQUFnQixDQUFDLGVBQWU7QUFBQSxFQUNoQyxPQUFPLFNBQVM7QUFDZCxVQUFNLEVBQUUsYUFBYSxJQUFJLFFBQVEsUUFBUSxDQUFDLEtBQUs7QUFDL0MsVUFBTSxpQkFBaUIsWUFBWSxrQkFBa0IsT0FBTztBQUM1RCxVQUFNLGNBQWMsZUFBZSxR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
|
package/dist-mjs/index.mjs
CHANGED
|
@@ -89,6 +89,7 @@ var src_default = {
|
|
|
89
89
|
[`@checkdigit/${noDuplicatedImportsRuleId}`]: "error",
|
|
90
90
|
[`@checkdigit/${requireFixedServicesImportRuleId}`]: "error",
|
|
91
91
|
[`@checkdigit/${requireTypeOutOfTypeOnlyImportsRuleId}`]: "error",
|
|
92
|
+
// --- agent rules BEGIN ---
|
|
92
93
|
[`@checkdigit/${noMappedResponseRuleId}`]: "off",
|
|
93
94
|
[`@checkdigit/${addUrlDomainRuleId}`]: "off",
|
|
94
95
|
[`@checkdigit/${noFixtureRuleId}`]: "off",
|
|
@@ -101,6 +102,7 @@ var src_default = {
|
|
|
101
102
|
[`@checkdigit/${noUnusedServiceVariablesRuleId}`]: "off",
|
|
102
103
|
[`@checkdigit/${noUnusedImportsRuleId}`]: "off",
|
|
103
104
|
[`@checkdigit/${fixFunctionCallArgumentsRuleId}`]: "off"
|
|
105
|
+
// --- agent rules END ---
|
|
104
106
|
}
|
|
105
107
|
},
|
|
106
108
|
recommended: {
|
|
@@ -121,44 +123,49 @@ var src_default = {
|
|
|
121
123
|
"agent-phase-1-test": {
|
|
122
124
|
overrides: [
|
|
123
125
|
{
|
|
124
|
-
files: ["*.spec.ts", "*.test.ts", "src/api/v*/index.ts"]
|
|
126
|
+
files: ["*.spec.ts", "*.test.ts", "src/api/v*/index.ts"],
|
|
127
|
+
rules: {
|
|
128
|
+
[`@checkdigit/${noMappedResponseRuleId}`]: "error",
|
|
129
|
+
[`@checkdigit/${addUrlDomainRuleId}`]: "error",
|
|
130
|
+
[`@checkdigit/${noFixtureRuleId}`]: "error",
|
|
131
|
+
[`@checkdigit/${noServiceWrapperRuleId}`]: "error",
|
|
132
|
+
[`@checkdigit/${noStatusCodeRuleId}`]: "error",
|
|
133
|
+
[`@checkdigit/${fetchResponseBodyJsonRuleId}`]: "error",
|
|
134
|
+
[`@checkdigit/${fetchResponseHeaderGetterRuleId}`]: "error",
|
|
135
|
+
[`@checkdigit/${fetchThenRuleId}`]: "error",
|
|
136
|
+
[`@checkdigit/${noUnusedFunctionArgumentsRuleId}`]: "error",
|
|
137
|
+
[`@checkdigit/${noUnusedServiceVariablesRuleId}`]: "error",
|
|
138
|
+
[`@checkdigit/${noUnusedImportsRuleId}`]: "error",
|
|
139
|
+
[`@checkdigit/${fixFunctionCallArgumentsRuleId}`]: "error"
|
|
140
|
+
}
|
|
125
141
|
}
|
|
126
|
-
]
|
|
127
|
-
rules: {
|
|
128
|
-
[`@checkdigit/${noMappedResponseRuleId}`]: "error",
|
|
129
|
-
[`@checkdigit/${addUrlDomainRuleId}`]: "error",
|
|
130
|
-
[`@checkdigit/${noFixtureRuleId}`]: "error",
|
|
131
|
-
[`@checkdigit/${noServiceWrapperRuleId}`]: "error",
|
|
132
|
-
[`@checkdigit/${noStatusCodeRuleId}`]: "error",
|
|
133
|
-
[`@checkdigit/${fetchResponseBodyJsonRuleId}`]: "error",
|
|
134
|
-
[`@checkdigit/${fetchResponseHeaderGetterRuleId}`]: "error",
|
|
135
|
-
[`@checkdigit/${fetchThenRuleId}`]: "error",
|
|
136
|
-
[`@checkdigit/${noUnusedFunctionArgumentsRuleId}`]: "error",
|
|
137
|
-
[`@checkdigit/${noUnusedServiceVariablesRuleId}`]: "error",
|
|
138
|
-
[`@checkdigit/${noUnusedImportsRuleId}`]: "error",
|
|
139
|
-
[`@checkdigit/${fixFunctionCallArgumentsRuleId}`]: "error"
|
|
140
|
-
}
|
|
142
|
+
]
|
|
141
143
|
},
|
|
142
144
|
"agent-phase-2-production": {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
145
|
+
overrides: [
|
|
146
|
+
{
|
|
147
|
+
files: ["*.ts"],
|
|
148
|
+
excludedFiles: ["*.spec.ts", "*.test.ts"],
|
|
149
|
+
rules: {
|
|
150
|
+
[`@checkdigit/${noMappedResponseRuleId}`]: "error",
|
|
151
|
+
[`@checkdigit/${addUrlDomainRuleId}`]: "error",
|
|
152
|
+
[`@checkdigit/${noFixtureRuleId}`]: "off",
|
|
153
|
+
[`@checkdigit/${noServiceWrapperRuleId}`]: "error",
|
|
154
|
+
[`@checkdigit/${noStatusCodeRuleId}`]: "error",
|
|
155
|
+
[`@checkdigit/${fetchResponseBodyJsonRuleId}`]: "error",
|
|
156
|
+
[`@checkdigit/${fetchResponseHeaderGetterRuleId}`]: "error",
|
|
157
|
+
[`@checkdigit/${fetchThenRuleId}`]: "error",
|
|
158
|
+
[`@checkdigit/${noUnusedFunctionArgumentsRuleId}`]: "error",
|
|
159
|
+
[`@checkdigit/${noUnusedServiceVariablesRuleId}`]: "error",
|
|
160
|
+
[`@checkdigit/${noUnusedImportsRuleId}`]: "error",
|
|
161
|
+
[`@checkdigit/${fixFunctionCallArgumentsRuleId}`]: "error"
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
]
|
|
158
165
|
}
|
|
159
166
|
}
|
|
160
167
|
};
|
|
161
168
|
export {
|
|
162
169
|
src_default as default
|
|
163
170
|
};
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,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
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { ESLintUtils } from '@typescript-eslint/utils';
|
|
2
2
|
export declare const ruleId = "fix-function-call-arguments";
|
|
3
|
-
|
|
3
|
+
export interface FixFunctionCallArgumentsRuleOptions {
|
|
4
|
+
typesToCheck: string[];
|
|
5
|
+
}
|
|
6
|
+
declare const rule: ESLintUtils.RuleModule<"unknownError" | "removeIncompatibleFunctionArguments", {
|
|
7
|
+
typesToCheck: string[];
|
|
8
|
+
}[], ESLintUtils.RuleListener>;
|
|
4
9
|
export default rule;
|
package/dist-types/index.d.ts
CHANGED
|
@@ -27,7 +27,9 @@ declare const _default: {
|
|
|
27
27
|
"no-unused-function-argument": import("@typescript-eslint/utils/ts-eslint").RuleModule<"unknownError" | "removeUnusedFunctionArguments", never[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
28
28
|
"no-unused-service-variable": import("@typescript-eslint/utils/ts-eslint").RuleModule<"unknownError" | "removeUnusedServiceVariables", never[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
29
29
|
"no-unused-imports": import("@typescript-eslint/utils/ts-eslint").RuleModule<"unknownError" | "removeUnusedImports", never[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
30
|
-
"fix-function-call-arguments": import("@typescript-eslint/utils/ts-eslint").RuleModule<"unknownError" | "removeIncompatibleFunctionArguments",
|
|
30
|
+
"fix-function-call-arguments": import("@typescript-eslint/utils/ts-eslint").RuleModule<"unknownError" | "removeIncompatibleFunctionArguments", {
|
|
31
|
+
typesToCheck: string[];
|
|
32
|
+
}[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
31
33
|
};
|
|
32
34
|
configs: {
|
|
33
35
|
all: {
|
|
@@ -80,38 +82,41 @@ declare const _default: {
|
|
|
80
82
|
'agent-phase-1-test': {
|
|
81
83
|
overrides: {
|
|
82
84
|
files: string[];
|
|
85
|
+
rules: {
|
|
86
|
+
"@checkdigit/no-mapped-response": string;
|
|
87
|
+
"@checkdigit/add-url-domain": string;
|
|
88
|
+
"@checkdigit/no-fixture": string;
|
|
89
|
+
"@checkdigit/no-service-wrapper": string;
|
|
90
|
+
"@checkdigit/no-status-code": string;
|
|
91
|
+
"@checkdigit/fetch-response-body-json": string;
|
|
92
|
+
"@checkdigit/fetch-response-header-getter-ts": string;
|
|
93
|
+
"@checkdigit/fetch-then": string;
|
|
94
|
+
"@checkdigit/no-unused-function-argument": string;
|
|
95
|
+
"@checkdigit/no-unused-service-variable": string;
|
|
96
|
+
"@checkdigit/no-unused-imports": string;
|
|
97
|
+
"@checkdigit/fix-function-call-arguments": string;
|
|
98
|
+
};
|
|
83
99
|
}[];
|
|
84
|
-
rules: {
|
|
85
|
-
"@checkdigit/no-mapped-response": string;
|
|
86
|
-
"@checkdigit/add-url-domain": string;
|
|
87
|
-
"@checkdigit/no-fixture": string;
|
|
88
|
-
"@checkdigit/no-service-wrapper": string;
|
|
89
|
-
"@checkdigit/no-status-code": string;
|
|
90
|
-
"@checkdigit/fetch-response-body-json": string;
|
|
91
|
-
"@checkdigit/fetch-response-header-getter-ts": string;
|
|
92
|
-
"@checkdigit/fetch-then": string;
|
|
93
|
-
"@checkdigit/no-unused-function-argument": string;
|
|
94
|
-
"@checkdigit/no-unused-service-variable": string;
|
|
95
|
-
"@checkdigit/no-unused-imports": string;
|
|
96
|
-
"@checkdigit/fix-function-call-arguments": string;
|
|
97
|
-
};
|
|
98
100
|
};
|
|
99
101
|
'agent-phase-2-production': {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
102
|
+
overrides: {
|
|
103
|
+
files: string[];
|
|
104
|
+
excludedFiles: string[];
|
|
105
|
+
rules: {
|
|
106
|
+
"@checkdigit/no-mapped-response": string;
|
|
107
|
+
"@checkdigit/add-url-domain": string;
|
|
108
|
+
"@checkdigit/no-fixture": string;
|
|
109
|
+
"@checkdigit/no-service-wrapper": string;
|
|
110
|
+
"@checkdigit/no-status-code": string;
|
|
111
|
+
"@checkdigit/fetch-response-body-json": string;
|
|
112
|
+
"@checkdigit/fetch-response-header-getter-ts": string;
|
|
113
|
+
"@checkdigit/fetch-then": string;
|
|
114
|
+
"@checkdigit/no-unused-function-argument": string;
|
|
115
|
+
"@checkdigit/no-unused-service-variable": string;
|
|
116
|
+
"@checkdigit/no-unused-imports": string;
|
|
117
|
+
"@checkdigit/fix-function-call-arguments": string;
|
|
118
|
+
};
|
|
119
|
+
}[];
|
|
115
120
|
};
|
|
116
121
|
};
|
|
117
122
|
};
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@checkdigit/eslint-plugin","version":"6.6.0-PR.75-
|
|
1
|
+
{"name":"@checkdigit/eslint-plugin","version":"6.6.0-PR.75-4a28","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","require":"./dist-cjs/index.cjs","import":"./dist-mjs/index.mjs","default":"./dist-mjs/index.mjs"}},"files":["src","dist-types","dist-cjs","dist-mjs","!src/**/*.test.ts","!src/**/*.spec.ts","!dist-types/**/*.test.d.ts","!dist-types/**/*.spec.d.ts","!dist-cjs/**/*.test.cjs","!dist-cjs/**/*.spec.cjs","!dist-mjs/**/*.test.mjs","!dist-mjs/**/*.spec.mjs","SECURITY.md"],"scripts":{"build:dist-cjs":"rimraf dist-cjs && npx builder --type=commonjs --sourceMap --entryPoint=index.ts --outDir=dist-cjs --outFile=index.cjs --external=espree && echo \"module.exports = module.exports.default;\" >> dist-cjs/index.cjs","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 --ignore-path .gitignore .","lint:fix":"eslint --ignore-path .gitignore . --fix","prepublishOnly":"npm run build:dist-types && npm run build:dist-cjs && 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":"7.18.0","@typescript-eslint/utils":"7.18.0","debug":"^4.3.7","ts-api-utils":"^1.3.0"},"devDependencies":{"@checkdigit/jest-config":"^6.0.2","@checkdigit/prettier-config":"^5.5.0","@checkdigit/typescript-config":"6.0.0","@types/debug":"^4.1.12","@types/eslint":"8.56.10","@typescript-eslint/eslint-plugin":"7.18.0","@typescript-eslint/parser":"7.18.0","@typescript-eslint/rule-tester":"7.18.0","eslint-config-prettier":"^9.1.0","eslint-plugin-eslint-plugin":"^6.2.0","eslint-plugin-import":"^2.29.1","eslint-plugin-no-only-tests":"^3.1.0","eslint-plugin-no-secrets":"^1.0.2","eslint-plugin-node":"^11.1.0","eslint-plugin-sonarjs":"0.24.0","http-status-codes":"^2.3.0"},"peerDependencies":{"eslint":">=8 <9"},"engines":{"node":">=20.14"}}
|
|
@@ -13,6 +13,18 @@ import getDocumentationUrl from '../get-documentation-url';
|
|
|
13
13
|
|
|
14
14
|
export const ruleId = 'fix-function-call-arguments';
|
|
15
15
|
|
|
16
|
+
export interface FixFunctionCallArgumentsRuleOptions {
|
|
17
|
+
typesToCheck: string[];
|
|
18
|
+
}
|
|
19
|
+
const DEFAULT_OPTIONS = {
|
|
20
|
+
typesToCheck: [
|
|
21
|
+
'Configuration<ResolvedServices>',
|
|
22
|
+
'Fixture<ResolvedServices>',
|
|
23
|
+
'InboundContext',
|
|
24
|
+
'{ get: () => string; }',
|
|
25
|
+
],
|
|
26
|
+
};
|
|
27
|
+
|
|
16
28
|
const createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
17
29
|
const log = debug('eslint-plugin:fix-function-call-arguments');
|
|
18
30
|
|
|
@@ -28,10 +40,25 @@ const rule = createRule({
|
|
|
28
40
|
unknownError: 'Unknown error occurred in file "{{fileName}}": {{ error }}.',
|
|
29
41
|
},
|
|
30
42
|
fixable: 'code',
|
|
31
|
-
schema: [
|
|
43
|
+
schema: [
|
|
44
|
+
{
|
|
45
|
+
type: 'object',
|
|
46
|
+
properties: {
|
|
47
|
+
typesToCheck: {
|
|
48
|
+
description: 'Text representation of the types of which the function call parameters will be examine',
|
|
49
|
+
type: 'array',
|
|
50
|
+
items: {
|
|
51
|
+
type: 'string',
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
additionalProperties: false,
|
|
56
|
+
},
|
|
57
|
+
],
|
|
32
58
|
},
|
|
33
|
-
defaultOptions: [],
|
|
59
|
+
defaultOptions: [DEFAULT_OPTIONS],
|
|
34
60
|
create(context) {
|
|
61
|
+
const { typesToCheck } = context.options[0] ?? DEFAULT_OPTIONS;
|
|
35
62
|
const parserServices = ESLintUtils.getParserServices(context);
|
|
36
63
|
const typeChecker = parserServices.program.getTypeChecker();
|
|
37
64
|
const sourceCode = context.sourceCode;
|
|
@@ -51,70 +78,69 @@ const rule = createRule({
|
|
|
51
78
|
const calleeType = typeChecker.getTypeAtLocation(calleeTsNode);
|
|
52
79
|
|
|
53
80
|
const signatures = calleeType.getCallSignatures();
|
|
54
|
-
if (
|
|
81
|
+
if (signatures.length > 1) {
|
|
55
82
|
// ignore complex signatures with overloads
|
|
56
|
-
signatures.length > 1
|
|
57
|
-
) {
|
|
58
83
|
return;
|
|
59
84
|
}
|
|
60
85
|
|
|
61
86
|
const signature = signatures[0];
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
// ignore complex signatures
|
|
65
|
-
(signature.typeParameters !== undefined && signature.typeParameters.length > 0)
|
|
66
|
-
) {
|
|
87
|
+
assert.ok(signature, 'Signature not found.');
|
|
88
|
+
if (signature.typeParameters !== undefined && signature.typeParameters.length > 0) {
|
|
89
|
+
// ignore complex signatures with type parameters
|
|
67
90
|
return;
|
|
68
91
|
}
|
|
69
92
|
|
|
70
|
-
|
|
71
|
-
const
|
|
93
|
+
log('signature:', signature.getDeclaration().getText());
|
|
94
|
+
const expectedParameters = signature.getParameters();
|
|
95
|
+
log(
|
|
96
|
+
'expected parameters:',
|
|
97
|
+
expectedParameters.map((expectedParameter) =>
|
|
98
|
+
typeChecker.typeToString(typeChecker.getTypeOfSymbol(expectedParameter)),
|
|
99
|
+
),
|
|
100
|
+
);
|
|
101
|
+
const expectedParametersCount = expectedParameters.length;
|
|
72
102
|
const actualParameters = callExpression.arguments;
|
|
73
103
|
const actualParametersCount = actualParameters.length;
|
|
74
104
|
if (actualParametersCount === 0 || actualParametersCount === expectedParametersCount) {
|
|
75
105
|
return;
|
|
76
106
|
}
|
|
77
|
-
const parametersToKeep: TSESTree.CallExpressionArgument[] = [];
|
|
78
|
-
|
|
79
|
-
if (expectedParametersCount > 0) {
|
|
80
|
-
let expectedParameterIndex = 0;
|
|
81
|
-
for (const [actualParameterIndex, actualParameter] of actualParameters.entries()) {
|
|
82
|
-
if (expectedParameterIndex >= expectedParametersCount) {
|
|
83
|
-
parametersToKeep.push(actualParameter);
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
const expectedParameter = signatureParameters[expectedParameterIndex];
|
|
88
|
-
assert.ok(expectedParameter, 'Expected parameter not found.');
|
|
89
107
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
108
|
+
const parametersToKeep: TSESTree.CallExpressionArgument[] = [];
|
|
109
|
+
let expectedParameterIndex = 0;
|
|
110
|
+
for (const [actualParameterIndex, actualParameter] of actualParameters.entries()) {
|
|
111
|
+
// eslint-disable-next-line max-depth
|
|
112
|
+
if (expectedParameterIndex >= expectedParametersCount) {
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
94
115
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
116
|
+
const expectedParameter = expectedParameters[expectedParameterIndex];
|
|
117
|
+
assert.ok(expectedParameter, 'Expected parameter not found.');
|
|
118
|
+
|
|
119
|
+
const expectedType = typeChecker.getTypeOfSymbol(expectedParameter);
|
|
120
|
+
const actualType = typeChecker.getTypeAtLocation(parserServices.esTreeNodeToTSNodeMap.get(actualParameter));
|
|
121
|
+
const actualTypeString = typeChecker.typeToString(actualType);
|
|
122
|
+
log(
|
|
123
|
+
'expected type: #',
|
|
124
|
+
expectedParameterIndex,
|
|
125
|
+
expectedParameter.escapedName,
|
|
126
|
+
typeChecker.typeToString(expectedType),
|
|
127
|
+
);
|
|
128
|
+
log('actual type: #', actualParameterIndex, sourceCode.getText(actualParameter), actualTypeString);
|
|
129
|
+
|
|
130
|
+
if (!typesToCheck.includes(actualTypeString)) {
|
|
131
|
+
// skip the parameter type checking if it's not in the candidate types
|
|
132
|
+
parametersToKeep.push(actualParameter);
|
|
133
|
+
log('skipped');
|
|
134
|
+
} else if (
|
|
135
|
+
// @ts-expect-error: this is typescript's internal API
|
|
110
136
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
137
|
+
typeChecker.isTypeAssignableTo(actualType, expectedType) === true
|
|
138
|
+
) {
|
|
139
|
+
parametersToKeep.push(actualParameter);
|
|
140
|
+
log('matched');
|
|
141
|
+
expectedParameterIndex++;
|
|
142
|
+
} else {
|
|
143
|
+
log('not matched');
|
|
118
144
|
}
|
|
119
145
|
}
|
|
120
146
|
|