如何在vscode扩展CompletionItems中强制执行顺序

时间:2019-06-30 17:15:23

标签: visual-studio-code vscode-extensions

我正在编写一个自定义VSCode扩展,可帮助我向项目中的文件添加相对链接(来自工作区);我有两个用例:

1)通过关键字搜索文件(在工作区中的任何位置搜索) 2)按文件夹列出文件

由于“按文件夹列出文件”更具体,因此更有可能包含所需文件,因此我希望它们首先出现在CompletionItem建议中。

因此,当我搜索“图片”时,会获得CompletionItems的列表

../../../../animals/pictures/cat.png (by keyword)
../../../../animals/pictures/dog.png (by keyword)
../../../pets/pictures/dog.png (by keyword)
./pictures/dog.png (by files in folder)

我可以按自己喜欢的任何顺序将CompletionItems添加到返回数组,但它仍按字母顺序列出。

有什么办法可以控制结果列表的顺序?

2 个答案:

答案 0 :(得分:1)

尝试在返回的项目上设置sortText属性:

 firstCompletionItem.sortText = 'a';
 secondCompletionItem.sortText = 'b';
 ...

sortText是一个任意字符串,用于排序显示补全的顺序。

请记住,sortText仅在完成项目匹配得很好的情况下使用。例如,如果仅在新行上触发智能感知,则所有完成项将与空白行匹配得很好,因此将使用sortText对其进行排序。但是,如果您在键入字母a后触发智能感知,则以a开头的完成将显示在没有sortText的情况之前(无论其完成情况是从a开始) sortText将使用其USE INDEX进行订购

答案 1 :(得分:0)

我发现这种东西对文本排序很方便(我称之为“优先级”并设置为 sortText 属性:

    const priority = {
        "title": "01",
        "find": "011",
        "replace": "02",
        "restrictFind": "03",
        "cursorMove": "031",           // added later
        "triggerSearch": "04",
        "triggerReplaceAll": "041",    // added later
        "isRegex": "05",
        "filesToInclude": "06",
        "preserveCase": "07",
        "useExcludeSettingsAndIgnoreFiles": "08",
        "isCaseSensitive": "09",
        "matchWholeWord": "091",
        "filesToExclude": "092"
    };

通过这种方式,您可以返回并在优先级列表中逻辑上属于它的位置插入新的内容,并轻松地在之前的条目之间对其进行排序。