ci: update golangci-lint to v2.10 and fix new issues (#2355)

Andrey Nering created

Change summary

.github/workflows/lint.yml          |  2 +-
internal/agent/tools/references.go  |  6 +++---
internal/agent/tools/search.go      |  8 ++++----
internal/agent/tools/sourcegraph.go | 16 ++++++++--------
internal/agent/tools/web_fetch.go   |  6 +++---
internal/ui/chat/tools.go           |  4 ++--
6 files changed, 21 insertions(+), 21 deletions(-)

Detailed changes

.github/workflows/lint.yml 🔗

@@ -8,5 +8,5 @@ jobs:
     uses: charmbracelet/meta/.github/workflows/lint.yml@main
     with:
       golangci_path: .golangci.yml
-      golangci_version: v2.9
+      golangci_version: v2.10
       timeout: 10m

internal/agent/tools/references.go 🔗

@@ -176,15 +176,15 @@ func formatReferences(locations []protocol.Location) string {
 	sort.Strings(files)
 
 	var output strings.Builder
-	output.WriteString(fmt.Sprintf("Found %d reference(s) in %d file(s):\n\n", len(locations), len(files)))
+	fmt.Fprintf(&output, "Found %d reference(s) in %d file(s):\n\n", len(locations), len(files))
 
 	for _, file := range files {
 		refs := fileRefs[file]
-		output.WriteString(fmt.Sprintf("%s (%d reference(s)):\n", file, len(refs)))
+		fmt.Fprintf(&output, "%s (%d reference(s)):\n", file, len(refs))
 		for _, ref := range refs {
 			line := ref.Range.Start.Line + 1
 			char := ref.Range.Start.Character + 1
-			output.WriteString(fmt.Sprintf("  Line %d, Column %d\n", line, char))
+			fmt.Fprintf(&output, "  Line %d, Column %d\n", line, char)
 		}
 		output.WriteString("\n")
 	}

internal/agent/tools/search.go 🔗

@@ -191,11 +191,11 @@ func formatSearchResults(results []SearchResult) string {
 	}
 
 	var sb strings.Builder
-	sb.WriteString(fmt.Sprintf("Found %d search results:\n\n", len(results)))
+	fmt.Fprintf(&sb, "Found %d search results:\n\n", len(results))
 	for _, result := range results {
-		sb.WriteString(fmt.Sprintf("%d. %s\n", result.Position, result.Title))
-		sb.WriteString(fmt.Sprintf("   URL: %s\n", result.Link))
-		sb.WriteString(fmt.Sprintf("   Summary: %s\n\n", result.Snippet))
+		fmt.Fprintf(&sb, "%d. %s\n", result.Position, result.Title)
+		fmt.Fprintf(&sb, "   URL: %s\n", result.Link)
+		fmt.Fprintf(&sb, "   Summary: %s\n\n", result.Snippet)
 	}
 	return sb.String()
 }

internal/agent/tools/sourcegraph.go 🔗

@@ -145,7 +145,7 @@ func formatSourcegraphResults(result map[string]any, contextWindow int) (string,
 		for _, err := range errors {
 			if errMap, ok := err.(map[string]any); ok {
 				if message, ok := errMap["message"].(string); ok {
-					buffer.WriteString(fmt.Sprintf("- %s\n", message))
+					fmt.Fprintf(&buffer, "- %s\n", message)
 				}
 			}
 		}
@@ -172,7 +172,7 @@ func formatSourcegraphResults(result map[string]any, contextWindow int) (string,
 	limitHit, _ := searchResults["limitHit"].(bool)
 
 	buffer.WriteString("# Sourcegraph Search Results\n\n")
-	buffer.WriteString(fmt.Sprintf("Found %d matches across %d results\n", int(matchCount), int(resultCount)))
+	fmt.Fprintf(&buffer, "Found %d matches across %d results\n", int(matchCount), int(resultCount))
 
 	if limitHit {
 		buffer.WriteString("(Result limit reached, try a more specific query)\n")
@@ -215,10 +215,10 @@ func formatSourcegraphResults(result map[string]any, contextWindow int) (string,
 		fileURL, _ := file["url"].(string)
 		fileContent, _ := file["content"].(string)
 
-		buffer.WriteString(fmt.Sprintf("## Result %d: %s/%s\n\n", i+1, repoName, filePath))
+		fmt.Fprintf(&buffer, "## Result %d: %s/%s\n\n", i+1, repoName, filePath)
 
 		if fileURL != "" {
-			buffer.WriteString(fmt.Sprintf("URL: %s\n\n", fileURL))
+			fmt.Fprintf(&buffer, "URL: %s\n\n", fileURL)
 		}
 
 		if len(lineMatches) > 0 {
@@ -240,24 +240,24 @@ func formatSourcegraphResults(result map[string]any, contextWindow int) (string,
 
 					for j := startLine - 1; j < int(lineNumber)-1 && j < len(lines); j++ {
 						if j >= 0 {
-							buffer.WriteString(fmt.Sprintf("%d| %s\n", j+1, lines[j]))
+							fmt.Fprintf(&buffer, "%d| %s\n", j+1, lines[j])
 						}
 					}
 
-					buffer.WriteString(fmt.Sprintf("%d|  %s\n", int(lineNumber), preview))
+					fmt.Fprintf(&buffer, "%d|  %s\n", int(lineNumber), preview)
 
 					endLine := int(lineNumber) + contextWindow
 
 					for j := int(lineNumber); j < endLine && j < len(lines); j++ {
 						if j < len(lines) {
-							buffer.WriteString(fmt.Sprintf("%d| %s\n", j+1, lines[j]))
+							fmt.Fprintf(&buffer, "%d| %s\n", j+1, lines[j])
 						}
 					}
 
 					buffer.WriteString("```\n\n")
 				} else {
 					buffer.WriteString("```\n")
-					buffer.WriteString(fmt.Sprintf("%d| %s\n", int(lineNumber), preview))
+					fmt.Fprintf(&buffer, "%d| %s\n", int(lineNumber), preview)
 					buffer.WriteString("```\n\n")
 				}
 			}

internal/agent/tools/web_fetch.go 🔗

@@ -60,11 +60,11 @@ func NewWebFetchTool(workingDir string, client *http.Client) fantasy.AgentTool {
 					return fantasy.NewTextErrorResponse(fmt.Sprintf("Failed to close temporary file: %s", err)), nil
 				}
 
-				result.WriteString(fmt.Sprintf("Fetched content from %s (large page)\n\n", params.URL))
-				result.WriteString(fmt.Sprintf("Content saved to: %s\n\n", tempFilePath))
+				fmt.Fprintf(&result, "Fetched content from %s (large page)\n\n", params.URL)
+				fmt.Fprintf(&result, "Content saved to: %s\n\n", tempFilePath)
 				result.WriteString("Use the view and grep tools to analyze this file.")
 			} else {
-				result.WriteString(fmt.Sprintf("Fetched content from %s:\n\n", params.URL))
+				fmt.Fprintf(&result, "Fetched content from %s:\n\n", params.URL)
 				result.WriteString(content)
 			}
 

internal/ui/chat/tools.go 🔗

@@ -1337,7 +1337,7 @@ func (t *baseToolMessageItem) formatWebFetchResultForCopy() string {
 	}
 
 	var result strings.Builder
-	result.WriteString(fmt.Sprintf("URL: %s\n\n", params.URL))
+	fmt.Fprintf(&result, "URL: %s\n\n", params.URL)
 	result.WriteString("```markdown\n")
 	result.WriteString(t.result.Content)
 	result.WriteString("\n```")
@@ -1354,7 +1354,7 @@ func (t *baseToolMessageItem) formatAgentResultForCopy() string {
 	var result strings.Builder
 
 	if t.result.Content != "" {
-		result.WriteString(fmt.Sprintf("```markdown\n%s\n```", t.result.Content))
+		fmt.Fprintf(&result, "```markdown\n%s\n```", t.result.Content)
 	}
 
 	return result.String()