39 lines
1.2 KiB
Markdown
39 lines
1.2 KiB
Markdown
## Visão de arquitetura alvo
|
|
|
|
### Camadas
|
|
|
|
1. **FileDB**: texto, URI/path, line-index, snapshots.
|
|
2. **Lexer/Parser**: produz **AstArena** (NodeId + spans por nó).
|
|
3. **Binder/Resolver**: produz **SymbolArena** + índices (def/ref).
|
|
4. **Typecheck**: produz **TypeArena** + facts (node→type, symbol→type).
|
|
5. **Analysis Export**: `analysis.json` (full) + `symbols.json` (leve e estável).
|
|
6. **LSP Server**: consome `AnalysisDb` e responde requests.
|
|
|
|
### IDs padronizados (newtypes)
|
|
|
|
* `FileId(u32)`
|
|
* `NodeId(u32)`
|
|
* `NameId(u32)` (interner)
|
|
* `SymbolId(u32)`
|
|
* `TypeId(u32)`
|
|
* `ProjectId(u32)`
|
|
* `ModuleId(u32)`
|
|
|
|
### Invariantes
|
|
|
|
* AST é **imutável** após construção (normativo na spec PBS).
|
|
* Nenhuma fase expõe referências diretas entre nós; apenas **IDs**.
|
|
* IDs externos são aceitos, mas sempre passam por **validate/resolve** (API checked).
|
|
|
|
---
|
|
|
|
## Regras para Junie (para reduzir vai-e-volta)
|
|
|
|
1. Não “inventar design”. Se algo não estiver especificado, **criar TODO** e parar.
|
|
2. Não mudar formatação/estilo fora do escopo.
|
|
3. Todo novo tipo público precisa de doc-comment curta e exemplo.
|
|
4. Toda mudança de JSON precisa:
|
|
|
|
* `schema_version` bump (se não for backward)
|
|
* teste de snapshot
|
|
5. Cada PR deve deixar `cargo test` verde. |