Определите правило синтаксиса схемы VSCode, которое «всегда побеждает» - PullRequest
0 голосов
/ 22 января 2020

Я хотел бы добавить некоторые дополнительные подсветки синтаксиса к уценке.

Я определил грамматику инъекций:

{
  "scopeName": "markdown.mytodos",
  "injectionSelector": "L:text.html.markdown",
    "patterns": [
        { "include": "#todo" }
  ],
    "repository": {
        "todo": {
        "match": "^[ \t]*o .*",
        "_comment": "Line start, tabs or spaces, then literal `o` and a space",
        "name": "entity.name.tag.css"
    }
  }
}

Результат:

Я ожидал увидеть свой Правило для обоих этих примеров, но оно работает только для первого:

foo
o bar <- correct scope

foo
    o bar <- wrong scope (meta.paragraph.markdown)

Таким образом, похоже, что моя область видимости не берется, даже если регулярное выражение совпадает (проверено изолированно).

Я посмотрел, и Markdown определяет meta.paragraph.markdown с этим begin правилом:

(^|\\G)[ ]{0,3}(?=\\S)

и с этим while правилом:

(^|\\G)((?=\\s*[-=]{3,}\\s*$)|[ ]{4,}(?=\\S))

Моя текущая теория что это нераскрытое while блокирует мое правило.

Вопрос:

  1. Блокирует ли открытое правило какие-либо другие совпадения?
  2. Как я могу сообщить своему vscode / textmate грамматика, что я хочу, чтобы он все время "побеждал", даже внутри другой области видимости?

Я пробовал:

  1. Использование правил начала / конца вместо match (без изменений)
  2. Определение языка как подмножества meta.paragraph.markdown вместо text.html.markdown: "injectionSelector": "L:meta.paragraph.markdown" (не добавляет вложенную область видимости как положено)

1 Ответ

0 голосов
/ 22 января 2020

Я обнаружил, что изменение шаблона сопоставления решает проблему.

Не работает во вложенном случае:

^[ \t]*o .*

Отлично работает во всех протестированных мной случаях:

(^|\G)[ \t]*o .*

Документы говорят:

\ G устанавливает позицию в конце предыдущего совпадения или в начале строки для первого совпадения

Что Означает ли это в контексте нескольких селекторов области видимости vscode / textmate? Я не уверен. Пожалуйста, звоните, если знаете!

...