Как отключить единое синтаксическое правило редактора Monaco - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть сценарий использования, когда у меня есть редактор Монако, который позволяет пользователям писать пользовательские функции.Эта функция должна иметь формат

function (source, callback) {
    callback(source);
}

, потому что мы затем назначаем вывод переменной, через которую мы проводим данные.

Однако я получаю сообщение об ошибке «Ожидается идентификатор».Есть ли способ отключить это единственное правило синтаксиса?

The error

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

У меня такая же ситуация, когда я хочу разрешить оператор return на глобальном уровне, потому что мой скрипт - это «функция». Typescript помечает возвращение как ошибку с помощью оператора «return» можно использовать только в теле функции. '

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

После создания редактора подпишитесь на изменения оформления:

   this.editor.onDidChangeModelDecorations( e => this.onDidChangeModelDecorations(e) )

Куда вы идете и получите текущие маркеры, отфильтруйте их и поместите обратно в редактор:

onDidChangeModelDecorations(e: monaco.editor.IModelDecorationsChangedEvent)
{
    let model = this.editor.getModel()
    let markers = monaco.editor.getModelMarkers( { owner:'typescript', resource: model.uri} )

    // We have to filter out the error that the editor gives on global returns.
    // Unfortunately the error code is null in the marker, so we have option but to 
    // match on the text of the error.
    // It will be obvious if this regresses.
    let filtered = markers.filter( marker => marker.message != "A 'return' statement can only be used within a function body." )
    if (filtered.length != markers.length)
    {
        monaco.editor.setModelMarkers(model, 'typescript', filtered)
    }
}

Надеюсь, мы сможем получить коды ошибок, которые будут соответствовать в будущем. В маркере может быть больше информации, которую вы могли бы лучше отфильтровать, взглянуть на объект маркера в отладчике.

0 голосов
/ 12 сентября 2018

Но это не правило синтаксиса редактора Monaco!

Это ошибка JavaScript!И вы получаете эту ошибку, потому что если вы напишите ее так:

function (source, callback)
{
    callback(source);
}

, то вы не сможете использовать эту функцию!

Вы должны написать ее с таким именем:

function funcName(source, callback)
{
    callback(source);
}

Только если у вас есть эта функция в качестве параметра, как здесь:

anotherFunction(function(source, callback)
{
    callback(source);
});

вы можете написать ее без имени.Или, если вы используете его сразу, как показано ниже:

(function(source, callback)
{
    callback(source);
})('Hello, world!', alert);
...