Work on integrating error reporting using the ariadne crate
This commit is contained in:
@@ -696,7 +696,7 @@ impl Completer {
|
||||
tks
|
||||
.iter()
|
||||
.next()
|
||||
.is_some_and(|tk| tk.span.start > cursor_pos)
|
||||
.is_some_and(|tk| tk.span.range().start > cursor_pos)
|
||||
})
|
||||
.map(|i| i.saturating_sub(1))
|
||||
.unwrap_or(segments.len().saturating_sub(1));
|
||||
@@ -705,13 +705,13 @@ impl Completer {
|
||||
|
||||
let cword = if let Some(pos) = relevant
|
||||
.iter()
|
||||
.position(|tk| cursor_pos >= tk.span.start && cursor_pos <= tk.span.end)
|
||||
.position(|tk| cursor_pos >= tk.span.range().start && cursor_pos <= tk.span.range().end)
|
||||
{
|
||||
pos
|
||||
} else {
|
||||
let insert_pos = relevant
|
||||
.iter()
|
||||
.position(|tk| tk.span.start > cursor_pos)
|
||||
.position(|tk| tk.span.range().start > cursor_pos)
|
||||
.unwrap_or(relevant.len());
|
||||
|
||||
let mut new_tk = Tk::default();
|
||||
@@ -761,7 +761,7 @@ impl Completer {
|
||||
|
||||
// Set token_span from CompContext's current word
|
||||
if let Some(cur) = ctx.words.get(ctx.cword) {
|
||||
self.token_span = (cur.span.start, cur.span.end);
|
||||
self.token_span = (cur.span.range().start, cur.span.range().end);
|
||||
} else {
|
||||
self.token_span = (cursor_pos, cursor_pos);
|
||||
}
|
||||
@@ -799,7 +799,7 @@ impl Completer {
|
||||
return Ok(CompResult::from_candidates(candidates));
|
||||
};
|
||||
|
||||
self.token_span = (cur_token.span.start, cur_token.span.end);
|
||||
self.token_span = (cur_token.span.range().start, cur_token.span.range().end);
|
||||
|
||||
// Use marker-based context detection for sub-token awareness (e.g. VAR_SUB
|
||||
// inside a token)
|
||||
@@ -812,7 +812,7 @@ impl Completer {
|
||||
// If token contains '=', only complete after the '='
|
||||
let token_str = cur_token.span.as_str();
|
||||
if let Some(eq_pos) = token_str.rfind('=') {
|
||||
self.token_span.0 = cur_token.span.start + eq_pos + 1;
|
||||
self.token_span.0 = cur_token.span.range().start + eq_pos + 1;
|
||||
cur_token
|
||||
.span
|
||||
.set_range(self.token_span.0..self.token_span.1);
|
||||
|
||||
@@ -70,11 +70,10 @@ impl HistEntry {
|
||||
impl FromStr for HistEntry {
|
||||
type Err = ShErr;
|
||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||
let err = Err(ShErr::Simple {
|
||||
kind: ShErrKind::HistoryReadErr,
|
||||
msg: format!("Bad formatting on history entry '{s}'"),
|
||||
notes: vec![],
|
||||
});
|
||||
let err = Err(ShErr::simple(
|
||||
ShErrKind::HistoryReadErr,
|
||||
format!("Bad formatting on history entry '{s}'"),
|
||||
));
|
||||
|
||||
//: 248972349;148;echo foo; echo bar
|
||||
let Some(cleaned) = s.strip_prefix(": ") else {
|
||||
@@ -133,11 +132,10 @@ impl FromStr for HistEntries {
|
||||
|
||||
while let Some((i, line)) = lines.next() {
|
||||
if !line.starts_with(": ") {
|
||||
return Err(ShErr::Simple {
|
||||
kind: ShErrKind::HistoryReadErr,
|
||||
msg: format!("Bad formatting on line {i}"),
|
||||
notes: vec![],
|
||||
});
|
||||
return Err(ShErr::simple(
|
||||
ShErrKind::HistoryReadErr,
|
||||
format!("Bad formatting on line {i}"),
|
||||
));
|
||||
}
|
||||
let mut chars = line.chars().peekable();
|
||||
let mut feeding_lines = true;
|
||||
@@ -163,11 +161,10 @@ impl FromStr for HistEntries {
|
||||
}
|
||||
if feeding_lines {
|
||||
let Some((_, line)) = lines.next() else {
|
||||
return Err(ShErr::Simple {
|
||||
kind: ShErrKind::HistoryReadErr,
|
||||
msg: format!("Bad formatting on line {i}"),
|
||||
notes: vec![],
|
||||
});
|
||||
return Err(ShErr::simple(
|
||||
ShErrKind::HistoryReadErr,
|
||||
format!("Bad formatting on line {i}"),
|
||||
));
|
||||
};
|
||||
chars = line.chars().peekable();
|
||||
}
|
||||
|
||||
@@ -975,7 +975,7 @@ pub fn annotate_token(token: Tk) -> Vec<(usize, Marker)> {
|
||||
other => other,
|
||||
}
|
||||
});
|
||||
stack.retain(|(i, m)| *i <= token.span.start && !markers::END_MARKERS.contains(m));
|
||||
stack.retain(|(i, m)| *i <= token.span.range().start && !markers::END_MARKERS.contains(m));
|
||||
|
||||
let Some(ctx) = stack.last() else {
|
||||
return false;
|
||||
@@ -989,27 +989,27 @@ pub fn annotate_token(token: Tk) -> Vec<(usize, Marker)> {
|
||||
if token.class != TkRule::Str
|
||||
&& let Some(marker) = marker_for(&token.class)
|
||||
{
|
||||
insertions.push((token.span.end, markers::RESET));
|
||||
insertions.push((token.span.start, marker));
|
||||
insertions.push((token.span.range().end, markers::RESET));
|
||||
insertions.push((token.span.range().start, marker));
|
||||
return insertions;
|
||||
} else if token.flags.contains(TkFlags::IS_SUBSH) {
|
||||
let token_raw = token.span.as_str();
|
||||
if token_raw.ends_with(')') {
|
||||
insertions.push((token.span.end, markers::SUBSH_END));
|
||||
insertions.push((token.span.range().end, markers::SUBSH_END));
|
||||
}
|
||||
insertions.push((token.span.start, markers::SUBSH));
|
||||
insertions.push((token.span.range().start, markers::SUBSH));
|
||||
return insertions;
|
||||
} else if token.class == TkRule::CasePattern {
|
||||
insertions.push((token.span.end, markers::RESET));
|
||||
insertions.push((token.span.end - 1, markers::CASE_PAT));
|
||||
insertions.push((token.span.start, markers::OPERATOR));
|
||||
insertions.push((token.span.range().end, markers::RESET));
|
||||
insertions.push((token.span.range().end - 1, markers::CASE_PAT));
|
||||
insertions.push((token.span.range().start, markers::OPERATOR));
|
||||
return insertions;
|
||||
}
|
||||
|
||||
let token_raw = token.span.as_str();
|
||||
let mut token_chars = token_raw.char_indices().peekable();
|
||||
|
||||
let span_start = token.span.start;
|
||||
let span_start = token.span.range().start;
|
||||
|
||||
let mut qt_state = QuoteState::default();
|
||||
let mut cmd_sub_depth = 0;
|
||||
@@ -1031,7 +1031,7 @@ pub fn annotate_token(token: Tk) -> Vec<(usize, Marker)> {
|
||||
insertions.insert(0, (span_start, markers::ASSIGNMENT));
|
||||
}
|
||||
|
||||
insertions.insert(0, (token.span.end, markers::RESET)); // reset at the end of the token
|
||||
insertions.insert(0, (token.span.range().end, markers::RESET)); // reset at the end of the token
|
||||
|
||||
while let Some((i, ch)) = token_chars.peek() {
|
||||
let index = *i; // we have to dereference this here because rustc is a very pedantic program
|
||||
|
||||
Reference in New Issue
Block a user