From ad3fa4c67502ee5fd2302873ddcdf0a7f6e95cb4 Mon Sep 17 00:00:00 2001 From: shafdev Date: Fri, 15 May 2026 23:12:25 +0530 Subject: [PATCH] fix(server): implement findSymbol endpoint via LSP workspaceSymbol The findSymbol handler was a stub returning [] unconditionally. Wire it to LSP.Service.workspaceSymbol so workspace symbol search actually queries active LSP servers. Closes #27650 --- .../src/server/routes/instance/httpapi/handlers/file.ts | 6 ++++-- packages/opencode/test/server/httpapi-file.test.ts | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/opencode/src/server/routes/instance/httpapi/handlers/file.ts b/packages/opencode/src/server/routes/instance/httpapi/handlers/file.ts index 98ee5968e0cd..c22f646e0a61 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/handlers/file.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/handlers/file.ts @@ -1,6 +1,7 @@ import * as InstanceState from "@/effect/instance-state" import { File } from "@/file" import { Ripgrep } from "@/file/ripgrep" +import { LSP } from "@/lsp/lsp" import { Effect } from "effect" import { HttpApiBuilder } from "effect/unstable/httpapi" import { InstanceHttpApi } from "../api" @@ -9,6 +10,7 @@ export const fileHandlers = HttpApiBuilder.group(InstanceHttpApi, "file", (handl Effect.gen(function* () { const svc = yield* File.Service const ripgrep = yield* Ripgrep.Service + const lsp = yield* LSP.Service const findText = Effect.fn("FileHttpApi.findText")(function* (ctx: { query: { pattern: string } }) { return (yield* ripgrep @@ -27,8 +29,8 @@ export const fileHandlers = HttpApiBuilder.group(InstanceHttpApi, "file", (handl }) }) - const findSymbol = Effect.fn("FileHttpApi.findSymbol")(function* () { - return [] + const findSymbol = Effect.fn("FileHttpApi.findSymbol")(function* (ctx: { query: { query: string } }) { + return yield* lsp.workspaceSymbol(ctx.query.query) }) const list = Effect.fn("FileHttpApi.list")(function* (ctx: { query: { path: string } }) { diff --git a/packages/opencode/test/server/httpapi-file.test.ts b/packages/opencode/test/server/httpapi-file.test.ts index 00a2d42b1181..04abb04e5dc6 100644 --- a/packages/opencode/test/server/httpapi-file.test.ts +++ b/packages/opencode/test/server/httpapi-file.test.ts @@ -72,6 +72,8 @@ describe("file HttpApi", () => { expect(await files.json()).toContain("hello.txt") expect(symbols.status).toBe(200) - expect(await symbols.json()).toEqual([]) + // No LSP server is active in the test environment, so the result is an empty array. + // The endpoint delegates to LSP.workspaceSymbol — it no longer returns a hardcoded stub. + expect(await symbols.json()).toBeArray() }) })