# Contributing
This is a rust project, but you can contribute as a rust developer as much as a JavaScript developer.
## Rust
You will find your way in the the source code: [`./src`](./src/).
To build the project:
```sh
cargo build
```
To run:
```sh
./target/debug/snakepipe # will show the help - you can use it is explained in the README
```
## JavaScript
The [`snakepipe render-browser`](./README.md#-you-can-mirror-your-playing-terminal-into-another-one-through-http) command launches a rust http server that serves some JavaScript code that connects to server-sent events and renders the game inside the browser.
The source code for the renderers is available at [`static/renderers`](static/renderers).
**You don't need rust to work on this part**. I made a nodejs development server that acts as the `snakepipe render-browser` command (that way, you also don't have to re-build the rust part each time you modify the frontend).
### Install
```sh
npm install
```
### Setup
Build the packages and retrieve a recorded party.
```sh
npm run build && npm run setup
```
### Run
```sh
npm run dev-server-sse
```
Go to [http://localhost:8080](http://localhost:8080).
## Shell completions
The `snakepipe` cli comes with a `generate-completions` command that will generate a completions script for either `bash`, `zsh` or `fish`.
To test the completions in local, you need `zsh` (I didn't provide a mechanism for the other shells - it works the same way), all you need to do is:
```sh
cargo build && source ./scripts/test-zsh-completions
```
The script will temporary add the completions for `snakepipe` to the current terminal tab - don't worry, none of your config file are modified, any modification will disappear once you close the current tab.
# Resources
- 📺 [Understand zsh completions](https://www.youtube.com/watch?v=BHxaUP0kz9w)