We welcome all kinds of contributions. You don't need to be an expert in API or rust development to help out.
Contributions to the build-test-run system and github workflows are also welcome! We love to learn from the expertise of the community 😄
Contributions are made through pull requests from a fork of the repo. Before sending a pull request, make sure to do the following:
- Build and format your code
- Write tests
- Run tests and check that they pass
Please reach out to the lsproxy team before starting work on a large contribution. Get in touch at GitHub issues or on Discord.
To build lsproxy from source, all you need is docker. But rust + rust-analyzer is recommended for getting lints in your IDE:
Building using docker is pretty simple. We have a build script for this purpose.
./scripts/build.sh
⚠️ The build script executes the build inside the docker container. It is not recommended and we do not officially support buildinglsproxylocally.
Before committing, make sure to format the code with
./scripts/fmt.sh
Running is also pretty simple (the no auth is optional but is easier to interact with locally).
./scripts/run.sh $WORKSPACE_PATH --no-auth
The run script also builds as well, so you can just use this single script if you're iterating in development.
⚠️ Like above the run script runslsproxyinside the docker container, we do not support runninglsproxydirectly on the host.
Good testing is essential to ensuring lsproxy continues to work for everyone! Whenever you're adding features or changing code please make sure to:
- Create new tests for any features or cases you add
- Ensure existing tests all pass
Test writing and adjustments should be done before opening a PR.
To run tests:
./scripts/test.sh
Ideally we would like to keep code coverage at the same level or higher. You can generate a code coverage report with the following:
./scripts/coverage_test.sh
This will create a coverage report that can be viewed with
open lsproxy/target/llvm-cov/html/index.html
Thanks in advance for your contributions and, most importantly, HAVE FUN!