mirror of
https://github.com/helix-editor/helix.git
synced 2025-04-07 04:47:45 +03:00
add workspace config and manual LSP root management
fixup documentation Co-authored-by: LeoniePhiline <22329650+LeoniePhiline@users.noreply.github.com> fixup typo Co-authored-by: LeoniePhiline <22329650+LeoniePhiline@users.noreply.github.com>
This commit is contained in:
parent
d59b80514e
commit
2d10a429eb
16 changed files with 296 additions and 183 deletions
|
@ -36,55 +36,12 @@ pub mod unicode {
|
|||
pub use unicode_width as width;
|
||||
}
|
||||
|
||||
pub use helix_loader::find_workspace;
|
||||
|
||||
pub fn find_first_non_whitespace_char(line: RopeSlice) -> Option<usize> {
|
||||
line.chars().position(|ch| !ch.is_whitespace())
|
||||
}
|
||||
|
||||
/// Find project root.
|
||||
///
|
||||
/// Order of detection:
|
||||
/// * Top-most folder containing a root marker in current git repository
|
||||
/// * Git repository root if no marker detected
|
||||
/// * 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]) -> 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() {
|
||||
if root_markers
|
||||
.iter()
|
||||
.any(|marker| ancestor.join(marker).exists())
|
||||
{
|
||||
top_marker = Some(ancestor);
|
||||
}
|
||||
|
||||
if ancestor.join(".git").exists() {
|
||||
// Top marker is repo root if not root marker was detected yet
|
||||
if top_marker.is_none() {
|
||||
top_marker = Some(ancestor);
|
||||
}
|
||||
// Don't go higher than repo if we're in one
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Return the found top marker or the current_dir as fallback
|
||||
top_marker.map_or(current_dir, |a| a.to_path_buf())
|
||||
}
|
||||
|
||||
pub use ropey::{self, str_utils, Rope, RopeBuilder, RopeSlice};
|
||||
|
||||
// pub use tendril::StrTendril as Tendril;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue