Language Server

LOGOS ships an LSP server with 14 features across four categories. The server runs as largo lsp over stdio, maintaining per-document state with full re-analysis on every keystroke.

Code intelligence: diagnostics (real-time parse and analysis errors), hover (type info, verb class, tense, aspect), and semantic tokens (keyword, variable, function, struct, string, number classifications with delta encoding).

Navigation: go to definition, find references, document symbols (outline view), and code lens (inline reference counts above definitions).

Refactoring: rename (with prepare-rename validation) and code actions (extract to function, dead code elimination).

Editing: completions (triggered on ., :, '), signature help (triggered on with, ,), inlay hints (inferred types, parameter names), folding ranges, and formatting.

Token resolution handles the full range of name-bearing token types: Identifier, ProperName, Noun, Adjective, and Verb. A variable named x might be lexed as Adjective(Symbol) rather than Identifier — the server resolves this uniformly through a centralized resolve_token_name() function.

VSCode Extension

The extension bundles pre-compiled LSP binaries for 5 platform targets: x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu, x86_64-apple-darwin, aarch64-apple-darwin, and x86_64-pc-windows-msvc. Installation is zero-configuration. TextMate grammars handle syntax highlighting; semantic token overrides from the LSP provide meaning-aware coloring.

FFI / C Export System

Functions marked is exported get C-linkage wrappers for consumption by C, C++, Python (via ctypes/cffi), and any language with a C FFI:

## To add (a: Int) and (b: Int) -> Int is exported:
Return a + b.

The codegen emits #[export_name = "logos_add"] pub extern "C" fn with std::panic::catch_unwind boundaries. Integer and float parameters pass directly; text parameters marshal through *const c_char input / *mut *mut c_char output with null-pointer validation. A LogosStatus enum (Ok, NullPointer, ThreadPanic, etc.) communicates errors. Collections and structs cross the boundary as opaque LogosHandle pointers with typed accessor functions (logos_seq_i64_push, logos_person_age, etc.).

CI/CD

Three GitHub Actions workflows ship with v0.8.0:

  • Release: builds platform binaries and the VSCode extension .vsix on tag push
  • Publish: publishes all workspace crates to crates.io in dependency order
  • Deploy: builds the WASM frontend and deploys to production

The publish workflow handles the lockstep versioning scheme — all 11 crates share a single version number and publish atomically.