Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-syntax/src/tree_sitter/query.rs')
| -rw-r--r-- | helix-syntax/src/tree_sitter/query.rs | 56 |
1 files changed, 17 insertions, 39 deletions
diff --git a/helix-syntax/src/tree_sitter/query.rs b/helix-syntax/src/tree_sitter/query.rs index 514b8990..3fb1fc18 100644 --- a/helix-syntax/src/tree_sitter/query.rs +++ b/helix-syntax/src/tree_sitter/query.rs @@ -4,8 +4,6 @@ use std::path::{Path, PathBuf}; use std::ptr::NonNull; use std::{slice, str}; -use regex_cursor::Cursor; - use crate::tree_sitter::query::predicate::{InvalidPredicateError, Predicate, TextPredicate}; use crate::tree_sitter::query::property::QueryProperty; use crate::tree_sitter::Grammar; @@ -13,20 +11,23 @@ use crate::tree_sitter::Grammar; mod predicate; mod property; +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Pattern(pub(crate) u32); + pub enum QueryData {} -pub(super) struct Pattern { +pub(super) struct PatternData { text_predicates: Range<u32>, properties: Range<u32>, } pub struct Query { - raw: NonNull<QueryData>, + pub(crate) raw: NonNull<QueryData>, num_captures: u32, num_strings: u32, text_predicates: Vec<TextPredicate>, properties: Vec<QueryProperty>, - patterns: Box<[Pattern]>, + patterns: Box<[PatternData]>, } impl Query { @@ -40,7 +41,7 @@ impl Query { grammar: Grammar, source: &str, path: impl AsRef<Path>, - mut custom_predicate: impl FnMut(Predicate) -> Result<(), InvalidPredicateError>, + mut custom_predicate: impl FnMut(Pattern, Predicate) -> Result<(), InvalidPredicateError>, ) -> Result<Self, ParseError> { assert!( source.len() <= i32::MAX as usize, @@ -121,7 +122,7 @@ impl Query { } RawQueryError::Language => unreachable!("should be handled at grammar load"), }; - return Err(err) + return Err(err); }; // I am not going to bother with safety comments here, all of these are @@ -141,7 +142,7 @@ impl Query { let patterns: Result<_, ParseError> = (0..num_patterns) .map(|pattern| { query - .parse_pattern_predicates(pattern, &mut custom_predicate) + .parse_pattern_predicates(Pattern(pattern), &mut custom_predicate) .map_err(|err| ParseError::InvalidPredicate { message: err.msg.into(), location: ParserErrorLocation::new( @@ -157,35 +158,6 @@ impl Query { Ok(query) } - pub fn satsifies_text_predicate<C: Cursor>( - &self, - cursor: &mut regex_cursor::Input<C>, - pattern: u32, - ) { - let text_predicates = self.patterns[pattern as usize].text_predicates; - let text_predicates = - &self.text_predicates[text_predicates.start as usize..text_predicates.end as usize]; - for predicate in text_predicates { - match predicate.kind { - predicate::TextPredicateKind::EqString(_) => todo!(), - predicate::TextPredicateKind::EqCapture(_) => todo!(), - predicate::TextPredicateKind::MatchString(_) => todo!(), - predicate::TextPredicateKind::AnyString(_) => todo!(), - } - } - } - - // fn parse_predicates(&mut self) { - // let pattern_count = unsafe { ts_query_pattern_count(self.raw) }; - - // let mut text_predicates = Vec::with_capacity(pattern_count as usize); - // let mut property_predicates = Vec::with_capacity(pattern_count as usize); - // let mut property_settings = Vec::with_capacity(pattern_count as usize); - // let mut general_predicates = Vec::with_capacity(pattern_count as usize); - - // for i in 0..pattern_count {} - // } - #[inline] fn get_string(&self, str: QueryStr) -> &str { let value_id = str.0; @@ -218,10 +190,15 @@ impl Query { } } - pub fn pattern_properies(&self, pattern_idx: u32) -> &[QueryProperty] { - let range = self.patterns[pattern_idx as usize].properties.clone(); + pub fn pattern_properies(&self, pattern_idx: Pattern) -> &[QueryProperty] { + let range = self.patterns[pattern_idx.0 as usize].properties.clone(); &self.properties[range.start as usize..range.end as usize] } + + pub(crate) fn pattern_text_predicates(&self, pattern_idx: u16) -> &[TextPredicate] { + let range = self.patterns[pattern_idx as usize].text_predicates.clone(); + &self.text_predicates[range.start as usize..range.end as usize] + } } impl Drop for Query { @@ -231,6 +208,7 @@ impl Drop for Query { } #[derive(Clone, Copy, Debug, PartialEq, Eq)] +#[repr(transparent)] pub struct Capture(u32); impl Capture { |