pub mod caught_panic;
mod dump;
mod generated {
pub(crate) mod kinds;
}
pub mod tree;
use std::rc::Rc;
pub use dump::psi_dump;
pub use generated::kinds::SyntaxKind;
pub use text_size::{TextRange, TextSize};
pub use tree::{ElementId, Tree, TreeBuilder};
impl SyntaxKind {
pub fn from_raw(raw: u16) -> SyntaxKind {
generated::kinds::ALL[raw as usize]
}
pub fn is_trivia(self) -> bool {
matches!(
self,
SyntaxKind::WHITE_SPACE
| SyntaxKind::EOL_COMMENT
| SyntaxKind::BLOCK_COMMENT
| SyntaxKind::SHEBANG_COMMENT
| SyntaxKind::DOC_COMMENT
)
}
}
#[derive(Debug, Clone)]
pub struct Parse {
pub tree: Rc<Tree>,
pub error_messages: Vec<String>,
pub missed_tokens: Vec<MissedTokens>,
}
impl Parse {
pub fn has_errors(&self) -> bool {
!self.error_messages.is_empty()
}
pub fn first_missed_tokens(&self) -> Option<&MissedTokens> {
self.missed_tokens.iter().min_by_key(|m| m.element)
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct MissedTokens {
pub element: ElementId,
pub tokens: Vec<&'static str>,
pub text: String,
}
impl MissedTokens {
pub fn message(&self) -> String {
format!("Tokens [{}] were not inserted into the tree. Language: kotlin", self.tokens.join(", "))
}
pub fn log(&self) -> String {
format!("ERROR: {}\nDetails:\nmissedTokensFragment.txt\n{}", self.message(), self.text)
}
pub fn assertion_error(&self) -> String {
format!("java.lang.AssertionError: {}", self.message())
}
}