Есть ли способ сообщить VS Code, что совпадение firstLine в моем расширении языка должно иметь приоритет над любым расширением файла?

В настоящее время я занимаюсь разработкой языкового расширения для VS Code. Язык, для которого я его разрабатываю, обычно имеет либо собственное расширение файла (назовем его .myext), либо просто .txt (это просто язык сценариев).

Я столкнулся с проблемой, заключающейся в том, что я не уверен, как указать VS Code использовать мое расширение, когда первая строка соответствует определенной строке при открытии файлов .txt.

Вот что я пытаюсь (отрывок из моего package.json):

"contributes": {
  "languages": [
    {
      "id": "mylang",
      "aliases": [
        "mylang"
      ],
      "extensions": [
        ".myext"
      ],
      "firstLine": "^MyLang.*",
      "configuration": "./language-configuration.json"
    }
  ]
}

Это не работает, когда я открываю .txt файл, который начинается с MyLang. Однако он работает, если я открываю файл с неизвестным (например, file.foobar1234) или вообще без расширения.

Теперь, когда я изменяю конфигурацию для включения .txt файлов, оно активирует мое расширение для любого .txt файла, который я открываю:

"contributes": {
  "languages": [
    {
      "id": "mylang",
      "aliases": [
        "mylang"
      ],
      "extensions": [
        ".myext",
        ".txt"
      ],
      "firstLine": "^MyLang.*",
      "configuration": "./language-configuration.json"
    }
  ]
}

Однако мне это не нужно, я хочу оставить значение по умолчанию plain text при открытии обычных .txt файлов.

Вкратце, чего я хочу добиться:

  • активировать мое расширение в моем пользовательском расширении файла .myext (это уже работает без каких-либо проблем)
  • активировать мое расширение при открытии .txt файлов, которые начинаются со строки, указанной в firstLine
  • не активировать мое расширение при открытии .txt файлов, которые не начинаются со строки, указанной в firstLine

Есть ли способ сделать это?


person mserajnik    schedule 28.06.2018    source источник


Ответы (2)


После долгих поисков: в настоящее время это невозможно.

Недавнее изменение (середина-конец 2017 года) позволяет языковым расширениям, которые соответствуют расширению файла и первой строке файла, иметь приоритет над расширением, которое соответствует только одному из двух.

Однако это не работает со встроенными языковыми режимами VS Code. Соответствие расширения файла приведет к тому, что VS Code всегда выбирает ваше языковое расширение для таких файлов, если оно есть, если для этого языка нет другого расширения, независимо от любого правила первой строки, которое могло быть установлено в добавление.

См. здесь и здесь для получения дополнительной информации.

person mserajnik    schedule 29.06.2018

Если у вас последняя версия VS Code, я говорю это, потому что то, что у меня, вероятно, поддерживается в более ранних версиях. На нижней панели инструментов вы должны увидеть язык, который автоматически определяется для открытого файла. Например, если у вас есть файл .js, он будет автоматически настроен для JavaScript. Независимо от того, какой язык установлен по умолчанию для вашего файла, просто нажмите на него, и вы перейдете в «Выбор языкового режима».

Оттуда у вас будут варианты. Вы можете настроить / настроить, что происходит, и / или искать расширение для работы в языковом режиме. Итак, я думаю, вы захотите сделать последнее, особенно если вы создаете свой собственный языковой файл.

person Dylan Wright    schedule 28.06.2018
comment
Ага, я, конечно, это знаю. С его помощью вы всегда можете выбрать языковой режим вручную (я обычно использую сочетание клавиш), но вся цель моего расширения - довести автоопределение до такой степени, чтобы не нужно было ничего менять вручную. - person mserajnik; 29.06.2018