mirror of
https://github.com/aljazceru/opencode.git
synced 2026-01-11 11:54:55 +01:00
fix: file references & grep tool for windows (#2980)
This commit is contained in:
committed by
GitHub
parent
9c6192b00d
commit
889c276558
@@ -47,7 +47,7 @@ import { NamedError } from "../util/error"
|
||||
import { ulid } from "ulid"
|
||||
import { spawn } from "child_process"
|
||||
import { Command } from "../command"
|
||||
import { $ } from "bun"
|
||||
import { $, fileURLToPath } from "bun"
|
||||
import { ConfigMarkdown } from "../config/markdown"
|
||||
|
||||
export namespace SessionPrompt {
|
||||
@@ -589,7 +589,7 @@ export namespace SessionPrompt {
|
||||
log.info("file", { mime: part.mime })
|
||||
// have to normalize, symbol search returns absolute paths
|
||||
// Decode the pathname since URL constructor doesn't automatically decode it
|
||||
const filepath = decodeURIComponent(url.pathname)
|
||||
const filepath = fileURLToPath(part.url)
|
||||
const stat = await Bun.file(filepath).stat()
|
||||
|
||||
if (stat.isDirectory()) {
|
||||
@@ -604,14 +604,14 @@ export namespace SessionPrompt {
|
||||
end: url.searchParams.get("end"),
|
||||
}
|
||||
if (range.start != null) {
|
||||
const filePath = part.url.split("?")[0]
|
||||
const filePathURI = part.url.split("?")[0]
|
||||
let start = parseInt(range.start)
|
||||
let end = range.end ? parseInt(range.end) : undefined
|
||||
// some LSP servers (eg, gopls) don't give full range in
|
||||
// workspace/symbol searches, so we'll try to find the
|
||||
// symbol in the document to get the full range
|
||||
if (start === end) {
|
||||
const symbols = await LSP.documentSymbol(filePath)
|
||||
const symbols = await LSP.documentSymbol(filePathURI)
|
||||
for (const symbol of symbols) {
|
||||
let range: LSP.Range | undefined
|
||||
if ("range" in symbol) {
|
||||
|
||||
@@ -25,6 +25,7 @@ export const GrepTool = Tool.define("grep", {
|
||||
args.push("--glob", params.include)
|
||||
}
|
||||
args.push(searchPath)
|
||||
args.push("--field-match-separator=|")
|
||||
|
||||
const proc = Bun.spawn([rgPath, ...args], {
|
||||
stdout: "pipe",
|
||||
@@ -53,11 +54,11 @@ export const GrepTool = Tool.define("grep", {
|
||||
for (const line of lines) {
|
||||
if (!line) continue
|
||||
|
||||
const [filePath, lineNumStr, ...lineTextParts] = line.split(":")
|
||||
const [filePath, lineNumStr, ...lineTextParts] = line.split("|")
|
||||
if (!filePath || !lineNumStr || lineTextParts.length === 0) continue
|
||||
|
||||
const lineNum = parseInt(lineNumStr, 10)
|
||||
const lineText = lineTextParts.join(":")
|
||||
const lineText = lineTextParts.join("|")
|
||||
|
||||
const file = Bun.file(filePath)
|
||||
const stats = await file.stat().catch(() => null)
|
||||
|
||||
Reference in New Issue
Block a user