Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

wave-agape

wave-agape is the shared Language Server Protocol implementation for the Wave programming language. It runs over stdio and is designed to be consumed by both the Wave IntelliJ plugin and the Wave Visual Studio Code extension.

Language features

  • Wave lexer and parser diagnostics
  • UTF-16-correct source positions
  • Workspace-wide .wave file indexing
  • Completion for keywords, types, symbols, and document identifiers
  • Hover and go to definition
  • Clickable local imports with import target diagnostics and navigation
  • Document and workspace symbols
  • Find references and document highlights
  • Prepare rename and workspace rename
  • Signature help
  • Full document synchronization and open/change/close lifecycle handling

v0.2.0 treats local import("module"); paths as first-class document links. Hover and go to definition work on the quoted path, and a missing local module is reported without incorrectly applying file-local semantic validation to symbols supplied by imports.

The module resolver mirrors wavec:

  • import("local/path"); resolves relative to the importing file.
  • import("std::io::format"); resolves below ~/.wave/lib/wave/std.
  • import("package::module"); resolves from dependency roots using both package/module.wave and package/src/module.wave layouts.

WAVE_STDLIB_PATH overrides the standard-library directory and WAVE_DEP_ROOTS supplies platform-separated dependency roots. LSP clients can also pass imports.standardLibraryPath, imports.dependencyRoots, and an imports.dependencies package-to-directory map in initialization options. Relative configured paths use the first workspace folder as their base, and a workspace .vex/dep directory is discovered automatically.

The server intentionally leaves syntax highlighting to the editor clients.

Build

The Wave frontend revision is pinned in Cargo.toml and Cargo.lock for reproducible builds.

cargo build --release

The resulting executable is target/release/wave-agape (wave-agape.exe on Windows). The executable takes LSP messages from stdin and writes LSP messages to stdout. Logs are written only to stderr.

wave-agape --version
RUST_LOG=wave_agape=debug wave-agape

Verify

cargo fmt --all -- --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test --all-targets --all-features

The fallback-only build, which omits the upstream Wave frontend, can be checked with:

cargo check --no-default-features --features fallback

Editor integration

Clients should launch wave-agape without arguments using stdio, select files with the wave language ID or .wave extension, and pass workspace folders in the initialize request.

During development, put the release executable on PATH. The companion editor plugins also support an explicit server path:

  • VS Code: wave.languageServer.path
  • IntelliJ: WAVE_AGAPE_PATH environment variable

For released editor packages, a platform-specific wave-agape executable can be bundled and selected by the client instead of requiring a global install.

The CI workflow builds x64 Linux and Windows executables plus x64 and Apple Silicon macOS executables, retaining them as GitHub Actions artifacts. Public distribution is handled by the editor marketplaces rather than a separate GitHub Release.

License

MPL-2.0, matching the Wave language frontend.

About

Wave Language Server Protocol

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages