aboutsummaryrefslogtreecommitdiff
path: root/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs45
1 files changed, 4 insertions, 41 deletions
diff --git a/src/lib.rs b/src/lib.rs
index cf2e97024..619ad62e5 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -26,53 +26,22 @@ mod yellow;
26 26
27pub mod syntax_kinds; 27pub mod syntax_kinds;
28pub use text_unit::{TextRange, TextUnit}; 28pub use text_unit::{TextRange, TextUnit};
29pub use tree::{File, Node, SyntaxKind, Token}; 29pub use tree::{SyntaxKind, Token};
30pub(crate) use tree::{ErrorMsg, FileBuilder, Sink, GreenBuilder}; 30pub(crate) use tree::{Sink, GreenBuilder};
31pub use lexer::{next_token, tokenize}; 31pub use lexer::{next_token, tokenize};
32pub use yellow::SyntaxNode; 32pub use yellow::SyntaxNode;
33pub(crate) use yellow::SError; 33pub(crate) use yellow::SError;
34pub use parser::{parse, parse_green}; 34pub use parser::{parse_green};
35 35
36/// Utilities for simple uses of the parser. 36/// Utilities for simple uses of the parser.
37pub mod utils { 37pub mod utils {
38 use std::fmt::Write; 38 use std::fmt::Write;
39 39
40 use {File, Node, SyntaxNode}; 40 use {SyntaxNode};
41 use std::collections::BTreeSet; 41 use std::collections::BTreeSet;
42 use SError; 42 use SError;
43 43
44 /// Parse a file and create a string representation of the resulting parse tree. 44 /// Parse a file and create a string representation of the resulting parse tree.
45 pub fn dump_tree(file: &File) -> String {
46 let mut result = String::new();
47 go(file.root(), &mut result, 0);
48 return result;
49
50 fn go(node: Node, buff: &mut String, level: usize) {
51 buff.push_str(&String::from(" ").repeat(level));
52 write!(buff, "{:?}\n", node).unwrap();
53 let my_errors = node.errors().filter(|e| e.after_child().is_none());
54 let parent_errors = node.parent()
55 .into_iter()
56 .flat_map(|n| n.errors())
57 .filter(|e| e.after_child() == Some(node));
58
59 for err in my_errors {
60 buff.push_str(&String::from(" ").repeat(level));
61 write!(buff, "err: `{}`\n", err.message()).unwrap();
62 }
63
64 for child in node.children() {
65 go(child, buff, level + 1)
66 }
67
68 for err in parent_errors {
69 buff.push_str(&String::from(" ").repeat(level));
70 write!(buff, "err: `{}`\n", err.message()).unwrap();
71 }
72 }
73 }
74
75 /// Parse a file and create a string representation of the resulting parse tree.
76 pub fn dump_tree_green(syntax: &SyntaxNode) -> String { 45 pub fn dump_tree_green(syntax: &SyntaxNode) -> String {
77 let mut errors: BTreeSet<_> = syntax.root.errors.iter().cloned().collect(); 46 let mut errors: BTreeSet<_> = syntax.root.errors.iter().cloned().collect();
78 let mut result = String::new(); 47 let mut result = String::new();
@@ -82,12 +51,6 @@ pub mod utils {
82 fn go(node: &SyntaxNode, buff: &mut String, level: usize, errors: &mut BTreeSet<SError>) { 51 fn go(node: &SyntaxNode, buff: &mut String, level: usize, errors: &mut BTreeSet<SError>) {
83 buff.push_str(&String::from(" ").repeat(level)); 52 buff.push_str(&String::from(" ").repeat(level));
84 write!(buff, "{:?}\n", node).unwrap(); 53 write!(buff, "{:?}\n", node).unwrap();
85// let my_errors = node.errors().filter(|e| e.after_child().is_none());
86// let parent_errors = node.parent()
87// .into_iter()
88// .flat_map(|n| n.errors())
89// .filter(|e| e.after_child() == Some(node));
90//
91 let my_errors: Vec<_> = errors.iter().filter(|e| e.offset == node.range().start()) 54 let my_errors: Vec<_> = errors.iter().filter(|e| e.offset == node.range().start())
92 .cloned().collect(); 55 .cloned().collect();
93 for err in my_errors { 56 for err in my_errors {