js-code-detector 0.0.1 → 0.0.3
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/README.md +23 -2
- package/bin/detect.js +3 -2
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +6 -1
- package/dist/cjs/util/ast_util/AstUtil.d.ts +6 -1
- package/dist/cjs/util/ast_util/AstUtil.js +27 -2
- package/dist/cjs/util/ast_util/intrinsicElements.d.ts +2 -0
- package/dist/cjs/util/ast_util/intrinsicElements.js +495 -0
- package/dist/cjs/util/report_util/code_block_detect.js +6 -0
- package/dist/cjs/util/report_util/file_identifier_detect.d.ts +1 -0
- package/dist/cjs/util/report_util/file_identifier_detect.js +59 -0
- package/dist/cjs/util/report_util.d.ts +1 -0
- package/dist/cjs/util/report_util.js +3 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -14,9 +14,30 @@ $ npm run dev
|
|
|
14
14
|
$ npm run build
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
##
|
|
17
|
+
## 说明
|
|
18
|
+
|
|
19
|
+
包用于检测项目当前分支 与 master分支的差异,并出具报告,展示代码改动的影响
|
|
20
|
+
目前适用于 umi4.x 版本的项目
|
|
21
|
+
|
|
22
|
+
## 使用
|
|
23
|
+
|
|
24
|
+
项目安装 js-code-detector
|
|
25
|
+
package.json 中添加 scripts 命令 ```npx detect```
|
|
26
|
+
执行该命令可在当前项目目录下生成报告
|
|
27
|
+
|
|
28
|
+
## 报告说明
|
|
29
|
+
- filePath 文件路径
|
|
30
|
+
- type 改动类型 add remove modify
|
|
31
|
+
- filesDependsOnMe 依赖当前文件的文件
|
|
32
|
+
- dangerIdentifiers 危险标识符(包括 1、找不到定义的, 2、函数的参数是一个函数,并进行调用的)
|
|
33
|
+
- blockReports 区块报告(每个diff块产生一个报告)
|
|
34
|
+
- kind 区块类型,目前把重点的类型单独提取处理,包括 "Import"|"Declaration"|"Assignment"|"SelfUpdate"|"Invoke"
|
|
35
|
+
- diff 区块的原始改动内容
|
|
36
|
+
- added 增加的标识符
|
|
37
|
+
- addedEffects 增加的标识符的影响
|
|
38
|
+
- causeBy 增加的标识符的来源
|
|
39
|
+
- effects 影响到的标识符的位置
|
|
18
40
|
|
|
19
|
-
TODO
|
|
20
41
|
|
|
21
42
|
## LICENSE
|
|
22
43
|
|
package/bin/detect.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
+
const { writeGitDiffTxt, getGitRepositoryAndBranch, generateReport } = require('../dist/cjs/index')
|
|
3
4
|
async function main() {
|
|
4
|
-
const { gitUrl, branchName } = await
|
|
5
|
-
|
|
5
|
+
const { gitUrl, branchName } = await getGitRepositoryAndBranch();
|
|
6
|
+
writeGitDiffTxt(gitUrl, branchName).then(reportContent => generateReport(reportContent));
|
|
6
7
|
}
|
|
7
8
|
main();
|
package/dist/cjs/index.d.ts
CHANGED
package/dist/cjs/index.js
CHANGED
|
@@ -29,6 +29,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
29
29
|
// src/index.ts
|
|
30
30
|
var src_exports = {};
|
|
31
31
|
__export(src_exports, {
|
|
32
|
+
generateReport: () => generateReport,
|
|
32
33
|
getGitRepositoryAndBranch: () => getGitRepositoryAndBranch,
|
|
33
34
|
umiPluginCallback: () => umiPluginCallback,
|
|
34
35
|
writeGitDiffTxt: () => writeGitDiffTxt
|
|
@@ -74,7 +75,7 @@ git diff master..$2 --unified=0 --output=git_diff.txt
|
|
|
74
75
|
cd ..
|
|
75
76
|
git clone $1 source
|
|
76
77
|
`;
|
|
77
|
-
var pluginFileContent = `import * as cb from "
|
|
78
|
+
var pluginFileContent = `import * as cb from "js-code-detector"
|
|
78
79
|
|
|
79
80
|
export default async (api) => {
|
|
80
81
|
const buildCallback = () => cb.umiPluginCallback(api);
|
|
@@ -102,8 +103,12 @@ async function getGitRepositoryAndBranch() {
|
|
|
102
103
|
branchName: branch.stdout
|
|
103
104
|
};
|
|
104
105
|
}
|
|
106
|
+
function generateReport(jsonStr) {
|
|
107
|
+
(0, import_fs2.writeFileSync)((0, import_path.join)(process.cwd(), `${(0, import_dayjs.default)().format("YYYYMDD_HHmm")}_${jsonName}`), jsonStr, { encoding: "utf-8", flag: "w" });
|
|
108
|
+
}
|
|
105
109
|
// Annotate the CommonJS export names for ESM import in node:
|
|
106
110
|
0 && (module.exports = {
|
|
111
|
+
generateReport,
|
|
107
112
|
getGitRepositoryAndBranch,
|
|
108
113
|
umiPluginCallback,
|
|
109
114
|
writeGitDiffTxt
|
|
@@ -49,7 +49,7 @@ export default class AstUtil {
|
|
|
49
49
|
static isVarInit(node: AstNode): boolean;
|
|
50
50
|
static isReturnArgument(node: AstNode): boolean;
|
|
51
51
|
static collectDependenceIds(node: AstNode): void;
|
|
52
|
-
static
|
|
52
|
+
static markDependenceIdCrossScope(node: AstNode, scopeId: AstNode): void;
|
|
53
53
|
static isUseStateVarDec(node: AstNode): node is (AstNode & {
|
|
54
54
|
type: "VariableDeclarator";
|
|
55
55
|
id: {
|
|
@@ -92,7 +92,12 @@ export default class AstUtil {
|
|
|
92
92
|
static isValidArrayNodeCollect(astNode: any): astNode is AstNode[];
|
|
93
93
|
static isValidNodeCollect(astNode: AstNode): astNode is AstNode;
|
|
94
94
|
static windowProperties: string[];
|
|
95
|
+
static intrinsicElements: string[];
|
|
96
|
+
static standardAttributes: string[];
|
|
97
|
+
static isUntrackedId(id: AstNode): boolean;
|
|
95
98
|
static isPropertyOfGlobal(node: AstNode): boolean;
|
|
99
|
+
static isIntrinsicElement(node: AstNode): boolean | "" | undefined;
|
|
100
|
+
static isStandardAttribute(node: AstNode): boolean;
|
|
96
101
|
static getTopScopeNodesByLineNumberRange(mapFileLineToNodeSet: Map<number, Set<AstNode>>, lineNumberStart: number, lineNumberEnd: number): AstNode[];
|
|
97
102
|
static getTopScopeNodesByLineNumber(mapFileLineToNodeSet: Map<number, Set<AstNode>>, lineNumber: number): AstNode[];
|
|
98
103
|
static isSubNodeOfVariableDeclarator(node: AstNode): boolean;
|
|
@@ -23,6 +23,7 @@ __export(AstUtil_exports, {
|
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(AstUtil_exports);
|
|
25
25
|
var import_windowProperties = require("./windowProperties");
|
|
26
|
+
var import_intrinsicElements = require("./intrinsicElements");
|
|
26
27
|
var AstUtil = class {
|
|
27
28
|
static getNodePath(node) {
|
|
28
29
|
return [...node._util.ancestors, node].map((n) => n.type).join(":") + ":" + node.name;
|
|
@@ -185,12 +186,12 @@ var AstUtil = class {
|
|
|
185
186
|
const firstPick = sameNameIds[0];
|
|
186
187
|
if (firstPick) {
|
|
187
188
|
firstPick._util.effectIds.add(dependenceId);
|
|
188
|
-
this.
|
|
189
|
+
this.markDependenceIdCrossScope(dependenceId, firstPick);
|
|
189
190
|
}
|
|
190
191
|
}
|
|
191
192
|
}
|
|
192
193
|
}
|
|
193
|
-
static
|
|
194
|
+
static markDependenceIdCrossScope(node, scopeId) {
|
|
194
195
|
var _a, _b, _c;
|
|
195
196
|
const isParamsElement = scopeId._util.parentProperty === "params";
|
|
196
197
|
const isCalleeId = ((_a = node._util.parent) == null ? void 0 : _a.type) === "CallExpression" && node._util.parentProperty === "callee";
|
|
@@ -425,6 +426,18 @@ var AstUtil = class {
|
|
|
425
426
|
expression.name && callback(expression);
|
|
426
427
|
} else if (exp.type === "JSXIdentifier") {
|
|
427
428
|
callback(exp);
|
|
429
|
+
} else if (exp.type === "JSXAttribute") {
|
|
430
|
+
const value = exp.value;
|
|
431
|
+
value && this._deepFindIdOfExpression(value, callback);
|
|
432
|
+
} else if (exp.type === "JSXElement") {
|
|
433
|
+
const openingElement = exp.openingElement;
|
|
434
|
+
this._deepFindIdOfExpression(openingElement, callback);
|
|
435
|
+
} else if (exp.type === "JSXOpeningElement") {
|
|
436
|
+
const { name, attributes } = exp;
|
|
437
|
+
this._deepFindIdOfExpression(name, callback);
|
|
438
|
+
for (const attribute of attributes) {
|
|
439
|
+
this._deepFindIdOfExpression(attribute, callback);
|
|
440
|
+
}
|
|
428
441
|
}
|
|
429
442
|
}
|
|
430
443
|
static getRootIdentifierOfMemberExpression(memExp) {
|
|
@@ -522,9 +535,19 @@ var AstUtil = class {
|
|
|
522
535
|
static isValidNodeCollect(astNode) {
|
|
523
536
|
return typeof (astNode == null ? void 0 : astNode.type) === "string";
|
|
524
537
|
}
|
|
538
|
+
static isUntrackedId(id) {
|
|
539
|
+
return id._util.variableScope.length === 0 && !this.isPropertyOfGlobal(id) && !this.isIntrinsicElement(id) && !this.isStandardAttribute(id);
|
|
540
|
+
}
|
|
525
541
|
static isPropertyOfGlobal(node) {
|
|
526
542
|
return node.type === "Identifier" && !node._util.variableScope.length && this.windowProperties.includes(node.name);
|
|
527
543
|
}
|
|
544
|
+
static isIntrinsicElement(node) {
|
|
545
|
+
var _a;
|
|
546
|
+
return node.type === "JSXIdentifier" && ((_a = node._util.parent) == null ? void 0 : _a.type) && ["JSXOpeningElement", "JSXClosingElement"].includes(node._util.parent.type) && this.intrinsicElements.includes(node.name);
|
|
547
|
+
}
|
|
548
|
+
static isStandardAttribute(node) {
|
|
549
|
+
return node._util.parent.type === "JSXAttribute" && this.standardAttributes.includes(node.name);
|
|
550
|
+
}
|
|
528
551
|
static getTopScopeNodesByLineNumberRange(mapFileLineToNodeSet, lineNumberStart, lineNumberEnd) {
|
|
529
552
|
const nodeSet = /* @__PURE__ */ new Set();
|
|
530
553
|
for (let i = lineNumberStart; i <= lineNumberEnd; i++) {
|
|
@@ -569,3 +592,5 @@ AstUtil.invalidNodeKey = [
|
|
|
569
592
|
"tokens"
|
|
570
593
|
];
|
|
571
594
|
AstUtil.windowProperties = import_windowProperties.windowProperties;
|
|
595
|
+
AstUtil.intrinsicElements = import_intrinsicElements.intrinsicElements;
|
|
596
|
+
AstUtil.standardAttributes = import_intrinsicElements.standardAttributes;
|
|
@@ -0,0 +1,495 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/util/ast_util/intrinsicElements.ts
|
|
20
|
+
var intrinsicElements_exports = {};
|
|
21
|
+
__export(intrinsicElements_exports, {
|
|
22
|
+
intrinsicElements: () => intrinsicElements,
|
|
23
|
+
standardAttributes: () => standardAttributes
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(intrinsicElements_exports);
|
|
26
|
+
var intrinsicElements = [
|
|
27
|
+
"a",
|
|
28
|
+
"abbr",
|
|
29
|
+
"address",
|
|
30
|
+
"area",
|
|
31
|
+
"article",
|
|
32
|
+
"aside",
|
|
33
|
+
"audio",
|
|
34
|
+
"b",
|
|
35
|
+
"base",
|
|
36
|
+
"bdi",
|
|
37
|
+
"bdo",
|
|
38
|
+
"big",
|
|
39
|
+
"blockquote",
|
|
40
|
+
"body",
|
|
41
|
+
"br",
|
|
42
|
+
"button",
|
|
43
|
+
"canvas",
|
|
44
|
+
"caption",
|
|
45
|
+
"cite",
|
|
46
|
+
"code",
|
|
47
|
+
"col",
|
|
48
|
+
"colgroup",
|
|
49
|
+
"data",
|
|
50
|
+
"datalist",
|
|
51
|
+
"dd",
|
|
52
|
+
"del",
|
|
53
|
+
"details",
|
|
54
|
+
"dfn",
|
|
55
|
+
"dialog",
|
|
56
|
+
"div",
|
|
57
|
+
"dl",
|
|
58
|
+
"dt",
|
|
59
|
+
"em",
|
|
60
|
+
"embed",
|
|
61
|
+
"fieldset",
|
|
62
|
+
"figcaption",
|
|
63
|
+
"figure",
|
|
64
|
+
"footer",
|
|
65
|
+
"form",
|
|
66
|
+
"h1",
|
|
67
|
+
"h2",
|
|
68
|
+
"h3",
|
|
69
|
+
"h4",
|
|
70
|
+
"h5",
|
|
71
|
+
"h6",
|
|
72
|
+
"head",
|
|
73
|
+
"header",
|
|
74
|
+
"hgroup",
|
|
75
|
+
"hr",
|
|
76
|
+
"html",
|
|
77
|
+
"i",
|
|
78
|
+
"iframe",
|
|
79
|
+
"img",
|
|
80
|
+
"input",
|
|
81
|
+
"ins",
|
|
82
|
+
"kbd",
|
|
83
|
+
"keygen",
|
|
84
|
+
"label",
|
|
85
|
+
"legend",
|
|
86
|
+
"li",
|
|
87
|
+
"link",
|
|
88
|
+
"main",
|
|
89
|
+
"map",
|
|
90
|
+
"mark",
|
|
91
|
+
"menu",
|
|
92
|
+
"menuitem",
|
|
93
|
+
"meta",
|
|
94
|
+
"meter",
|
|
95
|
+
"nav",
|
|
96
|
+
"noindex",
|
|
97
|
+
"noscript",
|
|
98
|
+
"object",
|
|
99
|
+
"ol",
|
|
100
|
+
"optgroup",
|
|
101
|
+
"option",
|
|
102
|
+
"output",
|
|
103
|
+
"p",
|
|
104
|
+
"param",
|
|
105
|
+
"picture",
|
|
106
|
+
"pre",
|
|
107
|
+
"progress",
|
|
108
|
+
"q",
|
|
109
|
+
"rp",
|
|
110
|
+
"rt",
|
|
111
|
+
"ruby",
|
|
112
|
+
"s",
|
|
113
|
+
"samp",
|
|
114
|
+
"slot",
|
|
115
|
+
"script",
|
|
116
|
+
"section",
|
|
117
|
+
"select",
|
|
118
|
+
"small",
|
|
119
|
+
"source",
|
|
120
|
+
"span",
|
|
121
|
+
"strong",
|
|
122
|
+
"style",
|
|
123
|
+
"sub",
|
|
124
|
+
"summary",
|
|
125
|
+
"sup",
|
|
126
|
+
"table",
|
|
127
|
+
"template",
|
|
128
|
+
"tbody",
|
|
129
|
+
"td",
|
|
130
|
+
"textarea",
|
|
131
|
+
"tfoot",
|
|
132
|
+
"th",
|
|
133
|
+
"thead",
|
|
134
|
+
"time",
|
|
135
|
+
"title",
|
|
136
|
+
"tr",
|
|
137
|
+
"track",
|
|
138
|
+
"u",
|
|
139
|
+
"ul",
|
|
140
|
+
"video",
|
|
141
|
+
"wbr",
|
|
142
|
+
"webview",
|
|
143
|
+
"svg",
|
|
144
|
+
"animate",
|
|
145
|
+
"animateMotion",
|
|
146
|
+
"animateTransform",
|
|
147
|
+
"circle",
|
|
148
|
+
"clipPath",
|
|
149
|
+
"defs",
|
|
150
|
+
"desc",
|
|
151
|
+
"ellipse",
|
|
152
|
+
"feBlend",
|
|
153
|
+
"feColorMatrix",
|
|
154
|
+
"feComponentTransfer",
|
|
155
|
+
"feComposite",
|
|
156
|
+
"feConvolveMatrix",
|
|
157
|
+
"feDiffuseLighting",
|
|
158
|
+
"feDisplacementMap",
|
|
159
|
+
"feDistantLight",
|
|
160
|
+
"feDropShadow",
|
|
161
|
+
"feFlood",
|
|
162
|
+
"feFuncA",
|
|
163
|
+
"feFuncB",
|
|
164
|
+
"feFuncG",
|
|
165
|
+
"feFuncR",
|
|
166
|
+
"feGaussianBlur",
|
|
167
|
+
"feImage",
|
|
168
|
+
"feMerge",
|
|
169
|
+
"feMergeNode",
|
|
170
|
+
"feMorphology",
|
|
171
|
+
"feOffset",
|
|
172
|
+
"fePointLight",
|
|
173
|
+
"feSpecularLighting",
|
|
174
|
+
"feSpotLight",
|
|
175
|
+
"feTile",
|
|
176
|
+
"feTurbulence",
|
|
177
|
+
"filter",
|
|
178
|
+
"foreignObject",
|
|
179
|
+
"g",
|
|
180
|
+
"image",
|
|
181
|
+
"line",
|
|
182
|
+
"linearGradient",
|
|
183
|
+
"marker",
|
|
184
|
+
"mask",
|
|
185
|
+
"metadata",
|
|
186
|
+
"mpath",
|
|
187
|
+
"path",
|
|
188
|
+
"pattern",
|
|
189
|
+
"polygon",
|
|
190
|
+
"polyline",
|
|
191
|
+
"radialGradient",
|
|
192
|
+
"rect",
|
|
193
|
+
"stop",
|
|
194
|
+
"switch",
|
|
195
|
+
"symbol",
|
|
196
|
+
"text",
|
|
197
|
+
"textPath",
|
|
198
|
+
"tspan",
|
|
199
|
+
"use",
|
|
200
|
+
"view"
|
|
201
|
+
];
|
|
202
|
+
var standardAttributes = [
|
|
203
|
+
"key",
|
|
204
|
+
"defaultChecked",
|
|
205
|
+
"defaultValue",
|
|
206
|
+
"accessKey",
|
|
207
|
+
"className",
|
|
208
|
+
"contentEditable",
|
|
209
|
+
"contextMenu",
|
|
210
|
+
"dir",
|
|
211
|
+
"draggable",
|
|
212
|
+
"hidden",
|
|
213
|
+
"id",
|
|
214
|
+
"lang",
|
|
215
|
+
"placeholder",
|
|
216
|
+
"slot",
|
|
217
|
+
"spellCheck",
|
|
218
|
+
"style",
|
|
219
|
+
"tabIndex",
|
|
220
|
+
"title",
|
|
221
|
+
"translate",
|
|
222
|
+
"children",
|
|
223
|
+
"dangerouslySetInnerHTML",
|
|
224
|
+
"onCopy",
|
|
225
|
+
"onCopyCapture",
|
|
226
|
+
"onCut",
|
|
227
|
+
"onCutCapture",
|
|
228
|
+
"onPaste",
|
|
229
|
+
"onPasteCapture",
|
|
230
|
+
"onCompositionEnd",
|
|
231
|
+
"onCompositionEndCapture",
|
|
232
|
+
"onCompositionStart",
|
|
233
|
+
"onCompositionStartCapture",
|
|
234
|
+
"onCompositionUpdate",
|
|
235
|
+
"onCompositionUpdateCapture",
|
|
236
|
+
"onFocus",
|
|
237
|
+
"onFocusCapture",
|
|
238
|
+
"onBlur",
|
|
239
|
+
"onBlurCapture",
|
|
240
|
+
"onChange",
|
|
241
|
+
"onChangeCapture",
|
|
242
|
+
"onBeforeInput",
|
|
243
|
+
"onBeforeInputCapture",
|
|
244
|
+
"onInput",
|
|
245
|
+
"onInputCapture",
|
|
246
|
+
"onReset",
|
|
247
|
+
"onResetCapture",
|
|
248
|
+
"onSubmit",
|
|
249
|
+
"onSubmitCapture",
|
|
250
|
+
"onInvalid",
|
|
251
|
+
"onInvalidCapture",
|
|
252
|
+
"onLoad",
|
|
253
|
+
"onLoadCapture",
|
|
254
|
+
"onError",
|
|
255
|
+
"onErrorCapture",
|
|
256
|
+
"onKeyDown",
|
|
257
|
+
"onKeyDownCapture",
|
|
258
|
+
"onKeyPress",
|
|
259
|
+
"onKeyPressCapture",
|
|
260
|
+
"onKeyUp",
|
|
261
|
+
"onKeyUpCapture",
|
|
262
|
+
"onAbort",
|
|
263
|
+
"onAbortCapture",
|
|
264
|
+
"onCanPlay",
|
|
265
|
+
"onCanPlayCapture",
|
|
266
|
+
"onCanPlayThrough",
|
|
267
|
+
"onCanPlayThroughCapture",
|
|
268
|
+
"onDurationChange",
|
|
269
|
+
"onDurationChangeCapture",
|
|
270
|
+
"onEmptied",
|
|
271
|
+
"onEmptiedCapture",
|
|
272
|
+
"onEncrypted",
|
|
273
|
+
"onEncryptedCapture",
|
|
274
|
+
"onEnded",
|
|
275
|
+
"onEndedCapture",
|
|
276
|
+
"onLoadedData",
|
|
277
|
+
"onLoadedDataCapture",
|
|
278
|
+
"onLoadedMetadata",
|
|
279
|
+
"onLoadedMetadataCapture",
|
|
280
|
+
"onLoadStart",
|
|
281
|
+
"onLoadStartCapture",
|
|
282
|
+
"onPause",
|
|
283
|
+
"onPauseCapture",
|
|
284
|
+
"onPlay",
|
|
285
|
+
"onPlayCapture",
|
|
286
|
+
"onPlaying",
|
|
287
|
+
"onPlayingCapture",
|
|
288
|
+
"onProgress",
|
|
289
|
+
"onProgressCapture",
|
|
290
|
+
"onRateChange",
|
|
291
|
+
"onRateChangeCapture",
|
|
292
|
+
"onSeeked",
|
|
293
|
+
"onSeekedCapture",
|
|
294
|
+
"onSeeking",
|
|
295
|
+
"onSeekingCapture",
|
|
296
|
+
"onStalled",
|
|
297
|
+
"onStalledCapture",
|
|
298
|
+
"onSuspend",
|
|
299
|
+
"onSuspendCapture",
|
|
300
|
+
"onTimeUpdate",
|
|
301
|
+
"onTimeUpdateCapture",
|
|
302
|
+
"onVolumeChange",
|
|
303
|
+
"onVolumeChangeCapture",
|
|
304
|
+
"onWaiting",
|
|
305
|
+
"onWaitingCapture",
|
|
306
|
+
"onAuxClick",
|
|
307
|
+
"onAuxClickCapture",
|
|
308
|
+
"onClick",
|
|
309
|
+
"onClickCapture",
|
|
310
|
+
"onContextMenu",
|
|
311
|
+
"onContextMenuCapture",
|
|
312
|
+
"onDoubleClick",
|
|
313
|
+
"onDoubleClickCapture",
|
|
314
|
+
"onDrag",
|
|
315
|
+
"onDragCapture",
|
|
316
|
+
"onDragEnd",
|
|
317
|
+
"onDragEndCapture",
|
|
318
|
+
"onDragEnter",
|
|
319
|
+
"onDragEnterCapture",
|
|
320
|
+
"onDragExit",
|
|
321
|
+
"onDragExitCapture",
|
|
322
|
+
"onDragLeave",
|
|
323
|
+
"onDragLeaveCapture",
|
|
324
|
+
"onDragOver",
|
|
325
|
+
"onDragOverCapture",
|
|
326
|
+
"onDragStart",
|
|
327
|
+
"onDragStartCapture",
|
|
328
|
+
"onDrop",
|
|
329
|
+
"onDropCapture",
|
|
330
|
+
"onMouseDown",
|
|
331
|
+
"onMouseDownCapture",
|
|
332
|
+
"onMouseEnter",
|
|
333
|
+
"onMouseLeave",
|
|
334
|
+
"onMouseMove",
|
|
335
|
+
"onMouseMoveCapture",
|
|
336
|
+
"onMouseOut",
|
|
337
|
+
"onMouseOutCapture",
|
|
338
|
+
"onMouseOver",
|
|
339
|
+
"onMouseOverCapture",
|
|
340
|
+
"onMouseUp",
|
|
341
|
+
"onMouseUpCapture",
|
|
342
|
+
"onSelect",
|
|
343
|
+
"onSelectCapture",
|
|
344
|
+
"onTouchCancel",
|
|
345
|
+
"onTouchCancelCapture",
|
|
346
|
+
"onTouchEnd",
|
|
347
|
+
"onTouchEndCapture",
|
|
348
|
+
"onTouchMove",
|
|
349
|
+
"onTouchMoveCapture",
|
|
350
|
+
"onTouchStart",
|
|
351
|
+
"onTouchStartCapture",
|
|
352
|
+
"onPointerDown",
|
|
353
|
+
"onPointerDownCapture",
|
|
354
|
+
"onPointerMove",
|
|
355
|
+
"onPointerMoveCapture",
|
|
356
|
+
"onPointerUp",
|
|
357
|
+
"onPointerUpCapture",
|
|
358
|
+
"onPointerCancel",
|
|
359
|
+
"onPointerCancelCapture",
|
|
360
|
+
"onPointerEnter",
|
|
361
|
+
"onPointerEnterCapture",
|
|
362
|
+
"onPointerLeave",
|
|
363
|
+
"onPointerLeaveCapture",
|
|
364
|
+
"onPointerOver",
|
|
365
|
+
"onPointerOverCapture",
|
|
366
|
+
"onPointerOut",
|
|
367
|
+
"onPointerOutCapture",
|
|
368
|
+
"onGotPointerCapture",
|
|
369
|
+
"onGotPointerCaptureCapture",
|
|
370
|
+
"onLostPointerCapture",
|
|
371
|
+
"onLostPointerCaptureCapture",
|
|
372
|
+
"onScroll",
|
|
373
|
+
"onScrollCapture",
|
|
374
|
+
"onWheel",
|
|
375
|
+
"onWheelCapture",
|
|
376
|
+
"onAnimationStart",
|
|
377
|
+
"onAnimationStartCapture",
|
|
378
|
+
"onAnimationEnd",
|
|
379
|
+
"onAnimationEndCapture",
|
|
380
|
+
"onAnimationIteration",
|
|
381
|
+
"onAnimationIterationCapture",
|
|
382
|
+
"onTransitionEnd",
|
|
383
|
+
"onTransitionEndCapture",
|
|
384
|
+
"accept",
|
|
385
|
+
"acceptCharset",
|
|
386
|
+
"action",
|
|
387
|
+
"allowFullScreen",
|
|
388
|
+
"allowTransparency",
|
|
389
|
+
"alt",
|
|
390
|
+
"as",
|
|
391
|
+
"async",
|
|
392
|
+
"autoComplete",
|
|
393
|
+
"autoFocus",
|
|
394
|
+
"autoPlay",
|
|
395
|
+
"capture",
|
|
396
|
+
"cellPadding",
|
|
397
|
+
"cellSpacing",
|
|
398
|
+
"charSet",
|
|
399
|
+
"challenge",
|
|
400
|
+
"checked",
|
|
401
|
+
"cite",
|
|
402
|
+
"classID",
|
|
403
|
+
"cols",
|
|
404
|
+
"colSpan",
|
|
405
|
+
"content",
|
|
406
|
+
"controls",
|
|
407
|
+
"coords",
|
|
408
|
+
"crossOrigin",
|
|
409
|
+
"data",
|
|
410
|
+
"dateTime",
|
|
411
|
+
"default",
|
|
412
|
+
"defer",
|
|
413
|
+
"disabled",
|
|
414
|
+
"download",
|
|
415
|
+
"encType",
|
|
416
|
+
"form",
|
|
417
|
+
"formAction",
|
|
418
|
+
"formEncType",
|
|
419
|
+
"formMethod",
|
|
420
|
+
"formNoValidate",
|
|
421
|
+
"formTarget",
|
|
422
|
+
"frameBorder",
|
|
423
|
+
"headers",
|
|
424
|
+
"height",
|
|
425
|
+
"high",
|
|
426
|
+
"href",
|
|
427
|
+
"hrefLang",
|
|
428
|
+
"htmlFor",
|
|
429
|
+
"httpEquiv",
|
|
430
|
+
"integrity",
|
|
431
|
+
"keyParams",
|
|
432
|
+
"keyType",
|
|
433
|
+
"kind",
|
|
434
|
+
"label",
|
|
435
|
+
"list",
|
|
436
|
+
"loop",
|
|
437
|
+
"low",
|
|
438
|
+
"manifest",
|
|
439
|
+
"marginHeight",
|
|
440
|
+
"marginWidth",
|
|
441
|
+
"max",
|
|
442
|
+
"maxLength",
|
|
443
|
+
"media",
|
|
444
|
+
"mediaGroup",
|
|
445
|
+
"method",
|
|
446
|
+
"min",
|
|
447
|
+
"minLength",
|
|
448
|
+
"multiple",
|
|
449
|
+
"muted",
|
|
450
|
+
"name",
|
|
451
|
+
"nonce",
|
|
452
|
+
"noValidate",
|
|
453
|
+
"open",
|
|
454
|
+
"optimum",
|
|
455
|
+
"pattern",
|
|
456
|
+
"placeholder",
|
|
457
|
+
"playsInline",
|
|
458
|
+
"poster",
|
|
459
|
+
"preload",
|
|
460
|
+
"readOnly",
|
|
461
|
+
"rel",
|
|
462
|
+
"required",
|
|
463
|
+
"reversed",
|
|
464
|
+
"rows",
|
|
465
|
+
"rowSpan",
|
|
466
|
+
"sandbox",
|
|
467
|
+
"scope",
|
|
468
|
+
"scoped",
|
|
469
|
+
"scrolling",
|
|
470
|
+
"seamless",
|
|
471
|
+
"selected",
|
|
472
|
+
"shape",
|
|
473
|
+
"size",
|
|
474
|
+
"sizes",
|
|
475
|
+
"span",
|
|
476
|
+
"src",
|
|
477
|
+
"srcDoc",
|
|
478
|
+
"srcLang",
|
|
479
|
+
"srcSet",
|
|
480
|
+
"start",
|
|
481
|
+
"step",
|
|
482
|
+
"summary",
|
|
483
|
+
"target",
|
|
484
|
+
"type",
|
|
485
|
+
"useMap",
|
|
486
|
+
"value",
|
|
487
|
+
"width",
|
|
488
|
+
"wmode",
|
|
489
|
+
"wrap"
|
|
490
|
+
];
|
|
491
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
492
|
+
0 && (module.exports = {
|
|
493
|
+
intrinsicElements,
|
|
494
|
+
standardAttributes
|
|
495
|
+
});
|
|
@@ -113,6 +113,12 @@ function pushBlockReport(blockReports, blockReport, programNode) {
|
|
|
113
113
|
blockReport[key] = blockReport[key].filter((path) => !sameNames.includes(path));
|
|
114
114
|
});
|
|
115
115
|
}
|
|
116
|
+
if (blockReport.kind.startsWith("Other:")) {
|
|
117
|
+
["added", "removed"].forEach((key) => {
|
|
118
|
+
const tailElements = blockReport[key].map((ele) => ele.split(":").at(-1)).filter(Boolean);
|
|
119
|
+
blockReport[key] = [...new Set(tailElements)];
|
|
120
|
+
});
|
|
121
|
+
}
|
|
116
122
|
const addedEffectsList = mapNodePath(blockReport.addedEffects);
|
|
117
123
|
const removedEffectsList = mapNodePath(blockReport.removedEffects);
|
|
118
124
|
const addedEffectsPaths = addedEffectsList.map((item) => item.effects.map(({ path }) => path)).flat();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function fileIdentifierDetect(filePath: string, absPathPrefix: string): string[];
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
|
|
29
|
+
// src/util/report_util/file_identifier_detect.ts
|
|
30
|
+
var file_identifier_detect_exports = {};
|
|
31
|
+
__export(file_identifier_detect_exports, {
|
|
32
|
+
fileIdentifierDetect: () => fileIdentifierDetect
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(file_identifier_detect_exports);
|
|
35
|
+
var import_getAstKitByFilePath = __toESM(require("../ast_util/getAstKitByFilePath"));
|
|
36
|
+
var import_AstUtil = __toESM(require("../ast_util/AstUtil"));
|
|
37
|
+
function fileIdentifierDetect(filePath, absPathPrefix) {
|
|
38
|
+
const { mapUuidToNode } = (0, import_getAstKitByFilePath.default)(filePath, absPathPrefix);
|
|
39
|
+
const programNode = mapUuidToNode.get("Program");
|
|
40
|
+
const { dependenceIds } = programNode._util;
|
|
41
|
+
const ids = [...dependenceIds].filter((id) => {
|
|
42
|
+
return import_AstUtil.default.isUntrackedId(id) || id._util.crossScope.size > 0;
|
|
43
|
+
});
|
|
44
|
+
return ids.map((id) => {
|
|
45
|
+
const { name, _util } = id;
|
|
46
|
+
const { crossScope } = _util;
|
|
47
|
+
const isUntracked = import_AstUtil.default.isUntrackedId(id);
|
|
48
|
+
const notFoundInfo = isUntracked ? `${name}:「${_util.startLine}:${_util.startColumn},${_util.endLine}:${_util.endColumn}」` : "";
|
|
49
|
+
const dangerScopeInfo = [...crossScope].map((scope) => {
|
|
50
|
+
const { _util: _util2 } = scope;
|
|
51
|
+
return `${scope.name}:「${_util2.startLine}:${_util2.startColumn},${_util2.endLine}:${_util2.endColumn}」`;
|
|
52
|
+
}).join(",");
|
|
53
|
+
return [notFoundInfo, dangerScopeInfo].filter(Boolean).join(",");
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
57
|
+
0 && (module.exports = {
|
|
58
|
+
fileIdentifierDetect
|
|
59
|
+
});
|
|
@@ -35,6 +35,7 @@ module.exports = __toCommonJS(report_util_exports);
|
|
|
35
35
|
var import_code_block_detect = __toESM(require("./report_util/code_block_detect"));
|
|
36
36
|
var import_getAstKitByFilePath = __toESM(require("./ast_util/getAstKitByFilePath"));
|
|
37
37
|
var import_AstUtil = __toESM(require("./ast_util/AstUtil"));
|
|
38
|
+
var import_file_identifier_detect = require("./report_util/file_identifier_detect");
|
|
38
39
|
function createDetectReport(arg) {
|
|
39
40
|
const { groupGitDiffLines, tree, absPathPrefix } = arg;
|
|
40
41
|
const reports = [];
|
|
@@ -48,10 +49,12 @@ function createDetectReport(arg) {
|
|
|
48
49
|
filePath,
|
|
49
50
|
type,
|
|
50
51
|
filesDependsOnMe,
|
|
52
|
+
dangerIdentifiers: [],
|
|
51
53
|
blockReports: []
|
|
52
54
|
};
|
|
53
55
|
reports.push(reportItem);
|
|
54
56
|
}
|
|
57
|
+
reportItem.dangerIdentifiers = (0, import_file_identifier_detect.fileIdentifierDetect)(filePath, absPathPrefix);
|
|
55
58
|
if (type === "modify") {
|
|
56
59
|
(0, import_code_block_detect.default)({ gitDiffItem: item, absPathPrefix, blockReports: reportItem.blockReports });
|
|
57
60
|
}
|