# Pest IDE Tools
_IDE support for [Pest](https://pest.rs), via the LSP._
This repository contains an implementation of the _Language Server Protocol_ in
Rust, for the Pest parser generator.
## Features
- Error reporting.
- Warnings for unused rules.
- Syntax highlighting definitions available.
- Rename rules.
- Go to rule declaration, definition, or references.
- Hover information for built-in rules and documented rules.
- Autocompletion of rule names.
- Inline and extract rules.
- Full-unicode support.
- Formatting.
- Update checking.
Please see the
[issues page](https://github.com/pest-parser/pest-ide-tools/issues) to suggest
features or view previous suggestions.
## Usage
You can find documentation on how to set up the server for in the `DOCS.md`
file.
### Supported IDEs
- [Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=pest.pest-ide-tools)
- VSCode has a pre-built extension that can compile, update, and start up the
language server. It also includes syntax highlighting definitions.
- The extension is also available on [OpenVSX](https://open-vsx.org/extension/pest/pest-ide-tools)
- Sublime Text
- Sublime Text packages can be obtained from [the latest release](https://github.com/pest-parser/pest-ide-tools/releases/latest)
- Vim
- Vim support is provided via the [pest.vim](https://github.com/pest-parser/pest.vim) package.
- Zed
- Zed support is provided via the [Zed Pest extension](https://github.com/pest-parser/zed-pest).
Due to the usage of the LSP by this project, adding support for new IDEs should
be far more achievable than a custom implementation for each editor. Please see
the [tracking issue](https://github.com/pest-parser/pest-ide-tools/issues/10) to
request support for another IDE or view the current status of IDE support.
## Development
This repository uses a [Taskfile](https://taskfile.dev); install the `task`
command for a better experience developing in this repository.
The task `fmt-and-lint` can be used to check the formatting and lint your code
to ensure it fits with the rest of the repository.
In VSCode, press `F5` to build and debug the VSCode extension. This is the only
method of debugging that we have pre set-up.
### Architecture
The server itself is implemented in Rust using `tower-lsp`. It communicates with
editors via JSON-RPC through standard input/output, according to the language
server protocol.
### Contributing
We appreciate contributions! I recommend reaching out on Discord (the invite to
which can be found at [pest.rs](https://pest.rs)) before contributing, to check
with us.
## Credits
- [OsoHQ](https://github.com/osohq), for their
[blog post](https://www.osohq.com/post/building-vs-code-extension-with-rust-wasm-typescript),
and open source code which was used as inspiration.
- [Stef Gijsberts](https://github.com/Stef-Gijsberts) for their
[Pest syntax highlighting TextMate bundle](https://github.com/Stef-Gijsberts/pest-Syntax-Highlighting-for-vscode)
which is used in this extension under the MIT license.