diff options
| author | Kujtim Hoxha <[email protected]> | 2025-04-04 15:03:50 +0200 |
|---|---|---|
| committer | Kujtim Hoxha <[email protected]> | 2025-04-04 15:03:50 +0200 |
| commit | 3aef4dedcfd1ad408c6cb6c06e5e731feb528a1e (patch) | |
| tree | 20e018a73754880e78c0e7f569828b415c66b6a2 /internal/llm/tools/edit.go | |
| parent | a1f6147506af1f98e5dfa670fc83fa45c2249842 (diff) | |
| download | opencode-3aef4dedcfd1ad408c6cb6c06e5e731feb528a1e.tar.gz opencode-3aef4dedcfd1ad408c6cb6c06e5e731feb528a1e.zip | |
Improve LSP diagnostics handling for file operations
- Split LSP file notification into separate functions
- Add waitForLspDiagnostics function to wait for diagnostics after file changes
- Move LSP diagnostics to after file operations in edit and write tools
- Fix string splitting in diff generation
- Reduce diagnostics timeout from 10 to 5 seconds
🤖 Generated with termai
Co-Authored-By: termai <[email protected]>
Diffstat (limited to 'internal/llm/tools/edit.go')
| -rw-r--r-- | internal/llm/tools/edit.go | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/internal/llm/tools/edit.go b/internal/llm/tools/edit.go index 394ce13b9..f158401b8 100644 --- a/internal/llm/tools/edit.go +++ b/internal/llm/tools/edit.go @@ -74,7 +74,6 @@ func (e *editTool) Run(ctx context.Context, call ToolCall) (ToolResponse, error) params.FilePath = filepath.Join(wd, params.FilePath) } - notifyLspOpenFile(ctx, params.FilePath, e.lspClients) if params.OldString == "" { result, err := createNewFile(params.FilePath, params.NewString) if err != nil { @@ -96,6 +95,8 @@ func (e *editTool) Run(ctx context.Context, call ToolCall) (ToolResponse, error) return NewTextErrorResponse(fmt.Sprintf("error replacing content: %s", err)), nil } + // Wait for LSP diagnostics after editing the file + waitForLspDiagnostics(ctx, params.FilePath, e.lspClients) result = fmt.Sprintf("<result>\n%s\n</result>\n", result) result += appendDiagnostics(params.FilePath, e.lspClients) return NewTextResponse(result), nil @@ -303,23 +304,23 @@ func GenerateDiff(oldContent, newContent string) string { diffs = dmp.DiffCharsToLines(diffs, dmpStrings) diffs = dmp.DiffCleanupSemantic(diffs) buff := strings.Builder{} - + // Add a header to make the diff more readable buff.WriteString("Changes:\n") - + for _, diff := range diffs { text := diff.Text switch diff.Type { case diffmatchpatch.DiffInsert: - for _, line := range strings.Split(text, "\n") { + for line := range strings.SplitSeq(text, "\n") { if line == "" { continue } _, _ = buff.WriteString("+ " + line + "\n") } case diffmatchpatch.DiffDelete: - for _, line := range strings.Split(text, "\n") { + for line := range strings.SplitSeq(text, "\n") { if line == "" { continue } |
