update tests
This commit is contained in:
@@ -31,7 +31,7 @@ pub mod ast;
|
||||
#[doc(hidden)]
|
||||
pub mod fuzz;
|
||||
|
||||
use std::sync::Arc;
|
||||
use std::{sync::Arc, fmt::Write};
|
||||
|
||||
use ra_text_edit::AtomTextEdit;
|
||||
|
||||
@@ -68,6 +68,14 @@ impl Parse {
|
||||
Err(self.errors)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn debug_dump(&self) -> String {
|
||||
let mut buf = self.tree.syntax().debug_dump();
|
||||
for err in self.errors.iter() {
|
||||
writeln!(buf, "err: `{}`", err).unwrap();
|
||||
}
|
||||
buf
|
||||
}
|
||||
}
|
||||
|
||||
/// `SourceFile` represents a parse tree for a single Rust file.
|
||||
@@ -83,6 +91,12 @@ impl SourceFile {
|
||||
TreeArc::cast(root)
|
||||
}
|
||||
|
||||
pub fn parse2(text: &str) -> Parse {
|
||||
let (green, errors) = parsing::parse_text(text);
|
||||
let tree = SourceFile::new(green);
|
||||
Parse { tree, errors: Arc::new(errors) }
|
||||
}
|
||||
|
||||
pub fn parse(text: &str) -> TreeArc<SourceFile> {
|
||||
let (green, _errors) = parsing::parse_text(text);
|
||||
SourceFile::new(green)
|
||||
|
||||
@@ -166,9 +166,11 @@ fn merge_errors(
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use std::sync::Arc;
|
||||
|
||||
use test_utils::{extract_range, assert_eq_text};
|
||||
|
||||
use crate::{SourceFile, AstNode};
|
||||
use crate::{SourceFile, AstNode, Parse};
|
||||
use super::*;
|
||||
|
||||
fn do_check(before: &str, replace_with: &str, reparsed_len: u32) {
|
||||
@@ -176,19 +178,19 @@ mod tests {
|
||||
let edit = AtomTextEdit::replace(range, replace_with.to_owned());
|
||||
let after = edit.apply(before.clone());
|
||||
|
||||
let fully_reparsed = SourceFile::parse(&after);
|
||||
let fully_reparsed = SourceFile::parse2(&after);
|
||||
let incrementally_reparsed = {
|
||||
let f = SourceFile::parse(&before);
|
||||
let edit = AtomTextEdit { delete: range, insert: replace_with.to_string() };
|
||||
let (green, new_errors, range) =
|
||||
incremental_reparse(f.syntax(), &edit, f.errors()).unwrap();
|
||||
assert_eq!(range.len(), reparsed_len.into(), "reparsed fragment has wrong length");
|
||||
SourceFile::new(green, new_errors)
|
||||
Parse { tree: SourceFile::new(green), errors: Arc::new(new_errors) }
|
||||
};
|
||||
|
||||
assert_eq_text!(
|
||||
&fully_reparsed.syntax().debug_dump(),
|
||||
&incrementally_reparsed.syntax().debug_dump(),
|
||||
&fully_reparsed.tree.syntax().debug_dump(),
|
||||
&incrementally_reparsed.tree.syntax().debug_dump(),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -256,37 +256,18 @@ impl SyntaxNode {
|
||||
}
|
||||
|
||||
pub fn debug_dump(&self) -> String {
|
||||
let mut errors: Vec<_> = match self.ancestors().find_map(SourceFile::cast) {
|
||||
Some(file) => file.errors(),
|
||||
None => self.root_data().to_vec(),
|
||||
};
|
||||
errors.sort_by_key(|e| e.offset());
|
||||
let mut err_pos = 0;
|
||||
let mut level = 0;
|
||||
let mut buf = String::new();
|
||||
macro_rules! indent {
|
||||
() => {
|
||||
for _ in 0..level {
|
||||
buf.push_str(" ");
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
for event in self.preorder_with_tokens() {
|
||||
match event {
|
||||
WalkEvent::Enter(element) => {
|
||||
indent!();
|
||||
for _ in 0..level {
|
||||
buf.push_str(" ");
|
||||
}
|
||||
match element {
|
||||
SyntaxElement::Node(node) => writeln!(buf, "{:?}", node).unwrap(),
|
||||
SyntaxElement::Token(token) => {
|
||||
writeln!(buf, "{:?}", token).unwrap();
|
||||
let off = token.range().end();
|
||||
while err_pos < errors.len() && errors[err_pos].offset() <= off {
|
||||
indent!();
|
||||
writeln!(buf, "err: `{}`", errors[err_pos]).unwrap();
|
||||
err_pos += 1;
|
||||
}
|
||||
}
|
||||
SyntaxElement::Token(token) => writeln!(buf, "{:?}", token).unwrap(),
|
||||
}
|
||||
level += 1;
|
||||
}
|
||||
@@ -295,9 +276,6 @@ impl SyntaxNode {
|
||||
}
|
||||
|
||||
assert_eq!(level, 0);
|
||||
for err in errors[err_pos..].iter() {
|
||||
writeln!(buf, "err: `{}`", err).unwrap();
|
||||
}
|
||||
|
||||
buf
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user