Skip to content

Commit

Permalink
refactor: Drop using of pattern match in vals for most cases (#3369)
Browse files Browse the repository at this point in the history
  • Loading branch information
tgodzik committed Oct 10, 2023
1 parent 53f1fec commit 2d80804
Show file tree
Hide file tree
Showing 6 changed files with 203 additions and 115 deletions.
Expand Up @@ -90,37 +90,45 @@ class PackageSuite extends ParseSuite {
}

test("package foo {}; package bar {}") {
val Source(
(pkgfoo @ Pkg(Term.Name("foo"), Nil)) ::
(pkgbar @ Pkg(Term.Name("bar"), Nil)) :: Nil
) =
source("package foo {}; package bar {}")
assertTree(source("package foo {}; package bar {}"))(
Source(
(Pkg(Term.Name("foo"), Nil)) ::
(Pkg(Term.Name("bar"), Nil)) :: Nil
)
)
}

test("package object foo") {
val Source(Pkg.Object(Nil, Term.Name("foo"), EmptyTemplate()) :: Nil) =
source("package object foo")
assertTree(source("package object foo"))(
Source(Pkg.Object(Nil, Term.Name("foo"), EmptyTemplate()) :: Nil)
)
}

test("import foo.bar; package object baz") {
val Source(
Import(Importer(Term.Name("foo"), Importee.Name(Name.Indeterminate("bar")) :: Nil) :: Nil) ::
Pkg.Object(Nil, Term.Name("baz"), EmptyTemplate()) :: Nil
) =
source("import foo.bar; package object baz")

assertTree(source("import foo.bar; package object baz"))(
Source(
Import(
Importer(Term.Name("foo"), Importee.Name(Name.Indeterminate("bar")) :: Nil) :: Nil
) ::
Pkg.Object(Nil, Term.Name("baz"), EmptyTemplate()) :: Nil
)
)
}

test("package foo; package bar; package baz") {
val Source(
List(Pkg(Term.Name("foo"), List(Pkg(Term.Name("bar"), List(Pkg(Term.Name("baz"), List()))))))
) =
source("package foo; package bar; package baz")
assertTree(source("package foo; package bar; package baz"))(
Source(
List(
Pkg(Term.Name("foo"), List(Pkg(Term.Name("bar"), List(Pkg(Term.Name("baz"), List())))))
)
)
)

}

test("package { in newline") {
val Source(
List(Pkg(Term.Name("foo"), List(Pkg(Term.Name("bar"), List(Pkg(Term.Name("baz"), List()))))))
) =
assertTree(
source(
"""|
|package foo // foo package left brace in newline
Expand All @@ -135,6 +143,12 @@ class PackageSuite extends ParseSuite {
|}
|""".stripMargin
)

)(
Source(
List(
Pkg(Term.Name("foo"), List(Pkg(Term.Name("bar"), List(Pkg(Term.Name("baz"), List())))))
)
)
)
}
}
Expand Up @@ -16,6 +16,7 @@ class ParseSuite extends TreeSuiteBase with CommonTrees {
implicit def parseStat(code: String, dialect: Dialect): Stat = templStat(code)(dialect)
implicit def parseSource(code: String, dialect: Dialect): Source = source(code)(dialect)
implicit def parseType(code: String, dialect: Dialect): Type = tpe(code)(dialect)
implicit def parsePat(code: String, dialect: Dialect): Pat = pat(code)(dialect)

// This should eventually be replaced by DiffAssertions.assertNoDiff
def assertSameLines(actual: String, expected: String) = {
Expand Down
94 changes: 61 additions & 33 deletions tests/shared/src/test/scala/scala/meta/tests/parsers/PatSuite.scala
Expand Up @@ -17,21 +17,20 @@ class PatSuite extends ParseSuite {
}

implicit def caseParser(code: String, dialect: Dialect): Case = super.parseCase(code)(dialect)

test("_") {
val Wildcard() = pat("_")
assertPat("_")(Wildcard())
}

test("a @ _") {
val Bind(Var(Term.Name("a")), Wildcard()) = pat("a @ _")
assertPat("a @ _")(Bind(Var(Term.Name("a")), Wildcard()))
}

test("a") {
val Var(Term.Name("a")) = pat("a")
assertPat("a")(Var(Term.Name("a")))
}

test("`a`") {
val Term.Name("a") = pat("`a`")
assertPat("`a`")(Term.Name("a"))
}

test("a: _") {
Expand All @@ -41,15 +40,15 @@ class PatSuite extends ParseSuite {
}

test("a: Int") {
val Typed(Var(Term.Name("a")), Type.Name("Int")) = pat("a: Int")
assertPat("a: Int")(Typed(Var(Term.Name("a")), Type.Name("Int")))
}

test("_: Int") {
val Typed(Wildcard(), Type.Name("Int")) = pat("_: Int")
assertPat("_: Int")(Typed(Wildcard(), Type.Name("Int")))
}

test("_: t") {
val Typed(Wildcard(), Type.Name("t")) = pat("_: t")
assertPat("_: t")(Typed(Wildcard(), Type.Name("t")))
}

test("_: F[t]") {
Expand Down Expand Up @@ -136,8 +135,9 @@ class PatSuite extends ParseSuite {
}

test("_: (t Map u)") {
val Typed(Wildcard(), Type.ApplyInfix(Type.Name("t"), Type.Name("Map"), Type.Name("u"))) =
pat("_: (t Map u)")
assertPat("_: (t Map u)")(
Typed(Wildcard(), Type.ApplyInfix(Type.Name("t"), Type.Name("Map"), Type.Name("u")))
)
}

test("_: T Map U") {
Expand All @@ -149,65 +149,93 @@ class PatSuite extends ParseSuite {
}

test("x@(__ : Y)") {
val Pat.Bind(Pat.Var(Term.Name("x")), Pat.Typed(Pat.Var(Term.Name("__")), Type.Name("Y"))) =
pat("x@(__ : Y)")
assertPat("x@(__ : Y)")(
Pat.Bind(Pat.Var(Term.Name("x")), Pat.Typed(Pat.Var(Term.Name("__")), Type.Name("Y")))
)
}

test("foo(x)") {
val Extract(Term.Name("foo"), Var(Term.Name("x")) :: Nil) = pat("foo(x)")
assertPat("foo(x)")(
Extract(Term.Name("foo"), Var(Term.Name("x")) :: Nil)
)
}

test("foo(_*)") {
val Extract(Term.Name("foo"), SeqWildcard() :: Nil) = pat("foo(_*)")
assertPat("foo(_*)")(
Extract(Term.Name("foo"), SeqWildcard() :: Nil)
)
}

test("foo(x @ _*)") {
val Extract(Term.Name("foo"), Bind(Var(Term.Name("x")), SeqWildcard()) :: Nil) =
pat("foo(x @ _*)")
assertPat("foo(x @ _*)")(
Extract(Term.Name("foo"), Bind(Var(Term.Name("x")), SeqWildcard()) :: Nil)
)
}

test("a :: b") {
val ExtractInfix(Var(Term.Name("a")), Term.Name("::"), Var(Term.Name("b")) :: Nil) =
pat("a :: b")
assertPat("a :: b")(
ExtractInfix(Var(Term.Name("a")), Term.Name("::"), Var(Term.Name("b")) :: Nil)
)
}

test("a :: ()") {
val ExtractInfix(Var(Term.Name("a")), Term.Name("::"), Nil) = pat("a :: ()")
assertPat("a :: ()")(
ExtractInfix(Var(Term.Name("a")), Term.Name("::"), Nil)
)
}

test("1 | 2 | 3") {
val Alternative(Lit(1), Lit(2)) = pat("1 | 2")
val Alternative(Lit(1), Alternative(Lit(2), Lit(3))) = pat("1 | 2 | 3")
assertPat("1 | 2 | 3")(
Alternative(Lit.Int(1), Alternative(Lit.Int(2), Lit.Int(3)))
)
}

test("()") {
val Lit(()) = pat("()")
assertPat("()")(
Lit.Unit()
)
}

test("(true, false)") {
val Tuple(Lit(true) :: Lit(false) :: Nil) = pat("(true, false)")
assertPat("(true, false)")(
Tuple(Lit.Boolean(true) :: Lit.Boolean(false) :: Nil)
)
}

test("foo\"bar\"") {
val Interpolate(Term.Name("foo"), Lit("bar") :: Nil, Nil) = pat("foo\"bar\"")
assertPat("foo\"bar\"")(
Interpolate(Term.Name("foo"), Lit.String("bar") :: Nil, Nil)
)
}

test("foo\"a $b c\"") {
val Interpolate(Term.Name("foo"), Lit("a ") :: Lit(" c") :: Nil, Var(Term.Name("b")) :: Nil) =
pat("foo\"a $b c\"")
assertPat("foo\"a $b c\"")(
Interpolate(
Term.Name("foo"),
Lit.String("a ") :: Lit.String(" c") :: Nil,
Var(Term.Name("b")) :: Nil
)
)
}

test("foo\"${b @ foo()}\"") {
val Interpolate(
Term.Name("foo"),
Lit("") :: Lit("") :: Nil,
Bind(Var(Term.Name("b")), Extract(Term.Name("foo"), Nil)) :: Nil
) = pat("foo\"${b @ foo()}\"")
assertPat("foo\"${b @ foo()}\"")(
Interpolate(
Term.Name("foo"),
Lit.String("") :: Lit.String("") :: Nil,
Bind(Var(Term.Name("b")), Extract(Term.Name("foo"), Nil)) :: Nil
)
)
}

test("$_") {
val Pat.Interpolate(Term.Name("q"), List(Lit("x + "), Lit("")), List(Pat.Wildcard())) =
pat(""" q"x + $_" """)
assertPat(""" q"x + $_" """)(
Pat.Interpolate(
Term.Name("q"),
List(Lit.String("x + "), Lit.String("")),
List(Pat.Wildcard())
)
)
}

test("#501") {
Expand Down
Expand Up @@ -355,43 +355,53 @@ class TemplateSuite extends ParseSuite {
}

test("object O") {
val Object(Nil, Term.Name("O"), EmptyTemplate()) = templStat("object O")
assertTree(templStat("object O"))(Object(Nil, Term.Name("O"), EmptyTemplate()))
}

test("case object O") {
val Object(Mod.Case() :: Nil, Term.Name("O"), EmptyTemplate()) = templStat("case object O")
assertTree(templStat("case object O"))(
Object(Mod.Case() :: Nil, Term.Name("O"), EmptyTemplate())
)
}

test("object A extends B") {
val Object(
Nil,
Term.Name("A"),
Template(Nil, Init(Type.Name("B"), Name.Anonymous(), emptyArgClause) :: Nil, EmptySelf(), Nil)
) =
templStat("object A extends B")
assertTree(templStat("object A extends B"))(
Object(
Nil,
Term.Name("A"),
Template(
Nil,
Init(Type.Name("B"), Name.Anonymous(), emptyArgClause) :: Nil,
EmptySelf(),
Nil
)
)
)
}

test("object A extends { val x: Int } with B") {
val Object(
Nil,
Term.Name("A"),
Template(
Defn.Val(Nil, List(Pat.Var(Term.Name("x"))), Some(Type.Name("Int")), Lit(2)) :: Nil,
Init(Type.Name("B"), Name.Anonymous(), emptyArgClause) :: Nil,
EmptySelf(),
Nil
assertTree(templStat("object A extends { val x: Int = 2 } with B"))(
Object(
Nil,
Term.Name("A"),
Template(
Defn.Val(Nil, List(Pat.Var(Term.Name("x"))), Some(Type.Name("Int")), Lit.Int(2)) :: Nil,
Init(Type.Name("B"), Name.Anonymous(), emptyArgClause) :: Nil,
EmptySelf(),
Nil
)
)
) =
templStat("object A extends { val x: Int = 2 } with B")
)
}

test("object A extends { self: B => }") {
val Object(
Nil,
Term.Name("A"),
Template(Nil, Nil, Self(Term.Name("self"), Some(Type.Name("B"))), Nil)
) =
templStat("object A { self: B => }")
assertTree(templStat("object A { self: B => }"))(
Object(
Nil,
Term.Name("A"),
Template(Nil, Nil, Self(Term.Name("self"), Some(Type.Name("B"))), Nil)
)
)
}

test("trait B extends A.type") {
Expand Down
Expand Up @@ -861,7 +861,7 @@ class TermSuite extends ParseSuite {
}

test("\"stat;\".parse[Stat]") {
val Term.Name("stat") = stat("stat;")
assertTrees(stat("stat;"))(Term.Name("stat"))
}

test("\"stat;\".parse[Term]") {
Expand Down

0 comments on commit 2d80804

Please sign in to comment.