Как динамически установить язык в соответствии с расширением файла в редакторе Монако? - PullRequest
0 голосов
/ 20 июня 2019

Я работаю над редактором monaco, чтобы показать содержимое файлов локального кода, которые могут быть написаны на разных языках, поэтому мне интересно, как динамически установить / изменить язык редактора monaco в соответствии с расширением файла или первымстрока файла без расширения (например, #! / usr / bin / env python).

Похоже, что сам Monaco-редактор не поставляется с этой функцией, но VSCode, по-видимому, не.

Iхочу определить такой метод с именем checkLanguage (file_path), который берет путь к файлу и возвращает строку, представляющую язык, поддерживаемый monaco-editor.Если язык не может быть определен, просто верните простой текст.

monaco.editor.setModelLanguage(model, checkLanguage(file_path))

Поддерживаемые языки: https://github.com/microsoft/monaco-languages

Ответы [ 2 ]

0 голосов
/ 17 июля 2019

Языки уже определяют расширения файлов, которые они могут обрабатывать, поэтому можно разрешить Монако выбирать подходящий язык, задав ему имя файла:

const model = monaco.editor.createModel(
  value,
  undefined, // language
  monaco.Uri.file(filename) // uri
)

editor.setModel(model)
0 голосов
/ 28 июня 2019

У меня просто есть объект, который выглядит примерно так:

fileTypes: {
    css: 'css',
    js: 'javascript',
    json: 'json',
    md: 'markdown',
    mjs: 'javascript',
    ts: 'typescript',
}

Когда я создаю модель, я вызываю monaco.editor.createModel(file.content, fileTypes[file.extension]).Очевидно, вы можете расширить список, чтобы включить все, что вы хотите.Возможно, в какой-то момент они добавят отображение, чтобы вы могли инициализировать только с расширением.

В вашем случае вы можете сделать monaco.editor.setModelLanguage(model, fileTypes[file_path.split['.'].pop()]).Это будет охватывать случаи, когда у вас есть файл с несколькими периодами, например test.min.js.

...