diff --git a/tsc/internal/fourslash/tests/documentSymbolTopLevelImports_test.go b/tsc/internal/fourslash/tests/documentSymbolTopLevelImports_test.go new file mode 100644 index 0000000000000..df6ba2d2c21af --- /dev/null +++ b/tsc/internal/fourslash/tests/documentSymbolTopLevelImports_test.go @@ -0,0 +1,27 @@ +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 = `/** @typedef {number} ImportedType */ +import DefaultComponent from "./component"; +/** @callback ImportedCallback + * @param {string} value + * @returns {number} + */ +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..ba02c0a31f468 100644 --- a/tsc/internal/ls/symbols.go +++ b/tsc/internal/ls/symbols.go @@ -160,6 +160,9 @@ func (l *LanguageService) getDocumentSymbolsForChildren(ctx context.Context, nod } } } + if node.Parent.Kind == ast.KindSourceFile && ast.IsImportOrImportEqualsDeclaration(node) { + return false + } switch node.Kind { case ast.KindClassDeclaration, ast.KindClassExpression, ast.KindInterfaceDeclaration, ast.KindEnumDeclaration: if ast.IsClassLike(node) && ast.GetDeclarationName(node) != "" { 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..4156f07bc8363 --- /dev/null +++ b/tsc/testdata/baselines/reference/fourslash/documentSymbols/documentSymbolTopLevelImports.baseline @@ -0,0 +1,18 @@ +// === Document Symbols === +// === /documentSymbolTopLevelImports.ts === +// /** <|@typedef {number} [|{| name: ImportedType, kind: Class |}ImportedType|]|> */ +// import DefaultComponent from "./component"; +// /** <|@callback [|{| name: ImportedCallback, kind: Class |}ImportedCallback|] +// * @param {string} value +// * @returns {number} +// |>*/ +// 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 === +(Class) ImportedType +(Class) ImportedCallback +(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