Browse Source

Merge pull request #996 from qdaxb/optimize_diagnostics

Reduce the probability of errors when the model tries to fix the problems
Matt Rubens 10 months ago
parent
commit
e5ac33a146

+ 2 - 2
src/core/mentions/index.ts

@@ -198,9 +198,9 @@ async function getFileOrFolderContent(mentionPath: string, cwd: string): Promise
 	}
 }
 
-function getWorkspaceProblems(cwd: string): string {
+async function getWorkspaceProblems(cwd: string): Promise<string> {
 	const diagnostics = vscode.languages.getDiagnostics()
-	const result = diagnosticsToProblemsString(
+	const result = await diagnosticsToProblemsString(
 		diagnostics,
 		[vscode.DiagnosticSeverity.Error, vscode.DiagnosticSeverity.Warning],
 		cwd,

+ 7 - 3
src/integrations/diagnostics/index.ts

@@ -70,11 +70,12 @@ export function getNewDiagnostics(
 // // - New error in file3 (1:1)
 
 // will return empty string if no problems with the given severity are found
-export function diagnosticsToProblemsString(
+export async function diagnosticsToProblemsString(
 	diagnostics: [vscode.Uri, vscode.Diagnostic[]][],
 	severities: vscode.DiagnosticSeverity[],
 	cwd: string,
-): string {
+): Promise<string> {
+	const documents = new Map<vscode.Uri, vscode.TextDocument>()
 	let result = ""
 	for (const [uri, fileDiagnostics] of diagnostics) {
 		const problems = fileDiagnostics.filter((d) => severities.includes(d.severity))
@@ -100,7 +101,10 @@ export function diagnosticsToProblemsString(
 				}
 				const line = diagnostic.range.start.line + 1 // VSCode lines are 0-indexed
 				const source = diagnostic.source ? `${diagnostic.source} ` : ""
-				result += `\n- [${source}${label}] Line ${line}: ${diagnostic.message}`
+				const document = documents.get(uri) || (await vscode.workspace.openTextDocument(uri))
+				documents.set(uri, document)
+				const lineContent = document.lineAt(diagnostic.range.start.line).text
+				result += `\n- [${source}${label}] ${line} | ${lineContent} : ${diagnostic.message}`
 			}
 		}
 	}

+ 1 - 1
src/integrations/editor/DiffViewProvider.ts

@@ -177,7 +177,7 @@ export class DiffViewProvider {
 		initial fix is usually correct and it may just take time for linters to catch up.
 		*/
 		const postDiagnostics = vscode.languages.getDiagnostics()
-		const newProblems = diagnosticsToProblemsString(
+		const newProblems = await diagnosticsToProblemsString(
 			getNewDiagnostics(this.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)