feat(shuma): shuma-line — el cerebro agnóstico del input del shell

Análisis de la línea de comandos bash, listo para GUI o TUI:
- lexer: tokeniza + clasifica (comando vs argumento por etapa),
  reconoce comillas, variables, tuberías, redirecciones, operadores.
- pipeline: descompone la línea en etapas separadas por |.
- complete: autocompletado posicional (comando / flag / ruta) con
  CompletionSource inyectable; diccionario de flags por comando.
- LineState: input editable UTF-8-safe (cursor, motions, completado).
- Dialect conmutable (bash hoy; zsh/fish/python a futuro).

32 tests. #![forbid(unsafe_code)], cero deps de UI.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-20 18:08:26 +00:00
parent 2b340fdf40
commit cf337c88d7
11 changed files with 1902 additions and 0 deletions
@@ -0,0 +1,25 @@
//! El dialecto de la línea — qué sintaxis se analiza.
//!
//! Hoy sólo Bash. El tipo existe para que el shell pueda, más adelante,
//! conmutar a zsh/fish/python sin que los consumidores cambien: el
//! analizador despacha sobre el `Dialect` y cada nuevo dialecto entra
//! con su propio lexer.
use serde::{Deserialize, Serialize};
/// Sintaxis con la que se interpreta la línea de comandos.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
pub enum Dialect {
/// Shell Bourne-again — el dialecto inicial.
#[default]
Bash,
}
impl Dialect {
/// Nombre legible del dialecto.
pub fn name(self) -> &'static str {
match self {
Dialect::Bash => "bash",
}
}
}