mirror of https://github.com/sbt/sbt.git
Reintroduced the `examples` method. Reintroduced and deprecated the `checkMatches` method.
This commit is contained in:
parent
186c4c0db4
commit
247252fac1
|
|
@ -174,6 +174,13 @@ object Parser extends ParserMain
|
||||||
def mkFailures(errors: => Seq[String], definitive: Boolean = false): Failure = new Failure(errors.distinct, definitive)
|
def mkFailures(errors: => Seq[String], definitive: Boolean = false): Failure = new Failure(errors.distinct, definitive)
|
||||||
def mkFailure(error: => String, definitive: Boolean = false): Failure = new Failure(error :: Nil, definitive)
|
def mkFailure(error: => String, definitive: Boolean = false): Failure = new Failure(error :: Nil, definitive)
|
||||||
|
|
||||||
|
@deprecated("This method is deprecated and will be removed in the next major version. Use the parser directly to check for invalid completions.", since = "0.13.2")
|
||||||
|
def checkMatches(a: Parser[_], completions: Seq[String])
|
||||||
|
{
|
||||||
|
val bad = completions.filter( apply(a)(_).resultEmpty.isFailure)
|
||||||
|
if(!bad.isEmpty) sys.error("Invalid example completions: " + bad.mkString("'", "', '", "'"))
|
||||||
|
}
|
||||||
|
|
||||||
def tuple[A,B](a: Option[A], b: Option[B]): Option[(A,B)] =
|
def tuple[A,B](a: Option[A], b: Option[B]): Option[(A,B)] =
|
||||||
(a,b) match { case (Some(av), Some(bv)) => Some((av, bv)); case _ => None }
|
(a,b) match { case (Some(av), Some(bv)) => Some((av, bv)); case _ => None }
|
||||||
|
|
||||||
|
|
@ -430,6 +437,9 @@ trait ParserMain
|
||||||
// The x Completions.empty removes any trailing token completions where append.isEmpty
|
// The x Completions.empty removes any trailing token completions where append.isEmpty
|
||||||
apply(p)(s).completions(level) x Completions.empty
|
apply(p)(s).completions(level) x Completions.empty
|
||||||
|
|
||||||
|
def examples[A](a: Parser[A], completions: Set[String], check: Boolean = false): Parser[A] =
|
||||||
|
examples(a, new FixedSetExamples(completions), completions.size, check)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param a the parser to decorate with a source of examples. All validation and parsing is delegated to this parser,
|
* @param a the parser to decorate with a source of examples. All validation and parsing is delegated to this parser,
|
||||||
* only [[Parser.completions]] is modified.
|
* only [[Parser.completions]] is modified.
|
||||||
|
|
@ -437,7 +447,7 @@ trait ParserMain
|
||||||
* @param maxNumberOfExamples limits the number of examples that the source of examples should return. This can
|
* @param maxNumberOfExamples limits the number of examples that the source of examples should return. This can
|
||||||
* prevent lengthy pauses and avoids bad interactive user experience.
|
* prevent lengthy pauses and avoids bad interactive user experience.
|
||||||
* @param removeInvalidExamples indicates whether completion examples should be checked for validity (against the given parser). An
|
* @param removeInvalidExamples indicates whether completion examples should be checked for validity (against the given parser). An
|
||||||
* exception is thrown if the example source contains no valid completion suggestions.
|
* exception is thrown if the example source contains no valid completion suggestions.
|
||||||
* @tparam A the type of values that are returned by the parser.
|
* @tparam A the type of values that are returned by the parser.
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
|
@ -731,9 +741,13 @@ private final class Not(delegate: Parser[_], failMessage: String) extends ValidP
|
||||||
*/
|
*/
|
||||||
private final class ParserWithExamples[T](delegate: Parser[T], exampleSource: ExampleSource, maxNumberOfExamples: Int, removeInvalidExamples: Boolean) extends ValidParser[T]
|
private final class ParserWithExamples[T](delegate: Parser[T], exampleSource: ExampleSource, maxNumberOfExamples: Int, removeInvalidExamples: Boolean) extends ValidParser[T]
|
||||||
{
|
{
|
||||||
def derive(c: Char) = examples(delegate derive c, exampleSource.withAddedPrefix(c.toString), maxNumberOfExamples, removeInvalidExamples)
|
def derive(c: Char) =
|
||||||
|
examples(delegate derive c, exampleSource.withAddedPrefix(c.toString), maxNumberOfExamples, removeInvalidExamples)
|
||||||
|
|
||||||
def result = delegate.result
|
def result = delegate.result
|
||||||
|
|
||||||
lazy val resultEmpty = delegate.resultEmpty
|
lazy val resultEmpty = delegate.resultEmpty
|
||||||
|
|
||||||
def completions(level: Int) = {
|
def completions(level: Int) = {
|
||||||
if(exampleSource().isEmpty)
|
if(exampleSource().isEmpty)
|
||||||
if(resultEmpty.isValid) Completions.nil else Completions.empty
|
if(resultEmpty.isValid) Completions.nil else Completions.empty
|
||||||
|
|
@ -742,6 +756,7 @@ private final class ParserWithExamples[T](delegate: Parser[T], exampleSource: Ex
|
||||||
Completions(examplesBasedOnTheResult.map(ex => Completion.suggestion(ex)))
|
Completions(examplesBasedOnTheResult.map(ex => Completion.suggestion(ex)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override def toString = "examples(" + delegate + ", " + exampleSource().take(2).toList + ")"
|
override def toString = "examples(" + delegate + ", " + exampleSource().take(2).toList + ")"
|
||||||
|
|
||||||
private def filteredExamples: Iterable[String] = {
|
private def filteredExamples: Iterable[String] = {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue