use tree_sitter::Node;
pub fn extract_signature_to_brace(node: &Node, source: &str) -> Option<String> {
let start = node.start_byte();
let end = node.end_byte();
let text = &source[start..end];
if let Some(brace_pos) = text.find('{') {
Some(text[..brace_pos].trim().to_string())
} else {
let sig = text.trim_end_matches(';').trim();
Some(sig.to_string())
}
}
pub fn extract_full_definition(node: &Node, source: &str) -> Option<String> {
let start = node.start_byte();
let end = node.end_byte();
Some(source[start..end].to_string())
}
#[macro_export]
macro_rules! define_parser {
($name:ident, $language:expr) => {
thread_local! {
static $name: std::cell::RefCell<tree_sitter::Parser> = std::cell::RefCell::new({
let mut parser = tree_sitter::Parser::new();
parser.set_language(&$language.into()).expect(concat!("Failed to set ", stringify!($name), " language"));
parser
});
}
};
}