# openscad-language-server openscad-language-server is an [LSP](https://microsoft.github.io/language-server-protocol/) (Language Server Protocol) server for [OpenSCAD](https://openscad.org). It enables IDE-style features for OpenSCAD code in any editor for which an LSP client is available---i.e., [most major modern text editors](https://langserver.org/#implementations-client). *Status*: Pretty basic by IDE standards, but functional and well beyond what the built-in OpenSCAD editor provides. Tested primarily with [lsp-mode](https://emacs-lsp.github.io/lsp-mode/) on [Emacs](https://www.gnu.org/software/emacs/) on Linux. ## Features - context-aware completion - insertion of useful snippets upon completion - live diagnostic messages for syntax errors - function/module signatures on hover - handling of `include`/`use` (of both local and library files) - reasonable robustness in the presence of ill-formed input files ## Installation openscad-language-server is written in [Rust](https://rust-lang.org) and does not depend on OpenSCAD. Currently, in order to use it, you need to [have a Rust toolchain installed](https://www.rust-lang.org/learn/get-started). To install the server from [crates.io](https://crates.io) (puts the binary into `~/.cargo/bin/openscad-language-server`): ``` sh cargo install openscad-language-server ``` To build directly from the repository (puts the binary into `target/release/openscad-language-server` in the clone): ``` sh git clone https://github.com/dzhu/openscad-language-server cd openscad-language-server cargo build --release ``` ## Usage Consult the documentation for your editor and its LSP client to configure them to use the server binary for OpenSCAD files. The server communicates over standard input/output. ## Acknowledgments Parsing of OpenSCAD code is handled by [tree-sitter](https://tree-sitter.github.io) and [tree-sitter-openscad](https://github.com/bollian/tree-sitter-openscad). Communicating over LSP is handled by [lsp-server](https://github.com/rust-analyzer/lsp-server). Having those crates handling all the dirty details of interacting with the outside world has made it possible to get started on this project quite quickly and stay focused on the interesting parts in the middle. ## Related work - (PR for adding LSP server functionality into OpenSCAD itself) - (plugin for VSCode) - (plugin for IntelliJ IDEs) - (syntax for Sublime Text) - (only a skeleton, no functionality)