mirror of https://github.com/sbt/sbt.git
38 lines
1.7 KiB
Scala
38 lines
1.7 KiB
Scala
package sbt.complete
|
|
|
|
import Completion.{displayStrict, token => ctoken, tokenDisplay}
|
|
|
|
sealed trait TokenCompletions {
|
|
def hideWhen(f: Int => Boolean): TokenCompletions
|
|
}
|
|
object TokenCompletions
|
|
{
|
|
private[sbt] abstract class Delegating extends TokenCompletions { outer =>
|
|
def completions(seen: String, level: Int, delegate: Completions): Completions
|
|
final def hideWhen(hide: Int => Boolean): TokenCompletions = new Delegating {
|
|
def completions(seen: String, level: Int, delegate: Completions): Completions =
|
|
if(hide(level)) Completions.nil else outer.completions(seen, level, delegate)
|
|
}
|
|
}
|
|
private[sbt] abstract class Fixed extends TokenCompletions { outer =>
|
|
def completions(seen: String, level: Int): Completions
|
|
final def hideWhen(hide: Int => Boolean): TokenCompletions = new Fixed {
|
|
def completions(seen: String, level: Int) =
|
|
if(hide(level)) Completions.nil else outer.completions(seen, level)
|
|
}
|
|
}
|
|
|
|
val default: TokenCompletions = mapDelegateCompletions((seen,level,c) => ctoken(seen, c.append))
|
|
|
|
def displayOnly(msg: String): TokenCompletions = new Fixed {
|
|
def completions(seen: String, level: Int) = Completions.single(displayStrict(msg))
|
|
}
|
|
def overrideDisplay(msg: String): TokenCompletions = mapDelegateCompletions((seen,level,c) => tokenDisplay(display = msg, append = c.append))
|
|
|
|
def fixed(f: (String, Int) => Completions): TokenCompletions = new Fixed {
|
|
def completions(seen: String, level: Int) = f(seen, level)
|
|
}
|
|
def mapDelegateCompletions(f: (String, Int, Completion) => Completion): TokenCompletions = new Delegating {
|
|
def completions(seen: String, level: Int, delegate: Completions) = Completions( delegate.get.map(c => f(seen, level, c)) )
|
|
}
|
|
} |