From efd5ccd67ffa1578419b12f5e5f77748e218e643 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 3 Sep 2026 22:41:25 +0000 Subject: [PATCH 1/3] Initial plan From e20b8ebf231e1f9c5915f1ed584182d9a1dd4f98 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 3 Sep 2026 22:52:49 +0000 Subject: [PATCH 2/3] Filter top-level imports from document symbols Co-authored-by: jakebailey <5341706+jakebailey@users.noreply.github.com> --- .../documentSymbolTopLevelImports_test.go | 22 +++++++++++++++++++ tsc/internal/ls/symbols.go | 3 +++ 2 files changed, 25 insertions(+) create mode 100644 tsc/internal/fourslash/tests/documentSymbolTopLevelImports_test.go diff --git a/tsc/internal/fourslash/tests/documentSymbolTopLevelImports_test.go b/tsc/internal/fourslash/tests/documentSymbolTopLevelImports_test.go new file mode 100644 index 0000000000000..b41d058c4f9cf --- /dev/null +++ b/tsc/internal/fourslash/tests/documentSymbolTopLevelImports_test.go @@ -0,0 +1,22 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/TypeScript/tsc/internal/fourslash" + "github.com/microsoft/TypeScript/tsc/internal/testutil" +) + +func TestDocumentSymbolTopLevelImports(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `import DefaultComponent from "./component"; +import * as utils from "./utils"; +import { value, original as renamed } from "./values"; +import type { Options } from "./types"; + +const local = 1;` + f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content) + defer done() + f.VerifyBaselineDocumentSymbol(t) +} diff --git a/tsc/internal/ls/symbols.go b/tsc/internal/ls/symbols.go index c9a6d4e27fa42..70e726f81ad5a 100644 --- a/tsc/internal/ls/symbols.go +++ b/tsc/internal/ls/symbols.go @@ -147,6 +147,9 @@ func (l *LanguageService) getDocumentSymbolsForChildren(ctx context.Context, nod if ctx.Err() != nil { return true } + if node.Parent.Kind == ast.KindSourceFile && ast.IsImportOrImportEqualsDeclaration(node) { + return false + } if node.Flags&ast.NodeFlagsReparsed == 0 { if jsdocs := node.JSDoc(file); len(jsdocs) > 0 { for _, jsdoc := range jsdocs { From ee1d6355904f0452e5f446c7c9e2df0254664168 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 3 Sep 2026 22:58:37 +0000 Subject: [PATCH 3/3] Update document symbol baselines Co-authored-by: jakebailey <5341706+jakebailey@users.noreply.github.com> --- .../documentSymbolTopLevelImports.baseline | 11 ++++++++++ .../navigationBarImports.baseline | 9 +------- .../navigationBarItemsExports.baseline | 3 +-- .../navigationBarItemsImports.baseline | 21 +------------------ 4 files changed, 14 insertions(+), 30 deletions(-) create mode 100644 tsc/testdata/baselines/reference/fourslash/documentSymbols/documentSymbolTopLevelImports.baseline diff --git a/tsc/testdata/baselines/reference/fourslash/documentSymbols/documentSymbolTopLevelImports.baseline b/tsc/testdata/baselines/reference/fourslash/documentSymbols/documentSymbolTopLevelImports.baseline new file mode 100644 index 0000000000000..b793e5ad54858 --- /dev/null +++ b/tsc/testdata/baselines/reference/fourslash/documentSymbols/documentSymbolTopLevelImports.baseline @@ -0,0 +1,11 @@ +// === Document Symbols === +// === /documentSymbolTopLevelImports.ts === +// import DefaultComponent from "./component"; +// import * as utils from "./utils"; +// import { value, original as renamed } from "./values"; +// import type { Options } from "./types"; +// +// const <|[|{| name: local, kind: Variable |}local|] = 1|>; + +// === Details === +(Variable) local diff --git a/tsc/testdata/baselines/reference/fourslash/documentSymbols/navigationBarImports.baseline b/tsc/testdata/baselines/reference/fourslash/documentSymbols/navigationBarImports.baseline index 3c9221113f190..7e6f2febaf51e 100644 --- a/tsc/testdata/baselines/reference/fourslash/documentSymbols/navigationBarImports.baseline +++ b/tsc/testdata/baselines/reference/fourslash/documentSymbols/navigationBarImports.baseline @@ -1,11 +1,4 @@ // === Document Symbols === -// === /navigationBarImports.ts === -// import <|[|{| name: a, kind: Variable |}a|]|>, {<|[|{| name: b, kind: Variable |}b|]|>} from "m"; -// <|import [|{| name: c, kind: Variable |}c|] = require("m");|> -// import <|* as [|{| name: d, kind: Variable |}d|]|> from "m"; + // === Details === -(Variable) a -(Variable) b -(Variable) c -(Variable) d diff --git a/tsc/testdata/baselines/reference/fourslash/documentSymbols/navigationBarItemsExports.baseline b/tsc/testdata/baselines/reference/fourslash/documentSymbols/navigationBarItemsExports.baseline index fab8b1a03e99d..5db94382ecbad 100644 --- a/tsc/testdata/baselines/reference/fourslash/documentSymbols/navigationBarItemsExports.baseline +++ b/tsc/testdata/baselines/reference/fourslash/documentSymbols/navigationBarItemsExports.baseline @@ -4,11 +4,10 @@ // // export { <|b as [|{| name: B, kind: Variable |}B|]|> } from "a" // -// <|export import [|{| name: e, kind: Variable |}e|] = require("a");|> +// export import e = require("a"); // // export * from "a"; // no bindings here // === Details === (Variable) a (Variable) B -(Variable) e diff --git a/tsc/testdata/baselines/reference/fourslash/documentSymbols/navigationBarItemsImports.baseline b/tsc/testdata/baselines/reference/fourslash/documentSymbols/navigationBarItemsImports.baseline index 5d2b303fd6554..7e6f2febaf51e 100644 --- a/tsc/testdata/baselines/reference/fourslash/documentSymbols/navigationBarItemsImports.baseline +++ b/tsc/testdata/baselines/reference/fourslash/documentSymbols/navigationBarItemsImports.baseline @@ -1,23 +1,4 @@ // === Document Symbols === -// === /navigationBarItemsImports.ts === -// import <|[|{| name: d1, kind: Variable |}d1|]|> from "a"; -// -// import { <|[|{| name: a, kind: Variable |}a|]|> } from "a"; -// -// import { <|b as [|{| name: B, kind: Variable |}B|]|> } from "a" -// -// import <|[|{| name: d2, kind: Variable |}d2|]|>, { <|[|{| name: c, kind: Variable |}c|]|>, <|d as [|{| name: D, kind: Variable |}D|]|> } from "a" -// -// <|import [|{| name: e, kind: Variable |}e|] = require("a");|> -// -// import <|* as [|{| name: ns, kind: Variable |}ns|]|> from "a"; + // === Details === -(Variable) d1 -(Variable) a -(Variable) B -(Variable) d2 -(Variable) c -(Variable) D -(Variable) e -(Variable) ns