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内禁用针对该特定错误的错误突出显示。我非常感谢您在可能的解决方法方面提供的帮助,但不幸的是,这不是我想要的。在一些用户回答了您的问题后,不允许对您的问题进行重大更改,因为这些答案可能会被忽略,因为它们看起来像错误的答案。在这种情况下,您必须使用注释(每个答案下方)或提出新问题。