auto-lsp 0.1.0

A rust crate for creating AST and LSP servers powered by tree-sitter queries.
Documentation
auto-lsp-0.1.0 has been yanked.

Auto LSP

A Rust crate for creating Abstract Syntax Trees (AST) and Language Server Protocol (LSP) servers.

auto_lsp is designed to be as language-agnostic as possible, allowing any Tree-sitter grammar to be used.

Defining a simple AST involves two steps: writing the queries and then defining the corresponding AST structures in Rust.

Quick example

Let's say you have a toy language with a root node named document containing a list of function nodes, each containing a unique name.

A simple query file to capture the root document and function names:

(document) @document
(function
(name) @name) @function

The corresponding AST definition in Rust:

# use auto_lsp::core::ast::*;
# use auto_lsp::macros::seq;

#[seq(query_name = "document", kind(symbol()))]
struct Document {
functions: Vec<Function>
}

#[seq(query_name = "function", kind(symbol()))]
struct Function {
name: Name
}

#[seq(query_name = "name", kind(symbol()))]
struct Name {}  

Now that you have your AST defined, you can:

  • Implement the LSP traits and create a LSP server (with the lsp_server feature).
  • Add your own logic for testing purposes, code_generation, etc.

You can find more examples in the tests folder.

Features

  • assertions: Enable compile-time checks for conflicting queries.
  • deadlock_detection: Enable [parking_lot]'s deadlock detection (not compatible with wasm).
  • log: Enable logging. (uses [stderrlog])
  • lsp_server: Enable the LSP server (uses [lsp_server]).
  • python_test: Enable the python workspace mock for testing purposes.
  • rayon: Enable [rayon] support (not compatible with wasm).
  • wasm: Enable wasm support.