Özet - Compiler API
- TypeScript kursu
- Uzman
- Ders 4/35
- 4 dk
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
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
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ı
const program = ts.createProgram([fileName], { noLib: true }, host);
const checker = program.____;
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 |