автозаполнение для html (xml) в редакторе Monaco - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь реализовать функцию, подобную 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);
...