问题描述
我正在开发vs代码扩展。 我正在尝试找到VS Code Extension API或任何其他方式来告知新修改的行的行号 用户添加/更新的内容保存在vscode工作区的文件中。
例如:如果在VSCode工作空间中打开Test.js文件,其内容如下:
export class **ApP** {
constructor() {
this.html = "<h1>DomSanitizer</h1><script>attackerCode()</script>"
}
}
export class **Application** {
constructor() {
this.html = "<h1>DomSanitizer</h1><script>attackerCode()</script>"
}
}
是否有任何方法可以获取已修改的行号?例如:在以上示例中,App被修改为Application, 因此输出应为行号1。
解决方法
您可以使用onDidChangeTextDocument事件。在vscode.workspace中:
https://code.visualstudio.com/api/references/vscode-api#workspace
发送到回调的事件参数称为TextDocumentChangeEvent:
https://code.visualstudio.com/api/references/vscode-api#TextDocumentChangeEvent
此事件包含已更改的TextDocument(请参见文章底部)和一个TextDocumentContentChangeEvents数组:
https://code.visualstudio.com/api/references/vscode-api#TextDocumentContentChangeEvent
从此数组中可以获取已更改的行号。 TextDocumentContentChangeEvent包含Range类变量,该变量为您提供了更改的行的开始和结束位置。由于您只关心行号,而不关心行中的修改位置,因此只需要使用“开始/结束”“位置”行变量即可。
https://code.visualstudio.com/api/references/vscode-api#Range
https://code.visualstudio.com/api/references/vscode-api#Position
对于保存文本文档时,可以在vscode.workspace中使用onDidSaveTextDocument:
https://code.visualstudio.com/api/references/vscode-api#workspace
这会将TextDocument发送到回调:
https://code.visualstudio.com/api/references/vscode-api#TextDocument