Files
iris-context/docs/spec.md
T

2.1 KiB

Command Specification & Navigation (commands/core/spec.go)

The spec module is the "language parser" of IRIS. it understands the relationship between commands, subcommands, and flags.

Data Structures

  • Spec: The top-level definition (e.g., for git).
  • Subcommand: Recursively defined children (e.g., commit under git).
  • Generator: A function that provides dynamic content (like files or docker IDs).

The Lookup Algorithm

This is the most critical function in IRIS. It follows these steps:

  1. Tokenization: Splits "git commit -m" into ["git", "commit", "-m"].
    • Empty tokens (from a trailing space) indicate the user is ready for the next level of suggestions.
  2. Tree Walking: It starts at the root (git) and tries to match each following token against the current node's subcommands.
  3. Context Identification: Once it can't walk any further (e.g., a partial word or an option), it defines:
    • prefix: The path already traveled.
    • partial: The word currently being typed.
  4. Result Collection: It gathers all valid subcommands and options that match the partial prefix.

Example

Input: git com

  1. Tokens: ["git", "com"]
  2. Walk: Root is git.
  3. Next token com doesn't exactly match commit.
  4. Stop walking. partial = com.
  5. Suggestions: Look for subcommands of git starting with com.
  6. Return: git commit.

Shell Aliases & Priority

IRIS deeply integrates with your shell environment to provide a personalized experience:

  • Dynamic Alias Parsing: Scans .bashrc, .zshrc, and other configuration files for aliases.
  • Highest Priority: Shell Aliases are given top priority in the suggestion engine, appearing above manual specs and system commands.
  • Token Injection: If a root command is recognized as an alias (e.g., gr for go run), IRIS injects the expanded tokens into the lookup engine to provide accurate subcommand suggestions.
  • Display: Suggestions for aliases show the expanded command (e.g., tmux a -t) while noting the alias name in the description (e.g., alias: ta).