sealed trait RegularLanguage extends Product with Serializable
RegularLanguage
is an implementation of "Parsing With Derivatives" (Might
et al. 2011) that is used for CLI tab completion. Unlike your usual regular
languages that are sets of strings of symbols, our regular languages are
sets of lists of tokens, where tokens can be strings or zio.cli.PrimType
instances. (If you think about it, zio.cli.PrimType.validate
is an
intensional definition of a set of strings.)
- Alphabetic
- By Inheritance
- RegularLanguage
- Serializable
- Serializable
- Product
- Equals
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Abstract Value Members
-
abstract
def
canEqual(that: Any): Boolean
- Definition Classes
- Equals
-
abstract
def
derive(token: String, cliConfig: CliConfig): UIO[RegularLanguage]
Calculate the Brzozowski derivative of this language with respect to the given string.
Calculate the Brzozowski derivative of this language with respect to the given string. This is an effectful function because it can call PrimType.validate (e.g., when validating file paths, etc.).
- token
The string to use for calculation of the Brzozowski derivative.
- returns
Brzozowski derivative wrapped in an UIO instance.
-
abstract
def
firstTokens(prefix: String, compgen: Compgen): UIO[Set[String]]
Returns a set consisting of the first token of all strings in this language that are useful for CLI tab completion.
Returns a set consisting of the first token of all strings in this language that are useful for CLI tab completion. For infinite or unwieldly languages, it is perfectly fine to return the empty set: This will simply not display any completions to the user.
If you'd like the cursor to advance to the next word when tab completion unambiguously matches the prefix to a token, append a space (" ") character to the end of the returned token. Otherwise, the cursor will skip to the end of the completed token in the terminal.
Some examples of different use cases:
- Completing file/directory names:
- Append a space to the ends of file names (e.g., "bippy.pdf"). This is because we want the cursor to jump to the next argument position if tab completion unambiguously succeeds.
- Do not append a space to the end of a directory name (e.g., "foo/"). This is because we want the user to be able to press tab again to gradually complete a lengthy file path.
- Append a space to the ends of string tokens.
You may be asking why we don't try to use the
-o nospace
setting ofcompgen
andcomplete
. The answer is they appear to be all or nothing: For a given tab completion execution, you have to choose one behavior or the other. This does not work well when completing both file names and directory names at the same time. - Completing file/directory names:
-
abstract
def
isNullable: Boolean
This is the delta (δ) predicate from "Parsing With Derivatives", indicating whether this language contains the empty string.
This is the delta (δ) predicate from "Parsing With Derivatives", indicating whether this language contains the empty string.
- returns
true if and only if this language contains the empty string.
-
abstract
def
productArity: Int
- Definition Classes
- Product
-
abstract
def
productElement(n: Int): Any
- Definition Classes
- Product
Concrete Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
- def *: RegularLanguage
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- def ?: Alt
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native() @IntrinsicCandidate()
-
def
contains(tokens: List[String], cliConfig: CliConfig): UIO[Boolean]
Checks to see if the input token list is a member of the language.
Checks to see if the input token list is a member of the language.
- returns
true if and only if
tokens
is in the language.
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
-
def
productIterator: Iterator[Any]
- Definition Classes
- Product
-
def
productPrefix: String
- Definition Classes
- Product
- def rep(min: Option[Int] = None, max: Option[Int] = None): RegularLanguage
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
- def |(other: String): RegularLanguage
- def |(other: RegularLanguage): RegularLanguage
- def ~(other: String): RegularLanguage
- def ~(other: RegularLanguage): RegularLanguage