1pub mod caught_panic;
5mod dump;
6mod generated {
7 pub(crate) mod kinds;
8}
9pub mod tree;
10
11use std::rc::Rc;
12
13pub use dump::psi_dump;
14pub use generated::kinds::SyntaxKind;
15pub use text_size::{TextRange, TextSize};
16pub use tree::{ElementId, Tree, TreeBuilder};
17
18impl SyntaxKind {
19 pub fn from_raw(raw: u16) -> SyntaxKind {
20 generated::kinds::ALL[raw as usize]
21 }
22
23 pub fn is_trivia(self) -> bool {
24 matches!(
25 self,
26 SyntaxKind::WHITE_SPACE
27 | SyntaxKind::EOL_COMMENT
28 | SyntaxKind::BLOCK_COMMENT
29 | SyntaxKind::SHEBANG_COMMENT
30 | SyntaxKind::DOC_COMMENT
31 )
32 }
33}
34
35#[derive(Debug, Clone)]
37pub struct Parse {
38 pub tree: Rc<Tree>,
39 pub error_messages: Vec<String>,
40 pub missed_tokens: Vec<MissedTokens>,
42}
43
44impl Parse {
45 pub fn has_errors(&self) -> bool {
46 !self.error_messages.is_empty()
47 }
48
49 pub fn first_missed_tokens(&self) -> Option<&MissedTokens> {
51 self.missed_tokens.iter().min_by_key(|m| m.element)
52 }
53}
54
55#[derive(Debug, Clone, PartialEq, Eq)]
60pub struct MissedTokens {
61 pub element: ElementId,
63 pub tokens: Vec<&'static str>,
65 pub text: String,
67}
68
69impl MissedTokens {
70 pub fn message(&self) -> String {
71 format!("Tokens [{}] were not inserted into the tree. Language: kotlin", self.tokens.join(", "))
72 }
73
74 pub fn log(&self) -> String {
76 format!("ERROR: {}\nDetails:\nmissedTokensFragment.txt\n{}", self.message(), self.text)
77 }
78
79 pub fn assertion_error(&self) -> String {
81 format!("java.lang.AssertionError: {}", self.message())
82 }
83}