use std::sync::OnceLock;
use tree_sitter::Query;
fn perl_language() -> tree_sitter::Language {
ts_parser_perl::LANGUAGE.into()
}
pub fn cpanfile_requires() -> &'static Query {
static QUERY: OnceLock<Query> = OnceLock::new();
QUERY.get_or_init(|| {
Query::new(
&perl_language(),
r#"
[
(function_call_expression
function: (_) @fn
(string_literal (string_content) @module))
(function_call_expression
function: (_) @fn
(list_expression . (string_literal (string_content) @module)))
(ambiguous_function_call_expression
function: (_) @fn
(string_literal (string_content) @module))
(ambiguous_function_call_expression
function: (_) @fn
(list_expression . (string_literal (string_content) @module)))
]
(#eq? @fn "requires")
"#,
)
.expect("cpanfile_requires query should compile")
})
}
#[cfg(test)]
pub fn exports_qw() -> &'static Query {
static QUERY: OnceLock<Query> = OnceLock::new();
QUERY.get_or_init(|| {
Query::new(
&perl_language(),
r#"
[
(assignment_expression
left: [
(variable_declaration (array) @var)
(array) @var
]
(quoted_word_list (string_content) @words))
(assignment_expression
left: [
(variable_declaration (array) @var)
(array) @var
]
(list_expression
(quoted_word_list (string_content) @words)))
]
"#,
)
.expect("exports_qw query should compile")
})
}
#[cfg(test)]
pub fn exports_paren_list() -> &'static Query {
static QUERY: OnceLock<Query> = OnceLock::new();
QUERY.get_or_init(|| {
Query::new(
&perl_language(),
r#"
[
(assignment_expression
left: [
(variable_declaration (array) @var)
(array) @var
]
(list_expression
(string_literal (string_content) @word)))
(assignment_expression
left: [
(variable_declaration (array) @var)
(array) @var
]
(string_literal (string_content) @word))
]
"#,
)
.expect("exports_paren_list query should compile")
})
}
#[cfg(test)]
#[path = "query_cache_tests.rs"]
mod tests;