@lcap/nasl 3.14.0-rc.4 → 3.14.0-rc.5

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.
@@ -238,8 +238,6 @@ let NaslServer = NaslServer_1 = class NaslServer {
238
238
  }
239
239
  const tsFilePathsToCheck = new Set();
240
240
  for (const fileNode of oqlFiles) {
241
- this.semData.isFirstScreen = true; // getter 会看 naslServer.semData.isFirstScreen
242
- this.semData.redirectSlowGetters(NaslServer_1.toRaw(this.getProxyApp()));
243
241
  let tsFilePath;
244
242
  try {
245
243
  tsFilePath = fileNode.getEmbeddedFilePath();
@@ -272,9 +270,6 @@ let NaslServer = NaslServer_1 = class NaslServer {
272
270
  fileNode.sourceMap = tsFile.sourceMap;
273
271
  // 麻了,查了半天是没 set 这里
274
272
  this.file2NodeMap.set(tsFile.filePath, fileNode);
275
- this.semData.recoverSlowGetters();
276
- this.semData.clearSemanticData();
277
- this.semData.isFirstScreen = false;
278
273
  }
279
274
  if (utils.isDebugMode) {
280
275
  console.info('TS 校验以下文件', Array.from(oqlFiles).map((item) => item.getEmbeddedFilePath()));
@@ -420,8 +415,6 @@ let NaslServer = NaslServer_1 = class NaslServer {
420
415
  }
421
416
  utils.isDebugMode && console.timeEnd('\x1b[44m\x1b[97m 用户体感首屏检查耗时 \x1b[0m');
422
417
  }
423
- this.semData.recoverSlowGetters();
424
- this.semData.clearSemanticData();
425
418
  }
426
419
  this.notifyPublishDiagnosticsEnd(tsDiagnostics);
427
420
  if (this.firstScreenEndWork) {
@@ -498,16 +491,21 @@ let NaslServer = NaslServer_1 = class NaslServer {
498
491
  });
499
492
  // 如果有长度,那么触发类型检查
500
493
  if (this.changeStackList.length) {
501
- itemEventPtr.forEach(payload => {
502
- // 增量更新 step 1:处理 create、delete、update 的局部符号
503
- const startTime = performance.now();
504
- this.semEnv.refMgr.updateRefsInNaslFragment(this.semEnv, payload);
505
- const endTime = performance.now();
506
- const duration = endTime - startTime;
507
- if (duration > 10) {
508
- console.log(`\x1b[44m\x1b[97m Reference manager: Update Nasl Fragment References took ${duration.toFixed(2)}ms \x1b[0m`);
509
- }
510
- });
494
+ try {
495
+ itemEventPtr.forEach(payload => {
496
+ // 增量更新 step 1:处理 create、delete、update 的局部符号
497
+ const startTime = performance.now();
498
+ this.semEnv.refMgr.updateRefsInNaslFragment(this.semEnv, payload);
499
+ const endTime = performance.now();
500
+ const duration = endTime - startTime;
501
+ if (duration > 10) {
502
+ console.log(`\x1b[44m\x1b[97m Reference manager: Update Nasl Fragment References took ${duration.toFixed(2)}ms \x1b[0m`);
503
+ }
504
+ });
505
+ }
506
+ catch (err) {
507
+ this.logger.error('error: update references in nasl fragment', err);
508
+ }
511
509
  void this.flushChangesForTypeChecking().catch(err => {
512
510
  this.logger.error('triggerTypeChecking error', err);
513
511
  });
@@ -817,9 +815,9 @@ let NaslServer = NaslServer_1 = class NaslServer {
817
815
  this.semData = new nasl_concepts_1.SemanticData();
818
816
  // 除此之外,好像没什么简单的方法可以让 __xxx.ts 文件快速拿到 app.naslServer 的引用了……
819
817
  // @ts-ignore
820
- this.semData.redirectSlowGetters(rawApp);
821
- // @ts-ignore
822
818
  this.semData.collectAllSemanticCtx(rawApp);
819
+ // @ts-ignore
820
+ this.semData.redirectSlowGetters(rawApp);
823
821
  this.logger.timeEnd('全量生成 TS——翻译——简单语义分析');
824
822
  const { notifyEndWork } = this.notifyStartWork();
825
823
  this.firstScreenEndWork = () => {
@@ -843,6 +841,8 @@ let NaslServer = NaslServer_1 = class NaslServer {
843
841
  await this.waitOqlQueryComponentChildrenFinish(app);
844
842
  // 翻译 ts 文件
845
843
  const results = await utils.runGeneratorAsync(getAllTsFiles());
844
+ this.semData.recoverSlowGetters();
845
+ this.semData.clearSemanticData();
846
846
  const files = results.map((result) => ({
847
847
  file: result.filePath,
848
848
  fileContent: result.code,
@@ -3224,35 +3224,32 @@ let NaslServer = NaslServer_1 = class NaslServer {
3224
3224
  const fileNodeRaw = NaslServer_1.toRaw(fileNode);
3225
3225
  fileNodeRaw !== NaslServer_1.toRaw(fileNode2) && console.log('\x1b[41m\x1b[97m☁️ handleAllChange 事件 fileNode 校验失败\x1b[0m');
3226
3226
  const targetNodeRaw = NaslServer_1.toRaw(targetNode);
3227
- // 处理定义节点或引用节点,更新typerCheckFiles和typerRemoveNodes
3228
- let result = null;
3227
+ // 处理定义节点或引用节点,更新 typerCheckFiles typerRemoveNodes
3228
+ let result = false;
3229
3229
  if (nasl_language_server_core_1.ReferenceManager.defConcept.includes(targetNodeRaw.concept)) {
3230
3230
  if (action === 'update') {
3231
3231
  if (payload?.field === 'name') {
3232
3232
  const oldName = payload.oldObjNasl?.[0];
3233
- result = (0, nasl_language_server_core_1.preProcessDefRename)(this.semEnv, targetNodeRaw, oldName, this.currentRenameMode, this.oqlRemoveNodesTsPath);
3233
+ result = (0, nasl_language_server_core_1.preProcessDefRename)(this.semEnv, targetNodeRaw, this.typerCheckFiles, oldName, this.currentRenameMode, this.oqlRemoveNodesTsPath);
3234
3234
  this.currentRenameMode = null;
3235
3235
  }
3236
3236
  else {
3237
- result = (0, nasl_language_server_core_1.preProcessDefUpdate)(this.semEnv, targetNodeRaw);
3237
+ result = (0, nasl_language_server_core_1.preProcessOther)(this.semEnv, targetNodeRaw, this.typerCheckFiles);
3238
3238
  }
3239
3239
  }
3240
3240
  else if (action === 'create') {
3241
- result = (0, nasl_language_server_core_1.preProcessDefCreation)(this.semEnv, targetNodeRaw);
3241
+ result = (0, nasl_language_server_core_1.preProcessOther)(this.semEnv, targetNodeRaw, this.typerCheckFiles);
3242
+ this.typerCreateNodes.add(targetNodeRaw);
3242
3243
  }
3243
3244
  else if (action === 'delete') {
3244
- result = (0, nasl_language_server_core_1.preProcessDefRemoval)(this.semEnv, targetNodeRaw);
3245
+ result = (0, nasl_language_server_core_1.preProcessOther)(this.semEnv, targetNodeRaw, this.typerCheckFiles);
3246
+ this.typerRemoveNodes.add(targetNodeRaw);
3245
3247
  }
3246
3248
  }
3247
3249
  else {
3248
- result = (0, nasl_language_server_core_1.preProcessNonDefAction)(targetNodeRaw);
3249
- }
3250
- if (result) {
3251
- result.typerCheckFiles.forEach(file => this.typerCheckFiles.add(file));
3252
- result.typerRemoveNodes.forEach(node => this.typerRemoveNodes.add(node));
3253
- result.typerCreateNodes.forEach(node => this.typerCreateNodes.add(node));
3254
- return true;
3250
+ result = (0, nasl_language_server_core_1.preProcessOther)(this.semEnv, targetNodeRaw, this.typerCheckFiles);
3255
3251
  }
3252
+ return result;
3256
3253
  }
3257
3254
  notifyStartWork() {
3258
3255
  this.logger.time('语言服务变更');
@@ -3478,6 +3475,7 @@ let NaslServer = NaslServer_1 = class NaslServer {
3478
3475
  // console.timeEnd('\x1b[44m\x1b[97m Build SymbolGraph \x1b[0m');
3479
3476
  const refMgr = new nasl_language_server_core_1.ReferenceManager();
3480
3477
  this.semEnv = new nasl_language_server_core_1.SemEnv(refMgr, utils.isDebugMode);
3478
+ this.semEnv.app = rawApp;
3481
3479
  this.semEnv.refMgr.buildQNameDefsForApp(rawApp);
3482
3480
  this.semEnv.errorDiagnoser = nasl_language_server_core_1.checker.createErrorDiagnoser({
3483
3481
  app: rawApp,