diff --git a/metals/src/main/scala/scala/meta/internal/parsing/DocumentSymbolProvider.scala b/metals/src/main/scala/scala/meta/internal/parsing/DocumentSymbolProvider.scala index 337d3d00f5b..c45fb241ec6 100644 --- a/metals/src/main/scala/scala/meta/internal/parsing/DocumentSymbolProvider.scala +++ b/metals/src/main/scala/scala/meta/internal/parsing/DocumentSymbolProvider.scala @@ -123,7 +123,7 @@ final class DocumentSymbolProvider( addChild(s"new $name", SymbolKind.Interface, t.pos, selection, "") newOwner() } else continue() - case _: Source | _: Template => + case _: Source | _: Template | _: MultiSource => continue() case block: Term.Block => if (owner.getName() == "try") { diff --git a/tests/unit/src/main/scala/tests/TestingClient.scala b/tests/unit/src/main/scala/tests/TestingClient.scala index 26ed29bc886..b12a7763517 100644 --- a/tests/unit/src/main/scala/tests/TestingClient.scala +++ b/tests/unit/src/main/scala/tests/TestingClient.scala @@ -80,6 +80,7 @@ class TestingClient(workspace: AbsolutePath, val buffers: Buffers) actions => actions.find(_.getTitle == "a.Main").get } + var importScalaCliScript = new MessageActionItem(ImportScalaScript.dismiss) val resources = new ResourceOperations(buffers) val diagnostics: TrieMap[AbsolutePath, Seq[Diagnostic]] = @@ -336,6 +337,8 @@ class TestingClient(workspace: AbsolutePath, val buffers: Buffers) chooseMainClass(params.getActions.asScala.toSeq) } else if (isNewBuildToolDetectedMessage()) { switchBuildTool + } else if (ImportScalaScript.params() == params) { + importScalaCliScript } else { throw new IllegalArgumentException(params.toString) } diff --git a/tests/unit/src/test/scala/tests/DocumentSymbolLspSuite.scala b/tests/unit/src/test/scala/tests/DocumentSymbolLspSuite.scala index 6f96ca5f391..3cddb950963 100644 --- a/tests/unit/src/test/scala/tests/DocumentSymbolLspSuite.scala +++ b/tests/unit/src/test/scala/tests/DocumentSymbolLspSuite.scala @@ -3,6 +3,7 @@ package tests class DocumentSymbolLspSuite extends BaseLspSuite("documentSymbol") { test("parse-error") { + cleanWorkspace() for { // start with code that does not parse (notice the first char in Main.scala) _ <- initialize( @@ -77,4 +78,31 @@ class DocumentSymbolLspSuite extends BaseLspSuite("documentSymbol") { } yield () } + test("scala-script") { + cleanWorkspace() + for { + _ <- initialize( + """| + |/metals.json + |{ + | "a": { } + |} + |/a/src/main/scala/a/Main.sc + |object Outer { + | class Inner + |} + |""".stripMargin + ) + _ <- server.didOpen("a/src/main/scala/a/Main.sc") + symbols <- server.documentSymbols("a/src/main/scala/a/Main.sc") + _ = assertNoDiff( + symbols, + """| + |/*Outer(Module):3*/object Outer { + | /*Outer.Inner(Class):2*/class Inner + |}""".stripMargin, + ) + } yield () + } + }