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

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


The following commit(s) were added to refs/heads/NLPCRAFT-108 by this push:
     new 129a7a5  WIP.
129a7a5 is described below

commit 129a7a53adcba039e420462c863177e3a0943a0b
Author: Aaron Radzinski <[email protected]>
AuthorDate: Fri Oct 2 18:57:00 2020 -0700

    WIP.
---
 nlpcraft/pom.xml                                   |  4 +++
 .../nlpcraft/model/tools/cmdline/NCCli.scala       | 33 ++++++++++++++++------
 pom.xml                                            |  7 +++++
 3 files changed, 36 insertions(+), 8 deletions(-)

diff --git a/nlpcraft/pom.xml b/nlpcraft/pom.xml
index 48078d8..9126292 100644
--- a/nlpcraft/pom.xml
+++ b/nlpcraft/pom.xml
@@ -38,6 +38,10 @@
 
     <dependencies>
         <dependency>
+            <groupId>org.fusesource.jansi</groupId>
+            <artifactId>jansi</artifactId>
+        </dependency>
+        <dependency>
             <groupId>com.google.protobuf</groupId>
             <artifactId>protobuf-java</artifactId>
         </dependency>
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala
index bc4e78d..83bf229 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala
@@ -17,7 +17,7 @@
 
 package org.apache.nlpcraft.model.tools.cmdline
 
-import java.io.{BufferedReader, File, FileInputStream, IOException, 
InputStreamReader, ObjectInputStream}
+import java.io.{File, FileInputStream, IOException, ObjectInputStream}
 import java.net.URL
 
 import com.google.gson._
@@ -40,10 +40,14 @@ import java.text.DateFormat
 import java.util.Date
 
 import org.apache.nlpcraft.common.util.NCUtils.IntTimeUnits
+import org.jline.builtins.Completers.TreeCompleter
+import org.jline.builtins.Completers.TreeCompleter.node
 import org.jline.reader.impl.DefaultParser
 import org.jline.terminal.TerminalBuilder
 import org.jline.reader.{EndOfFileException, LineReader, LineReaderBuilder, 
UserInterruptException}
 import org.jline.reader.impl.DefaultParser.Bracket
+import org.jline.reader.impl.completer.AggregateCompleter
+import org.jline.widget.AutosuggestionWidgets
 import resource.managed
 
 import scala.collection.mutable
@@ -354,7 +358,11 @@ object NCCli extends App {
         )
     ).sortBy(_.id)
 
-    private final val HELP_CMD = CMDS.find(_.id ==  "help").get
+    require(
+        U.getDups(CMDS.flatMap(_.names)).isEmpty,
+        "Dup commands."
+    )
+
     private final val DFLT_CMD = CMDS.find(_.id ==  "repl").get
     private final val NO_ANSI_CMD = CMDS.find(_.id ==  "no-ansi").get
     private final val ANSI_CMD = CMDS.find(_.id ==  "ansi").get
@@ -477,8 +485,6 @@ object NCCli extends App {
         pb.redirectOutput(Redirect.appendTo(output))
 
         try {
-            val startMs = currentTime
-
             pb.start()
 
             logln(s"Server output: ${c(output.getAbsolutePath)}")
@@ -845,8 +851,6 @@ object NCCli extends App {
         logln(s"Type '${c("?")}' or '${c("? -c=repl")}' to get help.")
         logln(s"Type '${c("quit")}' to exit.")
 
-        val in = new BufferedReader(new InputStreamReader(System.in))
-
         val QUITS = Seq(
             "quit", "exit", "/q", "\\q"
         )
@@ -856,21 +860,34 @@ object NCCli extends App {
         val term = TerminalBuilder.builder()
             .system(true)
             .dumb(true)
-            .build();
+            .jansi(true)
+            .build()
 
         val parser = new DefaultParser()
 
         parser.setEofOnUnclosedBracket(Bracket.CURLY, Bracket.ROUND, 
Bracket.SQUARE)
 
+        //val cmdNames = CMDS.flatMap(_.names)
+
+        val completer = new AggregateCompleter(
+            new TreeCompleter(
+                CMDS.flatMap(cmd ⇒ cmd.names.map(name ⇒
+                    node(Seq(name) ++ 
cmd.params.flatMap(_.names).map(node(_)): _*)
+                )):_*
+            )
+        )
+
         val reader = LineReaderBuilder
             .builder
             .terminal(term)
 //            .completer(completer)
             .parser(parser)
-            .variable(LineReader.SECONDARY_PROMPT_PATTERN, s"${g(">>")} ")
+//            .variable(LineReader.SECONDARY_PROMPT_PATTERN, s"${g(">>")} ")
             .variable(LineReader.INDENTATION, 2)
             .build
 
+        new AutosuggestionWidgets(reader).enable()
+
         while (!exit) {
             val rawLine =
                 try
diff --git a/pom.xml b/pom.xml
index bd73a7a..34a67f9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -130,6 +130,7 @@
         <vertical.blank.ver>1.0.1</vertical.blank.ver>
         <fliptables.ver>1.1.0</fliptables.ver>
         <jline.ver>3.16.0</jline.ver>
+        <jansi.ver>1.18</jansi.ver>
 
         <!--
             Following libraries versions are compatible:
@@ -202,6 +203,12 @@
             </dependency>
 
             <dependency>
+                <groupId>org.fusesource.jansi</groupId>
+                <artifactId>jansi</artifactId>
+                <version>${jansi.ver}</version>
+            </dependency>
+
+            <dependency>
                 <groupId>io.opencensus</groupId>
                 <artifactId>opencensus-exporter-trace-jaeger</artifactId>
                 <version>${opencensus.ver}</version>

Reply via email to