fix(lsp): advertise supported fold kinds (#34461)

This commit also makes it so that folds which have an unsupported fold
kind have their `kind` ignored.

(cherry picked from commit 35756022cb)
This commit is contained in:
Riley Bruins
2025-06-16 13:05:00 -07:00
committed by github-actions[bot]
parent 3d5be364bc
commit 1077374380
2 changed files with 18 additions and 3 deletions

View File

@ -3,6 +3,13 @@ local log = require('vim.lsp.log')
local ms = require('vim.lsp.protocol').Methods
local api = vim.api
---@type table<lsp.FoldingRangeKind, true>
local supported_fold_kinds = {
['comment'] = true,
['imports'] = true,
['region'] = true,
}
local M = {}
---@class (private) vim.lsp.folding_range.BufState
@ -49,9 +56,14 @@ local function renew(bufnr)
local kind = range.kind
if kind then
local kinds = row_kinds[start_row] or {}
kinds[kind] = true
row_kinds[start_row] = kinds
-- Ignore unsupported fold kinds.
if supported_fold_kinds[kind] then
local kinds = row_kinds[start_row] or {}
kinds[kind] = true
row_kinds[start_row] = kinds
else
log.info(('Received unsupported fold kind: "%s"'):format(kind))
end
end
for row = start_row, end_row do

View File

@ -440,6 +440,9 @@ function protocol.make_client_capabilities()
foldingRange = {
dynamicRegistration = false,
lineFoldingOnly = true,
foldingRangeKind = {
valueSet = { 'comment', 'imports', 'region' },
},
foldingRange = {
collapsedText = true,
},