Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/syntax/src/parsing/reparsing.rs')
-rw-r--r--crates/syntax/src/parsing/reparsing.rs17
1 files changed, 8 insertions, 9 deletions
diff --git a/crates/syntax/src/parsing/reparsing.rs b/crates/syntax/src/parsing/reparsing.rs
index 1e1a02f445..a895d9e274 100644
--- a/crates/syntax/src/parsing/reparsing.rs
+++ b/crates/syntax/src/parsing/reparsing.rs
@@ -21,14 +21,13 @@ pub(crate) fn incremental_reparse(
node: &SyntaxNode,
edit: &Indel,
errors: impl IntoIterator<Item = SyntaxError>,
+ edition: Edition,
) -> Option<(GreenNode, Vec<SyntaxError>, TextRange)> {
- if let Some((green, new_errors, old_range)) = reparse_token(node, edit) {
+ if let Some((green, new_errors, old_range)) = reparse_token(node, edit, edition) {
return Some((green, merge_errors(errors, new_errors, old_range, edit), old_range));
}
- if let Some((green, new_errors, old_range)) =
- reparse_block(node, edit, parser::Edition::CURRENT)
- {
+ if let Some((green, new_errors, old_range)) = reparse_block(node, edit, edition) {
return Some((green, merge_errors(errors, new_errors, old_range, edit), old_range));
}
None
@@ -37,6 +36,7 @@ pub(crate) fn incremental_reparse(
fn reparse_token(
root: &SyntaxNode,
edit: &Indel,
+ edition: Edition,
) -> Option<(GreenNode, Vec<SyntaxError>, TextRange)> {
let prev_token = root.covering_element(edit.delete).as_token()?.clone();
let prev_token_kind = prev_token.kind();
@@ -51,8 +51,7 @@ fn reparse_token(
}
let mut new_text = get_text_after_edit(prev_token.clone().into(), edit);
- let (new_token_kind, new_err) =
- parser::LexedStr::single_token(Edition::CURRENT, &new_text)?;
+ let (new_token_kind, new_err) = parser::LexedStr::single_token(edition, &new_text)?;
if new_token_kind != prev_token_kind
|| (new_token_kind == IDENT && is_contextual_kw(&new_text))
@@ -65,8 +64,7 @@ fn reparse_token(
// `b` no longer remains an identifier, but becomes a part of byte string literal
if let Some(next_char) = root.text().char_at(prev_token.text_range().end()) {
new_text.push(next_char);
- let token_with_next_char =
- parser::LexedStr::single_token(Edition::CURRENT, &new_text);
+ let token_with_next_char = parser::LexedStr::single_token(edition, &new_text);
if let Some((_kind, _error)) = token_with_next_char {
return None;
}
@@ -93,7 +91,7 @@ fn reparse_block(
let (node, reparser) = find_reparsable_node(root, edit.delete)?;
let text = get_text_after_edit(node.clone().into(), edit);
- let lexed = parser::LexedStr::new(Edition::CURRENT, text.as_str());
+ let lexed = parser::LexedStr::new(edition, text.as_str());
let parser_input = lexed.to_input();
if !is_balanced(&lexed) {
return None;
@@ -201,6 +199,7 @@ mod tests {
before.tree().syntax(),
&edit,
before.errors.as_deref().unwrap_or_default().iter().cloned(),
+ Edition::CURRENT,
)
.unwrap();
assert_eq!(range.len(), reparsed_len.into(), "reparsed fragment has wrong length");