对语言服务器p的完成请求使用文本编辑时如何对完成项排序

2024-05-20 09:32:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用语言服务器协议编写一个语言服务器,该协议使用textDocument/完成请求提供完成。我返回的完成项目应该以特定的方式进行排序

我正在用python实现服务器,并使用pygls模块作为基本语言服务器。下面是他们的example server的一个修改版本,以展示我所面临的问题的一个简单示例

@json_server.feature(COMPLETION)
def completions(ls, params: CompletionParams = None):
    """Returns completion items."""
    line_index = params.position.line
    character_index = params.position.character
    to_insert = "Label"

    uri = params.textDocument.uri
    doc = ls.workspace.get_document(uri)
    line = doc.lines[line_index]

    end = Position(line_index, character_index)
    text_edit = TextEdit(Range(end, end), to_insert)

    return CompletionList(True, [
        CompletionItem(
            label=to_insert,
            sort_text="1",
            insert_text=to_insert,
            # text_edit=text_edit,
            filter_text=line
        ),
        CompletionItem(
            label="Laaa",
            sort_text="2",
            filter_text=line
        )
    ])

这样,Label completion项显示在Laaa completion项之前,因为它应该考虑sort\u text属性。当使用文本\编辑而不是插入\文本时,排序中断和完成项以错误的顺序显示

我可以确认pygls和visualstudio代码(示例中使用)都没有问题,因为我已经尝试了另一种语言客户机和LSP基服务器

不幸的是,我需要使用文本编辑,但仍然想排序的项目。有人知道解决办法吗


Tags: totext服务器语言index排序lineuri