Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/silvanshade/tower-lsp-web-demo
A minimal wasm demo with an in-browser editor and language server built with tower-lsp
https://github.com/silvanshade/tower-lsp-web-demo
browser jsonrpc lsp-server rust wasm webassembly
Last synced: 4 days ago
JSON representation
A minimal wasm demo with an in-browser editor and language server built with tower-lsp
- Host: GitHub
- URL: https://github.com/silvanshade/tower-lsp-web-demo
- Owner: silvanshade
- License: other
- Created: 2022-05-29T21:28:04.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-02-03T17:27:55.000Z (9 months ago)
- Last Synced: 2024-08-02T17:39:20.862Z (3 months ago)
- Topics: browser, jsonrpc, lsp-server, rust, wasm, webassembly
- Language: Rust
- Homepage:
- Size: 1.57 MB
- Stars: 32
- Watchers: 1
- Forks: 6
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
tower-lsp-web-demo
A minimal browser-hosted WASM demo for tower-lsp
## Demo
You can experiment with a live demo of the example server integrated with an in-browser editor here:
https://silvanshade.github.io/tower-lsp-web-demo/
## Building
```sh
cargo install cargo-make
cargo make deps
cargo make build
```## Running
```sh
cargo make run
```## Project Structure
The server implementation:
```
crates
├── browser -- entry-point for launching the server in the browser
│ └── src
│ └── lib.rs
├── language -- handles definitions for working with tree-sitter javascript grammar
│ └── src
│ ├── language.rs -- handles loading the pre-compiled tree-sitter-javascript.wasm blob
│ ├── lib.rs
│ └── parser.rs -- creates tree-sitter parsers from the loaded grammar blob
└── server
└── src
├── core
│ ├── document.rs -- definitions for working with document related data
│ ├── error.rs
│ ├── session.rs -- definitions for lsp session and related state
│ ├── syntax.rs -- definitions for updating syntax text area in browser
│ └── text.rs -- definitions for handling text and edits
├── core.rs
├── handler.rs -- definitions for various feature handlers
├── lib.rs
└── server.rs -- definitions for the lsp server and impl of tower-lsp trait
```The webapp and client implementation for wiring up the Monaco editor to communicate with the server:
```
packages
└── app
└── src
├── app.ts -- the browser app which launches the client and server and displays the user interface
├── client.ts -- definitions for the lsp client
├── codec -- definitions for encoding and decoding/demuxing messages between the client and server
│ ├── bytes.ts -- utilities for working with Uint8Array
│ ├── demuxer.ts -- demuxer for splitting output from server into streams of notifications, requests, and responses
│ ├── headers.ts -- utilities for working with http headers
│ ├── map.ts -- map for storing responses from server yet to be processed (fed by demuxer)
│ └── queue.ts -- promise based queue used for storing notifications and requests
├── index.ts
├── language.ts -- definition for the javascript language (e.g., language id, extensions, mime, etc.)
├── queue.ts -- promise based queue structure
├── server.ts -- prepares client->server and client<-server web streams and launches tower-lsp server
└── tracer.ts -- utilities for tracing JSON-RPC messages and displaying in browser interface
```