pmacs/src/lib.rs

145 lines
4.5 KiB
Rust

// lib.rs --- Pmacs library root. Declares the editor's module structure.
//! Pmacs core library.
//!
//! This crate is the in-process Rust core of the Pmacs editor. The binary in
//! `src/main.rs` wires the modules together; tests and benchmarks exercise
//! them directly.
//!
//! Module map (mirrors spec Chapter 3, "The Buffer Model"):
//! * [`rope`] --- persistent byte-addressed sequence
//! * [`buffer`] --- rope + identity + views + undo
//! * [`buffer_registry`] --- owned-Buffer storage behind opaque IDs (M2)
//! * [`command`] --- editor command registry (M2)
//! * [`view`] --- the View trait, polymorphic interpretive layer
//! * [`text_view`] --- the plain-text View implementation
//! * [`cell`] --- cell-grid rendering target
//! * [`frontend`] --- TUI backend (crossterm)
//! * [`file_io`] --- file load and atomic save
//! * [`editor_core`] --- mutable world state shared between Rust and Lua (M2.5)
//! * [`key`], [`keymap_tree`], [`keymap_stack`] --- chord parsing, trie, and dispatcher (M2.4)
//! * [`lua`] --- Lua VM owner (M2)
//! * [`lua_bindings`] --- hand-curated Lua surface (R51)
//! * [`worker`] --- work-stealing pool with cooperative cancellation (M3.1)
//! * [`message_bus`] --- typed in-process bus with `MessagePack` codec (M3.2)
//! * [`async_runtime`] --- main-thread dispatcher + tick over the bus (M3.3)
//!
//! # Lua flavor features (audit F-002)
//!
//! Exactly **one** Lua flavor must be enabled: `luajit` (the default) **or**
//! `lua54`. They select `mlua`'s mutually-exclusive Lua backends, so
//! enabling both — most commonly via `--all-features` — or neither is a
//! hard build error. The `crdt` feature is orthogonal and composes with
//! either flavor. See the feature matrix in `README.md` / `Cargo.toml`.
//!
//! Note: a misconfigured flavor set surfaces as an **`mlua-sys` build-script
//! error** ("You can enable only one of the features: …"), not a
//! pmacs-labeled one. That check lives in a *dependency*, which cargo
//! compiles before this crate, so pmacs cannot intercept it with its own
//! `compile_error!` — the mitigation is the documented matrix (don't reach
//! for `--all-features`; build an explicit flavor).
pub mod ansi;
pub mod async_runtime;
pub mod attach;
pub mod attach_dispatch;
pub mod attach_reconnect;
pub mod audit;
pub mod autosave;
pub mod buffer;
pub mod buffer_registry;
pub mod builtin_packages;
pub mod cell;
pub mod code_action;
pub mod command;
pub mod completion;
pub mod completion_framework;
pub mod config;
pub mod config_registry;
// T M10.2: CRDT-backed buffer state. Feature-gated so v0.1 builds
// carry zero overhead — the `loro` dependency isn't pulled in, no
// field on the Buffer struct layout, no branch on `apply_edit`.
#[cfg(feature = "crdt")]
pub mod crdt;
// T M10.10: frontend-side CRDT replica for optimistic local edits.
// Gated on `crdt` because BufferMirror wraps `CrdtState`.
#[cfg(feature = "crdt")]
pub mod buffer_mirror;
pub mod daemon;
pub mod daemon_attach;
pub mod definition;
pub mod desktop;
pub mod diag;
pub mod display_width;
pub mod document_highlight;
pub mod editor;
pub mod editor_core;
pub mod file_io;
pub mod fold;
pub mod fold_view;
pub mod font_pref;
pub mod formatting;
pub mod frontend;
pub mod fs;
mod hash;
pub mod help;
pub mod highlight;
pub mod hook;
pub mod hover;
pub mod inlay_hint;
pub mod instance_buffer;
pub mod instance_render;
pub mod key;
pub mod keymap_stack;
pub mod keymap_tree;
pub mod locations;
pub mod lockfile;
pub mod lsp;
pub mod lsp_status;
pub mod lua;
pub mod lua_bindings;
pub mod lua_isolation;
pub mod mcp;
pub mod menu;
pub mod message_bus;
pub mod minibuffer;
// T M10.10: frontend-side optimistic-apply infrastructure (predicate
// + echo-dedup filter). Gated on `crdt` because it consumes
// BufferMirror.
#[cfg(feature = "crdt")]
pub mod optimistic;
pub mod overlay;
pub mod overlay_color;
pub mod overlay_paint;
pub mod packages;
pub mod prepare_rename;
pub mod presence;
pub mod process;
pub mod project;
pub mod project_index;
pub mod protocol;
pub mod rename;
pub mod rope;
pub mod search;
// T M11.5 — the headless semantic consumer composes BufferMirror +
// optimistic (both `crdt`-gated) and is only meaningful on a
// `semantic_render` session, which the negotiation dependency rule
// ties to `crdt_replica`. Gated to match.
#[cfg(feature = "crdt")]
pub mod semantic_client;
pub mod semantic_render;
pub mod semantic_tokens;
pub mod signature;
pub mod socket_path;
pub mod state;
pub mod statusline;
pub mod symbol;
pub mod syntax;
pub mod terminal;
pub mod text_view;
pub mod transport;
pub mod view;
pub mod window;
pub mod worker;
pub mod workers_buffer;