如何捕获为 VSCode 扩展 api 添加/删除/修改的行

Gan*_*y M 5 visual-studio-code vscode-extensions

我正在开发 VS Code 的扩展,我需要捕获在编辑器中添加/删除的行。基本上我遇到的问题是。我已经为打开的文档(例如第 5 行,第 2 行)创建了一个诊断集合。

当用户编辑文本文档(例如添加了一行)时,位置会发生变化。但问题中显示的诊断数据仍然指向旧的第5行。

解决这个问题的方法是什么,我在想是否有可能捕获编辑器的行添加/删除事件并更新行号。

Mar*_*ark 3

  vscode.workspace.onDidChangeTextDocument(event => {
    console.log(event);
  })
Run Code Online (Sandbox Code Playgroud)

TextDocument当任何更改(不仅仅是保存)时将被触发。不过,它是逐个字符地进行的(除了同时发生的粘贴/删除)。

对象中有您要查找的信息event,例如

event.document.filename // 哪个文档被更改了

event.contentChanges // 变化数组

您可以从中获取对文档所做的实际更改以及诸如此类的内容

event.contentChanges[0].range.start.line// 更改开始的行

在删除时,您不会得到被删除的实际文本,而是得到结果,一个空字符串,但您仍然可以获得更改的range- 其中有您的两个startend位置,每个位置都有一个行号组件。

我想您可以跟踪这些更改,并且仅在onDidSaveTextDocument(event)您想在保存时批量进行计算时才进行计算。