From b41d7b8a2339e9bffe8303b851a435392e5e8378 Mon Sep 17 00:00:00 2001 From: "Carlos D. Canon C" Date: Sun, 10 Sep 2023 15:19:40 -0600 Subject: [PATCH] create reader for basic variables declaration --- .../frontend/generator/domain/Token.scala | 2 +- .../scala/frontend/parser/domain/Token.scala | 72 ++++++++------ .../parser/services/AssignationReader.scala | 42 ++++++++ .../parser/services/BasicReader.scala | 3 +- .../services/IdentifierNameReader.scala | 16 ++++ .../parser/services/IdentifierReader.scala | 8 +- .../services/InvocationNameReader.scala | 17 ---- .../parser/services/LiteralReader.scala | 2 +- .../frontend/parser/services/TypeReader.scala | 4 +- .../parser/services/ValueTokenReader.scala | 14 +-- .../services/AssignationReaderSpec.scala | 96 +++++++++++++++++++ ...c.scala => IdentifierNameReaderSpec.scala} | 24 ++--- .../services/IdentifierReaderSpec.scala | 1 + .../parser/services/TypeReaderSpec.scala | 38 ++++---- .../services/ValueTokenReaderSpec.scala | 60 ++++++------ 15 files changed, 276 insertions(+), 123 deletions(-) create mode 100644 src/main/scala/frontend/parser/services/AssignationReader.scala create mode 100644 src/main/scala/frontend/parser/services/IdentifierNameReader.scala delete mode 100644 src/main/scala/frontend/parser/services/InvocationNameReader.scala create mode 100644 src/test/scala/frontend/parser/services/AssignationReaderSpec.scala rename src/test/scala/frontend/parser/services/{InvocationNameReaderSpec.scala => IdentifierNameReaderSpec.scala} (67%) diff --git a/src/main/scala/frontend/generator/domain/Token.scala b/src/main/scala/frontend/generator/domain/Token.scala index 830b6c3..ebdcbea 100644 --- a/src/main/scala/frontend/generator/domain/Token.scala +++ b/src/main/scala/frontend/generator/domain/Token.scala @@ -5,4 +5,4 @@ import frontend.parser.domain.LangToken type Token = LangToken -sealed trait Instructions \ No newline at end of file +sealed trait Instructions diff --git a/src/main/scala/frontend/parser/domain/Token.scala b/src/main/scala/frontend/parser/domain/Token.scala index 95af5cc..77354a4 100644 --- a/src/main/scala/frontend/parser/domain/Token.scala +++ b/src/main/scala/frontend/parser/domain/Token.scala @@ -29,7 +29,7 @@ package frontend.parser.domain import zio.prelude.data.* -val LANG_DEFAULT_PACKAGE = "foop" +val LANG_DEFAULT_PACKAGE = "chunk" sealed trait LangToken @@ -46,47 +46,59 @@ case class Identifier(value: String) extends LangToken // Type def used for type descriptions sealed trait TypeDef extends LangToken object TypeDef: - case object InferredHole extends TypeDef - case class SimpleTypeDef(name: InvocationName) extends TypeDef - case class HKTTypeDef(name: InvocationName, members: Seq[TypeDef]) extends TypeDef + case object InferredHole extends TypeDef + case class SimpleTypeDef(name: IdentifierName) extends TypeDef + case class HKTTypeDef(name: IdentifierName, members: Seq[TypeDef]) extends TypeDef end TypeDef // InvocationName used for identifier/variables usage -case class InvocationName(name: List[Identifier]) extends LangToken +case class IdentifierName(name: List[Identifier]) extends LangToken + +//statement +// used for any sentence variable declaration or value/variable usage. +//type Statement = Declaration | Invocation | Evaluable // should add class/trait/object declarations +sealed trait Statement extends LangToken // invocation used for variables usage -trait Invocation extends LangToken -object Invocation: - case class InvocationLiteral(literal: Literal) extends Invocation - case class InvocationIdentifier(name: InvocationName) extends Invocation - case class InvocationFunction( - name: InvocationName, - genericMembers: List[TypeDef] = Nil, - params: List[ValueToken] = Nil - ) extends Invocation -end Invocation +trait ValueToken extends Statement +object ValueToken: + case class ValueTokenLiteral(literal: Literal) extends ValueToken + case class ValueTokenIdentifier(name: IdentifierName) extends ValueToken + case class ValueTokenFunction( + name: IdentifierName, + genericMembers: Seq[TypeDef] = Nil, + params: Seq[ValueToken] = Nil + ) extends ValueToken + + sealed trait ValueTokenBlock extends ValueToken + object ValueTokenBlock: + case class SimpleBlock(statements: Seq[Statement]) extends ValueTokenBlock + case class FunctionBlock(params: Seq[Assignation], returnType: Optional[TypeDef], statements: Seq[Statement]) + extends ValueTokenBlock + end ValueTokenBlock + +end ValueToken // used for literals or variables usage -type ValueToken = Invocation // | Literal +//type ValueToken = Invocation // | Literal // used for defining variables or class members -trait Member extends LangToken -object Member: - case class ValueDeclaration(name: Identifier, typeDef: TypeDef, defaultValue: Optional[ValueToken]) extends Member - case class VarDeclaration(name: Identifier, typeDef: TypeDef, defaultValue: Optional[ValueToken]) extends Member - case class MethodDeclaration( +sealed trait Assignation extends Statement +object Assignation: + case class ValueAssignation(name: Identifier, typeDef: Optional[TypeDef], defaultValue: ValueToken) + extends Assignation + case class VarAssignation(name: Identifier, typeDef: Optional[TypeDef], defaultValue: Optional[ValueToken]) + extends Assignation + case class MethodAssignation( name: Identifier, - genericParams: List[TypeDef], - params: List[Member], + genericParams: Seq[TypeDef], + params: Seq[Assignation], returnType: TypeDef, - statements: List[Statements] - ) extends Member -end Member - -// used for any sentence variable declaration or value/variable usage. -type Statements = Member | Invocation + body: ValueToken + ) extends Assignation +end Assignation -//type Assignable = Literal | Identifier +//type Assignabkle = Literal | Identifier // //sealed trait AbstractValueDeclaration( // name: Identifier, diff --git a/src/main/scala/frontend/parser/services/AssignationReader.scala b/src/main/scala/frontend/parser/services/AssignationReader.scala new file mode 100644 index 0000000..bfb6934 --- /dev/null +++ b/src/main/scala/frontend/parser/services/AssignationReader.scala @@ -0,0 +1,42 @@ +package chunk +package frontend.parser.services + +import fastparse.* +import NoWhitespace.* +import frontend.parser.domain.* + +import BasicReader.{separator, *} +import BasicReader.* +import zio.prelude.data.Optional + +trait AssignationReader extends BasicReader[Assignation]: + import BasicReader.* + + def valueMemberReader[$: P] = P( + P( + "val" ~ separator + ).? ~ IdentifierReader.reader ~ separatorOpt ~ (":" ~ separatorOpt ~ TypeReader.reader).? ~ separatorOpt ~ "=" ~ + separatorOpt ~ ValueTokenReader.reader + ).map { (identifier, typeValue, token) => + Assignation.ValueAssignation(identifier, Optional.OptionIsNullable(typeValue), token) + } + + def variableMemberReader[$: P] = P( + P("var" ~ separator) + ~ IdentifierReader.reader ~ separatorOpt ~ (":" ~ separatorOpt ~ TypeReader.reader).? ~ separatorOpt ~ "=" ~ + separatorOpt ~ ValueTokenReader.reader.? + ).map { (identifier, typeValue, token) => + println(identifier) + Assignation.VarAssignation(identifier, Optional.OptionIsNullable(typeValue), Optional.OptionIsNullable(token)) + } + +// .map{ +// (identifier: Identifier, typeValue: TypeDef, token: ValueToken) => ??? +// } + + override def reader[$: P]: P[Assignation] = variableMemberReader | valueMemberReader + +end AssignationReader + +object AssignationReader extends AssignationReader: +end AssignationReader diff --git a/src/main/scala/frontend/parser/services/BasicReader.scala b/src/main/scala/frontend/parser/services/BasicReader.scala index 686678d..8701f7e 100644 --- a/src/main/scala/frontend/parser/services/BasicReader.scala +++ b/src/main/scala/frontend/parser/services/BasicReader.scala @@ -40,7 +40,8 @@ end BasicReader object BasicReader: private def stringChars(c: Char) = c != '\"' && c != '\\' - private inline def separator[$: P] = P(CharsWhileIn(" \r\n", 0)) + inline def separator[$: P]: P[Unit] = P(CharsWhileIn(" \r\n", 1)) + inline def separatorOpt[$: P]: P[Unit] = separator.? inline def digit[$: P] = P(CharIn("0-9")) inline def digits[$: P] = P(digit.rep(min=1)) inline def double[$: P] = P(digits ~ "." ~ digits) diff --git a/src/main/scala/frontend/parser/services/IdentifierNameReader.scala b/src/main/scala/frontend/parser/services/IdentifierNameReader.scala new file mode 100644 index 0000000..95a16c7 --- /dev/null +++ b/src/main/scala/frontend/parser/services/IdentifierNameReader.scala @@ -0,0 +1,16 @@ +package chunk +package frontend.parser.services + +import fastparse.* +import ScalaWhitespace.* + +import frontend.parser.domain.* + +trait IdentifierNameReader extends BasicReader[IdentifierName]: + override def reader[$: P]: P[IdentifierName] = P( + IdentifierReader.reader.rep(min = 1, sep = ".").map(identifiers => IdentifierName(identifiers.toList)) + ) +end IdentifierNameReader + +object IdentifierNameReader extends IdentifierNameReader: +end IdentifierNameReader diff --git a/src/main/scala/frontend/parser/services/IdentifierReader.scala b/src/main/scala/frontend/parser/services/IdentifierReader.scala index d5db19e..fd45e07 100644 --- a/src/main/scala/frontend/parser/services/IdentifierReader.scala +++ b/src/main/scala/frontend/parser/services/IdentifierReader.scala @@ -27,7 +27,7 @@ package chunk package frontend.parser.services import fastparse.* -import ScalaWhitespace.* +import NoWhitespace.* import frontend.parser.domain.Identifier @@ -38,8 +38,10 @@ trait IdentifierReader extends BasicReader[Identifier]: private inline def specialCharacterIdentifier[$: P] = P(CharIn("_$")) private inline def basicCharIdentifier[$: P] = P(lowerCases | upperCases | specialCharacterIdentifier) private inline def basicMixedIdentifier[$: P] = P(basicCharIdentifier | digit) - private def identifierText[$: P] = P(basicCharIdentifier ~ basicMixedIdentifier.rep).! - override def reader[$: P]: P[Identifier] = identifierText.filter(a => a != "True" && a != "False").map(Identifier.apply) + private def identifierText[$: P] = P(basicCharIdentifier ~ basicMixedIdentifier.rep).! + + override def reader[$: P]: P[Identifier] = + identifierText.filter(a => a != "True" && a != "False").map(Identifier.apply) end IdentifierReader object IdentifierReader extends IdentifierReader: diff --git a/src/main/scala/frontend/parser/services/InvocationNameReader.scala b/src/main/scala/frontend/parser/services/InvocationNameReader.scala deleted file mode 100644 index 37e97ee..0000000 --- a/src/main/scala/frontend/parser/services/InvocationNameReader.scala +++ /dev/null @@ -1,17 +0,0 @@ -package chunk -package frontend.parser.services - - -import fastparse.* -import ScalaWhitespace.* - -import frontend.parser.domain.* - -trait InvocationNameReader extends BasicReader[InvocationName]: - override def reader[$: P]: P[InvocationName] = P(IdentifierReader.reader.rep(min=1, sep = ".").map(identifiers => - InvocationName(identifiers.toList) - )) -end InvocationNameReader - -object InvocationNameReader extends InvocationNameReader: -end InvocationNameReader diff --git a/src/main/scala/frontend/parser/services/LiteralReader.scala b/src/main/scala/frontend/parser/services/LiteralReader.scala index 609d33d..222cffd 100644 --- a/src/main/scala/frontend/parser/services/LiteralReader.scala +++ b/src/main/scala/frontend/parser/services/LiteralReader.scala @@ -27,7 +27,7 @@ package chunk package frontend.parser.services import fastparse.* -import ScalaWhitespace.* +import NoWhitespace.* import frontend.parser.domain.* trait LiteralReader extends BasicReader[Literal]: diff --git a/src/main/scala/frontend/parser/services/TypeReader.scala b/src/main/scala/frontend/parser/services/TypeReader.scala index 1033d75..a2ce1cc 100644 --- a/src/main/scala/frontend/parser/services/TypeReader.scala +++ b/src/main/scala/frontend/parser/services/TypeReader.scala @@ -6,14 +6,14 @@ import NoWhitespace.* import frontend.parser.domain.* trait TypeReader extends BasicReader[TypeDef]: - def basicType[$: P]: P[TypeDef.SimpleTypeDef] = InvocationNameReader.reader + def basicType[$: P]: P[TypeDef.SimpleTypeDef] = IdentifierNameReader.reader .map(TypeDef.SimpleTypeDef.apply) private def inferredByContext[$: P]: P[TypeDef] = "_".!.map(_ => TypeDef.InferredHole) private def hktType[$: P]: P[TypeDef.HKTTypeDef] = P( - InvocationNameReader.reader ~ "[" ~ (reader | inferredByContext) + IdentifierNameReader.reader ~ "[" ~ (reader | inferredByContext) .rep(1, sep = ",") ~ "]" ) .map((name, attrs) => TypeDef.HKTTypeDef(name, attrs)) diff --git a/src/main/scala/frontend/parser/services/ValueTokenReader.scala b/src/main/scala/frontend/parser/services/ValueTokenReader.scala index 14f8296..1d63687 100644 --- a/src/main/scala/frontend/parser/services/ValueTokenReader.scala +++ b/src/main/scala/frontend/parser/services/ValueTokenReader.scala @@ -11,13 +11,13 @@ import frontend.parser.domain trait ValueTokenReader extends BasicReader[ValueToken]: private def invocationIdentifier[$: P] = - InvocationNameReader.reader.map(name => Invocation.InvocationIdentifier(name)) + IdentifierNameReader.reader.map(name => ValueToken.ValueTokenIdentifier(name)) - private def invocationLiteral[$: P] = LiteralReader.reader.map(value => Invocation.InvocationLiteral(value)) + private def invocationLiteral[$: P] = LiteralReader.reader.map(value => ValueToken.ValueTokenLiteral(value)) private def hktGenericParam[$: P]: P[TypeDef] = P( - InvocationNameReader.reader ~ "[" ~ hktGenericParam + IdentifierNameReader.reader ~ "[" ~ hktGenericParam .rep(1, sep = ",") ~ "]" ) .map((name, attrs) => TypeDef.HKTTypeDef(name, attrs)) @@ -27,14 +27,14 @@ trait ValueTokenReader extends BasicReader[ValueToken]: "[" ~ hktGenericParam.rep(min = 1, sep = ",") ~ "]" ).? - private def literal[$: P] = P(LiteralReader.reader.map(Invocation.InvocationLiteral.apply)) - private def invocation[$: P] = P(InvocationNameReader.reader.map(name => Invocation.InvocationIdentifier(name))) + private def literal[$: P] = P(LiteralReader.reader.map(ValueToken.ValueTokenLiteral.apply)) + private def invocation[$: P] = P(IdentifierNameReader.reader.map(name => ValueToken.ValueTokenIdentifier(name))) override def reader[$: P]: P[ValueToken] = P( - (InvocationNameReader.reader ~ genericParams ~ "(" ~ reader.rep(sep = ",") ~ ")").map { + (IdentifierNameReader.reader ~ genericParams ~ "(" ~ reader.rep(sep = ",") ~ ")").map { case (name, hktParams, params) => - Invocation.InvocationFunction(name, hktParams.getOrElse(Nil).toList, params.toList) + ValueToken.ValueTokenFunction(name, hktParams.getOrElse(Nil).toList, params.toList) } ) | literal | invocation diff --git a/src/test/scala/frontend/parser/services/AssignationReaderSpec.scala b/src/test/scala/frontend/parser/services/AssignationReaderSpec.scala new file mode 100644 index 0000000..e3d98a9 --- /dev/null +++ b/src/test/scala/frontend/parser/services/AssignationReaderSpec.scala @@ -0,0 +1,96 @@ +package chunk +package frontend.parser.services + +import frontend.parser.domain.* + +import fastparse.* +import fastparse.NoWhitespace.* +import zio.* +import zio.prelude.data.Optional +import zio.test.* +import zio.test.Assertion.* + +object AssignationReaderSpec extends ZIOSpecDefault { + import TestAspect.* + private val subject = new AssignationReader {} + private val givenAndExpected = List( + ( + "a = 22", + Assignation.ValueAssignation( + Identifier("a"), + typeDef = Optional.Absent, + defaultValue = ValueToken.ValueTokenLiteral(Literal.IntLiteral(value = 22)) + ) + ), + ( + "val a = 22", + Assignation.ValueAssignation( + Identifier("a"), + typeDef = Optional.Absent, + defaultValue = ValueToken.ValueTokenLiteral(Literal.IntLiteral(value = 22)) + ) + ), + ( + "a: Boolean = True", + Assignation.ValueAssignation( + Identifier("a"), + typeDef = TypeDef.SimpleTypeDef(IdentifierName(List(Identifier("Boolean")))), + defaultValue = ValueToken.ValueTokenLiteral(Literal.BooleanLiteral(true)) + ) + ), + ( + "val a: Boolean = True", + Assignation.ValueAssignation( + Identifier("a"), + typeDef = TypeDef.SimpleTypeDef(IdentifierName(List(Identifier("Boolean")))), + defaultValue = ValueToken.ValueTokenLiteral(Literal.BooleanLiteral(true)) + ) + ), + ( + "var a: Boolean = True", + Assignation.VarAssignation( + Identifier("a"), + typeDef = TypeDef.SimpleTypeDef(IdentifierName(List(Identifier("Boolean")))), + defaultValue = ValueToken.ValueTokenLiteral(Literal.BooleanLiteral(true)) + ) + ) + ) + + private val invalidIdentifiers = List( + "0s", + "person[]()", + "person[_]()", + "000asdfa", + "%%", + "--", + "@@", + "!43#", + "a.b..c", + "_a.bc.01" + ) + + override def spec: Spec[Any, Nothing] = suite("MemberReader.reader")( + suite("should succeed with valid member:")(for { + (identifier, expected) <- givenAndExpected + } yield test(identifier) { + // given + for { + // when + responses <- zioFromParsed(parse(identifier, subject.test)).either + // then + } yield assertTrue(responses.map(_.value) == Right(expected)) + }), + + // given + suite("should fail on invalid identifier:")(for { + identifier <- invalidIdentifiers + } yield test(identifier) { + for { + // when + response <- zioFromParsed(parse(identifier, subject.test)).either + // then + } yield assertTrue(response.isLeft) + }) + ) + +} diff --git a/src/test/scala/frontend/parser/services/InvocationNameReaderSpec.scala b/src/test/scala/frontend/parser/services/IdentifierNameReaderSpec.scala similarity index 67% rename from src/test/scala/frontend/parser/services/InvocationNameReaderSpec.scala rename to src/test/scala/frontend/parser/services/IdentifierNameReaderSpec.scala index 21db730..b7d7397 100644 --- a/src/test/scala/frontend/parser/services/InvocationNameReaderSpec.scala +++ b/src/test/scala/frontend/parser/services/IdentifierNameReaderSpec.scala @@ -8,9 +8,9 @@ import zio.* import zio.test.* import zio.test.Assertion.* -object InvocationNameReaderSpec extends ZIOSpecDefault { +object IdentifierNameReaderSpec extends ZIOSpecDefault { - private val subject = new InvocationNameReader {} + private val subject = new IdentifierNameReader {} override def spec = suite("IdentifierReader.identifier")( test("should succeed with valid identifiers") { @@ -30,16 +30,16 @@ object InvocationNameReaderSpec extends ZIOSpecDefault { ) val expected = List( - InvocationName(List(Identifier("a"))), - InvocationName(List(Identifier("b"), Identifier("c"))), - InvocationName(List(Identifier("a"), Identifier("b"), Identifier("c"))), - InvocationName(List(Identifier("$abc"))), - InvocationName(List(Identifier("_01"))), - InvocationName(List(Identifier("_00"))), - InvocationName(List(Identifier("_abc01"))), - InvocationName(List(Identifier("__"))), - InvocationName(List(Identifier("aaa_01"))), - InvocationName(List(Identifier("personName"))) + IdentifierName(List(Identifier("a"))), + IdentifierName(List(Identifier("b"), Identifier("c"))), + IdentifierName(List(Identifier("a"), Identifier("b"), Identifier("c"))), + IdentifierName(List(Identifier("$abc"))), + IdentifierName(List(Identifier("_01"))), + IdentifierName(List(Identifier("_00"))), + IdentifierName(List(Identifier("_abc01"))), + IdentifierName(List(Identifier("__"))), + IdentifierName(List(Identifier("aaa_01"))), + IdentifierName(List(Identifier("personName"))) ) for { // when diff --git a/src/test/scala/frontend/parser/services/IdentifierReaderSpec.scala b/src/test/scala/frontend/parser/services/IdentifierReaderSpec.scala index 707bd24..aba20a1 100644 --- a/src/test/scala/frontend/parser/services/IdentifierReaderSpec.scala +++ b/src/test/scala/frontend/parser/services/IdentifierReaderSpec.scala @@ -55,6 +55,7 @@ object IdentifierReaderSpec extends ZIOSpecDefault { val identifiers = List( "0", + "var a", "000asdfa", "%%", "23", diff --git a/src/test/scala/frontend/parser/services/TypeReaderSpec.scala b/src/test/scala/frontend/parser/services/TypeReaderSpec.scala index 8fef89f..ef1a0a7 100644 --- a/src/test/scala/frontend/parser/services/TypeReaderSpec.scala +++ b/src/test/scala/frontend/parser/services/TypeReaderSpec.scala @@ -10,38 +10,38 @@ import frontend.parser.domain.* object TypeReaderSpec extends ZIOSpecDefault { private val givenAndExpected = List( - ("aTypeName", TypeDef.SimpleTypeDef(InvocationName(List(Identifier("aTypeName"))))), + ("aTypeName", TypeDef.SimpleTypeDef(IdentifierName(List(Identifier("aTypeName"))))), ( "a.full.package.name", TypeDef.SimpleTypeDef( - InvocationName(List(Identifier("a"), Identifier("full"), Identifier("package"), Identifier("name"))) + IdentifierName(List(Identifier("a"), Identifier("full"), Identifier("package"), Identifier("name"))) ) ), - ("ANUPPPERCASENAME", TypeDef.SimpleTypeDef(InvocationName(List(Identifier("ANUPPPERCASENAME"))))), - ("ACamelCaseName", TypeDef.SimpleTypeDef(InvocationName(List(Identifier("ACamelCaseName"))))), - ("lowercaseName", TypeDef.SimpleTypeDef(InvocationName(List(Identifier("lowercaseName"))))), - ("H[_]", TypeDef.HKTTypeDef(InvocationName(List(Identifier("H"))), List(TypeDef.InferredHole))), + ("ANUPPPERCASENAME", TypeDef.SimpleTypeDef(IdentifierName(List(Identifier("ANUPPPERCASENAME"))))), + ("ACamelCaseName", TypeDef.SimpleTypeDef(IdentifierName(List(Identifier("ACamelCaseName"))))), + ("lowercaseName", TypeDef.SimpleTypeDef(IdentifierName(List(Identifier("lowercaseName"))))), + ("H[_]", TypeDef.HKTTypeDef(IdentifierName(List(Identifier("H"))), List(TypeDef.InferredHole))), ( "H[T]", TypeDef.HKTTypeDef( - InvocationName(List(Identifier("H"))), - List(TypeDef.SimpleTypeDef(InvocationName(List(Identifier("T"))))) + IdentifierName(List(Identifier("H"))), + List(TypeDef.SimpleTypeDef(IdentifierName(List(Identifier("T"))))) ) ), ( "com.package.name.H[T]", TypeDef.HKTTypeDef( - InvocationName(List(Identifier("com"), Identifier("package"), Identifier("name"), Identifier("H"))), - List(TypeDef.SimpleTypeDef(InvocationName(List(Identifier("T"))))) + IdentifierName(List(Identifier("com"), Identifier("package"), Identifier("name"), Identifier("H"))), + List(TypeDef.SimpleTypeDef(IdentifierName(List(Identifier("T"))))) ) ), ( "com.package.name.H[com.package.name.T]", TypeDef.HKTTypeDef( - InvocationName(List(Identifier("com"), Identifier("package"), Identifier("name"), Identifier("H"))), + IdentifierName(List(Identifier("com"), Identifier("package"), Identifier("name"), Identifier("H"))), List( TypeDef.SimpleTypeDef( - InvocationName(List(Identifier("com"), Identifier("package"), Identifier("name"), Identifier("T"))) + IdentifierName(List(Identifier("com"), Identifier("package"), Identifier("name"), Identifier("T"))) ) ) ) @@ -49,23 +49,23 @@ object TypeReaderSpec extends ZIOSpecDefault { ( "H[K,T]", TypeDef.HKTTypeDef( - InvocationName(List(Identifier("H"))), + IdentifierName(List(Identifier("H"))), List( - TypeDef.SimpleTypeDef(InvocationName(List(Identifier("K")))), - TypeDef.SimpleTypeDef(InvocationName(List(Identifier("T")))) + TypeDef.SimpleTypeDef(IdentifierName(List(Identifier("K")))), + TypeDef.SimpleTypeDef(IdentifierName(List(Identifier("T")))) ) ) ), ( "H[K[T,U]]", TypeDef.HKTTypeDef( - InvocationName(List(Identifier("H"))), + IdentifierName(List(Identifier("H"))), List( TypeDef.HKTTypeDef( - InvocationName(List(Identifier("K"))), + IdentifierName(List(Identifier("K"))), List( - TypeDef.SimpleTypeDef(InvocationName(List(Identifier("T")))), - TypeDef.SimpleTypeDef(InvocationName(List(Identifier("U")))) + TypeDef.SimpleTypeDef(IdentifierName(List(Identifier("T")))), + TypeDef.SimpleTypeDef(IdentifierName(List(Identifier("U")))) ) ) ) diff --git a/src/test/scala/frontend/parser/services/ValueTokenReaderSpec.scala b/src/test/scala/frontend/parser/services/ValueTokenReaderSpec.scala index 0b98141..52f4aa9 100644 --- a/src/test/scala/frontend/parser/services/ValueTokenReaderSpec.scala +++ b/src/test/scala/frontend/parser/services/ValueTokenReaderSpec.scala @@ -12,67 +12,67 @@ object ValueTokenReaderSpec extends ZIOSpecDefault { private val subject = new ValueTokenReader {} private val givenAndExpected = List( - ("a", Invocation.InvocationIdentifier(InvocationName(List(Identifier("a"))))), - ("b.c", Invocation.InvocationIdentifier(InvocationName(List(Identifier("b"), Identifier("c"))))), - ("a.b.c", Invocation.InvocationIdentifier(InvocationName(List(Identifier("a"), Identifier("b"), Identifier("c"))))), + ("a", ValueToken.ValueTokenIdentifier(IdentifierName(List(Identifier("a"))))), + ("b.c", ValueToken.ValueTokenIdentifier(IdentifierName(List(Identifier("b"), Identifier("c"))))), + ("a.b.c", ValueToken.ValueTokenIdentifier(IdentifierName(List(Identifier("a"), Identifier("b"), Identifier("c"))))), ( "personName(ssd(s),22)", - Invocation.InvocationFunction( - InvocationName(List(Identifier("personName"))), + ValueToken.ValueTokenFunction( + IdentifierName(List(Identifier("personName"))), params = List( - Invocation.InvocationFunction( - InvocationName(List(Identifier("ssd"))), - params = List(Invocation.InvocationIdentifier(InvocationName(List(Identifier("s"))))) + ValueToken.ValueTokenFunction( + IdentifierName(List(Identifier("ssd"))), + params = List(ValueToken.ValueTokenIdentifier(IdentifierName(List(Identifier("s"))))) ), - Invocation.InvocationLiteral(Literal.IntLiteral(22)) + ValueToken.ValueTokenLiteral(Literal.IntLiteral(22)) ) ) ), ( "abc[A, F[B], G[C,D[E]]](23)", - Invocation.InvocationFunction( - InvocationName(List(Identifier("abc"))), + ValueToken.ValueTokenFunction( + IdentifierName(List(Identifier("abc"))), genericMembers = List( - TypeDef.SimpleTypeDef(InvocationName(List(Identifier("A")))), - TypeDef.HKTTypeDef(InvocationName(List(Identifier("F"))), members = List(TypeDef.SimpleTypeDef(InvocationName(List(Identifier("B")))))), + TypeDef.SimpleTypeDef(IdentifierName(List(Identifier("A")))), + TypeDef.HKTTypeDef(IdentifierName(List(Identifier("F"))), members = List(TypeDef.SimpleTypeDef(IdentifierName(List(Identifier("B")))))), TypeDef.HKTTypeDef( - InvocationName(List(Identifier("G"))), + IdentifierName(List(Identifier("G"))), members = List( - TypeDef.SimpleTypeDef(InvocationName(List(Identifier("C")))), + TypeDef.SimpleTypeDef(IdentifierName(List(Identifier("C")))), TypeDef.HKTTypeDef( - InvocationName(List(Identifier("D"))), - members = List(TypeDef.SimpleTypeDef(InvocationName(List(Identifier("E"))))) + IdentifierName(List(Identifier("D"))), + members = List(TypeDef.SimpleTypeDef(IdentifierName(List(Identifier("E"))))) ) ) ) ), params = List( - Invocation.InvocationLiteral(Literal.IntLiteral(23)) + ValueToken.ValueTokenLiteral(Literal.IntLiteral(23)) ) ) ), ( "_01(22)", - Invocation.InvocationFunction( - InvocationName(List(Identifier("_01"))), - params = List(Invocation.InvocationLiteral(Literal.IntLiteral(22))) + ValueToken.ValueTokenFunction( + IdentifierName(List(Identifier("_01"))), + params = List(ValueToken.ValueTokenLiteral(Literal.IntLiteral(22))) ) ), ( "_a.b.c01(233,asdf)", - Invocation.InvocationFunction( - InvocationName(List(Identifier("_a"), Identifier("b"), Identifier("c01"))), + ValueToken.ValueTokenFunction( + IdentifierName(List(Identifier("_a"), Identifier("b"), Identifier("c01"))), params = List( - Invocation.InvocationLiteral(Literal.IntLiteral(233)), - Invocation.InvocationIdentifier(InvocationName(List(Identifier("asdf")))) + ValueToken.ValueTokenLiteral(Literal.IntLiteral(233)), + ValueToken.ValueTokenIdentifier(IdentifierName(List(Identifier("asdf")))) ) ) ), - ("__", Invocation.InvocationIdentifier(InvocationName(List(Identifier("__"))))), - ("aaa_01", Invocation.InvocationIdentifier(InvocationName(List(Identifier("aaa_01"))))), - ("True", Invocation.InvocationLiteral(Literal.BooleanLiteral(true))), - ("22", Invocation.InvocationLiteral(Literal.IntLiteral(22))), - (""""hola"""", Invocation.InvocationLiteral(Literal.StringLiteral("hola"))) + ("__", ValueToken.ValueTokenIdentifier(IdentifierName(List(Identifier("__"))))), + ("aaa_01", ValueToken.ValueTokenIdentifier(IdentifierName(List(Identifier("aaa_01"))))), + ("True", ValueToken.ValueTokenLiteral(Literal.BooleanLiteral(true))), + ("22", ValueToken.ValueTokenLiteral(Literal.IntLiteral(22))), + (""""hola"""", ValueToken.ValueTokenLiteral(Literal.StringLiteral("hola"))) ) private val invalidIdentifiers = List(