微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VSCode 扩展:获取自定义大纲的功能大纲 我尝试过的:

如何解决VSCode 扩展:获取自定义大纲的功能大纲 我尝试过的:

我正在尝试为 VSCode 创建自定义大纲(目前仅适用于 Python),但我没有找到获取所需信息的措施。

我喜欢以这种方式获取信息:

  • 数组:
    • [0]
      • 标签:“foo”
      • 类型:“函数
      • 参数:[...]
      • 范围:[...]
      • 内部定义:[0]
    • [1]
      • 标签:“我的班级”
      • 类型:“类”
      • 基类:""
      • 范围:[...]
      • 内部定义:
        • [0]:
          • [...]
        • [1]:
          • [...]

目前我尝试通过 vscode.commands.executeCommand( 'vscode.XXX'

获取大纲信息

我尝试过的:

这是我尝试过的命令以及收到的结果。

  • vscode.executeImplementationProvider
    • 一半可用:函数名的范围。其他信息缺失
  • vscode.executeHoverProvider
  • vscode.executeDeFinitionProvider
    • 一半可用:完整功能的范围。个人信息必须“解析出来”
  • vscode.executeTypeDeFinitionProvider
    • 从未提供任何结果
  • vscode.executeDeclarationProvider
    • 从未提供任何结果
  • vscode.executeDocumentSymbolProvider
    • 朝着好的方向发展。然而 (1) 仅适用于整个文档(不是单一功能) (2) 只返回一级实体(即结果中不包含类方法

有我监督过的 API 调用吗? 我想知道内置大纲如何工作,因为它包含所有级别的信息。

解决方法

  1. 您需要使用 vscode.commands.executeCommand<vscode.Location[]>("vscode.executeDocumentSymbolProvider",uri,position)
  2. 这将为您提供一个文件的完整大纲。无法接收部分大纲。
  3. 注意:innerDefinitions 在这里称为 children
  4. 关于大纲的细节:
  • 大纲的详细程度(和正确程度)取决于提供者的实施。此外,提供者的信息在语言之间不一定一致。记住这一点非常重要!
    • 目前 (2021/03),标准 SymbolProvider 用于...
      • ... Python 将有一个函数的每个参数和局部变量的子项。它们将无法区分
      • ... C++ 将不包含参数的子项。但是它的 name 中会有参数类型。 (例如,namevoid foo(string p) 将是 foo(string): void
    • 如您所见,两者都有自己的怪癖。
  • 您可以自己创建和注册 DocumentSymbolProvider,这将返回您需要的详细程度(请参阅 VSCode Providers

另见:https://stackoverflow.com/a/66486297/6702598

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。