From d6ef4920bfec05f1fa90a4fc6d8be089b644a724 Mon Sep 17 00:00:00 2001 From: someoneinjd <61791143+someoneinjd@users.noreply.github.com> Date: Wed, 4 Jun 2025 21:25:11 +0800 Subject: fix(clangd): set offset_encoding correctly #3887 Problem: Neovim's native Client:initialize implementation does not support clangd's utf8 offsets extension, resulting in an inconsistency in offsetEncoding between clangd and Neovim when using vim.lsp.config. Solution: Add a custom on_init to set the offset_encoding correctly. --- lsp/clangd.lua | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lsp/clangd.lua b/lsp/clangd.lua index 062b4777..d0f01d3f 100644 --- a/lsp/clangd.lua +++ b/lsp/clangd.lua @@ -57,6 +57,9 @@ local function symbol_info() end, bufnr) end +---@class ClangdInitializeResult: lsp.InitializeResult +---@field offsetEncoding? string + return { cmd = { 'clangd' }, filetypes = { 'c', 'cpp', 'objc', 'objcpp', 'cuda', 'proto' }, @@ -77,6 +80,13 @@ return { }, offsetEncoding = { 'utf-8', 'utf-16' }, }, + ---@param client vim.lsp.Client + ---@param init_result ClangdInitializeResult + on_init = function(client, init_result) + if init_result.offsetEncoding then + client.offset_encoding = init_result.offsetEncoding + end + end, on_attach = function() vim.api.nvim_buf_create_user_command(0, 'LspClangdSwitchSourceHeader', function() switch_source_header(0) -- cgit v1.2.3-70-g09d2