Skip to content

Commit fbf65bf

Browse files
committed
Reduce the probability of errors when the model tries to fix the problem due to mismatched line numbers after applying diff
1 parent e0d45dd commit fbf65bf

File tree

3 files changed

+10
-6
lines changed

3 files changed

+10
-6
lines changed

src/core/mentions/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,9 +186,9 @@ async function getFileOrFolderContent(mentionPath: string, cwd: string): Promise
186186
}
187187
}
188188

189-
function getWorkspaceProblems(cwd: string): string {
189+
async function getWorkspaceProblems(cwd: string): Promise<string> {
190190
const diagnostics = vscode.languages.getDiagnostics()
191-
const result = diagnosticsToProblemsString(
191+
const result = await diagnosticsToProblemsString(
192192
diagnostics,
193193
[vscode.DiagnosticSeverity.Error, vscode.DiagnosticSeverity.Warning],
194194
cwd,

src/integrations/diagnostics/index.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,12 @@ export function getNewDiagnostics(
7070
// // - New error in file3 (1:1)
7171

7272
// will return empty string if no problems with the given severity are found
73-
export function diagnosticsToProblemsString(
73+
export async function diagnosticsToProblemsString(
7474
diagnostics: [vscode.Uri, vscode.Diagnostic[]][],
7575
severities: vscode.DiagnosticSeverity[],
7676
cwd: string,
77-
): string {
77+
): Promise<string> {
78+
const documents = new Map<vscode.Uri, vscode.TextDocument>()
7879
let result = ""
7980
for (const [uri, fileDiagnostics] of diagnostics) {
8081
const problems = fileDiagnostics.filter((d) => severities.includes(d.severity))
@@ -100,7 +101,10 @@ export function diagnosticsToProblemsString(
100101
}
101102
const line = diagnostic.range.start.line + 1 // VSCode lines are 0-indexed
102103
const source = diagnostic.source ? `${diagnostic.source} ` : ""
103-
result += `\n- [${source}${label}] Line ${line}: ${diagnostic.message}`
104+
const document = documents.get(uri) || (await vscode.workspace.openTextDocument(uri))
105+
documents.set(uri, document)
106+
const lineContent = document.lineAt(diagnostic.range.start.line).text
107+
result += `\n- [${source}${label}] ${line} | ${lineContent} : ${diagnostic.message}`
104108
}
105109
}
106110
}

src/integrations/editor/DiffViewProvider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ export class DiffViewProvider {
172172
initial fix is usually correct and it may just take time for linters to catch up.
173173
*/
174174
const postDiagnostics = vscode.languages.getDiagnostics()
175-
const newProblems = diagnosticsToProblemsString(
175+
const newProblems = await diagnosticsToProblemsString(
176176
getNewDiagnostics(this.preDiagnostics, postDiagnostics),
177177
[
178178
vscode.DiagnosticSeverity.Error, // only including errors since warnings can be distracting (if user wants to fix warnings they can use the @problems mention)

0 commit comments

Comments
 (0)