split-module
Refatorar arquivo Rust grande em módulos menores usando AST (tree-sitter) + corte cirúrgico (sed)
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Refatorar arquivo Rust grande em módulos menores usando AST (tree-sitter) + corte cirúrgico (sed)
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
| name | split-module |
| description | Refatorar arquivo Rust grande em módulos menores usando AST (tree-sitter) + corte cirúrgico (sed) |
| disable-model-invocation | false |
| allowed-tools | Bash, Read, Grep, Glob, Edit, Write |
Divide um arquivo .rs monolítico em múltiplos módulos sem reescrever código manualmente. Usa tree-sitter para mapear a AST e sed para cortar cirurgicamente.
O caminho relativo do arquivo a ser dividido (ex: /split-module crates/fiscal-core/src/types.rs).
Verificar se o venv com tree-sitter existe:
/tmp/ts-venv/bin/python3 -c "import tree_sitter_rust" 2>/dev/null || {
python3 -m venv /tmp/ts-venv
/tmp/ts-venv/bin/pip install tree-sitter tree-sitter-rust
}
Rodar o script de mapeamento para listar todos os itens top-level com nome, tipo, visibilidade, linha inicial, linha final e tamanho:
/tmp/ts-venv/bin/python3 /tmp/ast_map.py <arquivo>
O script /tmp/ast_map.py deve ser criado se não existir. Ele usa tree-sitter para parsear o arquivo Rust e imprimir:
Com o mapa da AST, propor agrupamento em módulos ao usuário. Regras:
build_tax.rs, não part3.rs)Apresentar tabela ao usuário:
| Grupo | Itens | Linhas | Arquivo proposto |
Esperar aprovação do usuário antes de executar.
Para cada módulo:
sed -n 'START,ENDp'impl<...> Struct { antes e } depoisScript shell gerado automaticamente. Exemplo:
{
echo "//! Doc comment."
echo ""
echo "use super::helpers::*;"
echo ""
sed -n '100,250p' "$SRC"
} > "$DIR/modulo.rs"
Após o corte, resolver erros de compilação:
pub(super)use (não herda do módulo pai)mod.rs: substituir o arquivo original por um mod.rs (ou diretório com mod.rs) que declara os submódulos e re-exporta a API públicaProcesso iterativo:
cargo build → ler erros → corrigir → repetir
Correções comuns via sed em batch:
# Tornar funções pub(super)
sed -i 's/^fn foo(/pub(super) fn foo(/' arquivo.rs
# Adicionar import
sed -i '3a\use crate::xml_utils::escape_xml;' arquivo.rs
cargo build — deve compilar sem erroscargo clippy -- -D warnings — sem warningscargo test — mesmos testes passando (mesma contagem)git add + git commit. Mensagem no formato: refactor(escopo): split arquivo.rs into N modules (X lines). Sem isso o trabalho se perde quando a worktree for limpa.mv arquivo.rs arquivo.rs.bak até confirmar que compila#[allow(dead_code)] desnecessáriostypes.rs (3855 linhas) → types/
mod.rs (50) — re-exports
common.rs (320) — tipos compartilhados
issuer.rs (280) — IssuerData, RecipientData
item.rs (450) — InvoiceItemData, ProductOptions
tax.rs (400) — tipos de imposto
...