diff --git a/CHANGELOG.md b/CHANGELOG.md index b764154d5e..3c47274c74 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased ### Changed +* improve syntax highlighting file detection [[@acuteenvy](https://github.com/acuteenvy)] ([#2524](https://github.com/extrawurst/gitui/pull/2524)) * After commit: jump back to unstaged area [[@tommady](https://github.com/tommady)] ([#2476](https://github.com/extrawurst/gitui/issues/2476)) ## [0.27.0] - 2024-01-14 diff --git a/src/ui/syntax_text.rs b/src/ui/syntax_text.rs index fba036e714..938c514e7c 100644 --- a/src/ui/syntax_text.rs +++ b/src/ui/syntax_text.rs @@ -6,7 +6,6 @@ use once_cell::sync::Lazy; use ratatui::text::{Line, Span}; use scopetime::scope_time; use std::{ - ffi::OsStr, ops::Range, path::{Path, PathBuf}, sync::{Arc, Mutex}, @@ -73,24 +72,20 @@ impl SyntaxText { params: &RunParams, ) -> asyncgit::Result { scope_time!("syntax_highlighting"); - let mut state = { scope_time!("syntax_highlighting.0"); - let syntax = file_path - .extension() - .and_then(OsStr::to_str) - .map_or_else( - || { - SYNTAX_SET.find_syntax_by_path( - file_path.to_str().unwrap_or_default(), - ) - }, - |ext| SYNTAX_SET.find_syntax_by_extension(ext), - ); - - ParseState::new(syntax.unwrap_or_else(|| { - SYNTAX_SET.find_syntax_plain_text() - })) + let plain_text = || SYNTAX_SET.find_syntax_plain_text(); + let syntax = SYNTAX_SET + .find_syntax_for_file( + file_path.to_str().unwrap_or_default(), + ) + .unwrap_or_else(|e| { + log::error!("Could not read the file to detect its syntax: {e}"); + Some(plain_text()) + }) + .unwrap_or_else(plain_text); + + ParseState::new(syntax) }; let highlighter = Highlighter::new(