on main help sign in
ci: update golangci-lint to v2.10 and fix new issues (#2355)
8a9000bAndrey Nering
.github/workflows/lint.yml+1−1
@@ -8,5 +8,5 @@ jobs:
8 uses: charmbracelet/meta/.github/workflows/lint.yml@main
8 uses: charmbracelet/meta/.github/workflows/lint.yml@main
9 with:
9 with:
10 golangci_path: .golangci.yml
10 golangci_path: .golangci.yml
11− golangci_version: v2.9
11+ golangci_version: v2.10
12 timeout: 10m
12 timeout: 10m
internal/agent/tools/references.go+3−3
@@ -176,15 +176,15 @@ func formatReferences(locations []protocol.Location) string {
176 sort.Strings(files)
176 sort.Strings(files)
177
177
178 var output strings.Builder
178 var output strings.Builder
179− output.WriteString(fmt.Sprintf("Found %d reference(s) in %d file(s):\n\n", len(locations), len(files)))
179+ fmt.Fprintf(&output, "Found %d reference(s) in %d file(s):\n\n", len(locations), len(files))
180
180
181 for _, file := range files {
181 for _, file := range files {
182 refs := fileRefs[file]
182 refs := fileRefs[file]
183− output.WriteString(fmt.Sprintf("%s (%d reference(s)):\n", file, len(refs)))
183+ fmt.Fprintf(&output, "%s (%d reference(s)):\n", file, len(refs))
184 for _, ref := range refs {
184 for _, ref := range refs {
185 line := ref.Range.Start.Line + 1
185 line := ref.Range.Start.Line + 1
186 char := ref.Range.Start.Character + 1
186 char := ref.Range.Start.Character + 1
187− output.WriteString(fmt.Sprintf(" Line %d, Column %d\n", line, char))
187+ fmt.Fprintf(&output, " Line %d, Column %d\n", line, char)
188 }
188 }
189 output.WriteString("\n")
189 output.WriteString("\n")
190 }
190 }
internal/agent/tools/search.go+4−4
@@ -191,11 +191,11 @@ func formatSearchResults(results []SearchResult) string {
191 }
191 }
192
192
193 var sb strings.Builder
193 var sb strings.Builder
194− sb.WriteString(fmt.Sprintf("Found %d search results:\n\n", len(results)))
194+ fmt.Fprintf(&sb, "Found %d search results:\n\n", len(results))
195 for _, result := range results {
195 for _, result := range results {
196− sb.WriteString(fmt.Sprintf("%d. %s\n", result.Position, result.Title))
196+ fmt.Fprintf(&sb, "%d. %s\n", result.Position, result.Title)
197− sb.WriteString(fmt.Sprintf(" URL: %s\n", result.Link))
197+ fmt.Fprintf(&sb, " URL: %s\n", result.Link)
198− sb.WriteString(fmt.Sprintf(" Summary: %s\n\n", result.Snippet))
198+ fmt.Fprintf(&sb, " Summary: %s\n\n", result.Snippet)
199 }
199 }
200 return sb.String()
200 return sb.String()
201}
201}
internal/agent/tools/sourcegraph.go+8−8
@@ -145,7 +145,7 @@ func formatSourcegraphResults(result map[string]any, contextWindow int) (string,
145 for _, err := range errors {
145 for _, err := range errors {
146 if errMap, ok := err.(map[string]any); ok {
146 if errMap, ok := err.(map[string]any); ok {
147 if message, ok := errMap["message"].(string); ok {
147 if message, ok := errMap["message"].(string); ok {
148− buffer.WriteString(fmt.Sprintf("- %s\n", message))
148+ fmt.Fprintf(&buffer, "- %s\n", message)
149 }
149 }
150 }
150 }
151 }
151 }
@@ -172,7 +172,7 @@ func formatSourcegraphResults(result map[string]any, contextWindow int) (string,
172 limitHit, _ := searchResults["limitHit"].(bool)
172 limitHit, _ := searchResults["limitHit"].(bool)
173
173
174 buffer.WriteString("# Sourcegraph Search Results\n\n")
174 buffer.WriteString("# Sourcegraph Search Results\n\n")
175− buffer.WriteString(fmt.Sprintf("Found %d matches across %d results\n", int(matchCount), int(resultCount)))
175+ fmt.Fprintf(&buffer, "Found %d matches across %d results\n", int(matchCount), int(resultCount))
176
176
177 if limitHit {
177 if limitHit {
178 buffer.WriteString("(Result limit reached, try a more specific query)\n")
178 buffer.WriteString("(Result limit reached, try a more specific query)\n")
@@ -215,10 +215,10 @@ func formatSourcegraphResults(result map[string]any, contextWindow int) (string,
215 fileURL, _ := file["url"].(string)
215 fileURL, _ := file["url"].(string)
216 fileContent, _ := file["content"].(string)
216 fileContent, _ := file["content"].(string)
217
217
218− buffer.WriteString(fmt.Sprintf("## Result %d: %s/%s\n\n", i+1, repoName, filePath))
218+ fmt.Fprintf(&buffer, "## Result %d: %s/%s\n\n", i+1, repoName, filePath)
219
219
220 if fileURL != "" {
220 if fileURL != "" {
221− buffer.WriteString(fmt.Sprintf("URL: %s\n\n", fileURL))
221+ fmt.Fprintf(&buffer, "URL: %s\n\n", fileURL)
222 }
222 }
223
223
224 if len(lineMatches) > 0 {
224 if len(lineMatches) > 0 {
@@ -240,24 +240,24 @@ func formatSourcegraphResults(result map[string]any, contextWindow int) (string,
240
240
241 for j := startLine - 1; j < int(lineNumber)-1 && j < len(lines); j++ {
241 for j := startLine - 1; j < int(lineNumber)-1 && j < len(lines); j++ {
242 if j >= 0 {
242 if j >= 0 {
243− buffer.WriteString(fmt.Sprintf("%d| %s\n", j+1, lines[j]))
243+ fmt.Fprintf(&buffer, "%d| %s\n", j+1, lines[j])
244 }
244 }
245 }
245 }
246
246
247− buffer.WriteString(fmt.Sprintf("%d| %s\n", int(lineNumber), preview))
247+ fmt.Fprintf(&buffer, "%d| %s\n", int(lineNumber), preview)
248
248
249 endLine := int(lineNumber) + contextWindow
249 endLine := int(lineNumber) + contextWindow
250
250
251 for j := int(lineNumber); j < endLine && j < len(lines); j++ {
251 for j := int(lineNumber); j < endLine && j < len(lines); j++ {
252 if j < len(lines) {
252 if j < len(lines) {
253− buffer.WriteString(fmt.Sprintf("%d| %s\n", j+1, lines[j]))
253+ fmt.Fprintf(&buffer, "%d| %s\n", j+1, lines[j])
254 }
254 }
255 }
255 }
256
256
257 buffer.WriteString("```\n\n")
257 buffer.WriteString("```\n\n")
258 } else {
258 } else {
259 buffer.WriteString("```\n")
259 buffer.WriteString("```\n")
260− buffer.WriteString(fmt.Sprintf("%d| %s\n", int(lineNumber), preview))
260+ fmt.Fprintf(&buffer, "%d| %s\n", int(lineNumber), preview)
261 buffer.WriteString("```\n\n")
261 buffer.WriteString("```\n\n")
262 }
262 }
263 }
263 }
internal/agent/tools/web_fetch.go+3−3
@@ -60,11 +60,11 @@ func NewWebFetchTool(workingDir string, client *http.Client) fantasy.AgentTool {
60 return fantasy.NewTextErrorResponse(fmt.Sprintf("Failed to close temporary file: %s", err)), nil
60 return fantasy.NewTextErrorResponse(fmt.Sprintf("Failed to close temporary file: %s", err)), nil
61 }
61 }
62
62
63− result.WriteString(fmt.Sprintf("Fetched content from %s (large page)\n\n", params.URL))
63+ fmt.Fprintf(&result, "Fetched content from %s (large page)\n\n", params.URL)
64− result.WriteString(fmt.Sprintf("Content saved to: %s\n\n", tempFilePath))
64+ fmt.Fprintf(&result, "Content saved to: %s\n\n", tempFilePath)
65 result.WriteString("Use the view and grep tools to analyze this file.")
65 result.WriteString("Use the view and grep tools to analyze this file.")
66 } else {
66 } else {
67− result.WriteString(fmt.Sprintf("Fetched content from %s:\n\n", params.URL))
67+ fmt.Fprintf(&result, "Fetched content from %s:\n\n", params.URL)
68 result.WriteString(content)
68 result.WriteString(content)
69 }
69 }
70
70
internal/ui/chat/tools.go+2−2
@@ -1337,7 +1337,7 @@ func (t *baseToolMessageItem) formatWebFetchResultForCopy() string {
1337 }
1337 }
1338
1338
1339 var result strings.Builder
1339 var result strings.Builder
1340− result.WriteString(fmt.Sprintf("URL: %s\n\n", params.URL))
1340+ fmt.Fprintf(&result, "URL: %s\n\n", params.URL)
1341 result.WriteString("```markdown\n")
1341 result.WriteString("```markdown\n")
1342 result.WriteString(t.result.Content)
1342 result.WriteString(t.result.Content)
1343 result.WriteString("\n```")
1343 result.WriteString("\n```")
@@ -1354,7 +1354,7 @@ func (t *baseToolMessageItem) formatAgentResultForCopy() string {
1354 var result strings.Builder
1354 var result strings.Builder
1355
1355
1356 if t.result.Content != "" {
1356 if t.result.Content != "" {
1357− result.WriteString(fmt.Sprintf("```markdown\n%s\n```", t.result.Content))
1357+ fmt.Fprintf(&result, "```markdown\n%s\n```", t.result.Content)
1358 }
1358 }
1359
1359
1360 return result.String()
1360 return result.String()