Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何禁用单编辑器语法规则_Javascript_Typescript_Monaco Editor - Fatal编程技术网

Javascript 如何禁用单编辑器语法规则

Javascript 如何禁用单编辑器语法规则,javascript,typescript,monaco-editor,Javascript,Typescript,Monaco Editor,我有一个用例,其中我有一个编辑器,允许用户编写自定义函数。此函数的格式必须为 function (source, callback) { callback(source); } 因为我们随后将输出分配给一个变量,我们使用该变量来运行数据 但是,我得到了“预期标识符”错误。有没有办法禁用这个单一语法规则 但这不是一条语法规则 这是JavaScript错误!得到这个错误是因为如果你这样写: function (source, callback) { callback(source)

我有一个用例,其中我有一个编辑器,允许用户编写自定义函数。此函数的格式必须为

function (source, callback) {
    callback(source);
}
因为我们随后将输出分配给一个变量,我们使用该变量来运行数据

但是,我得到了“预期标识符”错误。有没有办法禁用这个单一语法规则


但这不是一条语法规则

这是JavaScript错误!得到这个错误是因为如果你这样写:

function (source, callback)
{
    callback(source);
}
function funcName(source, callback)
{
    callback(source);
}
那么您将无法使用此功能

你必须写下这样的名字:

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);

我有同样的情况,我希望允许在全局级别使用return语句,因为我的脚本是一个“函数”。 Typescript使用“只能在函数体中使用”语句将返回标记为错误

我找到的一个解决方案是过滤模型标记。这是非常糟糕的,因为字符串匹配,但它是有效的。当装饰出现时,UI中会有轻微的闪烁,然后立即消失

创建编辑器后,订阅装饰更改:

   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)
    }
}
希望我们至少能在将来得到匹配的错误代码。
标记中可能有更多信息,您可以更好地进行筛选,在调试器中查看标记对象。

同时,引入了适当的API来忽略某些错误。这将修复上述假阳性:

monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({
    diagnosticCodesToIgnore: [1003]
});

没错,我们就是这么做的。此函数成为另一个函数的变量。所以我理解为什么它会显示这个错误,但是因为我使用这个函数的方式,这个错误是不相关的。我想从用户视图中隐藏它。也许我应该澄清一下这个问题。我们获取editor.getValue()的值并将其包装(正如您在另一个函数示例中所做的那样),然后从中创建一个blob来执行它。@geogekemp,但在这种情况下,您可以或者可能会更好–您必须编写一个名称(因为一个错误),并且可以使用editor.getValue()获取编辑器的值您也可以将其与名称一起使用。@geogekemp,您也可以将其与名称一起使用,如下所示:
anotherFunction(function someName(source,callback){callback(source);})我感谢您对我的语法进行的更正,但是,我正在寻找的解决方案是能够在Monaco内禁用针对该特定错误的错误突出显示。我非常感谢您在可能的解决方法方面提供的帮助,但不幸的是,这不是我想要的。在一些用户回答了您的问题后,不允许对您的问题进行重大更改,因为这些答案可能会被忽略,因为它们看起来像错误的答案。在这种情况下,您必须使用注释(每个答案下方)或提出新问题。