Я пытаюсь реализовать функцию, подобную intellisense, в редакторе Monaco для html (или xml) подобных текстов.Я знаю о двух методах.Первый:
monaco.languages.registerCompletionItemProvider('myLanguage', {
provideCompletionItems: () => {
return { suggestions: monacoSuggestionsXml };
}
, где monacoSuggestionsXml - это массив структур, подобных
[{
label: 'simpleText',
kind: monaco.languages.CompletionItemKind.Text,
insertText: 'simpleText'
}, {
label: 'testing',
kind: monaco.languages.CompletionItemKind.Keyword,
insertText: 'testing(${1:condition})',
insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet
}, {
label: 'ifelse',
kind: monaco.languages.CompletionItemKind.Snippet,
insertText: ['if (${1:condition}) {','\t$0','} else {','\t','}'].join(\n'),
}]
Недостатком является то, что работает, только если вы начинаете печатать или нажимаете Ctrl + Пробел в начале строки,В противном случае «Нет предложений.».
Другой метод включает в себя что-то вроде:
monaco.languages.typescript.javascriptDefaults.setCompilerOptions(
{
allowNonTsExtensions: true
});
monaco.languages.xml.javascriptDefaults.addExtraLib(myLib, 'myLib');
Проблема заключается в том, что вышеприведенное работает для синтаксиса JavaScript, но я хочу выбрать один «XML» (япредпочел бы 'html') как ниже:
var mEditor = monaco.editor.create(document.getElementById(editorId), {
language: 'xml',
});
mEditor.setModel(null);
var model = monaco.editor.createModel('', 'xml', fileName);
mEditor.setModel(model);