Thank you for your interest in contributing to scip-lsp! This project provides Java code intelligence through SCIP (Source Code Intelligence Protocol) indices and language server capabilities.
- Bazel (use
bin/bazelwhich ensures Bazelisk is installed) - Direnv (helps keep environment up to date)
- JDK 11 or newer
- Bash shell
-
Clone the repository
git clone https://github.com/uber/scip-lsp.git cd scip-lsp -
Build the project
bazel build //...
-
Run tests
bazel test //...
- Use GitHub Issues to report bugs or request features
- Search existing issues before creating a new one
- Provide detailed information including:
- Steps to reproduce
- Expected vs actual behavior
- Environment details (OS, Java version, Bazel version)
- Relevant logs or error messages
- Fork the repository and create a feature branch
- Make your changes following the coding standards
- Add tests for new functionality
- Ensure all tests pass with
bazel test //... - Submit a pull request with a clear description
- Follow existing code conventions and style
- Write clear, self-documenting code
- Add appropriate comments for complex logic
- Ensure proper error handling
- Update relevant documentation
-
src/main/java/com/uber/scip/aggregator/- SCIP aggregator implementationAggregator.java- Main entry pointFileAnalyzer.java- Java file analysisscip/- SCIP-specific indexing logic
-
src/ulsp/- Language server implementation- See ulsp CONTRIBUTING.md for detailed guidance
- Plugin-based architecture for extensibility
-
src/scip-lib- Libraries for SCIP consumption used by the language serverscanner/- Fast implementation to quickly scan SCIP files for symbols without full proto parsingpartialloader/- Stores a prefix tree with available symbols and handles loading full occurence tables when necessaryregistry/- Implementation of a registry consumable for uLSP mapping LSP methods to calls into the Partial Registry
-
src/extension/- VS Code/Cursor extension -
bsp_server/- Python utilities for SCIP generation
This project uses Bazel with Bzlmod. Key files:
BUILD.bazel/BUILD- Build configuration filesMODULE.bazel- Module dependencies.bazelproject- IDE project configuration
- Plan your changes - Discuss significant changes in an issue first
- Update BUILD files when adding new source files
- Add tests for new functionality
- Update documentation as needed
- Write unit tests for new code
- Use existing test patterns and frameworks
- Ensure tests are deterministic and fast
- Run the full test suite before submitting PRs
- Minimize new external dependencies
- Justify any new dependencies in your PR description
- Update
MODULE.bazelfor new Maven dependencies
For contributions to the language server (src/ulsp/), see the dedicated contribution guide which covers:
- Plugin architecture
- LSP method implementation
- Session management
- Configuration and feature flags
- Releases are managed by project maintainers
- Follow semantic versioning
- Update version files and changelogs as appropriate
- Check existing documentation and issues
- Ask questions in GitHub Discussions or issues
- Be patient and respectful in all interactions
By contributing to this project, you agree that your contributions will be licensed under the same license as the project.