Analyzer
- Dart kursu
- Uzman
- Ders 28/47
- 5 dk
dart analyzer ve plugin öğrenirsin.
Analyzer
analyzer paketi, Dart kaynak kodunu sözdizimsel bir ağaca (AST) çözümler. Kod üretimi ve lint denetimlerinin temelidir.
parseString(content: ...) bir ParseStringResult döndürür; .unit alanı CompilationUnit'i (AST kökü) verir. Düğümler arasında gezmek için ziyaretçi (visitor) deseni kullanılır.
RecursiveAstVisitor<T> her düğümü gezer; visitClassDeclaration, visitMethodDeclaration gibi metodları ezersin (override). Bu, kodu programlı olarak analiz etmenin standart yoludur.
Ziyaretçi deseni
Ziyaretçi deseni (visitor pattern), AST düğümlerini türüne göre gezmeyi sağlar. Her düğüm türü için ayrı bir visit... metodu çağrılır.
Örnek: sınıf adlarını toplamak için visitClassDeclaration metodunu ezersin. Her sınıf bildiriminde adını bir listeye eklersin.
Bu desen, kod analizi ve üretiminde yaygındır. source_gen ve custom_lint dahil birçok araç analyzer'ın ziyaretçi API'sini kullanır.
Uygulama Sınıf adı toplayıcı tanımla
Bir ElementInfo sınıfı tanımla: final String name; ElementInfo(this.name);. Bir ClassCollector sınıfı tanımla: final List<ElementInfo> classes = []; alanı ve void add(String name) => classes.add(ElementInfo(name)); metodu. main içinde final collector = ClassCollector(); yarat; collector.add('User') ve collector.add('Book') çağır; collector.classes.length yazdır; sonra for (final e in collector.classes) { print(e.name); } ile adları yazdır.
Başlangıç kodu
void main() {
// ElementInfo sınıfını tanımla (name alanı)
// ClassCollector sınıfını tanımla (öğe listesi ve add metodu)
// bir collector yarat; iki sınıf adı ekle; sayı ve adları yazdır
}Örnek çözüm
class ElementInfo {
final String name;
ElementInfo(this.name);
}
class ClassCollector {
final List<ElementInfo> classes = [];
void add(String name) => classes.add(ElementInfo(name));
}
void main() {
final collector = ClassCollector();
collector.add('User');
collector.add('Book');
print(collector.classes.length);
for (final e in collector.classes) {
print(e.name);
}
}Beklenen çıktı
2 User Book
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 analyzer ne üretir?
- AST (sözdizimsel ağaç) Doğru cevap
- Derlenmiş ikili
- Sıkıştırılmış paket
- Test raporu
Açıklama: analyzer kaynağı AST'ye çözümler.
2 Analyzer parçalarını eşleştir
| Kavram | Anlamı |
|---|---|
parseString() |
Kaynak çözümleme |
CompilationUnit |
AST kökü |
RecursiveAstVisitor |
Ziyaretçi tabanı |
LibraryElement |
Kütüphane öğesi |
3 Ziyaretçi kalıtımı
class MyVisitor extends Recursive____Visitor<void> { }
class MyVisitor extends RecursiveAstVisitor<void> { }
Açıklama: RecursiveAstVisitor tüm AST düğümlerini gezer.