From 5258bd79d56de90e0e579a9878bc3646bbf88420 Mon Sep 17 00:00:00 2001 From: CaptainB Date: Wed, 9 Jul 2025 12:08:55 +0800 Subject: [PATCH] refactor: implement debounced async linting in CodemirrorEditor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --bug=1057664 --user=刘瑞斌 【工具】创建工具,工具内容输入特定的内容页面会崩溃 https://www.tapd.cn/62980211/s/1726594 --- ui/src/components/codemirror-editor/index.vue | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/ui/src/components/codemirror-editor/index.vue b/ui/src/components/codemirror-editor/index.vue index ae5e40f52..a73fab53d 100644 --- a/ui/src/components/codemirror-editor/index.vue +++ b/ui/src/components/codemirror-editor/index.vue @@ -98,19 +98,30 @@ const regexpLinter = linter(async (view) => { if (!lintResults || lintResults.length === 0) { return diagnostics } - lintResults.forEach((element: any) => { - const range = getRangeFromLineAndColumn( - view.state, - element.line, - element.column, - element.endColumn, - ) - diagnostics.push({ - from: range.form, - to: range.to, - severity: element.type, - message: element.message, - }) + // 限制诊断数量,避免过多诊断信息 + const maxDiagnostics = 50 + const limitedResults = lintResults.slice(0, maxDiagnostics) + + limitedResults.forEach((element: any) => { + try { + const range = getRangeFromLineAndColumn( + view.state, + element.line, + element.column, + element.endColumn, + ) + // 验证范围有效性 + if (range.form >= 0 && range.to >= range.form) { + diagnostics.push({ + from: range.form, + to: range.to, + severity: element.type === 'error' ? 'error' : 'warning', + message: element.message, + }) + } + } catch (error) { + // console.error('Error processing lint result:', error) + } }) return diagnostics })