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

В настоящее время я занимаюсь разработкой языкового расширения для 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

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

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

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

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

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

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

0 голосов
/ 28 июня 2018

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

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

...