منذ v1.5.0، يستخدم LeanCTX tree-sitter لاستخراج التوقيعات بدقة.
لماذا tree-sitter؟
| القدرة | Regex (قديم) | tree-sitter (جديد) |
|---|---|---|
| التوقيعات متعددة السطور | فائتة | محللة بالكامل |
| دوال الأسهم | فائتة | محللة بالكامل |
| الفئات المتداخلة | هيوريستية المسافة البادئة | تتبع نطاق AST |
| المزخرفات | متجاهلة | مرتبطة بالتعريفات |
| اللغات المدعومة | 4 | 18 |
| الدقة | ~85% | ~99% |
اللغات المدعومة
كل لغة لديها استعلامات مخصصة.
| اللغة | الامتدادات | التعريفات المستخرجة |
|---|---|---|
| TypeScript | .ts, .tsx | function, class, abstract class, interface, type alias, method, arrow function |
| JavaScript | .js, .jsx | function, class, method, arrow function |
| Rust | .rs | fn, struct, enum, trait, impl, type, const |
| Python | .py | def, class, async def |
| Go | .go | func, method, type (struct/interface) |
| Java | .java | class, interface, enum, method, constructor |
| C | .c, .h | function, struct, enum, typedef |
| C++ | .cpp, .cc, .hpp | function, class, struct, enum, namespace |
| Ruby | .rb | class, module, method, singleton_method |
| C# | .cs | class, struct, interface, method, property, record |
| Kotlin | .kt, .kts | class, object, fun, property, interface |
| Swift | .swift | class, struct, enum, func, protocol, extension |
| PHP | .php | class, function, interface, trait, namespace |
| Bash / Shell | .sh, .bash | function |
| Dart | .dart | class, mixin, extension, function, method, enum |
| Scala | .scala, .sc | class, object, trait, def, val |
| Elixir | .ex, .exs | defmodule, def, defp, defmacro |
| Zig | .zig | fn, struct, enum, union |
الامتدادات غير المدعومة تعود تلقائياً إلى مستخرج regex.
كيف يعمل
عند استخدام ctx_read مع --mode signatures:
- يكتشف امتداد الملف ويحمّل القواعد المقابلة.
- الكود يُحلل إلى AST في مرور واحد.
- استعلامات SCM تطابق عقد التعريف.
- كل تطابق يُحوّل إلى كائن
Signatureمدمج. - التوقيعات تُنسق باستخدام ترميز مدمج.
مثال: توقيع 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 لغة.