【问题标题】:Getting locations of the variable declarations获取变量声明的位置
【发布时间】:2019-08-04 08:49:07
【问题描述】:

我正在开发一个扩展,它需要我获取变量声明的位置。 例如,

var x = 5;
console.log(x);

VS Code API 是否提供类似getVariableLocations() 的功能,它将返回var x = 5; 的位置?

【问题讨论】:

  • 你的意思是定义变量的文件的路径吗?

标签: visual-studio-code vscode-extensions


【解决方案1】:

您可以通过运行'vscode.executeDocumentSymbolProvider' 来获取document symbols

这是一个在活动文档上执行命令的示例,然后将嵌套的符号列表(每个 DocumentSymbol 可以有 children)转换为由 SymbolKind.Variable 过滤的平面列表:

function findVars(symbols: vscode.DocumentSymbol[]): vscode.DocumentSymbol[] {
  var vars =
      symbols.filter(symbol => symbol.kind === vscode.SymbolKind.Variable);
  return vars.concat(symbols.map(symbol => findVars(symbol.children))
                         .reduce((a, b) => a.concat(b), []));
}
var activeEditor = vscode.window.activeTextEditor;
if (activeEditor !== undefined) {
  vscode.commands
      .executeCommand<vscode.DocumentSymbol[]>(
          'vscode.executeDocumentSymbolProvider', activeEditor.document.uri)
      .then(symbols => {
        if (symbols !== undefined) {
          for (const variable of findVars(symbols)) {
            console.log(variable.name);
          }
        }
      });
}

在此代码 sn-p 上运行此代码时,它会记录 activeEditorvarsvariable。您可以通过DocumentSymbol.range查看位置。

【讨论】:

  • 我正在寻找一个文件的面包屑字符串,它是它的路径。我在这里吗?如果是这样,我如何使用上面的代码开始?我应该在 vscode 中从 nodejs 运行代码吗?
  • @Timo 我认为 OP 计划在扩展中使用它。一些示例扩展可以在 Microsoft 的示例存储库中找到:github.com/microsoft/vscode-extension-samples/tree/main/…
猜你喜欢
  • 1970-01-01
  • 2010-09-22
  • 2020-04-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2013-06-05
  • 2018-06-02
相关资源
最近更新 更多