You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nlpcraft.apache.org by ni...@apache.org on 2022/10/23 05:01:12 UTC

[incubator-nlpcraft] branch master updated: Replaced 'Option(x)' with 'x.?'.

This is an automated email from the ASF dual-hosted git repository.

nivanov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git


The following commit(s) were added to refs/heads/master by this push:
     new 39e8ec6e Replaced 'Option(x)' with 'x.?'.
39e8ec6e is described below

commit 39e8ec6edda8cac5c5cfa64fd426fbba67f85a72
Author: Aaron Radzinski <ar...@datalingvo.com>
AuthorDate: Sat Oct 22 22:01:05 2022 -0700

    Replaced 'Option(x)' with 'x.?'.
---
 .../nlp/entity/parser/NCFrSemanticEntityParser.scala    |  3 ++-
 .../nlp/entity/parser/NCRuSemanticEntityParser.scala    |  3 ++-
 .../nlpcraft/examples/pizzeria/PizzeriaModel.scala      |  2 +-
 .../nlpcraft/examples/pizzeria/PizzeriaOrder.scala      |  3 ++-
 .../src/main/scala/org/apache/nlpcraft/NCGlobals.scala  |  3 +++
 .../main/scala/org/apache/nlpcraft/NCModelConfig.scala  |  8 ++++----
 .../scala/org/apache/nlpcraft/NCPipelineBuilder.scala   |  4 ++--
 .../src/main/scala/org/apache/nlpcraft/NCResult.scala   |  2 +-
 .../apache/nlpcraft/internal/ascii/NCAsciiTable.scala   |  2 +-
 .../internal/dialogflow/NCDialogFlowManager.scala       |  2 +-
 .../nlpcraft/internal/impl/NCModelPipelineManager.scala |  4 ++--
 .../apache/nlpcraft/internal/impl/NCModelScanner.scala  |  2 +-
 .../apache/nlpcraft/internal/intent/NCIDLIntent.scala   |  4 +---
 .../internal/intent/compiler/NCIDLCompiler.scala        |  2 +-
 .../internal/intent/matcher/NCIntentSolverManager.scala | 16 ++++++++--------
 .../nlp/enrichers/NCEnStopWordsTokenEnricher.scala      |  6 +++---
 .../nlpcraft/nlp/parsers/NCSemanticEntityParser.scala   |  2 +-
 .../nlp/parsers/impl/NCSemanticSynonymsProcessor.scala  |  6 +++---
 .../nlpcraft/internal/impl/NCModelPingPongSpec.scala    |  2 +-
 .../intent/compiler/functions/NCIDLFunctions.scala      |  4 ++--
 .../compiler/functions/NCIDLFunctionsEntitiesUsed.scala | 17 +++++++++--------
 .../org/apache/nlpcraft/nlp/NCEntityValidatorSpec.scala |  2 +-
 .../org/apache/nlpcraft/nlp/NCTokenValidatorSpec.scala  |  2 +-
 .../nlp/parsers/NCSemanticEntityParserJsonSpec.scala    |  2 +-
 .../nlp/parsers/NCSemanticEntityParserSpec.scala        |  6 +++---
 25 files changed, 57 insertions(+), 52 deletions(-)

diff --git a/nlpcraft-examples/lightswitch-fr/src/main/scala/org/apache/nlpcraft/examples/lightswitch/nlp/entity/parser/NCFrSemanticEntityParser.scala b/nlpcraft-examples/lightswitch-fr/src/main/scala/org/apache/nlpcraft/examples/lightswitch/nlp/entity/parser/NCFrSemanticEntityParser.scala
index b7430e1f..55350bf1 100644
--- a/nlpcraft-examples/lightswitch-fr/src/main/scala/org/apache/nlpcraft/examples/lightswitch/nlp/entity/parser/NCFrSemanticEntityParser.scala
+++ b/nlpcraft-examples/lightswitch-fr/src/main/scala/org/apache/nlpcraft/examples/lightswitch/nlp/entity/parser/NCFrSemanticEntityParser.scala
@@ -19,6 +19,7 @@ package org.apache.nlpcraft.examples.lightswitch.nlp.entity.parser
 
 import opennlp.tools.stemmer.snowball.SnowballStemmer
 import org.apache.nlpcraft.examples.lightswitch.nlp.token.parser.NCFrTokenParser
+import org.apache.nlpcraft.*
 import org.apache.nlpcraft.nlp.parsers.*
 
 /**
@@ -31,5 +32,5 @@ class NCFrSemanticEntityParser(src: String) extends NCSemanticEntityParser(
         override def stem(txt: String): String = stemmer.synchronized { stemmer.stem(txt.toLowerCase).toString }
     ,
     new NCFrTokenParser(),
-    mdlSrcOpt = Option(src)
+    mdlSrcOpt = src.?
 )
diff --git a/nlpcraft-examples/lightswitch-ru/src/main/scala/org/apache/nlpcraft/examples/lightswitch/nlp/entity/parser/NCRuSemanticEntityParser.scala b/nlpcraft-examples/lightswitch-ru/src/main/scala/org/apache/nlpcraft/examples/lightswitch/nlp/entity/parser/NCRuSemanticEntityParser.scala
index a7448e29..695a118d 100644
--- a/nlpcraft-examples/lightswitch-ru/src/main/scala/org/apache/nlpcraft/examples/lightswitch/nlp/entity/parser/NCRuSemanticEntityParser.scala
+++ b/nlpcraft-examples/lightswitch-ru/src/main/scala/org/apache/nlpcraft/examples/lightswitch/nlp/entity/parser/NCRuSemanticEntityParser.scala
@@ -20,6 +20,7 @@ package org.apache.nlpcraft.examples.lightswitch.nlp.entity.parser
 import opennlp.tools.stemmer.snowball.SnowballStemmer
 import org.apache.nlpcraft.examples.lightswitch.nlp.token.parser.NCRuTokenParser
 import org.apache.nlpcraft.nlp.parsers.*
+import org.apache.nlpcraft.*
 
 /**
   *
@@ -31,5 +32,5 @@ class NCRuSemanticEntityParser(src: String) extends NCSemanticEntityParser(
         override def stem(txt: String): String = stemmer.synchronized { stemmer.stem(txt.toLowerCase).toString }
     ,
     new NCRuTokenParser(),
-    mdlSrcOpt = Option(src)
+    mdlSrcOpt = src.?
 )
diff --git a/nlpcraft-examples/pizzeria/src/main/scala/org/apache/nlpcraft/examples/pizzeria/PizzeriaModel.scala b/nlpcraft-examples/pizzeria/src/main/scala/org/apache/nlpcraft/examples/pizzeria/PizzeriaModel.scala
index a2e51833..fcd07ec9 100644
--- a/nlpcraft-examples/pizzeria/src/main/scala/org/apache/nlpcraft/examples/pizzeria/PizzeriaModel.scala
+++ b/nlpcraft-examples/pizzeria/src/main/scala/org/apache/nlpcraft/examples/pizzeria/PizzeriaModel.scala
@@ -221,4 +221,4 @@ class PizzeriaModel extends NCModelAdapter(NCModelConfig("nlpcraft.pizzeria.ex",
 
     override def onRejection(using ctx: NCContext, im: Option[NCIntentMatch], e: NCRejection): Option[NCResult] =
         if im.isEmpty || getCurrentOrder().isEmpty then throw e
-        Option(doShowMenuResult())
\ No newline at end of file
+        doShowMenuResult().?
\ No newline at end of file
diff --git a/nlpcraft-examples/pizzeria/src/main/scala/org/apache/nlpcraft/examples/pizzeria/PizzeriaOrder.scala b/nlpcraft-examples/pizzeria/src/main/scala/org/apache/nlpcraft/examples/pizzeria/PizzeriaOrder.scala
index e2abbff9..5a622dd3 100644
--- a/nlpcraft-examples/pizzeria/src/main/scala/org/apache/nlpcraft/examples/pizzeria/PizzeriaOrder.scala
+++ b/nlpcraft-examples/pizzeria/src/main/scala/org/apache/nlpcraft/examples/pizzeria/PizzeriaOrder.scala
@@ -18,6 +18,7 @@
 package org.apache.nlpcraft.examples.pizzeria
 
 import scala.collection.mutable
+import org.apache.nlpcraft.*
 
 /**
   * Order states.
@@ -113,7 +114,7 @@ class PizzeriaOrder:
     def fixPizzaWithoutSize(size: String): Boolean =
         findPizzaWithoutSize match
             case Some(p) =>
-                p.size = Option(size)
+                p.size = size.?
                 true
             case None => false
     /**
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCGlobals.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCGlobals.scala
index 32195942..9c6ecfa0 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCGlobals.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCGlobals.scala
@@ -48,6 +48,9 @@ extension[T](opt: Option[T])
     @targetName("equalEqualEqual")
     def ===(x: T): Boolean = opt.isDefined && opt.get == x
 
+extension[T](v: T)
+    def `?`: Option[T] = Option(v)
+
 extension(v: Int)
     /** Converts milliseconds `int` value to seconds. */
     def secs: Int = v * 1000
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelConfig.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelConfig.scala
index 19297ed1..40a844b8 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelConfig.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelConfig.scala
@@ -38,15 +38,15 @@ object NCModelConfig:
             override val getId: String = id
             override val getName: String = name
             override val getVersion: String = ver
-            override val getDescription: Option[String] = Option(desc)
-            override val getOrigin: Option[String] = Option(orig)
+            override val getDescription: Option[String] = desc.?
+            override val getOrigin: Option[String] = orig.?
 
     def apply(id: String, name: String, ver: String, desc: String, orig: String, convTimeout: Long, convDepth: Int): NCModelConfig = new NCModelConfig() :
         override val getId: String = id
         override val getName: String = name
         override val getVersion: String = ver
-        override val getDescription: Option[String] = Option(desc)
-        override val getOrigin: Option[String] = Option(orig)
+        override val getDescription: Option[String] = desc.?
+        override val getOrigin: Option[String] = orig.?
         override val getConversationTimeout: Long = convTimeout
         override val getConversationDepth: Int = convDepth
 
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPipelineBuilder.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPipelineBuilder.scala
index 60b3d39c..f49049a3 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPipelineBuilder.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCPipelineBuilder.scala
@@ -146,7 +146,7 @@ class NCPipelineBuilder:
       * @return */
     def withTokenParser(tokParser: NCTokenParser): NCPipelineBuilder =
         require(tokParser != null, "Token parser cannot be null.")
-        this.tokParser = Option(tokParser)
+        this.tokParser = tokParser.?
         this
 
     /**
@@ -170,7 +170,7 @@ class NCPipelineBuilder:
     /**
       * */
     private def setEnComponents(): Unit =
-        tokParser = Option(mkEnOpenNLPTokenParser)
+        tokParser = mkEnOpenNLPTokenParser.?
         tokEnrichers += new NCOpenNLPLemmaPosTokenEnricher(NCResourceReader.getPath("opennlp/en-pos-maxent.bin"), NCResourceReader.getPath("opennlp/en-lemmatizer.dict"))
         tokEnrichers += new NCEnStopWordsTokenEnricher
         tokEnrichers += new NCEnSwearWordsTokenEnricher(NCResourceReader.getPath("badfilter/swear_words.txt"))
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCResult.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCResult.scala
index 8226225a..614060ce 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCResult.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCResult.scala
@@ -31,7 +31,7 @@ object NCResult:
         new NCResult():
             def getBody: Any = body
             def getType: NCResultType = resultType
-            def getIntentId: Option[String] = Option(intentId)
+            def getIntentId: Option[String] = intentId.?
 
     /**
       * 
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/ascii/NCAsciiTable.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/ascii/NCAsciiTable.scala
index 728b96c1..f0bd8760 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/ascii/NCAsciiTable.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/ascii/NCAsciiTable.scala
@@ -550,7 +550,7 @@ class NCAsciiTable:
       *
       * @param header
       */
-    def print(header: String): Unit = println(mkLogString(Option(header)))
+    def print(header: String): Unit = println(mkLogString(header.?))
 
     /**
       * Renders this table to log as trace.
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/dialogflow/NCDialogFlowManager.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/dialogflow/NCDialogFlowManager.scala
index 66d158c6..eae4faf3 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/dialogflow/NCDialogFlowManager.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/dialogflow/NCDialogFlowManager.scala
@@ -121,7 +121,7 @@ class NCDialogFlowManager(cfg: NCModelConfig) extends LazyLogging:
       * @param ctx
       */
     def replaceLastItem(intentMatch: NCIntentMatch, res: NCResult, ctx: NCContext): Unit =
-        val item = mkItem(intentMatch, Option(res), ctx)
+        val item = mkItem(intentMatch, res.?, ctx)
 
         flow.synchronized {
             val buf = flow.getOrElseUpdate(ctx.getRequest.getUserId, mutable.ArrayBuffer.empty[NCDialogFlowItem])
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelPipelineManager.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelPipelineManager.scala
index 77a0fa27..e97657c1 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelPipelineManager.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelPipelineManager.scala
@@ -126,7 +126,7 @@ class NCModelPipelineManager(cfg: NCModelConfig, pipeline: NCPipeline) extends L
                 t.getEndCharIndex,
                 mkProps(t)
             )
-        tbl.info(logger, Option(s"Tokens for: ${req.getText}"))
+        tbl.info(logger, s"Tokens for: ${req.getText}".?)
 
         // NOTE: we run validators regardless of whether token list is empty.
         for (v <- tokVals) v.validate(req, cfg, toks)
@@ -180,7 +180,7 @@ class NCModelPipelineManager(cfg: NCModelConfig, pipeline: NCPipeline) extends L
                     toks.map(p => s"${p.getStartCharIndex}-${p.getEndCharIndex}").mkString("|"),
                     mkProps(e)
                 )
-            tbl.info(logger, Option(s"Variant: ${i + 1} (${vrns.size})"))
+            tbl.info(logger, s"Variant: ${i + 1} (${vrns.size})".?)
 
         NCPipelineData(req, vrns, toks)
 
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelScanner.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelScanner.scala
index ce3bd9f7..6aefdd23 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelScanner.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelScanner.scala
@@ -146,7 +146,7 @@ object NCModelScanner extends LazyLogging:
             else if paramCls == CLS_SCALA_OPT then
                 entsCnt match
                     case 0 => None
-                    case 1 => Option(argList.head)
+                    case 1 => argList.head.?
                     case _ => E(s"Too many entities ($entsCnt) for 'scala.Option[_]' $IT annotated argument [$z]")
             else
                 // All allowed arguments types already checked.
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/NCIDLIntent.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/NCIDLIntent.scala
index 578f445d..786fe3d8 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/NCIDLIntent.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/NCIDLIntent.scala
@@ -49,9 +49,7 @@ case class NCIDLIntent(
     // Flow regex as a compiled pattern.
     // Regex validity check is already done during intent compilation.
     lazy val flowRegex: Option[Pattern] = flow match
-        case Some(r) => Option(Pattern.compile(r))
+        case Some(r) => Pattern.compile(r).?
         case None => None
 
-    lazy val isFlowDefined: Boolean = flow.isDefined
-
     override def toString: String = idl
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/compiler/NCIDLCompiler.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/compiler/NCIDLCompiler.scala
index c939889a..30ca8474 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/compiler/NCIDLCompiler.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/compiler/NCIDLCompiler.scala
@@ -226,7 +226,7 @@ class NCIDLCompiler(cfg: NCModelConfig) extends LazyLogging with mutable.Cloneab
             // Add term.
             terms += NCIDLTerm(
                 ctx.getText,
-                Option(termId),
+                termId.?,
                 vars.toMap,
                 pred,
                 min,
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/matcher/NCIntentSolverManager.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/matcher/NCIntentSolverManager.scala
index 8fe00ee2..ed432620 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/matcher/NCIntentSolverManager.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/matcher/NCIntentSolverManager.scala
@@ -378,7 +378,7 @@ class NCIntentSolverManager(
 
             tbl.info(
                 logger,
-                Option(s"Found ${matches.size} matching ${if matches.size > 1 then "intents"else "intent"} (sorted best to worst):")
+                s"Found ${matches.size} matching ${if matches.size > 1 then "intents"else "intent"} (sorted best to worst):".?
             )
         else
             logger.info(s"No matching intent found:")
@@ -402,7 +402,7 @@ class NCIntentSolverManager(
         tbl += (s"${"Intent Match Weight"}", mw1.toString, mw2.toString)
         tbl += (s"${"Variant Weight"}", v1.toString, v2.toString)
 
-        tbl.warn(logger, Option("Two matching intents have the same weight for their matches (variants weight will be used further):"))
+        tbl.warn(logger, "Two matching intents have the same weight for their matches (variants weight will be used further):".?)
 
     /**
      *
@@ -510,7 +510,7 @@ class NCIntentSolverManager(
 
                     intentW.prepend(nonFreeWordNum)
 
-                    Option(IntentMatchHolder(entityGroups = intentGrps.toList, weight = intentW, intent = intent))
+                    IntentMatchHolder(entityGroups = intentGrps.toList, weight = intentW, intent = intent).?
         else
             None
 
@@ -539,7 +539,7 @@ class NCIntentSolverManager(
             s"Term Match Weight", s"${"<"}${w.head}, ${w(1)}, ${w(2)}, ${w(3)}, ${w(4)}, ${w(5)}${">"}"
         )
 
-        tbl.debug(logger, Option("Term match found:"))
+        tbl.debug(logger, "Term match found:".?)
 
     /**
      * Solves term.
@@ -624,7 +624,7 @@ class NCIntentSolverManager(
             require(term.min == 0)
             require(usedEnts.isEmpty)
 
-            Option(PredicateMatch(List.empty, new Weight(0, 0, 0)))
+            PredicateMatch(List.empty, new Weight(0, 0, 0)).?
         // We've found some matches (and min > 0).
         else
             // Number of entities from the current sentence.
@@ -641,7 +641,7 @@ class NCIntentSolverManager(
             // Mark found entities as used.
             for (e <- usedEnts) e.used = true
 
-            Option(PredicateMatch(usedEnts.toList, new Weight(senTokNum, convDepthsSum, usesSum)))
+            PredicateMatch(usedEnts.toList, new Weight(senTokNum, convDepthsSum, usesSum)).?
 
     /**
       *
@@ -665,7 +665,7 @@ class NCIntentSolverManager(
             private var data: Option[IterationResult] = _
 
             def hasNext: Boolean = data == null
-            def finish(data: IterationResult): Unit = Loop.data = Option(data)
+            def finish(data: IterationResult): Unit = Loop.data = data.?
             def finish(): Unit = Loop.data = None
             def result(): Option[IterationResult] =
                 if data == null then throw new NCRejection("No matching intent found - all intents were skipped.")
@@ -729,7 +729,7 @@ class NCIntentSolverManager(
                     typ match
                         case REGULAR =>
                             val cbRes = executeCallback(NCCallbackInput(ctx, im))
-                            saveHistory(Option(cbRes), im)
+                            saveHistory(cbRes.?, im)
                             Loop.finish(IterationResult(Left(cbRes), im))
                         case SEARCH =>
                             saveHistory(None, im)
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/enrichers/NCEnStopWordsTokenEnricher.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/enrichers/NCEnStopWordsTokenEnricher.scala
index ed41a5b1..b3af6f00 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/enrichers/NCEnStopWordsTokenEnricher.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/enrichers/NCEnStopWordsTokenEnricher.scala
@@ -123,9 +123,9 @@ object NCEnStopWordsTokenEnricher:
         def permutations(toks: Seq[NCToken]): Seq[Seq[NCToken]] =
             def multiple(seq: Seq[Seq[Option[NCToken]]], t: NCToken): Seq[Seq[Option[NCToken]]] =
                 if seq.isEmpty then
-                    if isStopWord(t) then IndexedSeq(IndexedSeq(Option(t)), IndexedSeq(None)) else IndexedSeq(IndexedSeq(Option(t)))
+                    if isStopWord(t) then IndexedSeq(IndexedSeq(t.?), IndexedSeq(None)) else IndexedSeq(IndexedSeq(t.?))
                 else
-                    (for (subSeq <- seq) yield subSeq :+ Option(t)) ++ (if isStopWord(t) then for (subSeq <- seq) yield subSeq :+ None else Seq.empty)
+                    (for (subSeq <- seq) yield subSeq :+ t.?) ++ (if isStopWord(t) then for (subSeq <- seq) yield subSeq :+ None else Seq.empty)
 
             var res: Seq[Seq[Option[NCToken]]] = Seq.empty
             for (t <- toks) res = multiple(res, t)
@@ -262,7 +262,7 @@ class NCEnStopWordsTokenEnricher(addStopsSet: Set[String] = Set.empty, exclStops
         def matches(toks: Seq[NCToken]): Boolean =
             val posOpt = toks.size match
                 case 0 => throw new AssertionError(s"Unexpected empty tokens.")
-                case 1 => Option(getPos(toks.head))
+                case 1 => getPos(toks.head).?
                 case _ => None
 
             // Hash access.
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParser.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParser.scala
index c5f959b6..2b862fdf 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParser.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParser.scala
@@ -83,7 +83,7 @@ object NCSemanticEntityParser:
         require(parser != null, "Parser cannot be null.")
         require(mdlSrc != null, "Model source cannot be null.")
 
-        new NCSemanticEntityParser(stemmer, parser, mdlSrcOpt = Option(mdlSrc))
+        new NCSemanticEntityParser(stemmer, parser, mdlSrcOpt = mdlSrc.?)
 
     /**
       * @param baseTokens Tokens.
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/parsers/impl/NCSemanticSynonymsProcessor.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/parsers/impl/NCSemanticSynonymsProcessor.scala
index 002c1f0b..7c3992e4 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/parsers/impl/NCSemanticSynonymsProcessor.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/parsers/impl/NCSemanticSynonymsProcessor.scala
@@ -133,7 +133,7 @@ private[parsers] object NCSemanticSynonymsProcessor extends LazyLogging:
             if vals != null then
                 if hasNullOrEmpty(vals.keySet) then E(s"Some values names are null or empty [element=$elemId]")
                 for ((name, syns) <- vals)
-                    checkSynonyms(syns, elemId, Option(name))
+                    checkSynonyms(syns, elemId, name.?)
 
     /**
       *
@@ -192,8 +192,8 @@ private[parsers] object NCSemanticSynonymsProcessor extends LazyLogging:
                             if regex.used then None
                             else
                                 regex.used = true
-                                Option(regex.mkChunk())
-                        case None => Option(NCSemanticSynonymChunk(TEXT, tok.getText, stemmer.stem(tok.getText.toLowerCase)))
+                                regex.mkChunk().?
+                        case None => NCSemanticSynonymChunk(TEXT, tok.getText, stemmer.stem(tok.getText.toLowerCase)).?
                 ).toList
             }).toList.filter(_.nonEmpty)
 
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/impl/NCModelPingPongSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/impl/NCModelPingPongSpec.scala
index ee638b48..b60825cb 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/impl/NCModelPingPongSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/impl/NCModelPingPongSpec.scala
@@ -52,7 +52,7 @@ class NCModelPingPongSpec extends AnyFunSuite with BeforeAndAfter:
                     ctx.
                         getConversation.
                         getDialogFlow.lastOption.
-                        flatMap(p => Option(p.getIntentMatch.getIntentId)).orNull
+                        flatMap(p => p.getIntentMatch.getIntentId.?).orNull
 
                 if lastIntentId != "command" then
                     throw new NCRejection("Nothing to confirm.")
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/intent/compiler/functions/NCIDLFunctions.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/intent/compiler/functions/NCIDLFunctions.scala
index 09ab5b7a..e6c5ba48 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/intent/compiler/functions/NCIDLFunctions.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/intent/compiler/functions/NCIDLFunctions.scala
@@ -76,7 +76,7 @@ private[functions] object NCIDLFunctions:
           * @param idlCtx
           */
         def apply(truth: String, entity: NCEntity, idlCtx: NCIDLContext): TestDesc =
-            new TestDesc(truth = truth, entity = Option(entity), idlCtx = idlCtx)
+            new TestDesc(truth = truth, entity = entity.?, idlCtx = idlCtx)
 
         /**
           *
@@ -84,7 +84,7 @@ private[functions] object NCIDLFunctions:
           * @param entity
           */
         def apply(truth: String, entity: NCEntity): TestDesc =
-            new TestDesc(truth = truth, entity = Option(entity), idlCtx = mkIdlContext(entities = Seq(entity)))
+            new TestDesc(truth = truth, entity = entity.?, idlCtx = mkIdlContext(entities = Seq(entity)))
 
     given Conversion[String, TestDesc] with
         def apply(truth: String): TestDesc = TestDesc(truth)
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/intent/compiler/functions/NCIDLFunctionsEntitiesUsed.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/intent/compiler/functions/NCIDLFunctionsEntitiesUsed.scala
index 75f18b1b..99ff31bd 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/intent/compiler/functions/NCIDLFunctionsEntitiesUsed.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/intent/compiler/functions/NCIDLFunctionsEntitiesUsed.scala
@@ -19,6 +19,7 @@ package org.apache.nlpcraft.internal.intent.compiler.functions
 
 import org.apache.nlpcraft.internal.intent.compiler.functions.NCIDLFunctions.*
 import org.apache.nlpcraft.nlp.util.NCTestToken
+import org.apache.nlpcraft.*
 
 /**
   * Tests for 'entities used' result.
@@ -32,31 +33,31 @@ class NCIDLFunctionsEntitiesUsed extends NCIDLFunctions:
             TestDesc(
                 truth = "1 == 1",
                 idlCtx = mkIdlContext(),
-                entitiesUsed = Option(0)
+                entitiesUsed = 0.?
             ),
             TestDesc(
                 truth = "# == 'a'",
-                entity = Option(e1),
+                entity = e1.?,
                 idlCtx = mkIdlContext(Seq(e1)),
-                entitiesUsed = Option(1)
+                entitiesUsed = 1.?
             ),
             TestDesc(
                 truth = "# == 'a' && # == 'a'",
-                entity = Option(e1),
+                entity = e1.?,
                 idlCtx = mkIdlContext(Seq(e1)),
                 entitiesUsed = Option(2)
             ),
             TestDesc(
                 truth = "ent_text == '*' || # == 'a'",
-                entity = Option(e1),
+                entity = e1.?,
                 idlCtx = mkIdlContext(Seq(e1, e2)),
-                entitiesUsed = Option(2)
+                entitiesUsed = 2.?
             ),
             TestDesc(
                 truth = "# == 'a' && # == 'a' && ent_text != '*'",
-                entity = Option(e1),
+                entity = e1.?,
                 idlCtx = mkIdlContext(Seq(e1)),
-                entitiesUsed = Option(3)
+                entitiesUsed = 3.?
             )
         )
     }
\ No newline at end of file
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/NCEntityValidatorSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/NCEntityValidatorSpec.scala
index b442252f..488ab53a 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/NCEntityValidatorSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/NCEntityValidatorSpec.scala
@@ -31,7 +31,7 @@ import scala.util.Using
 class NCEntityValidatorSpec extends AnyFunSuite:
     private def test0(pipeline: NCPipeline, ok: Boolean): Unit =
         val mdl: NCModel = new NCModelAdapter(NCModelConfig("test.id", "Test model", "1.0"), pipeline):
-            override def onContext(ctx: NCContext): Option[NCResult] = Option(TEST_RESULT)
+            override def onContext(ctx: NCContext): Option[NCResult] = TEST_RESULT.?
 
         NCTestUtils.askSomething(mdl, ok)
 
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/NCTokenValidatorSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/NCTokenValidatorSpec.scala
index 1e0bf1ed..544a459e 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/NCTokenValidatorSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/NCTokenValidatorSpec.scala
@@ -30,7 +30,7 @@ import scala.util.Using
 class NCTokenValidatorSpec extends AnyFunSuite:
     private def test0(pipeline: NCPipeline, ok: Boolean): Unit =
         val mdl: NCModel = new NCModelAdapter(NCModelConfig("test.id", "Test model", "1.0"), pipeline):
-            override def onContext(ctx: NCContext): Option[NCResult] = Option(TEST_RESULT)
+            override def onContext(ctx: NCContext): Option[NCResult] = TEST_RESULT.?
 
         NCTestUtils.askSomething(mdl, ok)
 
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParserJsonSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParserJsonSpec.scala
index 4d1cbe09..d7c62a57 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParserJsonSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParserJsonSpec.scala
@@ -59,6 +59,6 @@ class NCSemanticEntityParserJsonSpec extends AnyFunSuite:
             "Ping me in 3 minutes tomorrow",
             "x:alarm",
             // File contains these data for element.
-            elemData = Option(Map("testKey" -> "testValue"))
+            elemData = Map("testKey" -> "testValue").?
         )
     }
\ No newline at end of file
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParserSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParserSpec.scala
index 9330a331..515806cf 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParserSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParserSpec.scala
@@ -113,9 +113,9 @@ class NCSemanticEntityParserSpec extends AnyFunSuite:
         check("the t2", "t2")
         check("t3 t3", "t3")
         check("t3 the t3", "t3") // With stopword inside.
-        check("value4", "t4", value = Option("value4"))
-        check("value the 5", "t5", value = Option("value5")) // With stopword inside.
-        check("t6", "t6", elemData = Option(Map("testKey" -> "testValue")))
+        check("value4", "t4", value = "value4".?)
+        check("value the 5", "t5", value = "value5".?) // With stopword inside.
+        check("t6", "t6", elemData = Map("testKey" -> "testValue").?)
         check("the x abc x abe", "t7") // `x abc` should be matched, `x abe` shouldn't.
         check("A B", "t8")
         check("A", "t8")