Obrigado pelo interesse em contribuir! Leia este guia antes de abrir uma issue ou pull request.
- Verifique se já existe uma issue aberta para o problema ou feature.
- Para mudanças significativas, abra uma issue primeiro para discutir a abordagem antes de implementar.
- Ao contribuir, você concorda que seu código será licenciado sob os mesmos termos da licença do projeto.
Pré-requisitos:
- Rust stable (
rustup install stable)
git clone https://github.com/NullSablex/PawnPro-Engine
cd pawnpro-engine
cargo buildExecutar testes:
cargo testLint (obrigatório antes de PR):
cargo clippy --all-targets -- -W clippy::pedantic -D warningsBuild release:
cargo build --releaseO binário de debug é detectado automaticamente pela extensão PawnPro se estiver em ../pawnpro-engine/target/debug/.
src/
parser/ ← lexer, parser de símbolos e tipos
analyzer/ ← diagnósticos PP0001–PP0019
intellisense/ ← completions, hover, signature, codelens, references, semantic tokens, formatter
workspace.rs ← orquestra análise de cada arquivo
server.rs ← handlers LSP
config.rs ← configuração recebida via initializationOptions
docs/ ← documentação detalhada (não incluída nos releases)
- Zero
unwrap()em código de produção fora deLazy::new. Usar?,if let,unwrap_or. - Nunca
panic!em caminhos de análise — o motor precisa sobreviver a qualquer entrada malformada. - Regexes sempre como
static Lazy<Regex>— nunca compilar dentro de loops. - Nunca interpolar input não escapado em
Regex::new. cargo clippy --all-targets -- -W clippy::pedantic -D warningsdeve passar sem erros — obrigatório.- Novos diagnósticos sempre com constante em
analyzer/codes.rs. - Funções utilitárias de texto em
parser/lexer.rs— não duplicardecode_bytes,strip_line_comments,update_brace_depthoupragma_deprecated_messageem outros módulos.
- Adicionar constante em
analyzer/codes.rs:pub const PP00XX: &str = "PP00XX"; - Implementar a lógica no analyzer correspondente (ou criar novo em
analyzer/). - Chamar o novo analyzer em
analyzer/mod.rsdentro deanalyze(). - Adicionar testes unitários.
- Documentar em
docs/diagnostics.md.
- Crie um branch a partir de
main:git checkout -b feat/minha-feature - Faça as alterações seguindo as regras acima.
- Certifique-se que
cargo clippy --all-targets -- -W clippy::pedantic -D warningsecargo testpassam. - Abra a PR com uma descrição clara do que foi alterado e por quê.
Inclua na issue:
- Versão do motor (tag do release ou hash do commit)
- Sistema operacional e arquitetura
- Exemplo mínimo de arquivo
.pwnque reproduz o problema - Diagnóstico incorreto ou comportamento inesperado observado
Abra uma issue com o label enhancement descrevendo:
- O problema que a feature resolveria
- Como você imagina que funcionaria no contexto do LSP
- Alternativas que você considerou