Thank you for your interest in contributing! This guide will help you get started.
- Java 21 (Zulu or any OpenJDK distribution)
- IntelliJ IDEA (Community or Ultimate) for development
- Familiarity with the Phel language
git clone git@github.com:phel-lang/phel-intellij-plugin.git
cd phel-intellij-plugin
./gradlew buildPluginOpen the project in IntelliJ IDEA and import as a Gradle project.
./gradlew runIdeThis launches a sandboxed IDE instance with the plugin loaded.
./gradlew test- Fork the repository and create a feature branch from
main. - Make your changes following the conventions below.
- Write tests for new features or bug fixes.
- Run the full build to ensure nothing is broken:
./gradlew clean test verifyPlugin buildPlugin - Submit a pull request against
main.
- Kotlin with official code style (
kotlin.code.style=official) - Follow IntelliJ Platform SDK conventions
- Use
PhelTypes.SYMBOL(notPhelTypes.SYM) in completion logic
- Unit tests go in
src/test/kotlin/org/phellang/unit/ - Integration tests go in
src/test/kotlin/org/phellang/integration/ - Integration tests should use IntelliJ's
BasePlatformTestCase/ light fixtures - JUnit 5 (Jupiter) with
useJUnitPlatform()
- Lexer source:
src/main/kotlin/org/phellang/language/Phel.flex - Grammar source:
src/main/kotlin/org/phellang/language/parser/Phel.bnf - After modifying
.flexor.bnf, regenerate:./gradlew generatePhelLexer generatePhelParser
- Never edit files in
src/main/gen/— they are auto-generated - Generated files are committed to the repo
All features (completions, inspections, annotators, etc.) must be registered in src/main/resources/META-INF/plugin.xml.
- Bug fixes
- New code inspections
- Improved completion / documentation
- Lexer/parser improvements for better Phel coverage
- Test coverage improvements
- Documentation improvements
Please use GitHub Issues to report bugs or request features. Include:
- IDE version and OS
- Plugin version
- Steps to reproduce
- Expected vs actual behavior
- Sample
.phelfile if applicable
Be respectful and constructive. This project follows the Contributor Covenant; by participating you are expected to uphold it.