First off, thank you for considering contributing to PooLang! It's people like you that make PooLang such a fun project to build.
By participating in this project, you agree to abide by the standard open-source community terms: be respectful, inclusive, and professional.
- Use the GitHub Issues tab.
- Describe the expected behavior and the actual behavior.
- Provide a minimal reproduction script (a
.poofile) if possible.
- Open an issue with the "feature request" tag.
- Explain why this feature would be useful for PooLang.
- Note that PooLang aims to stay "tiny" and "minimalist," so we prioritize features that align with that philosophy.
- Fork the repo and create your branch from
main. - Follow the TDD approach: If you're adding a feature or fixing a bug, add a test case to
tests/language_specs.rsfirst. - Ensure tests pass: Run
cargo testto verify your changes. - Format your code: Use
cargo fmtto keep the codebase clean. - Write a good commit message: We prefer Conventional Commits (e.g.,
feat: add support for modulo operator).
- Clone your fork:
git clone https://github.com/YOUR_USERNAME/poolang.git cd poolang - Build and Run:
cargo build cargo run examples/app.poo
- Run Specs:
cargo test
- Lexer (
src/lexer.rs): Converts source text into a stream of tokens. - Parser (
src/parser.rs): Consumes tokens and builds an Abstract Syntax Tree (AST). - Interpreter (
src/interpreter.rs): Walks the AST and executes the logic. - AST (
src/ast.rs): Defines the structure of the language.
- Naming: We use standard Rust naming conventions (
snake_casefor variables/functions,PascalCasefor types). - Terminology: The name
Poocomes from the Burmese word for Guinea Pig. Feel free to use Guinea Pig related puns in your documentation!
If you have questions, feel free to reach out via GitHub issues. Happy coding!