重写 provideCompletionItems 方法时 insertTextRules 设置了默认值
liuxy0551 opened this issue · comments
const completionItems: languages.CompletionItem[] = unwrappedCompletions.map(
(item) => ({
...item,
insertText:
item.insertText ??
(typeof item.label === 'string' ? item.label : item.label.label),
range: item.range ?? wordRange,
insertTextRules:
item.insertTextRules ??
languages.CompletionItemInsertTextRule.InsertAsSnippet
})
);
monaco-editor
中没有设置 insertTextRules
的默认值,加上的话会需要在使用的地方明确传入 insertTextRules
的值,否则可能产生不明就里的问题,比如禅道 #81899。
补全表名时,表名含有 $
特殊字符,此时就需要明确 insertTextRules
的值为 KeepWhitespace
;对于函数名含有 $
特殊字符时,需要对函数名中的 $
字符进行转义 (\\$
) 处理,insertTextRules
的值依旧为 InsertAsSnippet
建议把默认值去掉
这里写成这个默认值,导致Monaco SQL Languages 的补全项的默认行为与 Monaco 原生 API的行为不同,