我正在使用很棒的CodeMirror库。我正在实现的代码编辑器是表单的一部分,因此我想用linting进行基本检查,看看用户的输入是否有效。除非代码没问题,否则我不想处理表单。
所以问题是:CodeMirror编辑器实例上是否有一个方法可以让我检索linting的结果?我正在查看文档和Google,但未能找到任何有用的信息。这个performLint
方法被添加到编辑器中,但它不会返回linting的结果。
答案 0 :(得分:6)
没有特定的方法来获取linting结果,但是在lint选项对象中定义getAnnotations
属性时会提供一个钩子。
这是一个触发linting的基本选项对象:
var codeMirrorOptions = {
"lineNumbers": true,
"indentWithTabs": true,
"mode": "css",
"gutters": ['CodeMirror-lint-markers'],
"lint": true
}
您可以指定一个对象(而不是布尔值)作为lint
属性:
"lint": {
"getAnnotations": css_validator,
"async": true
}
然后,定义自己的验证器功能。此函数只能调用CodeMirror的捆绑验证器:
function css_validator(cm, updateLinting, options) {
// call the built in css linter from addon/lint/css-lint.js
var errors = CodeMirror.lint.css(cm);
updateLinting(errors);
}
此时你已经复制了lint:true的行为 - 但现在errors
变量包含一个lint错误数组。如果errors.length == 0
,则未发现任何错误。
注意:此示例假设您正在使用CSS,但同样适用于其他类型。
答案 1 :(得分:2)
@Clem的答案将我引向了正确的方向,尽管我确实遇到了一些问题。第一个是在控制台中反复看到Bad option: onUpdateLinting
(请参见Codemirror issue的报道)。第二个是有时看到注释数组包含空条目。这是我传递到Codemirror的衬棉配置,可以解决这些问题。请注意,我使用的是react-codemirror2,但是选项以相同的格式传递到Codemirror中。我的组件有一个可选的onLintingComplete
回调函数,可以由使用组件提供,并且您将在下面看到该回调函数传递给lint批注数组的地方:
lint: onLintingComplete
? {
onUpdateLinting: (_annotationsNotSorted, annotations) =>
onLintingComplete(
// sometimes codemirror includes null annotations in the array, so we want to filter these out
annotations.filter(annotation => annotation != null)
),
// This empty lint options object is needed here, see: https://github.com/codemirror/CodeMirror/issues/4198
options: {},
}
: true,
答案 2 :(得分:1)
lint.js中的updateLinting函数将其注释(和编辑器)传递给onUpdateLinting选项:
if (options.onUpdateLinting) options.onUpdateLinting(annotationsNotSorted, annotations, cm);
所以您要做的就是将处理程序作为lint选项属性:
lint: { onUpdateLinting: handleErrors }
答案 3 :(得分:0)
这是Dezzas答案的提示:
写
dir="fa,fb,fc"
subdir="s1,s2,s3"
eval mkdir -p test/{$dir}/{$subdir}
否则,它将失败。