在我正在编写的VS代码扩展中,我也希望在使用vscode.TextEditorEdit修改编辑器中的某些文本后阻止FoldingRangeProvider执行***。
我一直在寻找一个例子来说明这一点,但没有找到。
- 我的自定义FoldingRangeProvider**声明如下:
class MyFoldingRangeProvider implements vscode.FoldingRangeProvider {
provideFoldingRanges(pDocument: vscode.TextDocument, pContext: vscode.FoldingContext, pToken: vscode.CancellationToken): vscode.FoldingRange[] {
return getFolds(pDocument);
}
}
vscode.languages.registerFoldingRangeProvider({pattern:`**/*.*`}, new MyFoldingRangeProvider());
- 我的函数getFolds()**返回一个vscode.FoldingRange []数组。
以及我的文本编辑器编辑:
editor.edit(editBuilder => {
let newRange = pDocument.lineAt(myLineNumber).range;
editBuilder.replace(newRange, newTxt);
}, {undoStopAfter: false, undoStopBefore: false})
.then(pSuccess => {
});
对vscode.CancellationToken的说明为:
取消令牌传递给异步或长时间运行的操作以请求取消,例如,由于用户继续键入而取消对完成项的请求。,
所以这可能就是我要找的,但是我没有找到任何关于如何将它与FoldingRangeProvider一起使用的示例。
另外,vscode.CancellationToken真的适合我的情况吗?因为我不想取消任何FoldingRangeProvider的当前执行,但我想阻止任何FoldingRangeProvider的执行,这将由我使用TextEditorEdit修改编辑器内容触发。
谢谢。
1条答案
按热度按时间vlju58qv1#
您可以使用
vscode.CancellationToken
来阻止在您的情况下执行FoldingRangeProvider。您可以存储全局CancellationTokenSource变量,并在每次运行TextEditorEdit操作之前更新其标记,如下所示:
在MyFoldingRangeProvider中,您可以在返回折叠范围之前检查pToken.isCancellationRequested,因此如果已经发出取消请求,它将返回一个空数组。
在TextEditorEdit操作中,您可以将cts.令牌作为cancellationToken选项传递,这样在您修改后将不会执行FoldingRangeProvider。