aboutsummaryrefslogtreecommitdiff
path: root/helix-core
diff options
context:
space:
mode:
authorKirawi2022-04-18 03:10:51 +0000
committerGitHub2022-04-18 03:10:51 +0000
commitc2a40d9d5229c701fa1a6d0fb80ce4ba86e8dc0c (patch)
treeb27da29863432ca7ee48c582f5aeb538d7a39ea1 /helix-core
parentbe656c14e32243fc32ed68f9a3240301f2902df7 (diff)
Add support for local language configuration (#1249)
* add local configuration * move config loading to Application::new * simplify find_root_impl
Diffstat (limited to 'helix-core')
-rw-r--r--helix-core/src/config.rs4
-rw-r--r--helix-core/src/lib.rs38
2 files changed, 5 insertions, 37 deletions
diff --git a/helix-core/src/config.rs b/helix-core/src/config.rs
index f399850e..2076fc22 100644
--- a/helix-core/src/config.rs
+++ b/helix-core/src/config.rs
@@ -1,10 +1,10 @@
/// Syntax configuration loader based on built-in languages.toml.
pub fn default_syntax_loader() -> crate::syntax::Configuration {
- helix_loader::default_lang_config()
+ helix_loader::config::default_lang_config()
.try_into()
.expect("Could not serialize built-in languages.toml")
}
/// Syntax configuration loader based on user configured languages.toml.
pub fn user_syntax_loader() -> Result<crate::syntax::Configuration, toml::de::Error> {
- helix_loader::user_lang_config()?.try_into()
+ helix_loader::config::user_lang_config()?.try_into()
}
diff --git a/helix-core/src/lib.rs b/helix-core/src/lib.rs
index 0ae68f91..02341265 100644
--- a/helix-core/src/lib.rs
+++ b/helix-core/src/lib.rs
@@ -46,41 +46,9 @@ pub fn find_first_non_whitespace_char(line: RopeSlice) -> Option<usize> {
/// * Top-most folder containing a root marker if not git repository detected
/// * Current working directory as fallback
pub fn find_root(root: Option<&str>, root_markers: &[String]) -> Option<std::path::PathBuf> {
- let current_dir = std::env::current_dir().expect("unable to determine current directory");
-
- let root = match root {
- Some(root) => {
- let root = std::path::Path::new(root);
- if root.is_absolute() {
- root.to_path_buf()
- } else {
- current_dir.join(root)
- }
- }
- None => current_dir.clone(),
- };
-
- let mut top_marker = None;
- for ancestor in root.ancestors() {
- for marker in root_markers {
- if ancestor.join(marker).exists() {
- top_marker = Some(ancestor);
- break;
- }
- }
- // don't go higher than repo
- if ancestor.join(".git").is_dir() {
- // Use workspace if detected from marker
- return Some(top_marker.unwrap_or(ancestor).to_path_buf());
- }
- }
-
- // In absence of git repo, use workspace if detected
- if top_marker.is_some() {
- top_marker.map(|a| a.to_path_buf())
- } else {
- Some(current_dir)
- }
+ helix_loader::find_root_impl(root, root_markers)
+ .first()
+ .cloned()
}
pub use ropey::{Rope, RopeBuilder, RopeSlice};