Установить тип языка в шаблоне - против расширения языка кода - PullRequest
2 голосов
/ 20 февраля 2020

Я хочу, чтобы vscode понимал, что язык между <go> тегами в файле html должен быть проверен как golang код.

Так дано:

<go>
    // I want to get intellisense and syntax highlighting for golang here
</go>

В настоящее время у меня есть следующие внутренности grammars в package.json:

{
    "scopeName": "go.html.injection",
    "path": "./syntaxes/go.tmLanguage.json",
    "injectTo": [
        "text.html"
    ],
    "embeddedLanguages": {
        "source.go": "go"
    }
}

и в syntaxes/go.tmLanguage.json:

{
    "scopeName": "go.html.injection",
    "injectionSelector": "L:text.html",
    "patterns": [
        {
            "include": "#go-tag"
        }
    ],
    "repository": {
        "go-tag": {
            "begin": "<go>",
            "end": "<\/go>",
            "name": "go"
        }
    }
}

При проверке с использованием отладки дается имя go как текстовая область, но язык по-прежнему установлен на html. Как установить язык соответствия на golang:

result of the debugger

При проверке содержимого тегов сценария отобразится язык, установленный на javascript, поэтому это должно быть возможно? Я также понимаю, что тогда совпадение включает тег <go>, поэтому я понимаю, что теперь мне нужно добавить сопоставление с образцом и оценку для этого.

Обновление 20/02/20:

После обращения к расширение vscode svelte Я понял, как получить подсветку синтаксиса для тега и внутреннего HTML, используя это внутри syntaxes/go.tmLanguage.json (то же самое package.json):

{
    "scopeName": "go.html.injection",
    "injectionSelector": "L:text.html",
    "patterns": [
        {
            "include": "#go-tag"
        }
    ],
    "repository": {
        "go-tag": {
            "begin": "(<)(go)",
            "beginCaptures": {
                "1": {
                    "name": "punctuation.definition.tag.begin.html"
                },
                "2": {
                    "name": "entity.name.tag.html"
                },
                "3": {
                    "name": "punctuation.definition.tag.end.html"
                }
            },
            "end": "(<\/)(go)(>)",
            "endCaptures": {
                "1": {
                    "name": "punctuation.definition.tag.begin.html"
                },
                "2": {
                    "name": "entity.name.tag.html"
                },
                "3": {
                    "name": "punctuation.definition.tag.end.html"
                }
            },
            "patterns": [
                {
                    "contentName": "source.go",
                    "begin": "(>)",
                    "beginCaptures": {
                        "1": {
                            "name": "punctuation.definition.tag.end.html"
                        }
                    },
                    "end": "(?=</go>)",
                    "patterns": [
                        {
                            "include": "source.go"
                        }
                    ]
                }
            ]
        }
    }
}

Я могу Теперь убедитесь, что vscode правильно выделяет синтаксис для тега и использует импортированные токены синтаксиса golang. Однако по-прежнему отображает язык как "html".

new token debug screen

...