0Pricing
TypeScript Academy · Ders

Basit Bir Lint Aracı Oluşturma

Derleyici API'sini kullanarak özel bir tanılama aracı oluşturun

Basit Bir Lint Aracı Oluşturma, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, TypeScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. TypeScript Academy kursu toplamda 4 dersten oluşur.

Kod Denetleme Aracı Nedir?

Bir kod denetleme aracı, stil veya doğruluk sorunlarını bildirmek için kaynak kodunu çözümler. TypeScript derleyici API'sini kullanmak, ESLint eklentilerinin tek başına sağlayamayacağı tür bilgili kurallar oluşturmanıza olanak tanır.

// Goal: warn when console.log is called in TypeScript files

Proje Kurulumu

Bir TypeScript programı yükleyen, AST'yi dolaşan ve tanıları bildiren bir Node.js betiği oluşturun.

import ts from "typescript";
import path from "path";

const files = ["src/index.ts"];
const program = ts.createProgram(files, { strict: true });

Kural Tanımlama

Kural, bir AST düğümü alan ve kural ihlal edilirse isteğe bağlı bir tanı iletisi döndüren işlevdir.

type Diagnostic = { file: string; line: number; message: string };

function noConsoleLog(node: ts.Node, sf: ts.SourceFile): Diagnostic | null {
  if (!ts.isCallExpression(node)) return null;
  const expr = node.expression.getText(sf);
  if (expr !== "console.log") return null;
  const { line } = sf.getLineAndCharacterOfPosition(node.pos);
  return { file: sf.fileName, line: line + 1, message: "No console.log allowed" };
}

AST'yi Dolaşma

Her kaynak dosyasındaki her düğüme tüm kuralları uygulayan özyinelemeli bir dolaşım yazın.

function walk(
  node: ts.Node,
  sf: ts.SourceFile,
  rules: ((n: ts.Node, sf: ts.SourceFile) => Diagnostic | null)[]
): Diagnostic[] {
  const diags: Diagnostic[] = [];
  for (const rule of rules) {
    const d = rule(node, sf);
    if (d) diags.push(d);
  }
  ts.forEachChild(node, child => diags.push(...walk(child, sf, rules)));
  return diags;
}

Lintleyiciyi Çalıştırma

Tüm kaynak dosyaları üzerinde döngü kurun, kuralları uygulayın ve tanıları yazdırın.

const rules = [noConsoleLog];
const allDiagnostics: Diagnostic[] = [];

for (const sf of program.getSourceFiles()) {
  if (!sf.isDeclarationFile) {
    allDiagnostics.push(...walk(sf, sf, rules));
  }
}

allDiagnostics.forEach(d =>
  console.log(`${d.file}:${d.line} — ${d.message}`)
);

Tür Bilgili Kural Ekleme

TypeScript türüne bağlı kurallar oluşturmak için tür denetleyicisini kullanın.

const checker = program.getTypeChecker();

function noAnyReturn(node: ts.Node, sf: ts.SourceFile): Diagnostic | null {
  if (!ts.isFunctionDeclaration(node)) return null;
  const sig = checker.getSignatureFromDeclaration(node);
  if (!sig) return null;
  const ret = checker.getReturnTypeOfSignature(sig);
  if (ret.flags & ts.TypeFlags.Any) {
    const { line } = sf.getLineAndCharacterOfPosition(node.pos);
    return { file: sf.fileName, line: line + 1, message: "Function returns any" };
  }
  return null;
}

CI için Çıkış Kodu

Tanılar bulunduğunda sıfır olmayan bir çıkış kodu döndürün; böylece CI işlem hatları derlemeyi başarısız kılabilir.

if (allDiagnostics.length > 0) {
  console.error(`${allDiagnostics.length} lint error(s)`);
  process.exit(1);
}
process.exit(0);

Kural: Kullanılmayan Değişken Yok

Derleyici API'si, kullanılmayan değişken tanılarını ts.getPreEmitDiagnostics aracılığıyla sunarak özel kurallarınızı yerleşik denetimlerle destekler.

const preEmit = ts.getPreEmitDiagnostics(program);
preEmit.forEach(d => {
  const msg = ts.flattenDiagnosticMessageText(d.messageText, "
");
  console.log(msg);
});

Kural: Dönüş Türlerini Zorunlu Kılma

İşlevlerde açık dönüş türü açıklamaları bulunmadığında uyarı veren bir kural, belgeleme disiplinini uygulamaya yardımcı olur.

function requireReturnType(node: ts.Node, sf: ts.SourceFile): Diagnostic | null {
  if (!ts.isFunctionDeclaration(node)) return null;
  if (!node.type) {
    const { line } = sf.getLineAndCharacterOfPosition(node.pos);
    return { file: sf.fileName, line: line + 1, message: "Missing return type" };
  }
  return null;
}

ESLint ile Karşılaştırma

Özel kod denetleyiciniz ESLint'i tamamlar. Stil kuralları için ESLint'i, ESLint'in ifade edemediği tür bilgili kurallar içinse TypeScript derleyici API'si aracınızı kullanın.

// ESLint: stylistic and common pattern rules
// Compiler API linter: deep type reasoning, custom constraints

Özet: Kod Denetleyicisi Oluşturma

TypeScript derleyici API'siyle çalışan bir kod denetleyicisi: bir program oluşturur, AST'yi kurallarla dolaşır, isteğe bağlı olarak tür denetleyicisine sorgu gönderir ve hatalarda sıfır olmayan çıkış koduyla sonlanır. Bu yaklaşım, gerçekten tür bilgili kod denetimi kurallarını mümkün kılar.

Hızlı Denetim

Bir derleyici API'si kod denetleyicisine ESLint karşısında avantaj sağlayan nedir?

Öğrendikleriniz

Derleyici API'sini kullanarak basit bir TypeScript kod denetleyicisi oluşturdunuz: bir programı yüklediniz, AST'yi dolaştınız, kuralları uyguladınız (isteğe bağlı olarak tür bilgili) ve tanıları bildirdiniz. Bu, herhangi bir TypeScript projesinde özel statik çözümlemenin temelini oluşturur.

Sıkça Sorulan Sorular

“Basit Bir Lint Aracı Oluşturma” dersi ücretsiz mi?

Evet — “Basit Bir Lint Aracı Oluşturma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve TypeScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. TypeScript Academy kursu toplamda 4 dersten oluşur.

“Basit Bir Lint Aracı Oluşturma” dersinde ne öğreneceğim?

Derleyici API'sini kullanarak özel bir tanılama aracı oluşturun TypeScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

TypeScript Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te TypeScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Basit Bir Lint Aracı Oluşturma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu TypeScript Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her TypeScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. API ile TypeScript Programı Oluşturma
  2. Ziyaretçilerle AST'de Dolaşma
  3. Özel Dönüştürücüler ve Kod Üretimi
  4. Basit Bir Lint Aracı Oluşturma
← TypeScript Academy Sayfasına Dön