التوثيق

محرك Tree-sitter

استخراج التوقيعات المدعوم بـ AST لـ 18 لغة برمجة.

منذ v1.5.0، يستخدم LeanCTX tree-sitter لاستخراج التوقيعات بدقة.

لماذا tree-sitter؟

القدرةRegex (قديم)tree-sitter (جديد)
التوقيعات متعددة السطورفائتةمحللة بالكامل
دوال الأسهمفائتةمحللة بالكامل
الفئات المتداخلةهيوريستية المسافة البادئةتتبع نطاق AST
المزخرفاتمتجاهلةمرتبطة بالتعريفات
اللغات المدعومة418
الدقة~85%~99%

اللغات المدعومة

كل لغة لديها استعلامات مخصصة.

اللغةالامتداداتالتعريفات المستخرجة
TypeScript.ts, .tsxfunction, class, abstract class, interface, type alias, method, arrow function
JavaScript.js, .jsxfunction, class, method, arrow function
Rust.rsfn, struct, enum, trait, impl, type, const
Python.pydef, class, async def
Go.gofunc, method, type (struct/interface)
Java.javaclass, interface, enum, method, constructor
C.c, .hfunction, struct, enum, typedef
C++.cpp, .cc, .hppfunction, class, struct, enum, namespace
Ruby.rbclass, module, method, singleton_method
C#.csclass, struct, interface, method, property, record
Kotlin.kt, .ktsclass, object, fun, property, interface
Swift.swiftclass, struct, enum, func, protocol, extension
PHP.phpclass, function, interface, trait, namespace
Bash / Shell.sh, .bashfunction
Dart.dartclass, mixin, extension, function, method, enum
Scala.scala, .scclass, object, trait, def, val
Elixir.ex, .exsdefmodule, def, defp, defmacro
Zig.zigfn, struct, enum, union

الامتدادات غير المدعومة تعود تلقائياً إلى مستخرج regex.

كيف يعمل

عند استخدام ctx_read مع --mode signatures:

  1. يكتشف امتداد الملف ويحمّل القواعد المقابلة.
  2. الكود يُحلل إلى AST في مرور واحد.
  3. استعلامات SCM تطابق عقد التعريف.
  4. كل تطابق يُحوّل إلى كائن Signature مدمج.
  5. التوقيعات تُنسق باستخدام ترميز مدمج.

مثال: توقيع Rust متعدد السطور

tree-sitter يتعامل مع الدوال المعقدة بشكل صحيح:

// Source (Rust)
pub fn complex_function<T: Display + Debug>(
    first_arg: &str,
    second_arg: Vec<T>,
    third_arg: Option<HashMap<String, Vec<u8>>>,
) -> Result<(), Box<dyn Error>> {
    Ok(())
}

// signatures mode output:
fn ⊛ complex_function(first_arg:&str, second_arg:Vec<T>, third_arg:Option<HashMap<String, Vec<u8>>>) → Result<(), Box<dyn Error>>

مثال: دوال الأسهم (TypeScript)

// Source (TypeScript)
export const fetchData = async (url: string): Promise<Response> => {
    return fetch(url);
};

// signatures mode output:
fn ⊛ fetchData(url:s) → Promise<Response>

حجم الملف التنفيذي

قواعد tree-sitter تزيد الحجم من ~5.7 MB إلى ~17 MB.

# Build from source without tree-sitter (regex-only, 4 languages)
cargo install lean-ctx --no-default-features

Homebrew الافتراضي يتضمن tree-sitter مع جميع الـ 18 لغة.

انظر أيضاً