ee61d40872
P5 + P6 resolved (SPEC §11): Neovim 0.11+ and Vim 9.1+.
Universal Vim entry:
- plugin/nuwiki.vim dispatches Vim vs Neovim. Neovim path waits for
the user's `require('nuwiki').setup()` call; Vim path starts the
LSP client on `FileType vimwiki` and exposes `:NuwikiInstall`.
- ftdetect/nuwiki.vim associates `*.wiki` with the `vimwiki` filetype.
- ftplugin/nuwiki.vim sets commentstring + comments + formatoptions +
suffixesadd + iskeyword, with a clean `b:undo_ftplugin`.
- syntax/nuwiki.vim ships default `@vimwiki*` highlight links for the
semantic-token legend (with `level1..6` + `centered` modifiers),
plus a minimal regex fallback so static highlighting works before
the LSP attaches.
Lua glue (Neovim 0.11+):
- init.lua exposes setup() / install() / health() — wiring only per
SPEC §6.2.
- config.lua holds the §7.5 schema (wiki_root / file_extension /
syntax / log_level) and a tbl_deep_extend apply().
- lsp.lua registers via `vim.lsp.config{} + vim.lsp.enable` on 0.11+;
falls back to a FileType autocmd calling `vim.lsp.start` on older
builds. Root dir walks up for `.git` / `.nuwiki`, then uses
wiki_root.
- install.lua does target-triple detection (Linux gnu/musl x x86_64/
aarch64, macOS arm/x86, Windows), curl+tar download from the
release URL, cp/chmod into bin/, with a cargo fallback. Honours
`g:nuwiki_build_from_source`.
- health.lua implements `:checkhealth nuwiki` per §7.6.
VimL glue (Vim 9.1+):
- autoload/nuwiki/lsp.vim follows §7.4 preference order:
vim-lsp (calls `lsp#register_server`) → coc.nvim (prints the
coc-settings.json snippet) → error.
- scripts/download_bin.vim mirrors the Lua installer for Dein /
vim-plug build hooks — same target triples, same download →
fallback → cargo build chain.
Help: doc/nuwiki.txt with tags for install (lazy.nvim / vim-plug /
Dein), config options, health, LSP feature list, `:NuwikiInstall`.
Rust workspace unchanged this phase; 172 tests still green locally.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
67 lines
2.0 KiB
Markdown
67 lines
2.0 KiB
Markdown
# nuwiki
|
|
|
|
A Vim/Neovim plugin providing full vimwiki syntax support, implemented as a
|
|
Rust-based language server (LSP).
|
|
|
|
> **Status:** Phase 9 (editor glue) complete. Plugin installable via
|
|
> lazy.nvim / vim-plug / Dein; setup() + LSP wiring + binary downloader +
|
|
> :checkhealth ship. Only the release pipeline remains.
|
|
|
|
See [`SPEC.md`](./SPEC.md) for the full project specification.
|
|
|
|
## Implementation status
|
|
|
|
| Phase | Name | Status |
|
|
|---|---|---|
|
|
| 0 | Scaffolding | ✅ done |
|
|
| 1 | Core AST | ✅ done |
|
|
| 2 | Syntax Plugin Interface | ✅ done |
|
|
| 3 | Vimwiki Lexer | ✅ done |
|
|
| 4 | Vimwiki Parser | ✅ done |
|
|
| 5 | Renderer | ✅ done |
|
|
| 6 | LSP Foundation | ✅ done |
|
|
| 7 | Semantic Tokens | ✅ done |
|
|
| 8 | Navigation | ✅ done |
|
|
| 9 | Editor Glue | ✅ done |
|
|
| 10 | CI/CD release pipeline | ⏳ next |
|
|
|
|
## Repository layout
|
|
|
|
```
|
|
nuwiki/
|
|
├── Cargo.toml workspace root
|
|
├── crates/
|
|
│ ├── nuwiki-core/ parser, AST, renderer (no editor deps)
|
|
│ ├── nuwiki-lsp/ LSP protocol bridge
|
|
│ └── nuwiki-ls/ binary that speaks LSP over stdio
|
|
├── plugin/ universal Vim/Neovim entry point
|
|
├── lua/nuwiki/ Neovim Lua glue
|
|
├── autoload/nuwiki/ Vim VimL glue
|
|
├── ftdetect/ filetype detection for .wiki
|
|
├── ftplugin/ per-buffer filetype settings
|
|
├── syntax/ static fallback highlighting
|
|
├── doc/ `:h nuwiki`
|
|
├── scripts/ build-time helpers
|
|
└── .gitea/workflows/ CI / release pipelines
|
|
```
|
|
|
|
## Building
|
|
|
|
```sh
|
|
cargo build --workspace
|
|
cargo test --workspace
|
|
```
|
|
|
|
MSRV: Rust 1.83.
|
|
|
|
## License
|
|
|
|
Dual-licensed under either of:
|
|
|
|
- Apache License, Version 2.0 ([`LICENSE-APACHE`](./LICENSE-APACHE))
|
|
- MIT license ([`LICENSE-MIT`](./LICENSE-MIT))
|
|
|
|
at your option. Unless you explicitly state otherwise, any contribution
|
|
intentionally submitted for inclusion in this work shall be dual licensed as
|
|
above, without any additional terms or conditions.
|