TypeScript Academy · Aula

Percorrendo o AST com visitantes

Percorra os nós da árvore sintática para analisar a estrutura do código

Aula 2 de 413 etapas

Percorrendo o AST com visitantes é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de TypeScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de TypeScript Academy inclui 4 aulas no total.

O que é a AST?

O TypeScript analisa o código-fonte em uma Árvore de Sintaxe Abstrata (AST) — uma árvore de nós que representam construções da linguagem, como variáveis, funções e expressões.

import ts from "typescript";
const sf = ts.createSourceFile(
  "example.ts",
  "const x = 1;",
  ts.ScriptTarget.Latest
);

Tipos de nós

Cada nó da AST tem uma propriedade kind, um valor de enumeração ts.SyntaxKind, que indica o que ele representa.

import ts from "typescript";
// Common kinds:
// ts.SyntaxKind.VariableDeclaration
// ts.SyntaxKind.FunctionDeclaration
// ts.SyntaxKind.Identifier

Visitando com forEachChild

ts.forEachChild(node, visitor) chama seu visitante para cada filho direto de um nó. Use recursão para percorrer a árvore inteira.

function visit(node: ts.Node) {
  if (ts.isFunctionDeclaration(node)) {
    console.log("Function:", node.name?.text);
  }
  ts.forEachChild(node, visit);
}
visit(sourceFile);

Funções de proteção de tipos

O TypeScript fornece funções de proteção de tipos, como ts.isVariableDeclaration e ts.isFunctionDeclaration, para restringir nós com segurança.

ts.forEachChild(sf, node => {
  if (ts.isClassDeclaration(node)) {
    console.log("Class:", node.name?.getText());
  }
  if (ts.isInterfaceDeclaration(node)) {
    console.log("Interface:", node.name.getText());
  }
});

Obtendo o texto de um nó

Use node.getText(sourceFile) para recuperar o texto exato do código-fonte de um nó ou node.getFullText() para incluir informações triviais.

ts.forEachChild(sf, node => {
  if (ts.isIdentifier(node)) {
    console.log("Id:", node.text);
  }
});

Posições dos nós

Cada nó tem posições pos e end, que são deslocamentos de caracteres usados para localizar nós no código-fonte.

ts.forEachChild(sf, node => {
  console.log(node.kind, "at", node.pos, "-", node.end);
});

Percorrendo com um auxiliar recursivo

Uma ferramenta comum é uma função walk que aplica recursivamente um visitante a cada nó da árvore.

function walk(node: ts.Node, visitor: (n: ts.Node) => void) {
  visitor(node);
  ts.forEachChild(node, child => walk(child, visitor));
}

Encontrando todas as chamadas de função

Use uma caminhada recursiva para encontrar todas as expressões de chamada em um arquivo de origem — útil para detectar o uso de APIs.

walk(sf, node => {
  if (ts.isCallExpression(node)) {
    const expr = node.expression.getText(sf);
    console.log("Call:", expr);
  }
});

Acessando nós pais

Os nós da AST não têm um ponteiro para o pai por padrão. Chame ts.setParent(sourceFile) ou use program.getSourceFile, que define os pais automaticamente para os programas.

// For manually created source files:
// (ts as any).setParents(sf);

Usando o TypeChecker com nós

Combine a travessia da AST com o verificador de tipos para resolver o tipo TypeScript de qualquer nó de expressão.

const checker = program.getTypeChecker();
walk(sf, node => {
  if (ts.isExpression(node)) {
    const type = checker.getTypeAtLocation(node);
    console.log(checker.typeToString(type));
  }
});

Recapitulação: travessia da AST

Percorra a AST do TypeScript com forEachChild e funções de guarda de tipo. Combine isso com o verificador de tipos para criar ferramentas avançadas de análise estática e geração de código.

Verificação rápida

Qual função visita recursivamente os nós filhos da AST do TypeScript?

O que você aprendeu

A travessia da AST usa ts.forEachChild e funções de guarda de tipo para percorrer e inspecionar cada nó em um arquivo TypeScript. Combinada com o verificador de tipos, ela permite criar analisadores de código, ferramentas de análise e ferramentas de refatoração.

Grátis para começar

Aprenda TypeScript com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
101
Aulas
352

Perguntas Frequentes

A aula “Percorrendo o AST com visitantes” é grátis?

Sim — o texto completo de “Percorrendo o AST com visitantes” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de TypeScript Academy, atualize para CoddyKit PRO. O curso de TypeScript Academy inclui 4 aulas no total.

O que vou aprender em “Percorrendo o AST com visitantes”?

Percorra os nós da árvore sintática para analisar a estrutura do código Você pratica TypeScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar TypeScript Academy?

Nenhuma experiência prévia é necessária. TypeScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Percorrendo o AST com visitantes”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de TypeScript Academy?

Sim. Cada aula de TypeScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Criando um programa TypeScript com a API
  2. Percorrendo o AST com visitantes
  3. Transformadores personalizados e geração de código
  4. Construindo uma ferramenta simples de análise de código
← Voltar para TypeScript Academy