From 6728e4449038e9481b72251441182d508c165a9c Mon Sep 17 00:00:00 2001 From: Blaž Hrastnik Date: Sun, 7 Nov 2021 00:21:03 +0900 Subject: syntax: Split parsing and highlighting --- helix-view/src/document.rs | 13 +++++++------ helix-view/src/editor.rs | 9 +++++++-- 2 files changed, 14 insertions(+), 8 deletions(-) (limited to 'helix-view/src') diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs index 579349ee..0ac8e80b 100644 --- a/helix-view/src/document.rs +++ b/helix-view/src/document.rs @@ -359,7 +359,7 @@ impl Document { path: &Path, encoding: Option<&'static encoding::Encoding>, theme: Option<&Theme>, - config_loader: Option<&syntax::Loader>, + config_loader: Option>, ) -> Result { // Open the file if it exists, otherwise assume it is a new file (and thus empty). let (rope, encoding) = if path.exists() { @@ -498,12 +498,12 @@ impl Document { } /// Detect the programming language based on the file type. - pub fn detect_language(&mut self, theme: Option<&Theme>, config_loader: &syntax::Loader) { + pub fn detect_language(&mut self, theme: Option<&Theme>, config_loader: Arc) { if let Some(path) = &self.path { let language_config = config_loader .language_config_for_file_name(path) .or_else(|| config_loader.language_config_for_shebang(self.text())); - self.set_language(theme, language_config); + self.set_language(theme, language_config, Some(config_loader)); } } @@ -579,11 +579,12 @@ impl Document { &mut self, theme: Option<&Theme>, language_config: Option>, + loader: Option>, ) { - if let Some(language_config) = language_config { + if let (Some(language_config), Some(loader)) = (language_config, loader) { let scopes = theme.map(|theme| theme.scopes()).unwrap_or(&[]); if let Some(highlight_config) = language_config.highlight_config(scopes) { - let syntax = Syntax::new(&self.text, highlight_config); + let syntax = Syntax::new(&self.text, highlight_config, loader); self.syntax = Some(syntax); // TODO: config.configure(scopes) is now delayed, is that ok? } @@ -605,7 +606,7 @@ impl Document { ) { let language_config = config_loader.language_config_for_scope(scope); - self.set_language(theme, language_config); + self.set_language(theme, language_config, Some(config_loader)); } /// Set the LSP. diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs index 7406b475..9ad1558b 100644 --- a/helix-view/src/editor.rs +++ b/helix-view/src/editor.rs @@ -283,7 +283,7 @@ impl Editor { /// Refreshes the language server for a given document pub fn refresh_language_server(&mut self, doc_id: DocumentId) -> Option<()> { let doc = self.documents.get_mut(&doc_id)?; - doc.detect_language(Some(&self.theme), &self.syn_loader); + doc.detect_language(Some(&self.theme), self.syn_loader.clone()); Self::launch_language_server(&mut self.language_servers, doc) } @@ -462,7 +462,12 @@ impl Editor { let id = if let Some(id) = id { id } else { - let mut doc = Document::open(&path, None, Some(&self.theme), Some(&self.syn_loader))?; + let mut doc = Document::open( + &path, + None, + Some(&self.theme), + Some(self.syn_loader.clone()), + )?; let _ = Self::launch_language_server(&mut self.language_servers, &mut doc); -- cgit v1.2.3-70-g09d2