网站搜索

typescript - VS Code 文档符号提供程序增量刷新


我正在尝试为我正在开发的 VS Code 插件实现一个文档符号提供者。它已经部分实现,当我打开文档时会调用它。我无法实现的是在文档更改后刷新。

是否有方法可以手动触发刷新,或者更改行为以便在文件保存或更改时自动刷新?

export class DocumentSymbolProvider implements vscode.DocumentSymbolProvider {
  public async provideDocumentSymbols(document: vscode.TextDocument, token: vscode.CancellationToken): Promise<vscode.SymbolInformation[]> {
    ....
      );
    }
  }
}

答案#1

editor.edit 黑客方法强制更新大纲

我想知道这是否会在以后造成任何问题,但在快速测试中似乎可以正常工作。它会删除并重新插入文档第一行的最后一个字符,保持其不变,但会触发大纲刷新:

  vscode.workspace.onDidSaveTextDocument((e) => {
    if (e.languageId === 'yourlang') {
      const p = child_process.spawn('npx', ['yourmd', 'arg1', e.fileName])
      p.on('close', (code) => {
        if (code === 0) {
          const editor = vscode.window.activeTextEditor
          if (editor) {
            const line = editor.document.lineAt(0)
            const text = line.text
            if (text.length) {
              editor.edit(editBuilder => {
                const c = line.range.end.character
                editBuilder.delete(new vscode.Range(0, c-1, 0, c))
                editBuilder.insert(new vscode.Position(0, c), text[c-1])
              })
            }
          }
        }
      })
    }

自动关闭的上游请求:https://github.com/microsoft/vscode/issues/71454

在 vscode 1.91.1 上测试。