1 /*
2  * Copyright (c) 2021 ScalaQuest Team.
3  *
4  * This file is part of ScalaQuest, and is distributed under the terms of the MIT License as
5  * described in the file LICENSE in the ScalaQuest distribution's top directory.
6  */
7 
8 package io.github.scalaquest.core.pipeline.resolver
9 
10 import io.github.scalaquest.core.dictionary.verbs.VerbPrep
11 import io.github.scalaquest.core.model.{Action, ItemDescription, ItemRef}
12 import io.github.scalaquest.core.pipeline.parser.{AbstractSyntaxTree, ParserResult}
13 
14 abstract class AbstractSyntaxTreeResolver extends Resolver {
15 
16   def actions(v: VerbPrep): Either[String, Action]
17 
18   def items(d: ItemDescription): Either[String, ItemRef]
19 
20   override def resolve(parserResult: ParserResult): Either[String, ResolverResult] = {
21     for {
22       statement <- parserResult.tree match {
23         case AbstractSyntaxTree.Intransitive(verb, prep, _) =>
24           for {
25             action <- actions((verb, prep))
26           } yield Statement.Intransitive(action)
27 
28         case AbstractSyntaxTree.Transitive(verb, prep, _, obj) =>
29           for {
30             action  <- actions((verb, prep))
31             itemRef <- items(obj)
32           } yield Statement.Transitive(action, itemRef)
33 
34         case AbstractSyntaxTree.Ditransitive(verb, prep, _, directObj, indirectObj) =>
35           for {
36             action          <- actions((verb, prep))
37             directItemRef   <- items(directObj)
38             indirectItemRef <- items(indirectObj)
39           } yield Statement.Ditransitive(action, directItemRef, indirectItemRef)
40 
41         case _ => Left("The statement is wrong.")
42       }
43     } yield ResolverResult(statement)
44   }
45 
46 }
Line Stmt Id Pos Tree Symbol Tests Code
22 852 783 - 800 Select io.github.scalaquest.core.pipeline.parser.ParserResult.tree parserResult.tree
22 867 758 - 1631 Apply scala.util.Either.map parserResult.tree match { case (verb: String, prep: Option[String], subject: String): io.github.scalaquest.core.pipeline.parser.AbstractSyntaxTree.Intransitive((verb @ _), (prep @ _), _) => AbstractSyntaxTreeResolver.this.actions(scala.Tuple2.apply[String, Option[String]](verb, prep)).map[io.github.scalaquest.core.pipeline.resolver.Statement.Intransitive](((action: io.github.scalaquest.core.model.Action) => Statement.Intransitive.apply(action))) case (verb: String, prep: Option[String], subject: String, obj: io.github.scalaquest.core.model.ItemDescription): io.github.scalaquest.core.pipeline.parser.AbstractSyntaxTree.Transitive((verb @ _), (prep @ _), _, (obj @ _)) => AbstractSyntaxTreeResolver.this.actions(scala.Tuple2.apply[String, Option[String]](verb, prep)).flatMap[String, io.github.scalaquest.core.pipeline.resolver.Statement.Transitive](((action: io.github.scalaquest.core.model.Action) => AbstractSyntaxTreeResolver.this.items(obj).map[io.github.scalaquest.core.pipeline.resolver.Statement.Transitive](((itemRef: io.github.scalaquest.core.model.ItemRef) => Statement.Transitive.apply(action, itemRef))))) case (verb: String, prep: Option[String], subject: String, directObj: io.github.scalaquest.core.model.ItemDescription, indirectObj: io.github.scalaquest.core.model.ItemDescription): io.github.scalaquest.core.pipeline.parser.AbstractSyntaxTree.Ditransitive((verb @ _), (prep @ _), _, (directObj @ _), (indirectObj @ _)) => AbstractSyntaxTreeResolver.this.actions(scala.Tuple2.apply[String, Option[String]](verb, prep)).flatMap[String, io.github.scalaquest.core.pipeline.resolver.Statement.Ditransitive](((action: io.github.scalaquest.core.model.Action) => AbstractSyntaxTreeResolver.this.items(directObj).flatMap[String, io.github.scalaquest.core.pipeline.resolver.Statement.Ditransitive](((directItemRef: io.github.scalaquest.core.model.ItemRef) => AbstractSyntaxTreeResolver.this.items(indirectObj).map[io.github.scalaquest.core.pipeline.resolver.Statement.Ditransitive](((indirectItemRef: io.github.scalaquest.core.model.ItemRef) => Statement.Ditransitive.apply(action, directItemRef, indirectItemRef))))))) case _ => scala.`package`.Left.apply[String, Nothing]("The statement is wrong.") }.map[io.github.scalaquest.core.pipeline.resolver.ResolverResult](((statement: Product with io.github.scalaquest.core.pipeline.resolver.Statement with java.io.Serializable) => ResolverResult.apply(statement)))
25 853 918 - 930 Apply scala.Tuple2.apply scala.Tuple2.apply[String, Option[String]](verb, prep)
25 855 882 - 980 Apply scala.util.Either.map AbstractSyntaxTreeResolver.this.actions(scala.Tuple2.apply[String, Option[String]](verb, prep)).map[io.github.scalaquest.core.pipeline.resolver.Statement.Intransitive](((action: io.github.scalaquest.core.model.Action) => Statement.Intransitive.apply(action)))
26 854 950 - 980 Apply io.github.scalaquest.core.pipeline.resolver.Statement.Intransitive.apply Statement.Intransitive.apply(action)
30 856 1095 - 1107 Apply scala.Tuple2.apply scala.Tuple2.apply[String, Option[String]](verb, prep)
30 859 1058 - 1198 Apply scala.util.Either.flatMap AbstractSyntaxTreeResolver.this.actions(scala.Tuple2.apply[String, Option[String]](verb, prep)).flatMap[String, io.github.scalaquest.core.pipeline.resolver.Statement.Transitive](((action: io.github.scalaquest.core.model.Action) => AbstractSyntaxTreeResolver.this.items(obj).map[io.github.scalaquest.core.pipeline.resolver.Statement.Transitive](((itemRef: io.github.scalaquest.core.model.ItemRef) => Statement.Transitive.apply(action, itemRef)))))
31 858 1121 - 1198 Apply scala.util.Either.map AbstractSyntaxTreeResolver.this.items(obj).map[io.github.scalaquest.core.pipeline.resolver.Statement.Transitive](((itemRef: io.github.scalaquest.core.model.ItemRef) => Statement.Transitive.apply(action, itemRef)))
32 857 1161 - 1198 Apply io.github.scalaquest.core.pipeline.resolver.Statement.Transitive.apply Statement.Transitive.apply(action, itemRef)
36 860 1342 - 1354 Apply scala.Tuple2.apply scala.Tuple2.apply[String, Option[String]](verb, prep)
36 864 1297 - 1534 Apply scala.util.Either.flatMap AbstractSyntaxTreeResolver.this.actions(scala.Tuple2.apply[String, Option[String]](verb, prep)).flatMap[String, io.github.scalaquest.core.pipeline.resolver.Statement.Ditransitive](((action: io.github.scalaquest.core.model.Action) => AbstractSyntaxTreeResolver.this.items(directObj).flatMap[String, io.github.scalaquest.core.pipeline.resolver.Statement.Ditransitive](((directItemRef: io.github.scalaquest.core.model.ItemRef) => AbstractSyntaxTreeResolver.this.items(indirectObj).map[io.github.scalaquest.core.pipeline.resolver.Statement.Ditransitive](((indirectItemRef: io.github.scalaquest.core.model.ItemRef) => Statement.Ditransitive.apply(action, directItemRef, indirectItemRef)))))))
37 863 1368 - 1534 Apply scala.util.Either.flatMap AbstractSyntaxTreeResolver.this.items(directObj).flatMap[String, io.github.scalaquest.core.pipeline.resolver.Statement.Ditransitive](((directItemRef: io.github.scalaquest.core.model.ItemRef) => AbstractSyntaxTreeResolver.this.items(indirectObj).map[io.github.scalaquest.core.pipeline.resolver.Statement.Ditransitive](((indirectItemRef: io.github.scalaquest.core.model.ItemRef) => Statement.Ditransitive.apply(action, directItemRef, indirectItemRef)))))
38 862 1416 - 1534 Apply scala.util.Either.map AbstractSyntaxTreeResolver.this.items(indirectObj).map[io.github.scalaquest.core.pipeline.resolver.Statement.Ditransitive](((indirectItemRef: io.github.scalaquest.core.model.ItemRef) => Statement.Ditransitive.apply(action, directItemRef, indirectItemRef)))
39 861 1472 - 1534 Apply io.github.scalaquest.core.pipeline.resolver.Statement.Ditransitive.apply Statement.Ditransitive.apply(action, directItemRef, indirectItemRef)
41 865 1554 - 1585 Apply scala.util.Left.apply scala.`package`.Left.apply[String, Nothing]("The statement is wrong.")
43 866 1606 - 1631 Apply io.github.scalaquest.core.pipeline.resolver.ResolverResult.apply ResolverResult.apply(statement)