포스트

kotlin-language-server v1.3.13 documentHighlight 크래시 해결

Mason fwcd 빌드의 NoTopLevelDescriptorProvider 크래시 — community fork 빌드 또는 documentHighlight 끄기.

kotlin-language-server v1.3.13 documentHighlight 크래시 해결

Mason의 kotlin-language-server(fwcd) v1.3.13에서 Kotlin class 파일 열면 NoTopLevelDescriptorProvider: Should not be called 에러가 발생한다. upstream 미수정 버그로, 커뮤니티 fork로 해결.

원인

documentHighlight 요청 시 커서가 class 선언 위에 있으면, class 전체를 expression으로 compileKtExpression에 넘기는데, top-level context가 없어서 크래시.

해결: 커뮤니티 fork 빌드

kotlin-community-tools/kotlin-language-server에서 수정됨.

1
2
3
4
5
git clone https://github.com/kotlin-community-tools/kotlin-language-server.git
cd kotlin-language-server
./gradlew :server:installDist
mkdir -p ~/.local/share/kotlin-language-server
cp -r server/build/install/server/* ~/.local/share/kotlin-language-server/

LazyVim 설정 (lua/plugins/lsp.lua):

1
2
3
kotlin_language_server = function(_, opts)
  opts.cmd = { os.getenv("HOME") .. "/.local/share/kotlin-language-server/server/bin/kotlin-language-server" }
end,

더 간단한 대안

빌드가 번거로우면 documentHighlight만 비활성화:

1
2
3
4
5
6
7
8
vim.api.nvim_create_autocmd("LspAttach", {
  callback = function(args)
    local client = vim.lsp.get_client_by_id(args.data.client_id)
    if client and client.name == "kotlin_language_server" then
      client.server_capabilities.documentHighlightProvider = false
    end
  end,
})
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.