Guia de Fontes
Esta página é um mapa para colaboradores que precisam alterar o código-fonte em vez de usar apenas o Vize. Comece pelo Architecture Overview quando precisar do diagrama de relacionamento de alto nível, depois use este guia para encontrar os arquivos de implementação que possuem um comportamento.
Formato do Repositório
O Vize mantém a maior parte do comportamento do produto no espaço de trabalho Rust, com os pacotes JavaScript atuando como camadas distribuição e integração.
| Caminho | O que vive lá |
|---|---|
crates/ |
Rust crates para análise sintática, análise, compilação, linting, formatação, verificação de tipos, LSP, CLI e bindings nativos |
npm/ |
Pacotes JavaScript para Vite, Nuxt, extensões de editores, integrações com Musea e wrappers de pacotes publicados |
docs/ |
Documentação para usuários, notas de arquitetura, notas de atualização e o tema do site docs |
tests/ |
Fixtures cross-package, projetos do mundo real, testes de ferramentas e governança snapshot |
bench/ |
Scripts de comparação de desempenho e fiscalização de benchmarks de PR |
tools/ |
Automação de repositórios que não faz parte do produto enviado |
Quando uma mudança cruza diretórios, o proprietário geralmente é a camada que cria o comportamento
visível para o usuário. Por exemplo, uma alteração de saída do compilador pertence a crates/, mesmo quando a reprodução vem de
um teste de pacote npm.
Pipeline de Linguagem
A maioria das alterações de origem segue o mesmo fluxo de dados:
A regra compartilhada é simples: analise uma vez, mantenha o modelo sintático comum e depois deixe cada superfície de produto adicionar apenas o comportamento que possui.
Pontos de Entrada na Caixa
| Área de mudança | Comece aqui | Então verifique |
|---|---|---|
| Análise sintática de templates | crates/vize_armature/src/lib.rs |
Fixtures do parser e snapshots AST esperados |
| Forma AST e opções do compilador | crates/vize_relief/src/lib.rs |
Compiladores posteriores, chamadas LINT e Formatter |
| Semântica de template | crates/vize_croquis/src/lib.rs |
helpers de escopo, vinculação, reatividade e TypeScript virtual |
| Comportamento do compilador compartilhado | crates/vize_atelier_core/src/lib.rs |
Caixas de ateliê específicas para backend |
| Saída do modelo de cliente | crates/vize_atelier_dom/src/lib.rs |
snapshots de código gerados e testes de fixture em tempo de execução |
| Saída de vapor | crates/vize_atelier_vapor/src/lib.rs |
Regras específicas de vapor e saída de jogos do mundo real |
| Saída SSR | crates/vize_atelier_ssr/src/lib.rs |
Snapshots SSR, fuga e comportamento de hidratação |
| Orquestração SFC | crates/vize_atelier_sfc/src/lib.rs |
script, template, style, HMR e caminhos de source-map |
| Regras de fiapos | crates/vize_patina/src/lib.rs |
Snapshots de regras e diagnósticos localizados |
| Verificação de tipos | crates/vize_canon/src/lib.rs |
gerou TS virtual e diagnósticos corsa-bind |
| Comportamento dos LSP | crates/vize_maestro/src/lib.rs |
Manipuladores de servidores, documentos virtuais e testes de fumaça do editor |
| Formatação | crates/vize_glyph/src/lib.rs |
Instantâneos dourados de formatação |
| Fixações nativas e WASM | crates/vize_vitrine/src/lib.rs |
Envelopes de pacotes NPM e declarações de tipo geradas |
| Comportamento da CLI | crates/vize/src/main.rs |
módulos de comando, snapshots e testes de integração build/check/lint |
Prefiro seguir o ponto de entrada da caixa pública primeiro. Muitas caixas possuem módulos compactos lib.rs que
reexportar os módulos internos que o contribuinte deve tocar.
Pontos de Entrada de Pacotes JavaScript
| Pacote | Entrada de fonte | Limite de ferrugem |
|---|---|---|
@vizejs/vite-plugin |
npm/builder/vite/src/index.ts |
@vizejs/native por vize_vitrine |
@vizejs/nuxt |
npm/framework/nuxt/src/index.ts |
Opções de plugins Vite e integração de componentes |
@vizejs/wasm |
gerado pacotes por volta de vize_vitrine exportações WASM |
crates/vize_vitrine/src/wasm |
@vizejs/vite-plugin-musea |
npm/builder/vite-musea/src/index.ts e código de pacote relacionado |
vize_musea APIs expostas por meio de bindings |
oxlint-plugin-vize |
npm/oxint/src/index.ts |
vize_patina diagnóstico por meio de fixações |
Use testes de pacote para fiação de integração, mas mantenha a semântica da linguagem nos testes Rust. A camada pacote deve provar principalmente que opções, módulos virtuais, HMR e chamadas nativas estão conectadas.
Fluxo de Trabalho de Mudança
Encontre a caixa ou pacote que possui nas tabelas acima.
Adicione o menor aparelho ou snapshot que comprove o comportamento.
Execute o comando estreito para esse dono.
Amplie para verificações de pacotes, do mundo real, de navegador, benchmarks ou GitHub Actions quando a mudança atravessa uma superfície pública.
Para trabalhos voltados para a linguagem, siga a matriz de evidências em Language Engineering Practices. Para responsabilidades de de caixas e mapeamento de pacotes, use o Crate Reference.
Comprimento da Fonte
Procure manter os arquivos-fonte manuscritos com 350 linhas ou menos. O repositório ainda possui exceções históricas , então a primeira proteção é incremental: uma pull request não deve adicionar um novo arquivo de limite passar do limite ou expandir um arquivo de limite acima do limite.
Faça o inventário localmente com:
vp run --workspace-root source:lengths
O trabalho test:scripts GitHub Actions roda a mesma ferramenta MoonBit no modo check contra o commit de pull
request base. Arquivos gerados, snapshots, fixtures, lockfiles, saída do fornecedor, output de cobertura,
e diretórios de build são excluídos do inventário de origem. Quando uma exceção existente precisa de trabalho,
prefere dividir primeiro por limite de propriedade: helpers, fixtures, snapshots e command handlers
geralmente são melhores alvos de extração do que estruturas de dados compartilhadas.
Scripts de Ferramentas
A automação de repositórios prefere pacotes de comandos MoonBit sob tools/moon/cmd/. Eles executam o caminho normal
do pacote (moon run --target native tools/moon/cmd/<name> -- <args>), compartilham a
da cadeia de ferramentas que já constrói o compilador e são cobertos por suítes tests/tooling/*.test.ts que os
via moon run e afirmam a saída esperada completa. As tarefas raiz as invocam com o ajudante moonScript
em tools/vite-plus/task-commands.ts, então cada consumidor mantém um nome de tarefa estável em vez de
um comando inline.
Bons candidatos ao MoonBit são pequenos, puros e com pouca dependência: análise sintática de argumentos, transformações de
de JSON ou texto, inventários e verificações de aprovação/reprovação, cuja correção pode ser comprovada com um teste moon run .
Mantenha um script em Node (.mjs) quando o MoonBit adicionaria atrito em vez de removê-lo:
Ele é importado como módulo por outro JavaScript ou por uma suíte
node --test(por exemplo,tools/github/release-platforms.mjs), então reescrevê-lo dividiria uma fonte em dois idiomas.Depende do ecossistema npm (bibliotecas globbing, ferramentas de pacotes, SDKs de ação do GitHub) ou de APIs exclusivas para nós que não têm equivalente ao MoonBit.
É grande ou exploratório o suficiente para que seu comportamento ainda não seja definido por um teste de saída completa; Não migrar qualquer coisa que possa quebrar o IC sem esse tipo de teste.
Leitura da Saída Gerada
As alterações no compilador e na ferramenta são revisadas por meio de artefatos gerados. Trate essas saídas como o contrato :
Snapshots do compilador de templates mostram JavaScript emitido e forma de otimização.
Snapshots de lint mostram intervalos de diagnóstico, mensagens e metadados de regras.
Snapshots de verificação de tipos mostram TypeScript virtual e diagnósticos mapeados.
Snapshots de formatador mostram exatamente a saída que os usuários vão ver.
Snapshots reais de dispositivos mostram se aplicações amplas ainda são construídas e executadas.
Se a saída mudar apenas por causa de caminhos, tempos, ordenação, hashes ou dados específicos do host, normalize a fonte antes de atualizar snapshots.
Quando Em Dúvida
Pequenas mudanças na fonte devem deixar um rastro claro: possuir caixa, luminária, snapshot, verificação comando e qualquer faixa de CI mais ampla que importe. Se uma mudança parecer pertencer a múltiplas caixas, começar pela representação compartilhada mais cedo e manter as camadas posteriores como adaptadores finos.