Unnamed repository; edit this file 'description' to name the repository.
fix: report correct amount of files opened and improved error message when Helix can't parse directory as file (#12199)
* feat: improve information on the amount of files loaded * refactor: naming consitency Doc and not Buf * fix: correct name of method * chore: appease clippy * feat: more human error information when Helix cannot start * refatcor: use if guard on match arm
Nikita Revenco 2024-12-08
parent 271c32f · commit db1d842
-rw-r--r--helix-term/src/application.rs8
-rw-r--r--helix-term/src/main.rs3
-rw-r--r--helix-view/src/editor.rs6
3 files changed, 13 insertions, 4 deletions
diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs
index a567815f..36cb295c 100644
--- a/helix-term/src/application.rs
+++ b/helix-term/src/application.rs
@@ -175,7 +175,7 @@ impl Application {
nr_of_files += 1;
if file.is_dir() {
return Err(anyhow::anyhow!(
- "expected a path to file, found a directory. (to open a directory pass it as first argument)"
+ "expected a path to file, but found a directory: {file:?}. (to open a directory pass it as first argument)"
));
} else {
// If the user passes in either `--vsplit` or
@@ -189,6 +189,7 @@ impl Application {
Some(Layout::Horizontal) => Action::HorizontalSplit,
None => Action::Load,
};
+ let old_id = editor.document_id_by_path(&file);
let doc_id = match editor.open(&file, action) {
// Ignore irregular files during application init.
Err(DocumentOpenError::IrregularFile) => {
@@ -196,6 +197,11 @@ impl Application {
continue;
}
Err(err) => return Err(anyhow::anyhow!(err)),
+ // We can't open more than 1 buffer for 1 file, in this case we already have opened this file previously
+ Ok(doc_id) if old_id == Some(doc_id) => {
+ nr_of_files -= 1;
+ doc_id
+ }
Ok(doc_id) => doc_id,
};
// with Action::Load all documents have the same view
diff --git a/helix-term/src/main.rs b/helix-term/src/main.rs
index a3a27a07..516bfd7c 100644
--- a/helix-term/src/main.rs
+++ b/helix-term/src/main.rs
@@ -154,8 +154,7 @@ FLAGS:
});
// TODO: use the thread local executor to spawn the application task separately from the work pool
- let mut app =
- Application::new(args, config, lang_loader).context("unable to create new application")?;
+ let mut app = Application::new(args, config, lang_loader).context("unable to start Helix")?;
let exit_code = app.run(&mut EventStream::new()).await?;
diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs
index aa9a1153..4fc3f470 100644
--- a/helix-view/src/editor.rs
+++ b/helix-view/src/editor.rs
@@ -1718,10 +1718,14 @@ impl Editor {
Ok(doc_id)
}
+ pub fn document_id_by_path(&self, path: &Path) -> Option<DocumentId> {
+ self.document_by_path(path).map(|doc| doc.id)
+ }
+
// ??? possible use for integration tests
pub fn open(&mut self, path: &Path, action: Action) -> Result<DocumentId, DocumentOpenError> {
let path = helix_stdx::path::canonicalize(path);
- let id = self.document_by_path(&path).map(|doc| doc.id);
+ let id = self.document_id_by_path(&path);
let id = if let Some(id) = id {
id