TypeScript 命令 vscode.executeDocumentSymbolProvider 不完整的解析

x8goxv8g  于 5个月前  发布在  TypeScript
关注(0)|答案(4)|浏览(61)

发现一个无法完全解析的案例:
一个类型为typescript的d.ts文件,路径为
ode_modulestypescript\lib\lib.es5.d.ts。最后一个“interface Date”解析不正确,这个接口的一部分也没有被解析。
复现步骤:

  1. 执行命令:npm i typescript -S
  2. 打开文件 "
    ode_modulestypescript\lib\lib.es5.d.ts"
  3. 打开大纲视图,向下滚动到末尾
  4. 最终的“Data”没有子元素

bihw5rsg

bihw5rsg1#

简单的复现,具有示范性

interface Foo {
    bar(): void;
}
interface Baz { }

interface Foo {
    bar(s?: string): void;
}

{
    "seq": 0,
    "type": "response",
    "command": "navtree",
    "request_seq": 22,
    "success": true,
    "body": {
        "text": "<global>",
        "kind": "script",
        "kindModifiers": "",
        "spans": [
            {
                "start": {
                    "line": 1,
                    "offset": 1
                },
                "end": {
                    "line": 8,
                    "offset": 4
                }
            }
        ],
        "childItems": [
            {
                "text": "Baz",
                "kind": "interface",
                "kindModifiers": "",
                "spans": [
                    {
                        "start": {
                            "line": 4,
                            "offset": 1
                        },
                        "end": {
                            "line": 4,
                            "offset": 18
                        }
                    }
                ],
                "nameSpan": {
                    "start": {
                        "line": 4,
                        "offset": 11
                    },
                    "end": {
                        "line": 4,
                        "offset": 14
                    }
                }
            },
            {
                "text": "Foo",
                "kind": "interface",
                "kindModifiers": "",
                "spans": [
                    {
                        "start": {
                            "line": 1,
                            "offset": 1
                        },
                        "end": {
                            "line": 3,
                            "offset": 2
                        }
                    },
                    {
                        "start": {
                            "line": 6,
                            "offset": 1
                        },
                        "end": {
                            "line": 8,
                            "offset": 2
                        }
                    }
                ],
                "nameSpan": {
                    "start": {
                        "line": 1,
                        "offset": 11
                    },
                    "end": {
                        "line": 1,
                        "offset": 14
                    }
                },
                "childItems": [
                    {
                        "text": "bar",
                        "kind": "method",
                        "kindModifiers": "",
                        "spans": [
                            {
                                "start": {
                                    "line": 2,
                                    "offset": 5
                                },
                                "end": {
                                    "line": 2,
                                    "offset": 17
                                }
                            },
                            {
                                "start": {
                                    "line": 7,
                                    "offset": 5
                                },
                                "end": {
                                    "line": 7,
                                    "offset": 27
                                }
                            }
                        ],
                        "nameSpan": {
                            "start": {
                                "line": 2,
                                "offset": 5
                            },
                            "end": {
                                "line": 2,
                                "offset": 8
                            }
                        }
                    }
                ]
            }
        ]
    }
}

@mjbvz 我们根据跨度发送回了两个具有明确不同父级声明的 bar 副本。像这样合并是否不正确?在这种情况下,预期的响应形状是什么?

3bygqnnd

3bygqnnd2#

接口 Foo {
  bar(): void;
}
接口 Baz { }
接口 Foo {
  bar(s?: string): void;
}
let symbols = await vscode.commands.executeCommand(
  "vscode.executeDocumentSymbolProvider",
  uri
);

![](//img.saoniuhuo.com/images/202407/11421722360828359.jpg)

第二个 "接口 Foo"
选择范围:应该是 {start:[5,10],end:[5,13]},而不是 {start:[5,0],end:[7,1]}
e5nszbig

e5nszbig3#

我认为在VS Code中显示以下内容:

感觉像是VS Code本身的一个bug。但我也认为TypeScript是否应该为Foo创建两个单独的条目是一个问题。

0mkxixxg

0mkxixxg4#

这是许多d.ts文件的情况。

相关问题