mirror of https://github.com/sbt/sbt.git
Update completions to include ++ and exit/quit
This commit is contained in:
parent
9bfc8a8f4a
commit
ef0bc1f2e4
|
|
@ -9,6 +9,7 @@ trait LineReader extends NotNull
|
||||||
}
|
}
|
||||||
class Completors(val projectAction: String, val projectNames: Iterable[String],
|
class Completors(val projectAction: String, val projectNames: Iterable[String],
|
||||||
val generalCommands: Iterable[String], val propertyActions: Iterable[String],
|
val generalCommands: Iterable[String], val propertyActions: Iterable[String],
|
||||||
|
val specificPrefix: String, val scalaVersions: Iterable[String],
|
||||||
val prefixes: Iterable[String]) extends NotNull
|
val prefixes: Iterable[String]) extends NotNull
|
||||||
import jline.ConsoleReader
|
import jline.ConsoleReader
|
||||||
abstract class JLine extends LineReader
|
abstract class JLine extends LineReader
|
||||||
|
|
@ -102,7 +103,12 @@ class JLineReader(historyPath: Option[Path], completors: Completors, log: Logger
|
||||||
private def propertyCompletor(propertyNames: Iterable[String]) =
|
private def propertyCompletor(propertyNames: Iterable[String]) =
|
||||||
simpleArgumentCompletor(propertyActions, propertyNames)
|
simpleArgumentCompletor(propertyActions, propertyNames)
|
||||||
private def prefixedCompletor(baseCompletor: Completor) =
|
private def prefixedCompletor(baseCompletor: Completor) =
|
||||||
singleArgumentCompletor(simpleCompletor(prefixes.toList.toArray[String]), baseCompletor)
|
singleArgumentCompletor(simpleCompletor(prefixes), baseCompletor)
|
||||||
|
private def specificCompletor(baseCompletor: Completor) =
|
||||||
|
{
|
||||||
|
val specific = simpleCompletor(specificPrefix :: Nil) // TODO
|
||||||
|
new ArgumentCompletor( Array( specific, simpleCompletor(scalaVersions), baseCompletor ) )
|
||||||
|
}
|
||||||
def setVariableCompletions(taskNames: Iterable[String], propertyNames: Iterable[String], extra: Iterable[(String, Iterable[String])] )
|
def setVariableCompletions(taskNames: Iterable[String], propertyNames: Iterable[String], extra: Iterable[(String, Iterable[String])] )
|
||||||
{
|
{
|
||||||
import scala.collection.immutable.TreeSet
|
import scala.collection.immutable.TreeSet
|
||||||
|
|
@ -110,6 +116,6 @@ class JLineReader(historyPath: Option[Path], completors: Completors, log: Logger
|
||||||
val extraCompletors = for( (first, repeat) <- extra) yield repeatedArgumentCompletor(simpleCompletor(first :: Nil), simpleCompletor(repeat))
|
val extraCompletors = for( (first, repeat) <- extra) yield repeatedArgumentCompletor(simpleCompletor(first :: Nil), simpleCompletor(repeat))
|
||||||
val baseCompletors = generalCompletor :: taskCompletor :: projectCompletor :: propertyCompletor(propertyNames) :: extraCompletors.toList
|
val baseCompletors = generalCompletor :: taskCompletor :: projectCompletor :: propertyCompletor(propertyNames) :: extraCompletors.toList
|
||||||
val baseCompletor = new MultiCompletor(baseCompletors.toArray)
|
val baseCompletor = new MultiCompletor(baseCompletors.toArray)
|
||||||
completor.setCompletors( Array(baseCompletor, prefixedCompletor(baseCompletor)) )
|
completor.setCompletors( Array(baseCompletor, prefixedCompletor(baseCompletor), specificCompletor(baseCompletor)) )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -258,7 +258,7 @@ class xMain extends xsbti.AppMain
|
||||||
object SpecificBuild
|
object SpecificBuild
|
||||||
{
|
{
|
||||||
import java.util.regex.Pattern.{compile,quote}
|
import java.util.regex.Pattern.{compile,quote}
|
||||||
val pattern = compile(quote(SpecificBuildPrefix) + """(\S+)\s*(.*)""")
|
val pattern = compile(quote(SpecificBuildPrefix) + """\s*(\S+)\s*(.*)""")
|
||||||
def unapply(s: String) =
|
def unapply(s: String) =
|
||||||
{
|
{
|
||||||
val m = pattern.matcher(s)
|
val m = pattern.matcher(s)
|
||||||
|
|
@ -313,7 +313,8 @@ class xMain extends xsbti.AppMain
|
||||||
{
|
{
|
||||||
val projectNames = baseProject.projectClosure.map(_.name)
|
val projectNames = baseProject.projectClosure.map(_.name)
|
||||||
val prefixes = ContinuousExecutePrefix :: CrossBuildPrefix :: Nil
|
val prefixes = ContinuousExecutePrefix :: CrossBuildPrefix :: Nil
|
||||||
val completors = new Completors(ProjectAction, projectNames, interactiveCommands, List(GetAction, SetAction), prefixes)
|
val scalaVersions = baseProject.crossScalaVersions ++ Seq(baseProject.defScalaVersion.value)
|
||||||
|
val completors = new Completors(ProjectAction, projectNames, interactiveCommands, List(GetAction, SetAction), SpecificBuildPrefix, scalaVersions, prefixes)
|
||||||
val reader = new JLineReader(baseProject.historyPath, completors, baseProject.log)
|
val reader = new JLineReader(baseProject.historyPath, completors, baseProject.log)
|
||||||
val methodCompletions = for( (name, method) <- project.methods) yield (name, method.completions)
|
val methodCompletions = for( (name, method) <- project.methods) yield (name, method.completions)
|
||||||
reader.setVariableCompletions(project.taskNames, project.propertyNames, methodCompletions)
|
reader.setVariableCompletions(project.taskNames, project.propertyNames, methodCompletions)
|
||||||
|
|
@ -365,7 +366,7 @@ class xMain extends xsbti.AppMain
|
||||||
|
|
||||||
/** The list of all available commands at the interactive prompt in addition to the tasks defined
|
/** The list of all available commands at the interactive prompt in addition to the tasks defined
|
||||||
* by a project.*/
|
* by a project.*/
|
||||||
protected def interactiveCommands: Iterable[String] = basicCommands.toList ++ logLevels.toList
|
protected def interactiveCommands: Iterable[String] = basicCommands.toList ++ logLevels.toList ++ TerminateActions
|
||||||
/** The list of logging levels.*/
|
/** The list of logging levels.*/
|
||||||
private def logLevels: Iterable[String] = TreeSet.empty[String] ++ Level.levels.map(_.toString)
|
private def logLevels: Iterable[String] = TreeSet.empty[String] ++ Level.levels.map(_.toString)
|
||||||
/** The list of all interactive commands other than logging level.*/
|
/** The list of all interactive commands other than logging level.*/
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue