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
...