CodeBlanks Logo Icon CodeBlanks

Özet - Compiler API

Compiler API ile basit bir kod analiz aracı yazarsın.

Compiler API özeti

Compiler API'nin üç temel parçası bir araya geldiğinde eksiksiz kod analizi yaparsın: ts.createProgram derlemeyi kurar, program.getTypeChecker() sembol ve tür çözümlemeyi sağlar, ts.forEachChild AST düğümlerini gezer. Bellekten kaynak için bir CompilerHost verirsin; diske yazmazsın.

const program = ts.createProgram(files, opts, host);
const checker = program.getTypeChecker();

function visit(node: ts.Node) {
  // checker ile tür çöz; forEachChild ile in
  ts.forEachChild(node, visit);
}
visit(sourceFile);

Uygulama Fonksiyonları listele

İki fonksiyon içeren bir kaynak dosya oluştur: function topla(a: number, b: number): number { return a + b; } ve function yaz(metin: string) { console.log(metin); }. ts.createSourceFile ile SourceFile oluştur. visit fonksiyonu yaz; ts.isFunctionDeclaration ile her fonksiyonu bul ve ad: parametreSayisi biçiminde yazdır. ts.forEachChild ile ağacı gez.

Başlangıç kodu

index.ts
import * as ts from "typescript";

// İki fonksiyonlu kaynak:
// function topla(a: number, b: number): number { return a + b; }
// function yaz(metin: string) { console.log(metin); }
// SourceFile oluştur
// visit fonksiyonu yaz: FunctionDeclaration düğümlerini bul
// Her fonksiyon için ad: parametreSayisi yazdır
// forEachChild ile ağacı gez

// kodunu buraya yaz

Örnek çözüm

index.ts
import ts from "typescript";

const sourceText = "function topla(a: number, b: number): number { return a + b; }\nfunction yaz(metin: string) { console.log(metin); }";
const sf = ts.createSourceFile("app.ts", sourceText, ts.ScriptTarget.Latest, true);

function visit(node: ts.Node) {
  if (ts.isFunctionDeclaration(node) && node.name) {
    console.log(`${node.name.text}: ${node.parameters.length}`);
  }
  ts.forEachChild(node, visit);
}
visit(sf);

Beklenen çıktı

topla: 2
yaz: 1

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Eksiksiz kod analiz için hangi üçlü bir araya gelir?

  • getTypeChecker + writeFile + readFile
  • getSourceFile + getText + console.log
  • createProgram + TypeChecker + forEachChild Doğru cevap
  • createSourceFile + JSON.stringify + writeFile

Açıklama: createProgram derlemeyi kurar, TypeChecker anlamı çözer, forEachChild sözdizimsel ağacı gezer; bu üçü birlikte eksiksiz analiz verir.

2 TypeChecker çağrısı

Soru
const program = ts.createProgram([fileName], { noLib: true }, host);
const checker = program.____;
Cevap
const program = ts.createProgram([fileName], { noLib: true }, host);
const checker = program.getTypeChecker();

Açıklama: program.getTypeChecker() TypeChecker döndürür; getChecker, createChecker ve typeChecker adları Program üzerinde yoktur.

3 Compiler API özeti

Kavram Anlamı
createProgram Derleme nesnesi
getSourceFiles Kaynak dosyalar
getTypeChecker Semantik çözümleyici
forEachChild AST ziyareti

Uzman bölümündeki tüm dersler