From 62cd1a74cbf33ba182a212270652e5122b9f30bb Mon Sep 17 00:00:00 2001 From: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com> Date: Wed, 25 Sep 2024 20:12:21 -0400 Subject: [PATCH] Only include errors in automatic problems report after edits --- src/core/ClaudeDev.ts | 8 ++++++- src/core/mentions/index.ts | 6 ++++- src/integrations/diagnostics/index.ts | 32 +++++++++++++++++++++------ 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/src/core/ClaudeDev.ts b/src/core/ClaudeDev.ts index 4683cbe..62dc4a9 100644 --- a/src/core/ClaudeDev.ts +++ b/src/core/ClaudeDev.ts @@ -859,7 +859,13 @@ export class ClaudeDev { initial fix is usually correct and it may just take time for linters to catch up. */ const postDiagnostics = vscode.languages.getDiagnostics() - const newProblems = diagnosticsToProblemsString(getNewDiagnostics(preDiagnostics, postDiagnostics), cwd) // will be empty string if no errors/warnings + const newProblems = diagnosticsToProblemsString( + getNewDiagnostics(preDiagnostics, postDiagnostics), + [ + vscode.DiagnosticSeverity.Error, // only including errors since warnings can be distracting (if user wants to fix warnings they can use the @problems mention) + ], + cwd + ) // will be empty string if no errors const newProblemsMessage = newProblems.length > 0 ? `\n\nNew problems detected after saving the file:\n${newProblems}` : "" // await vscode.window.showTextDocument(vscode.Uri.file(absolutePath), { preview: false }) diff --git a/src/core/mentions/index.ts b/src/core/mentions/index.ts index e1c1d7c..629030a 100644 --- a/src/core/mentions/index.ts +++ b/src/core/mentions/index.ts @@ -171,7 +171,11 @@ async function getFileOrFolderContent(mentionPath: string, cwd: string): Promise function getWorkspaceProblems(cwd: string): string { const diagnostics = vscode.languages.getDiagnostics() - const result = diagnosticsToProblemsString(diagnostics, cwd) + const result = diagnosticsToProblemsString( + diagnostics, + [vscode.DiagnosticSeverity.Error, vscode.DiagnosticSeverity.Warning], + cwd + ) if (!result) { return "No errors or warnings detected." } diff --git a/src/integrations/diagnostics/index.ts b/src/integrations/diagnostics/index.ts index 9d6d5a0..26b4f07 100644 --- a/src/integrations/diagnostics/index.ts +++ b/src/integrations/diagnostics/index.ts @@ -69,20 +69,38 @@ export function getNewDiagnostics( // // File: /path/to/file3.ts // // - New error in file3 (1:1) -// will return empty string if no errors/warnings -export function diagnosticsToProblemsString(diagnostics: [vscode.Uri, vscode.Diagnostic[]][], cwd: string): string { +// will return empty string if no problems with the given severity are found +export function diagnosticsToProblemsString( + diagnostics: [vscode.Uri, vscode.Diagnostic[]][], + severities: vscode.DiagnosticSeverity[], + cwd: string +): string { let result = "" for (const [uri, fileDiagnostics] of diagnostics) { - const problems = fileDiagnostics.filter( - (d) => d.severity === vscode.DiagnosticSeverity.Error || d.severity === vscode.DiagnosticSeverity.Warning - ) + const problems = fileDiagnostics.filter((d) => severities.includes(d.severity)) if (problems.length > 0) { result += `\n\n${path.relative(cwd, uri.fsPath).toPosix()}` for (const diagnostic of problems) { - let severity = diagnostic.severity === vscode.DiagnosticSeverity.Error ? "Error" : "Warning" + let label: string + switch (diagnostic.severity) { + case vscode.DiagnosticSeverity.Error: + label = "Error" + break + case vscode.DiagnosticSeverity.Warning: + label = "Warning" + break + case vscode.DiagnosticSeverity.Information: + label = "Information" + break + case vscode.DiagnosticSeverity.Hint: + label = "Hint" + break + default: + label = "Diagnostic" + } const line = diagnostic.range.start.line + 1 // VSCode lines are 0-indexed const source = diagnostic.source ? `${diagnostic.source} ` : "" - result += `\n- [${source}${severity}] Line ${line}: ${diagnostic.message}` + result += `\n- [${source}${label}] Line ${line}: ${diagnostic.message}` } } }