@lcap/nasl-language-server-core 4.4.0-beta.3 → 4.4.0-beta.30
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/out/checker.d.ts +4 -1
- package/out/checker.d.ts.map +1 -1
- package/out/checker.js +996 -96
- package/out/checker.js.map +1 -1
- package/out/index.d.ts +1 -1
- package/out/index.d.ts.map +1 -1
- package/out/index.js +5 -3
- package/out/index.js.map +1 -1
- package/out/reference-manager/build-q-name-def.d.ts.map +1 -1
- package/out/reference-manager/build-q-name-def.js +11 -0
- package/out/reference-manager/build-q-name-def.js.map +1 -1
- package/out/reference-manager/builtin-q-name.js +2 -2
- package/out/reference-manager/builtin-q-name.js.map +1 -1
- package/out/reference-manager/collect-q-name.d.ts +1 -1
- package/out/reference-manager/collect-q-name.d.ts.map +1 -1
- package/out/reference-manager/collect-q-name.js +64 -27
- package/out/reference-manager/collect-q-name.js.map +1 -1
- package/out/reference-manager/def-key-helpers.d.ts +38 -0
- package/out/reference-manager/def-key-helpers.d.ts.map +1 -0
- package/out/reference-manager/{get-q-name.js → def-key-helpers.js} +195 -23
- package/out/reference-manager/def-key-helpers.js.map +1 -0
- package/out/reference-manager/helper.js +2 -2
- package/out/reference-manager/helper.js.map +1 -1
- package/out/reference-manager/reference-manager.d.ts +146 -47
- package/out/reference-manager/reference-manager.d.ts.map +1 -1
- package/out/reference-manager/reference-manager.js +632 -204
- package/out/reference-manager/reference-manager.js.map +1 -1
- package/out/reference-manager/remove-q-name.d.ts +1 -1
- package/out/reference-manager/remove-q-name.d.ts.map +1 -1
- package/out/reference-manager/remove-q-name.js +14 -14
- package/out/reference-manager/remove-q-name.js.map +1 -1
- package/out/reference-manager/rename-q-name.d.ts +26 -26
- package/out/reference-manager/rename-q-name.d.ts.map +1 -1
- package/out/reference-manager/rename-q-name.js +48 -167
- package/out/reference-manager/rename-q-name.js.map +1 -1
- package/out/reference-manager/symbol-type.d.ts +8 -3
- package/out/reference-manager/symbol-type.d.ts.map +1 -1
- package/out/reference-manager/symbol-type.js +9 -2
- package/out/reference-manager/symbol-type.js.map +1 -1
- package/out/reference-manager/update-nasl-fragment.d.ts +2 -2
- package/out/reference-manager/update-nasl-fragment.d.ts.map +1 -1
- package/out/reference-manager/update-nasl-fragment.js +33 -28
- package/out/reference-manager/update-nasl-fragment.js.map +1 -1
- package/out/services/bindable-logic-service.js.map +1 -1
- package/out/symbol/traverse/concepts/index.d.ts +1 -1
- package/out/symbol/traverse/concepts/index.d.ts.map +1 -1
- package/out/symbol/traverse/concepts/logic/expression/member-expression.js.map +1 -1
- package/out/typer/collectGlobalDefs.d.ts +8 -0
- package/out/typer/collectGlobalDefs.d.ts.map +1 -1
- package/out/typer/collectGlobalDefs.js +102 -54
- package/out/typer/collectGlobalDefs.js.map +1 -1
- package/out/typer/component-def-manager/component-def-manager.d.ts +16 -0
- package/out/typer/component-def-manager/component-def-manager.d.ts.map +1 -1
- package/out/typer/component-def-manager/component-def-manager.js +63 -2
- package/out/typer/component-def-manager/component-def-manager.js.map +1 -1
- package/out/typer/component-def-manager/utils.d.ts.map +1 -1
- package/out/typer/component-def-manager/utils.js +26 -0
- package/out/typer/component-def-manager/utils.js.map +1 -1
- package/out/typer/dispatch-all.d.ts +3 -1
- package/out/typer/dispatch-all.d.ts.map +1 -1
- package/out/typer/dispatch-all.js +51 -6
- package/out/typer/dispatch-all.js.map +1 -1
- package/out/typer/dispatch-call.d.ts +27 -1
- package/out/typer/dispatch-call.d.ts.map +1 -1
- package/out/typer/dispatch-call.js +151 -107
- package/out/typer/dispatch-call.js.map +1 -1
- package/out/typer/dispatch-def.d.ts.map +1 -1
- package/out/typer/dispatch-def.js +51 -23
- package/out/typer/dispatch-def.js.map +1 -1
- package/out/typer/dispatch-expr.d.ts +2 -1
- package/out/typer/dispatch-expr.d.ts.map +1 -1
- package/out/typer/dispatch-expr.js +240 -199
- package/out/typer/dispatch-expr.js.map +1 -1
- package/out/typer/dispatch-process.d.ts +8 -1
- package/out/typer/dispatch-process.d.ts.map +1 -1
- package/out/typer/dispatch-process.js +37 -4
- package/out/typer/dispatch-process.js.map +1 -1
- package/out/typer/dispatch-stmt.d.ts.map +1 -1
- package/out/typer/dispatch-stmt.js +39 -25
- package/out/typer/dispatch-stmt.js.map +1 -1
- package/out/typer/dispatch-view.d.ts +1 -1
- package/out/typer/dispatch-view.d.ts.map +1 -1
- package/out/typer/dispatch-view.js +87 -48
- package/out/typer/dispatch-view.js.map +1 -1
- package/out/typer/fix-use-before-assign.js.map +1 -1
- package/out/typer/get-oql-files.d.ts.map +1 -1
- package/out/typer/get-oql-files.js +3 -9
- package/out/typer/get-oql-files.js.map +1 -1
- package/out/typer/incremental-update.d.ts +14 -7
- package/out/typer/incremental-update.d.ts.map +1 -1
- package/out/typer/incremental-update.js +396 -43
- package/out/typer/incremental-update.js.map +1 -1
- package/out/typer/oql-checker/chain-call-transformer.d.ts.map +1 -1
- package/out/typer/oql-checker/chain-call-transformer.js +17 -4
- package/out/typer/oql-checker/chain-call-transformer.js.map +1 -1
- package/out/typer/oql-checker/ts-parser.d.ts.map +1 -1
- package/out/typer/oql-checker/ts-parser.js +252 -37
- package/out/typer/oql-checker/ts-parser.js.map +1 -1
- package/out/typer/overload-helper.d.ts.map +1 -1
- package/out/typer/overload-helper.js +190 -23
- package/out/typer/overload-helper.js.map +1 -1
- package/out/typer/solver.d.ts +8 -9
- package/out/typer/solver.d.ts.map +1 -1
- package/out/typer/solver.js +54 -31
- package/out/typer/solver.js.map +1 -1
- package/out/typer/subster.d.ts +1 -1
- package/out/typer/subster.d.ts.map +1 -1
- package/out/typer/subster.js +251 -57
- package/out/typer/subster.js.map +1 -1
- package/out/typer/topo-sort.d.ts +38 -0
- package/out/typer/topo-sort.d.ts.map +1 -1
- package/out/typer/topo-sort.js +272 -3
- package/out/typer/topo-sort.js.map +1 -1
- package/out/typer/type-manager.d.ts +1 -0
- package/out/typer/type-manager.d.ts.map +1 -1
- package/out/typer/type-manager.js +14 -11
- package/out/typer/type-manager.js.map +1 -1
- package/out/typer/type-predicate.d.ts +1 -0
- package/out/typer/type-predicate.d.ts.map +1 -1
- package/out/typer/type-predicate.js +83 -14
- package/out/typer/type-predicate.js.map +1 -1
- package/out/typer/typer.d.ts +51 -6
- package/out/typer/typer.d.ts.map +1 -1
- package/out/typer/typer.js +248 -46
- package/out/typer/typer.js.map +1 -1
- package/out/typer/unifier.d.ts +12 -1
- package/out/typer/unifier.d.ts.map +1 -1
- package/out/typer/unifier.js +110 -37
- package/out/typer/unifier.js.map +1 -1
- package/out/utils/debug.js.map +1 -1
- package/out/utils/type-operator.d.ts +15 -0
- package/out/utils/type-operator.d.ts.map +1 -1
- package/out/utils/type-operator.js +65 -3
- package/out/utils/type-operator.js.map +1 -1
- package/package.json +6 -6
- package/out/reference-manager/get-q-name.d.ts +0 -9
- package/out/reference-manager/get-q-name.d.ts.map +0 -1
- package/out/reference-manager/get-q-name.js.map +0 -1
- package/out/reference-manager/view-elem-logic.d.ts +0 -44
- package/out/reference-manager/view-elem-logic.d.ts.map +0 -1
- package/out/reference-manager/view-elem-logic.js +0 -164
- package/out/reference-manager/view-elem-logic.js.map +0 -1
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.simpleCollectByGlobalDefKey = exports.fixConnectorNsp = exports.getGlobalDefKeyForMatchedExpr = exports.getLocalDefKeys = exports.isIdentifierAsPropertyName = exports.getLocalDefKey = exports.getGlobalDefKey = void 0;
|
|
4
|
+
const nasl_concepts_1 = require("@lcap/nasl-concepts");
|
|
4
5
|
const symbol_type_1 = require("./symbol-type");
|
|
5
6
|
const string_1 = require("../utils/string");
|
|
7
|
+
const misc_1 = require("../utils/misc");
|
|
6
8
|
const handleLogic = (nd) => {
|
|
7
9
|
try {
|
|
8
10
|
return nd.calleewholeKey;
|
|
@@ -23,7 +25,7 @@ const handleFVar = (nd) => {
|
|
|
23
25
|
* 效率低,仅单次使用,其实应该返回 Array<QName>,比如一个 QueryFromExpression
|
|
24
26
|
* 里就有对数据源、实体等的多个引用,QName 不一样,但是现在搞简单点吧
|
|
25
27
|
*/
|
|
26
|
-
const
|
|
28
|
+
const getGlobalDefKey = (nd) => {
|
|
27
29
|
switch (nd?.concept) {
|
|
28
30
|
// references
|
|
29
31
|
// 超高频的放前面
|
|
@@ -47,6 +49,8 @@ const getTokenQualifiedName = (nd) => {
|
|
|
47
49
|
return `${nd.getNamespace()}.logics.${nd.name}`;
|
|
48
50
|
case 'CallAuthInterface':
|
|
49
51
|
return (0, string_1.prependNonEmptyStr)(nd.calleeNamespace, nd.calleeName);
|
|
52
|
+
case 'ValidationRule':
|
|
53
|
+
return (0, string_1.prependNonEmptyStr)(nd.calleeNamespace, nd.calleeName);
|
|
50
54
|
case 'CallFunction': // CallFunction 暂时不用建立索引,但其他模块会用到,还是先返回一个值
|
|
51
55
|
return (0, string_1.prependNonEmptyStr)(nd.calleeNamespace, nd.calleeName);
|
|
52
56
|
case 'CallInterface':
|
|
@@ -55,21 +59,35 @@ const getTokenQualifiedName = (nd) => {
|
|
|
55
59
|
return (0, string_1.prependNonEmptyStr)(nd.calleeNamespace, nd.calleeName);
|
|
56
60
|
// // 谁有什么更好的办法吗
|
|
57
61
|
// return `app.${prependNonEmptyStr(nd.calleeNamespace, nd.calleeName)}`;
|
|
58
|
-
case 'CallLogic':
|
|
62
|
+
case 'CallLogic': {
|
|
59
63
|
if ((0, symbol_type_1.isProcessLogicCall)(nd.calleeNamespace) && (0, symbol_type_1.isSpecialProcessLogic)(nd.calleeName)) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
64
|
+
// 触发 completeArguments 的填充逻辑,修复 keyword 丢失的问题
|
|
65
|
+
const completedArgs = nd.completeArguments ?? nd.arguments;
|
|
66
|
+
const procDefKey = completedArgs?.find((arg) => arg?.keyword === 'procDefKey');
|
|
63
67
|
return `${procDefKey?.expression?.value}.logics.${nd.calleeName}`;
|
|
64
68
|
}
|
|
65
|
-
|
|
69
|
+
if (!nd.calleeNamespace?.length && nd.calleeName) {
|
|
70
|
+
const ctxViewLike = (0, nasl_concepts_1.getCtxViewLike)(nd);
|
|
71
|
+
if (ctxViewLike) {
|
|
72
|
+
const viewQ = (0, exports.getGlobalDefKey)(ctxViewLike);
|
|
73
|
+
return viewQ ? `${viewQ}.logics.${nd.calleeName}` : undefined;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// 业务组件逻辑:页面中 elements.bs-xxx.logics 调用的是 BC 的 logics,定义在 {bcQName}.logics.{name}
|
|
77
|
+
if (nd.calleeNamespace?.startsWith('elements.') && nd.calleeNamespace.endsWith('.logics')) {
|
|
78
|
+
const callNode = nd.getCallNode?.();
|
|
79
|
+
if (callNode?.concept === 'BusinessLogic') {
|
|
80
|
+
return (0, exports.getGlobalDefKey)(callNode);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
66
83
|
return (0, string_1.prependNonEmptyStr)(nd.calleeNamespace, nd.calleeName);
|
|
84
|
+
}
|
|
67
85
|
case 'CallEvent': {
|
|
68
86
|
const e = nd.getCallNode();
|
|
69
87
|
if (!e) {
|
|
70
88
|
return undefined;
|
|
71
89
|
}
|
|
72
|
-
return (0, exports.
|
|
90
|
+
return (0, exports.getGlobalDefKey)(e);
|
|
73
91
|
}
|
|
74
92
|
case 'MemberExpression':
|
|
75
93
|
// qName 未定义
|
|
@@ -83,9 +101,15 @@ const getTokenQualifiedName = (nd) => {
|
|
|
83
101
|
case 'QueryJoinExpression': /** 先计算实体 name 好了,查找引用另有 hack */
|
|
84
102
|
return `${nd.entityNamespace}.${nd.entityName}`;
|
|
85
103
|
// definitions
|
|
86
|
-
case 'Logic':
|
|
87
|
-
case 'BusinessLogic':
|
|
104
|
+
case 'Logic':
|
|
105
|
+
case 'BusinessLogic': {
|
|
106
|
+
const parent = nd.parentNode;
|
|
107
|
+
if (parent && (parent.concept === 'View' || parent.concept === 'BusinessComponent')) {
|
|
108
|
+
const parentQ = (0, exports.getGlobalDefKey)(parent);
|
|
109
|
+
return parentQ ? `${parentQ}.logics.${nd.name}` : handleLogic(nd);
|
|
110
|
+
}
|
|
88
111
|
return handleLogic(nd);
|
|
112
|
+
}
|
|
89
113
|
case 'AuthInterface':
|
|
90
114
|
return (0, string_1.prependNonEmptyStr)(nd.getNamespace(), nd.name);
|
|
91
115
|
case 'McpInterface':
|
|
@@ -95,7 +119,7 @@ const getTokenQualifiedName = (nd) => {
|
|
|
95
119
|
return `app.backend.variables.${nd.name}`;
|
|
96
120
|
case 'Event': {
|
|
97
121
|
if (nd.parentNode?.concept === 'BusinessComponent') {
|
|
98
|
-
return (0, string_1.prependNonEmptyStr)((0, exports.
|
|
122
|
+
return (0, string_1.prependNonEmptyStr)((0, exports.getGlobalDefKey)(nd.parentNode), `events.${nd.name}`);
|
|
99
123
|
}
|
|
100
124
|
// 其他情形还不能处理
|
|
101
125
|
return nd.name;
|
|
@@ -105,7 +129,7 @@ const getTokenQualifiedName = (nd) => {
|
|
|
105
129
|
case 'EntityProperty': {
|
|
106
130
|
const entity = nd.getAncestorRaw('Entity');
|
|
107
131
|
if (entity.concept === 'Entity') {
|
|
108
|
-
const entityQName = (0, exports.
|
|
132
|
+
const entityQName = (0, exports.getGlobalDefKey)(entity);
|
|
109
133
|
return (0, string_1.getPropQName)(entityQName, nd.name, 'Entity');
|
|
110
134
|
}
|
|
111
135
|
else {
|
|
@@ -130,8 +154,14 @@ const getTokenQualifiedName = (nd) => {
|
|
|
130
154
|
case 'OverriddenLogic':
|
|
131
155
|
return `${symbol_type_1.overriddenLogicNsp}.logics.${nd.name}`;
|
|
132
156
|
case 'Param':
|
|
133
|
-
case 'ParamWithGroup':
|
|
134
|
-
|
|
157
|
+
case 'ParamWithGroup': {
|
|
158
|
+
const parent = nd.parentNode;
|
|
159
|
+
if (!parent || !(0, symbol_type_1.isLogicViewLike)(parent)) {
|
|
160
|
+
return nd.name;
|
|
161
|
+
}
|
|
162
|
+
const parentQ = (0, exports.getGlobalDefKey)(parent);
|
|
163
|
+
return parentQ ? `${parentQ}.params.${nd.name}` : nd.name;
|
|
164
|
+
}
|
|
135
165
|
case 'Return':
|
|
136
166
|
return nd.name;
|
|
137
167
|
case 'Structure':
|
|
@@ -143,11 +173,11 @@ const getTokenQualifiedName = (nd) => {
|
|
|
143
173
|
const s = nd.getAncestorRaw('Structure');
|
|
144
174
|
return s ? (0, string_1.getPropQName)(`${s.getNamespace()}.${s.name}`, nd.name, 'Structure') : undefined;
|
|
145
175
|
case 'Variable':
|
|
146
|
-
return nd.name;
|
|
176
|
+
return nasl_concepts_1.asserts.isProcessDefinitionV2(nd.parentNode) && nd.parentKey === 'variables' ? `processVariable.${nd.name}` : nd.name;
|
|
147
177
|
case 'View':
|
|
148
178
|
return (0, string_1.prependNonEmptyStr)(nd.getNamespace(), nd.name); // 局部名就可以了
|
|
149
179
|
case 'ViewElement': {
|
|
150
|
-
return (0, string_1.prependNonEmptyStr)((0, exports.
|
|
180
|
+
return (0, string_1.prependNonEmptyStr)((0, exports.getGlobalDefKey)(nd.likeComponent), nd.name);
|
|
151
181
|
}
|
|
152
182
|
case 'BusinessComponent':
|
|
153
183
|
return (0, string_1.prependNonEmptyStr)(nd.getNamespace(), nd.name);
|
|
@@ -172,6 +202,13 @@ const getTokenQualifiedName = (nd) => {
|
|
|
172
202
|
}
|
|
173
203
|
case 'ProcessBindV2':
|
|
174
204
|
return `${nd.refNamespace}.${nd.refName}`;
|
|
205
|
+
case 'ProcessElementV2': {
|
|
206
|
+
if (nd.type === 'CallSubProcess' && nd.subProcessKey) {
|
|
207
|
+
return nd.subProcessKey;
|
|
208
|
+
}
|
|
209
|
+
// 其他情况下,ProcessElementV2 不是引用,不应该走到这里
|
|
210
|
+
return undefined;
|
|
211
|
+
}
|
|
175
212
|
case 'DataSource':
|
|
176
213
|
return `${nd.getNamespace()}.${nd.name}`;
|
|
177
214
|
case 'AuthLogic': {
|
|
@@ -196,7 +233,7 @@ const getTokenQualifiedName = (nd) => {
|
|
|
196
233
|
// const oldPropName = nd.value.split('.')[1];
|
|
197
234
|
// const oldProp = ReferenceManager.getProp(dsTy, oldPropName);
|
|
198
235
|
// if (oldProp) {
|
|
199
|
-
// const oldPropQName =
|
|
236
|
+
// const oldPropQName = getGlobalDefKey(oldProp)!;
|
|
200
237
|
// self.symbolRefs.get(oldProp)?.delete(target);
|
|
201
238
|
// self.cachedQNameSymbolRefs.get(oldPropQName)?.delete(target);
|
|
202
239
|
// }
|
|
@@ -211,12 +248,147 @@ const getTokenQualifiedName = (nd) => {
|
|
|
211
248
|
}
|
|
212
249
|
}
|
|
213
250
|
};
|
|
214
|
-
exports.
|
|
215
|
-
|
|
251
|
+
exports.getGlobalDefKey = getGlobalDefKey;
|
|
252
|
+
/**
|
|
253
|
+
* 获取局部符号在 localRefs / localDefStacks 中的查找 key。
|
|
254
|
+
* 统一入口:定义节点和引用节点都走这里,保证 def 与 ref 的 key 一致。
|
|
255
|
+
*
|
|
256
|
+
* 有局部形式的节点:Param、Variable、Logic(在 View/BC 内)、Event 等,用 simple name 即可引用。
|
|
257
|
+
* 无局部形式的节点:Structure、Enum、ViewElement、BindEvent.logics 等,需用完整路径。
|
|
258
|
+
*/
|
|
259
|
+
const getLocalDefKey = (nd) => {
|
|
260
|
+
const keys = (0, exports.getLocalDefKeys)(nd);
|
|
261
|
+
return keys.length > 0 ? keys[0] : (0, exports.getGlobalDefKey)(nd);
|
|
262
|
+
};
|
|
263
|
+
exports.getLocalDefKey = getLocalDefKey;
|
|
264
|
+
/**
|
|
265
|
+
* Identifier 作为属性名(非变量引用)的场景:
|
|
266
|
+
* 1. NewComposite.properties - new Entity1({ var1: ... }) 中的 var1
|
|
267
|
+
* 2. MemberExpression.property - x.var1 中的 var1(含 BatchAssignment.left 的 var2.{ var1 })
|
|
268
|
+
*/
|
|
269
|
+
const isIdentifierAsPropertyName = (nd) => {
|
|
270
|
+
if (nd?.concept !== 'Identifier')
|
|
271
|
+
return false;
|
|
272
|
+
const parent = nd.parentNode;
|
|
273
|
+
// NewComposite.properties
|
|
274
|
+
const nc = parent?.concept === 'NewComposite' ? parent : nd.getAncestorRaw?.('NewComposite');
|
|
275
|
+
const props = nc?.properties;
|
|
276
|
+
if (props?.some((p) => (0, misc_1.toRaw)(p) === (0, misc_1.toRaw)(nd)))
|
|
277
|
+
return true;
|
|
278
|
+
// MemberExpression.property(x.var1 中的 var1,含 BatchAssignment 左侧)
|
|
279
|
+
if (parent?.concept === 'MemberExpression' && parent.property === nd) {
|
|
280
|
+
return true;
|
|
281
|
+
}
|
|
282
|
+
return false;
|
|
283
|
+
};
|
|
284
|
+
exports.isIdentifierAsPropertyName = isIdentifierAsPropertyName;
|
|
285
|
+
/**
|
|
286
|
+
* 获取局部符号在 localRefs 中的全部查找 key(部分引用如 Identifier 的 elements.* 需多 key 索引)。
|
|
287
|
+
* 供 buildLocalRefs 等统一写入 localRefs 使用。
|
|
288
|
+
*/
|
|
289
|
+
const getLocalDefKeys = (nd) => {
|
|
290
|
+
if (!nd)
|
|
291
|
+
return [];
|
|
292
|
+
const parent = nd.parentNode;
|
|
293
|
+
const isInViewOrBC = parent && (parent.concept === 'View' || parent.concept === 'BusinessComponent');
|
|
294
|
+
switch (nd.concept) {
|
|
295
|
+
case 'Param':
|
|
296
|
+
case 'ParamWithGroup':
|
|
297
|
+
case 'Return':
|
|
298
|
+
case 'InterfaceParam':
|
|
299
|
+
case 'Variable':
|
|
300
|
+
case 'FrontendVariable':
|
|
301
|
+
return nd.name ? [nd.name] : [];
|
|
302
|
+
case 'Logic':
|
|
303
|
+
case 'BusinessLogic':
|
|
304
|
+
case 'Event':
|
|
305
|
+
if (isInViewOrBC && nd.name)
|
|
306
|
+
return [nd.name];
|
|
307
|
+
break;
|
|
308
|
+
case 'CallLogic': {
|
|
309
|
+
if (!nd.calleeNamespace?.length && nd.calleeName) {
|
|
310
|
+
return [nd.calleeName];
|
|
311
|
+
}
|
|
312
|
+
if (nd.calleeNamespace?.startsWith('elements.') && nd.calleeNamespace.endsWith('.logics')) {
|
|
313
|
+
const ctxViewLike = (0, nasl_concepts_1.getCtxViewLike)(nd);
|
|
314
|
+
const viewQ = ctxViewLike && (0, exports.getGlobalDefKey)(ctxViewLike);
|
|
315
|
+
if (viewQ) {
|
|
316
|
+
const elemPath = nd.calleeNamespace.slice(0, -7);
|
|
317
|
+
return [`${viewQ}.${elemPath}`];
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
break;
|
|
321
|
+
}
|
|
322
|
+
case 'CallEvent': {
|
|
323
|
+
if ((!nd.calleeNamespace?.length || !nd.calleeNamespace) && nd.calleeName) {
|
|
324
|
+
return [nd.calleeName];
|
|
325
|
+
}
|
|
326
|
+
break;
|
|
327
|
+
}
|
|
328
|
+
case 'Identifier': {
|
|
329
|
+
// 属性名(NewComposite/BatchAssignment 等)不是对局部变量/param 的引用
|
|
330
|
+
if ((0, exports.isIdentifierAsPropertyName)(nd)) {
|
|
331
|
+
return [];
|
|
332
|
+
}
|
|
333
|
+
const nsp = nd.namespace;
|
|
334
|
+
if (!nsp || !nsp.length) {
|
|
335
|
+
const ctxViewLike = (0, nasl_concepts_1.getCtxViewLike)(nd);
|
|
336
|
+
if (ctxViewLike && nd.name)
|
|
337
|
+
return [nd.name];
|
|
338
|
+
}
|
|
339
|
+
if (nsp?.startsWith('elements.')) {
|
|
340
|
+
const ctxViewLike = (0, nasl_concepts_1.getCtxViewLike)(nd);
|
|
341
|
+
const viewQ = ctxViewLike && (0, exports.getGlobalDefKey)(ctxViewLike);
|
|
342
|
+
if (!viewQ)
|
|
343
|
+
break;
|
|
344
|
+
const keys = [];
|
|
345
|
+
if (nsp.endsWith('.property')) {
|
|
346
|
+
keys.push(`${viewQ}.${nsp.substring(0, nsp.length - 9)}`);
|
|
347
|
+
}
|
|
348
|
+
else if (nsp.endsWith('.logics')) {
|
|
349
|
+
const fullRelKey = (0, exports.getGlobalDefKey)(nd);
|
|
350
|
+
if (fullRelKey)
|
|
351
|
+
keys.push(`${viewQ}.${fullRelKey}`);
|
|
352
|
+
const bindIdx = nsp.indexOf('.bindEvents');
|
|
353
|
+
const elemPath = bindIdx >= 0 ? nsp.substring(0, bindIdx) : nsp;
|
|
354
|
+
keys.push(`${viewQ}.${elemPath}`);
|
|
355
|
+
}
|
|
356
|
+
if (keys.length > 0)
|
|
357
|
+
return keys;
|
|
358
|
+
}
|
|
359
|
+
break;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
const fallback = (0, exports.getGlobalDefKey)(nd);
|
|
363
|
+
return fallback ? [fallback] : [];
|
|
364
|
+
};
|
|
365
|
+
exports.getLocalDefKeys = getLocalDefKeys;
|
|
366
|
+
const getGlobalDefKeyForMatchedExpr = (env, nd) => {
|
|
216
367
|
if (nd.concept === 'MemberExpression') {
|
|
217
|
-
|
|
368
|
+
const objectKey = (0, exports.getGlobalDefKeyForMatchedExpr)(env, nd.object);
|
|
369
|
+
if (objectKey == null)
|
|
370
|
+
return undefined;
|
|
371
|
+
return objectKey + '.' + nd.property.name;
|
|
218
372
|
}
|
|
219
|
-
return (0, exports.
|
|
373
|
+
return (0, exports.getGlobalDefKey)(nd);
|
|
374
|
+
};
|
|
375
|
+
exports.getGlobalDefKeyForMatchedExpr = getGlobalDefKeyForMatchedExpr;
|
|
376
|
+
/**
|
|
377
|
+
* Connector 的 namespace 需要去掉末尾的 'connector' 或 '.connector'
|
|
378
|
+
* collect 与 remove 共用此逻辑
|
|
379
|
+
*/
|
|
380
|
+
const fixConnectorNsp = (nsp) => nsp.endsWith('connector')
|
|
381
|
+
? nsp.substring(0, nsp.length - 'connector'.length)
|
|
382
|
+
: nsp.endsWith('.connector')
|
|
383
|
+
? nsp.substring(0, nsp.length - '.connector'.length)
|
|
384
|
+
: nsp;
|
|
385
|
+
exports.fixConnectorNsp = fixConnectorNsp;
|
|
386
|
+
/**
|
|
387
|
+
* 仅用 getGlobalDefKey 生成 defKey 的简单 handler(如 Connection、ViewComponent、ViewComponentDeclaration)
|
|
388
|
+
*/
|
|
389
|
+
const simpleCollectByGlobalDefKey = (def) => {
|
|
390
|
+
const defKey = (0, exports.getGlobalDefKey)(def);
|
|
391
|
+
return defKey ? [[defKey, def]] : [];
|
|
220
392
|
};
|
|
221
|
-
exports.
|
|
222
|
-
//# sourceMappingURL=
|
|
393
|
+
exports.simpleCollectByGlobalDefKey = simpleCollectByGlobalDefKey;
|
|
394
|
+
//# sourceMappingURL=def-key-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"def-key-helpers.js","sourceRoot":"","sources":["../../src/reference-manager/def-key-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ const nasl_concepts_1 = require("@lcap/nasl-concepts");
|
|
|
5
5
|
const typer_1 = require("../typer");
|
|
6
6
|
const service_1 = require("@lcap/nasl-concepts/service");
|
|
7
7
|
const misc_1 = require("../utils/misc");
|
|
8
|
-
const
|
|
8
|
+
const def_key_helpers_1 = require("./def-key-helpers");
|
|
9
9
|
/**
|
|
10
10
|
* 获取命名空间,移除最后一个点后的内容
|
|
11
11
|
* 移除 nsp 中最后一个 . 之后的内容,
|
|
@@ -14,7 +14,7 @@ const get_q_name_1 = require("./get-q-name");
|
|
|
14
14
|
* xxx.entities 只保留 xxx
|
|
15
15
|
*/
|
|
16
16
|
const getNamespaceWithoutLast = (def) => {
|
|
17
|
-
const qName = (0,
|
|
17
|
+
const qName = (0, def_key_helpers_1.getGlobalDefKey)(def) ?? '';
|
|
18
18
|
const lastDotIndex0 = qName.lastIndexOf('.');
|
|
19
19
|
const res0 = lastDotIndex0 !== -1 ? qName.slice(0, lastDotIndex0) : '';
|
|
20
20
|
const lastDotIndex1 = res0.lastIndexOf('.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../../src/reference-manager/helper.ts"],"names":[],"mappings":";;;AAAA,uDAAqG;AACrG,oCAA+C;AAC/C,yDAAiH;AACjH,wCAAsC;AACtC,
|
|
1
|
+
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../../src/reference-manager/helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Entity, EntityProperty, Enum, Identifier, Logic, Structure, StructureProperty, type SyntaxNode, TypeAnnotation, BaseNode, App, EnumItem, ViewElement, ProcessElementV2,
|
|
1
|
+
import { Entity, EntityProperty, Enum, Identifier, Logic, Structure, StructureProperty, type SyntaxNode, TypeAnnotation, BaseNode, App, EnumItem, ViewElement, ProcessElementV2, BusinessLogic, Event } from '@lcap/nasl-concepts';
|
|
2
2
|
import { NASLObject } from '@lcap/nasl-types';
|
|
3
3
|
import { type SemEnv } from '../typer';
|
|
4
4
|
import { ComponentDefManager } from '../typer/component-def-manager/component-def-manager';
|
|
@@ -40,18 +40,12 @@ export declare class ReferenceManager {
|
|
|
40
40
|
*
|
|
41
41
|
* 将实体看成 namespace,所有引用实体逻辑的地方也算引用了实体?
|
|
42
42
|
*/
|
|
43
|
-
private
|
|
43
|
+
private globalRefs;
|
|
44
44
|
getSymbolRefs: (__def: DefConcept) => Set<RefConcept> | undefined;
|
|
45
45
|
setSymbolRefs: (__def: DefConcept, refs: Set<RefConcept>) => void;
|
|
46
46
|
deleteSymbolRefs: (__def: DefConcept) => boolean;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
private veQNameDefs;
|
|
50
|
-
/**
|
|
51
|
-
* @warning ViewElement 和 Logic 都是局部符号,可以重名,qName 重复时会出错,不要搞这种例子谢谢
|
|
52
|
-
* key 是 memory addr 而不是 string 的原因:点查找引用时,不好高效获取 qName(如 Logic 没有 namespace 但调用处其实有,对的就是 elements.)
|
|
53
|
-
*/
|
|
54
|
-
private veRefs;
|
|
47
|
+
clearGlobalRefs: () => void;
|
|
48
|
+
getGlobalRefsSize: () => number;
|
|
55
49
|
modeForCollect: Operation | null;
|
|
56
50
|
/**
|
|
57
51
|
* 非用户选择的"隐式引用",如推导出的类型
|
|
@@ -60,12 +54,25 @@ export declare class ReferenceManager {
|
|
|
60
54
|
private gSymbolImplicitRefs;
|
|
61
55
|
private setSymbolImplicitRef;
|
|
62
56
|
getImplicitReferences: (__nd: DefConcept) => Set<RefConcept>;
|
|
63
|
-
|
|
57
|
+
/**
|
|
58
|
+
* 待恢复引用缓存:删除节点时保存引用,创建同名节点时恢复引用后立即删除
|
|
59
|
+
* key: qName, value: Set<PendingRefInfo>
|
|
60
|
+
* 只在删除和创建之间临时使用,使用后立即清除,避免内存泄漏
|
|
61
|
+
*
|
|
62
|
+
* 使用场景:
|
|
63
|
+
* 1. 删除节点时:通过 cacheRefsForRecreation 保存引用节点
|
|
64
|
+
* 2. 创建同名节点时:通过 restoreRefsFromCache 恢复引用并清除缓存
|
|
65
|
+
*
|
|
66
|
+
* 设计说明:
|
|
67
|
+
* - 只存储引用节点本身
|
|
68
|
+
* - 恢复时会检查引用节点是否仍在 app 树上且仍引用原来的 qName
|
|
69
|
+
*/
|
|
70
|
+
private pendingRefsForRecreation;
|
|
64
71
|
compDefMgr: ComponentDefManager;
|
|
65
72
|
private lastBoundary;
|
|
66
73
|
private isLocalCacheValid;
|
|
67
|
-
/**
|
|
68
|
-
|
|
74
|
+
/** 局部符号的引用,key 为 getLocalDefKey 返回值(作用域内简单名或完整路径) */
|
|
75
|
+
localRefs: Map<string, Set<RefConcept>>;
|
|
69
76
|
curFileNode: SyntaxNode | undefined;
|
|
70
77
|
static connectionNsp: string;
|
|
71
78
|
constructor();
|
|
@@ -83,8 +90,13 @@ export declare class ReferenceManager {
|
|
|
83
90
|
/**
|
|
84
91
|
* Remove all recorded local scope variable bindings under a file node.
|
|
85
92
|
* Used by incremental type checking to invalidate stale scope allocations.
|
|
93
|
+
* @param options.skipDescendantFileNodes 为 true 时遇到子级「文件节点」则不再向下遍历,避免误清子 View 等,增量阶段 2 重算前用此选项
|
|
94
|
+
* @param options.isFileNode 与 skipDescendantFileNodes 搭配使用,用于判断某节点是否为文件节点(如 checkNodeIsFileModuleInIdeWithCache)
|
|
86
95
|
*/
|
|
87
|
-
clearLocalSymBindingsForFile: (file: SyntaxNode
|
|
96
|
+
clearLocalSymBindingsForFile: (file: SyntaxNode, options?: {
|
|
97
|
+
skipDescendantFileNodes?: boolean;
|
|
98
|
+
isFileNode?: (nd: SyntaxNode) => boolean;
|
|
99
|
+
}) => void;
|
|
88
100
|
clearAllLocalSymBindings: () => void;
|
|
89
101
|
/**
|
|
90
102
|
* Get all variables visible from a given AST node by walking its parent chain
|
|
@@ -93,7 +105,7 @@ export declare class ReferenceManager {
|
|
|
93
105
|
* declaration for each variable name is returned (nearest-first ordering).
|
|
94
106
|
*
|
|
95
107
|
* Implementation notes:
|
|
96
|
-
* - We intentionally DO NOT depend on the (ephemeral)
|
|
108
|
+
* - We intentionally DO NOT depend on the (ephemeral) localDefStacks in SemEnv so
|
|
97
109
|
* this works post-typing (e.g. in reference / rename / hover providers) without
|
|
98
110
|
* re-running the typer.
|
|
99
111
|
* - Order:
|
|
@@ -139,10 +151,6 @@ export declare class ReferenceManager {
|
|
|
139
151
|
static getProp: (def: Entity | Structure | Enum | TypeAnnotation, prop: string) => EntityProperty | StructureProperty | EnumItem | undefined;
|
|
140
152
|
slowBuildSymbolRefsForApp: (env: SemEnv, app: App) => void;
|
|
141
153
|
addQNameDefs: (app: App) => void;
|
|
142
|
-
/** 注释见具体实现 */
|
|
143
|
-
addViewElementLogicQNameDefs: (viewLike: View | import("@lcap/nasl-concepts").BusinessComponent) => void;
|
|
144
|
-
/** 注释见具体实现 */
|
|
145
|
-
addViewElementLogicRefs: (viewLike: View | import("@lcap/nasl-concepts").BusinessComponent) => void;
|
|
146
154
|
queryQNameDef: (qName: string) => DefConcept | undefined;
|
|
147
155
|
buildTsQNameDefs: (env: SemEnv, nsp: SupportedNamespace, fileContent: string) => void;
|
|
148
156
|
/**
|
|
@@ -152,9 +160,7 @@ export declare class ReferenceManager {
|
|
|
152
160
|
*/
|
|
153
161
|
findOrCreateTypeDef: (ty: TypeAnnotation) => Structure | Entity | Enum | undefined;
|
|
154
162
|
/**
|
|
155
|
-
*
|
|
156
|
-
* @param ref
|
|
157
|
-
* @returns
|
|
163
|
+
* 查找符号的定义(含全局符号、View/BC 内 logics 等,均已在 gQNameDefs 中注册)
|
|
158
164
|
*/
|
|
159
165
|
getNodeDef: (ref: RefConcept | DefConcept) => DefConcept | undefined;
|
|
160
166
|
/**
|
|
@@ -166,46 +172,134 @@ export declare class ReferenceManager {
|
|
|
166
172
|
timeAndLog: (label: string, fn: (...args: any[]) => void, ...args: any[]) => void;
|
|
167
173
|
/**
|
|
168
174
|
* 给类似 FileNode 级别的定义建立局部引用记录
|
|
169
|
-
* @warning 不包括 ViewElement、BindEvent
|
|
175
|
+
* @warning 不包括 ViewElement、BindEvent 相关的引用,已合并到 getLocalDefKeys 与 collectedRefs 处理
|
|
170
176
|
* @warning 需要包括 SubLogics
|
|
171
177
|
*/
|
|
172
|
-
private
|
|
178
|
+
private buildLocalRefs;
|
|
179
|
+
/** @deprecated 使用 getSymbolRefs,保留仅为兼容 */
|
|
180
|
+
getViewElementRefs: (nd: ViewElement | Logic | BusinessLogic | Event | undefined) => Set<RefConcept>;
|
|
181
|
+
/**
|
|
182
|
+
* 非常危险,但是先这样吧
|
|
183
|
+
*/
|
|
184
|
+
getProcessElementRefs: (env: SemEnv, __nd: ProcessElementV2 | undefined) => Array<RefConcept>;
|
|
185
|
+
updateRefsInNaslFragment: (env: SemEnv, payload: NASLObject.EventPayload) => void;
|
|
186
|
+
/**
|
|
187
|
+
* 添加引用到缓存(内部方法,统一管理 pendingRefsForRecreation)
|
|
188
|
+
* @param qName 节点的 qName
|
|
189
|
+
* @param ref 要缓存的引用
|
|
190
|
+
*/
|
|
191
|
+
private addRefToPendingCache;
|
|
173
192
|
/**
|
|
174
|
-
*
|
|
175
|
-
*
|
|
193
|
+
* 缓存引用以备后续恢复(在删除节点时调用)
|
|
194
|
+
* @param qName 节点的 qName
|
|
195
|
+
* @param defNode 要删除的节点
|
|
176
196
|
*
|
|
177
|
-
*
|
|
178
|
-
* "concept": "Identifier",
|
|
179
|
-
* "namespace": "elements.uLinearLayout1.property",
|
|
180
|
-
* "name": "uLinearLayout1",
|
|
197
|
+
* 使用场景:删除节点时,保存引用节点本身到 pendingRefsForRecreation,以便后续创建同名节点时恢复引用
|
|
181
198
|
*
|
|
199
|
+
* 设计说明:
|
|
200
|
+
* - 只存储引用节点本身(因为需要它来建立引用关系)
|
|
201
|
+
* - 恢复时会检查引用节点是否仍在 app 树上且仍引用原来的 qName
|
|
182
202
|
*/
|
|
183
|
-
|
|
203
|
+
cacheRefsForRecreation: (qName: string, defNode: DefConcept) => void;
|
|
184
204
|
/**
|
|
185
|
-
*
|
|
205
|
+
* 检查引用是否仍在 app 树上
|
|
206
|
+
*
|
|
207
|
+
* 方法:
|
|
208
|
+
* 向上遍历 parentNode 链,检查每个节点是否在其父节点的子节点集合中
|
|
209
|
+
* (因为删除节点时可能不会把 parentNode 设置为 null,但会从父节点的子节点集合中移除)
|
|
210
|
+
*
|
|
211
|
+
* 如果链上的任何节点不在其父节点的子节点集合中,说明已被删除,不在 app 树上
|
|
212
|
+
* 如果能到达 App 节点,说明引用仍在 app 树上
|
|
186
213
|
*/
|
|
187
|
-
|
|
214
|
+
private isRefStillInAppTree;
|
|
188
215
|
/**
|
|
189
|
-
*
|
|
190
|
-
*
|
|
191
|
-
*
|
|
192
|
-
*
|
|
193
|
-
|
|
194
|
-
|
|
216
|
+
* 检查引用节点是否仍引用指定的 qName
|
|
217
|
+
* @param ref 引用节点
|
|
218
|
+
* @param qName 要检查的 qName
|
|
219
|
+
* @returns 如果引用节点仍引用指定的 qName,返回 true;否则返回 false
|
|
220
|
+
*/
|
|
221
|
+
private isRefStillReferencingQName;
|
|
222
|
+
/**
|
|
223
|
+
* 从缓存恢复引用(在创建节点时调用)
|
|
224
|
+
* @param qName 节点的 qName
|
|
225
|
+
* @param defNode 新创建的节点
|
|
226
|
+
* @returns 是否成功恢复引用
|
|
227
|
+
*
|
|
228
|
+
* 使用场景:创建节点时,如果有缓存的引用信息(来自删除操作),则恢复引用关系
|
|
195
229
|
*
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
*
|
|
230
|
+
* 恢复策略:
|
|
231
|
+
* 1. 使用引用节点本身(如果节点仍然有效)
|
|
232
|
+
* 2. 检查引用节点是否仍在 app 树上(过滤掉已删除的引用)
|
|
233
|
+
* 3. **关键**:检查引用节点是否仍引用原来的 qName(如果引用内容已改变,则不恢复)
|
|
234
|
+
* 4. 重新建立引用关系
|
|
199
235
|
*/
|
|
200
|
-
|
|
201
|
-
updateRefsInNaslFragment: (env: SemEnv, payload: NASLObject.EventPayload) => void;
|
|
236
|
+
restoreRefsFromCache: (qName: string, defNode: DefConcept) => boolean;
|
|
202
237
|
/**
|
|
203
|
-
|
|
204
|
-
|
|
238
|
+
* 获取待恢复引用缓存中的引用(用于查询场景,如 getOqlFiles)
|
|
239
|
+
* @param qName 节点的 qName
|
|
240
|
+
* @param app 可选的 App 实例(保留参数以保持向后兼容,但不再使用)
|
|
241
|
+
* @returns 缓存的引用集合,如果没有则返回 undefined
|
|
242
|
+
*
|
|
243
|
+
* 注意:只使用引用节点本身,检查引用节点是否仍在 app 树上且仍引用原来的 qName
|
|
244
|
+
*/
|
|
245
|
+
getPendingRefsForRecreation: (qName: string, app?: App) => Set<RefConcept> | undefined;
|
|
246
|
+
/**
|
|
247
|
+
* 获取待恢复引用缓存的大小(用于测试和调试)
|
|
248
|
+
* @returns 缓存中 qName 的数量
|
|
249
|
+
*/
|
|
250
|
+
getPendingRefsForRecreationSize: () => number;
|
|
251
|
+
/**
|
|
252
|
+
* 清除所有待恢复引用缓存
|
|
253
|
+
* 用于清理操作,避免内存泄漏
|
|
254
|
+
*/
|
|
255
|
+
clearPendingRefsCache: () => void;
|
|
256
|
+
/**
|
|
257
|
+
* 注册 Logic/View/BusinessLogic 的 params 到 gQNameDefs,便于建立「调用逻辑的参数」到「逻辑的参数」的引用
|
|
258
|
+
*/
|
|
259
|
+
private registerParamsOfLogicOrView;
|
|
260
|
+
/**
|
|
261
|
+
* 移除 Logic/View/BusinessLogic 的 params 在 gQNameDefs 的注册及其引用
|
|
262
|
+
*/
|
|
263
|
+
private unregisterParamsOfLogicOrView;
|
|
264
|
+
/**
|
|
265
|
+
* 对「调用该 Logic/View/BusinessComponent 的所有 CallLogic/Destination/ViewElement」重新收集参数引用,把参数引用加进 globalRefs。
|
|
266
|
+
* syncParamsOfLogicOrView 与 registerNewParamAndRecollectRefs 共用,避免重复逻辑。
|
|
267
|
+
* 所有 callers 均在 globalRefs。
|
|
268
|
+
*/
|
|
269
|
+
private recollectParamRefsForCallers;
|
|
270
|
+
/**
|
|
271
|
+
* 对指定 Logic/View/BusinessLogic 重新收集参数引用(CallLogic 实参、Destination 实参 → params)。
|
|
272
|
+
* 增量更新「3: 按新类型添加符号」之后调用,此时 View 的 callers(Destination)已就绪,页面参数才能对应到页面跳转。
|
|
273
|
+
*/
|
|
274
|
+
recollectParamRefsForDef: (env: SemEnv, defNode: DefConcept) => void;
|
|
275
|
+
/**
|
|
276
|
+
* Logic/View/BusinessLogic 参数列表变更时同步 gQNameDefs 与 globalRefs。
|
|
277
|
+
* - 仅卸载「已删除」的参数,避免把内部引用清空。
|
|
278
|
+
* - 仍存在的参数:把 refs 从旧 def 迁移到新 def,并更新 gQNameDefs。
|
|
279
|
+
* - 新加参数:只做注册。
|
|
280
|
+
* - 最后对「调用该 Logic/View 的所有 CallLogic」重新收集参数引用,把新参数的引用加进 globalRefs。
|
|
281
|
+
*/
|
|
282
|
+
syncParamsOfLogicOrView: (env: SemEnv, updatedDefNode: DefConcept, oldDefNode: DefConcept) => void;
|
|
283
|
+
/**
|
|
284
|
+
* 新增参数进入 createNodes 时(Param create 事件):注册该参数并对调用该 Logic/View 的 CallLogic 重新收集参数引用。
|
|
285
|
+
* 与 syncParamsOfLogicOrView 互补:后者处理 Logic update;本方法处理 Param create。
|
|
286
|
+
*/
|
|
287
|
+
registerNewParamAndRecollectRefs: (env: SemEnv, paramNode: DefConcept) => void;
|
|
288
|
+
/**
|
|
289
|
+
* 建立「调用处实参」到「Logic/View/BusinessComponent 形参」的引用。
|
|
290
|
+
* 支持 CallLogic(调用逻辑)、Destination(页面跳转)、ViewElement(业务组件 bindAttrs)等。
|
|
291
|
+
* 扩充新类型时只需在此处增加分支。
|
|
292
|
+
*/
|
|
293
|
+
private handleCallerParamRefs;
|
|
294
|
+
/**
|
|
295
|
+
* 处理「定义」的增删
|
|
296
|
+
* @warning Only handle global symbols
|
|
297
|
+
**/
|
|
205
298
|
handleDefOp: (mode: Operation, defNode: DefConcept, qName: string) => void;
|
|
206
299
|
/**
|
|
300
|
+
* 处理「引用」的增删
|
|
207
301
|
* @warning Only handle global symbols
|
|
208
|
-
|
|
302
|
+
**/
|
|
209
303
|
handleRefOp: (mode: Operation, refNd: RefConcept, qName: string) => void;
|
|
210
304
|
handleSymbolImplicitRefs: (nd: SyntaxNode | undefined) => void;
|
|
211
305
|
private handleNewCompositeNode;
|
|
@@ -217,6 +311,11 @@ export declare class ReferenceManager {
|
|
|
217
311
|
private handleBusinessComponentRefs;
|
|
218
312
|
private handleBindRoles;
|
|
219
313
|
private handleAuthLogicRef;
|
|
314
|
+
/**
|
|
315
|
+
* 处理 ProcessElementV2 的 CallSubProcess 类型对 ProcessV2 的引用
|
|
316
|
+
* 当 ProcessElementV2 的 type === 'CallSubProcess' 时,subProcessKey 字段引用另一个 ProcessV2 的 uniqueKey
|
|
317
|
+
*/
|
|
318
|
+
private handleProcessSubProcessRef;
|
|
220
319
|
/**
|
|
221
320
|
* 无论根节点是 ref 还是 def,都要递归收集下层所有的引用节点
|
|
222
321
|
* 会打散 a.b.c、A | B、x.a.b 等结构,并记录必要的信息
|