diff options
Diffstat (limited to 'crates/libsyntax2/src/lib.rs')
-rw-r--r-- | crates/libsyntax2/src/lib.rs | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/crates/libsyntax2/src/lib.rs b/crates/libsyntax2/src/lib.rs index 9f9f3ab3a..b3efe2a18 100644 --- a/crates/libsyntax2/src/lib.rs +++ b/crates/libsyntax2/src/lib.rs | |||
@@ -44,12 +44,33 @@ pub mod text_utils; | |||
44 | pub use { | 44 | pub use { |
45 | text_unit::{TextRange, TextUnit}, | 45 | text_unit::{TextRange, TextUnit}, |
46 | smol_str::SmolStr, | 46 | smol_str::SmolStr, |
47 | ast::{AstNode, ParsedFile}, | 47 | ast::AstNode, |
48 | lexer::{tokenize, Token}, | 48 | lexer::{tokenize, Token}, |
49 | syntax_kinds::SyntaxKind, | 49 | syntax_kinds::SyntaxKind, |
50 | yellow::{SyntaxNode, SyntaxNodeRef, OwnedRoot, RefRoot, TreeRoot, SyntaxError}, | 50 | yellow::{SyntaxNode, SyntaxNodeRef, OwnedRoot, RefRoot, TreeRoot, SyntaxError}, |
51 | }; | 51 | }; |
52 | 52 | ||
53 | #[derive(Clone, Debug)] | ||
54 | pub struct ParsedFile { | ||
55 | root: SyntaxNode | ||
56 | } | ||
57 | |||
58 | impl ParsedFile { | ||
59 | pub fn parse(text: &str) -> Self { | ||
60 | let root = ::parse(text); | ||
61 | ParsedFile { root } | ||
62 | } | ||
63 | pub fn ast(&self) -> ast::File { | ||
64 | ast::File::cast(self.syntax()).unwrap() | ||
65 | } | ||
66 | pub fn syntax(&self) -> SyntaxNodeRef { | ||
67 | self.root.borrowed() | ||
68 | } | ||
69 | pub fn errors(&self) -> Vec<SyntaxError> { | ||
70 | self.syntax().root.syntax_root().errors.clone() | ||
71 | } | ||
72 | |||
73 | } | ||
53 | 74 | ||
54 | pub fn parse(text: &str) -> SyntaxNode { | 75 | pub fn parse(text: &str) -> SyntaxNode { |
55 | let tokens = tokenize(&text); | 76 | let tokens = tokenize(&text); |