Проверка синтаксиса настраиваемого языка в редакторе Monaco

Я пытаюсь интегрировать собственный язык в редактор monaco, и я прошел через https://microsoft.github.io/monaco-editor/monarch.html, чтобы получить представление о подсветке синтаксиса.

Но я не смог найти ни одного документа о том, как мы можем добавить проверки ошибок / предупреждений с помощью проверки синтаксиса для этого. В редакторе Ace мы сделали это, написав воркер и выполнив в нем функцию проверки. Цените любые ссылки / помощь по этому поводу.


person user2894296    schedule 10.10.2016    source источник


Ответы (2)


Недавно я сделал это успешно, я просто использовал monaco-css в качестве шаблона, и единственное, что я теперь нужно написать парсер для моего языка и других функций, которые я хочу в нем. а вот мой код.

Добавьте свой парсер и другие языковые службы в папку lang_services в корневом каталоге проекта.

Думаю, это было бы полезно.

person Nauman Umer    schedule 02.03.2017

Вот краткий и легко настраиваемый пример, который отображает ошибку в позициях 2-5 строки 1 следующим образом:

введите описание изображения здесь

Просто вставьте этот код вверху (а не внизу) кода игровой площадки по адресу https://microsoft.github.io/monaco-editor/playground.html#exnding-language-services-custom-languages:

monaco.editor.onDidCreateModel(function(model) {
    function validate() {
      var textToValidate = model.getValue();

      // return a list of markers indicating errors to display

      // replace the below with your actual validation code which will build
      // the proper list of markers

      var markers = [{
        severity: monaco.MarkerSeverity.Error,
        startLineNumber: 1,
        startColumn: 2,
        endLineNumber: 1,
        endColumn: 5,
        message: 'hi there'
      }];

      // change mySpecialLanguage to whatever your language id is
      monaco.editor.setModelMarkers(model, 'mySpecialLanguage', markers);
    }

    var handle = null;
    model.onDidChangeContent(() => {
      // debounce
      clearTimeout(handle);
      handle = setTimeout(() => validate(), 500);
    });
    validate();
});

// -- below this is the original canned example code:

// Register a new language

Обратите внимание, что для простоты в этом примере игнорируется соображение, что onDidCreateModel и onDidChangeContent оба возвращают IDisposable объекты, которые вам, возможно, придется отслеживать и избавляться от них.

person mwag    schedule 05.02.2021