简体   繁体   English

如何用 CodeMirror 给错误加下划线?

[英]How to underline errors with CodeMirror?

How can I add underline squiggles at specific character positions to CodeMirror ?如何在CodeMirror 的特定字符位置添加下划线曲线

I know the start and end column and line numbers of what I want to highlight, but I can't figure out how to actually add the highlights.我知道要突出显示的开始和结束列和行号,但我不知道如何实际添加突出显示。

This tutorial shows how to highlight the whole line, but I only want to put red squiggles under where the error actually occurs. 本教程展示了如何突出显示整行,但我只想在错误实际发生的位置下方放置红色波浪线。

Here's what I've got: jsbin这是我所拥有的: jsbin

 CodeMirror.fromTextArea(document.getElementById('grammar'), { lineNumbers: true, mode: 'pegjs', })
 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.22.0/codemirror.min.css" integrity="sha384-Emjcn3QHkP2VdU4RooUiFc08IB3MxUhOIKysa338K0FaWAVuskkkLe7eNkXso/YH" crossorigin="anonymous"> <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.3/lodash.min.js" integrity="sha384-jsG12NEMqgAmlKLBiSdTZPy1CbxTUU2AykyyLMKaLCAIvk1bAmNXGkZ5pnJHmO/l" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.22.0/codemirror.min.js" integrity="sha384-hoB2ZofsVhMdfGMWAUv7PlNjtUTmqLg4WLPWTZCOFl7H/Jig3OnOutQdW7if3B0q" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.22.0/mode/clike/clike.min.js" integrity="sha384-8+bTF1tFTP2p6v5mvLYGHHXlsP1vvv2VZ1G9m7ItQ0h9cmnSkLjMu1MU0awC2Vnp" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.22.0/mode/pegjs/pegjs.min.js" integrity="sha384-ydJmJY1nFH/5/OUYmAXyo+B/XKfnymKtFz+GaYG+84yf2sWTKwnErWnSxoZc+ob7" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.22.0/mode/javascript/javascript.min.js" integrity="sha384-g7R5zn/n5KHtJr96K6OEZz4n/MzoKFsr9ncytZcrGoGw+xO1L1JtqjNg/zxLFEIP" crossorigin="anonymous"></script> </head> <textarea id="grammar">how can I highlight only "this" word?</textarea>


I tried using editor.addOverlay but seems we can't get the line number inside the token method, which I need to know where the error is.我尝试使用editor.addOverlay但似乎我们无法获取token方法中的行号,我需要知道错误在哪里。

The easiest way to accomplish this is with markText .完成此操作的最简单方法是使用markText

Here's an example:下面是一个例子:

CodeMirror.fromTextArea(document.getElementById('grammar'), {
    lineNumbers: true,
    mode: 'pegjs',
}).on('change', _.throttle(editor => {
    fetch('/grammar', {
        method: 'POST',
        body: editor.getValue(),
    }).then(res => {
        let contentType = res.headers.get('Content-Type');

        if(/^application\/json(;|$)/.test(contentType)) {
            res.json().then(data => {
                clearMarks();

                if(data.error) {
                    let loc = data.error.location;

                    let from = {line: loc.start.line-1, ch: loc.start.column-1 - (loc.start.offset === loc.end.offset)};
                    let to = {line: loc.end.line-1, ch: loc.end.column-1};

                    errorMarks.push(editor.markText(from, to, {className: 'syntax-error', title: data.error.message}));
                }
            })
        } else {
            clearMarks();
        }
    });
}, 333, {
    leading: false,
    trailing: true,
}));

You can use CodeMirror lint addon.您可以使用 CodeMirror lint 插件。

Check this link for more information: https://codemirror.net/demo/lint.html查看此链接以获取更多信息: https : //codemirror.net/demo/lint.html

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM