Mam fragment: "Kolor: $ {1 | inicjał, dziedziczyć |}; Który jest zarejestrowany taki (minus niepotrzebny kod): const csspropertyprovider = Languages.registerCompletionItemProvider ('mjml', {...

0
Daniel_Knights 16 marzec 2021, 01:37

1 odpowiedź

Najlepsza odpowiedź

Musiałem porzucić listę / zastępcę i przechowywać sugestie osobno:

body: 'color: $1;',
values: ['initial', 'inherit'],

Następnie przypisz to polecenie do oryginalnej sugestii ({x0}}):

snippetCompletion.command = {
    command: 'editor.action.triggerSuggest',
    title: '',
}

I dodaj oddzielny dostawcę ukończenia na pokrycie tego:

const cssValueProvider = languages.registerCompletionItemProvider('mjml', {
    provideCompletionItems(document, position) {
        const snippetCompletions: ProviderResult<CompletionItem[] | CompletionList> = []

        cssProperties.forEach((prop) => {
            const formattedBody = prop.body.split('$1').join('')

            // Ensure the line includes the relevant CSS property
            if (!document.lineAt(position).text.includes(formattedBody)) return

            prop.values.forEach((val) => {
                const snippetCompletion = new CompletionItem(val)

                // Sets the suggestion icon to the little orange thing
                snippetCompletion.kind = 11 // 11 = Value
                // Ensure tab-stops ($1) are handled
                snippetCompletion.insertText = new SnippetString(val)

                snippetCompletions.push(snippetCompletion)
            })
        })

        return snippetCompletions
    },
})

Także, tylko dla mojego konkretnego przypadku użycia, musiałem dodać czek w cssPropertyProvider, który zapobiega sugestiom właściwości wyświetlania powyżej sugestii wartości:

const cssPropertyProvider = languages.registerCompletionItemProvider('mjml', {
    provideCompletionItems(document, position) {
        const { text: lineText } = document.lineAt(position)
        const lastLineChar = lineText[position.character]

        if (lastLineChar === ';') return
...

Wynik:

enter image description here

0
Daniel_Knights 16 marzec 2021, 20:56