| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- import { describe, expect, spyOn } from "bun:test"
- import path from "path"
- import { Effect, Layer } from "effect"
- import { LSP } from "@/lsp/lsp"
- import * as LSPServer from "@/lsp/server"
- import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner"
- import { provideTmpdirInstance } from "../fixture/fixture"
- import { testEffect } from "../lib/effect"
- const it = testEffect(Layer.mergeAll(LSP.defaultLayer, CrossSpawnSpawner.defaultLayer))
- describe("lsp.spawn", () => {
- it.live("does not spawn builtin LSP for files outside instance", () =>
- provideTmpdirInstance(
- (dir) =>
- LSP.Service.use((lsp) =>
- Effect.gen(function* () {
- const spy = spyOn(LSPServer.Typescript, "spawn").mockResolvedValue(undefined)
- try {
- yield* lsp.touchFile(path.join(dir, "..", "outside.ts"))
- yield* lsp.hover({
- file: path.join(dir, "..", "hover.ts"),
- line: 0,
- character: 0,
- })
- expect(spy).toHaveBeenCalledTimes(0)
- } finally {
- spy.mockRestore()
- }
- }),
- ),
- { config: { lsp: true } },
- ),
- )
- it.live("does not spawn builtin LSP for files inside instance when LSP is unset", () =>
- provideTmpdirInstance((dir) =>
- LSP.Service.use((lsp) =>
- Effect.gen(function* () {
- const spy = spyOn(LSPServer.Typescript, "spawn").mockResolvedValue(undefined)
- try {
- yield* lsp.hover({
- file: path.join(dir, "src", "inside.ts"),
- line: 0,
- character: 0,
- })
- expect(spy).toHaveBeenCalledTimes(0)
- } finally {
- spy.mockRestore()
- }
- }),
- ),
- ),
- )
- it.live("would spawn builtin LSP for files inside instance when lsp is true", () =>
- provideTmpdirInstance(
- (dir) =>
- LSP.Service.use((lsp) =>
- Effect.gen(function* () {
- const spy = spyOn(LSPServer.Typescript, "spawn").mockResolvedValue(undefined)
- try {
- yield* lsp.hover({
- file: path.join(dir, "src", "inside.ts"),
- line: 0,
- character: 0,
- })
- expect(spy).toHaveBeenCalledTimes(1)
- } finally {
- spy.mockRestore()
- }
- }),
- ),
- { config: { lsp: true } },
- ),
- )
- it.live("would spawn builtin LSP for files inside instance when config object is provided", () =>
- provideTmpdirInstance(
- (dir) =>
- LSP.Service.use((lsp) =>
- Effect.gen(function* () {
- const spy = spyOn(LSPServer.Typescript, "spawn").mockResolvedValue(undefined)
- try {
- yield* lsp.hover({
- file: path.join(dir, "src", "inside.ts"),
- line: 0,
- character: 0,
- })
- expect(spy).toHaveBeenCalledTimes(1)
- } finally {
- spy.mockRestore()
- }
- }),
- ),
- {
- config: {
- lsp: {
- eslint: { disabled: true },
- },
- },
- },
- ),
- )
- })
|