Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-core/src/syntax.rs')
| -rw-r--r-- | helix-core/src/syntax.rs | 43 |
1 files changed, 40 insertions, 3 deletions
diff --git a/helix-core/src/syntax.rs b/helix-core/src/syntax.rs index 325c47ac..4bc177ef 100644 --- a/helix-core/src/syntax.rs +++ b/helix-core/src/syntax.rs @@ -90,7 +90,7 @@ impl LanguageData { Ok(Some(config)) } - fn syntax_config(&self, loader: &Loader) -> Option<&SyntaxConfig> { + pub fn syntax_config(&self, loader: &Loader) -> Option<&SyntaxConfig> { self.syntax .get_or_init(|| { Self::compile_syntax_config(&self.config, loader) @@ -238,7 +238,7 @@ impl LanguageData { } } -fn reconfigure_highlights(config: &SyntaxConfig, recognized_names: &[String]) { +pub fn reconfigure_highlights(config: &SyntaxConfig, recognized_names: &[String]) { config.configure(move |capture_name| { let capture_parts: Vec<_> = capture_name.split('.').collect(); @@ -512,7 +512,7 @@ impl FileTypeGlobMatcher { #[derive(Debug)] pub struct Syntax { - inner: tree_house::Syntax, + pub inner: tree_house::Syntax, } const PARSE_TIMEOUT: Duration = Duration::from_millis(500); // half a second is pretty generous @@ -1203,7 +1203,24 @@ mod test { ); let language = LOADER.language_for_name("rust").unwrap(); + dbg!(language); let grammar = LOADER.get_config(language).unwrap().grammar; + dbg!(grammar); + let syntax = Syntax::new(source.slice(..), language, &LOADER).unwrap(); + let mut h = syntax.highlighter( + "fn main() { 4 + 2; }".into(), + &LOADER, + 0.."fn main() { 4 + 2; }".len() as u32, + ); + + for n in 0..5 { + dbg!(h.active_highlights().collect::<Vec<_>>()); + dbg!(h.next_event_offset()); + let (e, h) = h.advance(); + dbg!(h.collect::<Vec<_>>(), e); + // panic!() + } + let query = Query::new(grammar, query_str, |_, _| Ok(())).unwrap(); let textobject = TextObjectQuery::new(query); let syntax = Syntax::new(source.slice(..), language, &LOADER).unwrap(); @@ -1368,4 +1385,24 @@ mod test { source.len(), ); } + #[test] + fn highlight() { + let source = Rope::from_str(r#"assert_eq!(0, Some(0));"#); + let loader = crate::config::default_lang_loader(); + loader.set_scopes(vec!["punctuation".to_string()]); + let language = loader.language_for_name("rust").unwrap(); + + let syntax = Syntax::new(source.slice(..), language, &loader).unwrap(); + println!( + "{}", + tree_house::fixtures::highlighter_fixture( + "", + &loader, + |_| "punct".to_string(), + &syntax.inner, + source.slice(..), + .., + ) + ); + } } |