ডকুমেন্টেশন

Tree-sitter ইঞ্জিন

18টি প্রোগ্রামিং ভাষার জন্য tree-sitter ব্যবহার করে AST-চালিত সিগনেচার এক্সট্রাকশন।

v1.5.0 থেকে, LeanCTX লাইন-বাই-লাইন রেজেক্স ম্যাচিং-এর পরিবর্তে সিগনেচার এক্সট্রাকশনের জন্য tree-sitter ব্যবহার করে। Tree-sitter সোর্স কোডকে একটি সম্পূর্ণ Abstract Syntax Tree (AST)-তে পার্স করে, যা মাল্টি-লাইন সিগনেচার, অ্যারো ফাংশন, ডেকোরেটর এবং নেস্টেড সংজ্ঞার নির্ভুল এক্সট্রাকশন সক্ষম করে যা রেজেক্স পরিচালনা করতে পারে না।

কেন tree-sitter?

সক্ষমতারেজেক্স (পুরনো)tree-sitter (নতুন)
মাল্টি-লাইন সিগনেচারমিস হয়সম্পূর্ণ পার্সড
অ্যারো ফাংশনমিস হয়সম্পূর্ণ পার্সড
নেস্টেড ক্লাস / মেথডইন্ডেন্টেশন হিউরিস্টিকAST স্কোপ ট্র্যাকিং
ডেকোরেটর / অ্যাট্রিবিউটউপেক্ষিতসংজ্ঞার সাথে সংযুক্ত
সমর্থিত ভাষা418
নির্ভুলতা~85%~99%

সমর্থিত ভাষাসমূহ

প্রতিটি ভাষায় নিবেদিত tree-sitter কোয়েরি আছে যা নিম্নলিখিত সংজ্ঞা প্রকারগুলো এক্সট্রাক্ট করে:

ভাষাএক্সটেনশনএক্সট্রাক্টকৃত সংজ্ঞা
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

Svelte (.svelte), Vue (.vue), এবং অন্যান্য অসমর্থিত এক্সটেনশনগুলো TS/JS-সদৃশ সিনট্যাক্সের জন্য স্বয়ংক্রিয়ভাবে রেজেক্স-ভিত্তিক এক্সট্রাক্টরে ফলব্যাক করে।

কীভাবে কাজ করে

আপনি যখন ctx_read-এ --mode signatures বা --mode map ব্যবহার করেন:

  1. LeanCTX ফাইল এক্সটেনশন সনাক্ত করে এবং সংশ্লিষ্ট tree-sitter গ্রামার লোড করে।
  2. সোর্স কোড একটি একক পাসে AST-তে পার্স করা হয়।
  3. প্রি-কম্পাইলড SCM কোয়েরি সংজ্ঞা নোড (ফাংশন, ক্লাস, স্ট্রাক্ট, ইত্যাদি) ম্যাচ করে।
  4. প্রতিটি ম্যাচ নাম, প্যারামিটার, রিটার্ন টাইপ, ভিজিবিলিটি এবং async স্ট্যাটাসসহ একটি কমপ্যাক্ট Signature অবজেক্টে রূপান্তরিত হয়।
  5. সিগনেচারগুলো কমপ্যাক্ট নোটেশন (বা TDD নোটেশন সক্রিয় থাকলে) ব্যবহার করে ফরম্যাট করা হয়।

উদাহরণ: মাল্টি-লাইন 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 গ্রামারে কম্পাইলড C পার্সার অন্তর্ভুক্ত থাকে, যা বাইনারি সাইজ ~5.7 MB থেকে ~17 MB-তে বাড়ায়। সাইজ গুরুত্বপূর্ণ হলে, আপনি tree-sitter ছাড়া বিল্ড করতে পারেন:

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

ডিফল্ট Homebrew ফর্মুলা এবং cargo install lean-ctx সমস্ত 18টি ভাষাসহ tree-sitter অন্তর্ভুক্ত করে।

আরো দেখুন