forked from mirrors/jj
cli: extract function that stringifies RevsetParseError
This commit is contained in:
parent
34eb446037
commit
78104b5e82
2 changed files with 10 additions and 5 deletions
|
@ -38,7 +38,7 @@ use thiserror::Error;
|
|||
use crate::merge_tools::{
|
||||
ConflictResolveError, DiffEditError, DiffGenerateError, MergeToolConfigError,
|
||||
};
|
||||
use crate::revset_util::UserRevsetEvaluationError;
|
||||
use crate::revset_util::{self, UserRevsetEvaluationError};
|
||||
use crate::template_parser::{TemplateParseError, TemplateParseErrorKind};
|
||||
use crate::ui::Ui;
|
||||
|
||||
|
@ -347,10 +347,9 @@ impl From<RevsetEvaluationError> for CommandError {
|
|||
|
||||
impl From<RevsetParseError> for CommandError {
|
||||
fn from(err: RevsetParseError) -> Self {
|
||||
let err_chain = iter::successors(Some(&err), |e| e.origin());
|
||||
let message = err_chain.clone().join("\n");
|
||||
// Only for the bottom error, which is usually the root cause
|
||||
let hint = match err_chain.last().unwrap().kind() {
|
||||
let bottom_err = iter::successors(Some(&err), |e| e.origin()).last().unwrap();
|
||||
let hint = match bottom_err.kind() {
|
||||
RevsetParseErrorKind::NotPrefixOperator {
|
||||
op: _,
|
||||
similar_op,
|
||||
|
@ -372,7 +371,7 @@ impl From<RevsetParseError> for CommandError {
|
|||
} => format_similarity_hint(candidates),
|
||||
_ => None,
|
||||
};
|
||||
user_error_with_hint_opt(format!("Failed to parse revset: {message}"), hint)
|
||||
user_error_with_hint_opt(revset_util::format_parse_error(&err), hint)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
|
||||
//! Utility for parsing and evaluating user-provided revset expressions.
|
||||
|
||||
use std::iter;
|
||||
use std::rc::Rc;
|
||||
|
||||
use itertools::Itertools as _;
|
||||
|
@ -135,3 +136,8 @@ pub fn parse_immutable_expression(
|
|||
repo.store().root_commit_id().clone(),
|
||||
)))
|
||||
}
|
||||
|
||||
pub fn format_parse_error(err: &RevsetParseError) -> String {
|
||||
let message = iter::successors(Some(err), |e| e.origin()).join("\n");
|
||||
format!("Failed to parse revset: {message}")
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue