parser/
syntax_kind.rs

1//! Defines [`SyntaxKind`] -- a fieldless enum of all possible syntactic
2//! constructs of the Rust language.
3
4#[rustfmt::skip]
5mod generated;
6
7use crate::Edition;
8
9#[allow(unreachable_pub)]
10pub use self::generated::SyntaxKind;
11
12impl From<u16> for SyntaxKind {
13    #[inline]
14    fn from(d: u16) -> SyntaxKind {
15        assert!(d <= (SyntaxKind::__LAST as u16));
16        unsafe { std::mem::transmute::<u16, SyntaxKind>(d) }
17    }
18}
19
20impl From<SyntaxKind> for u16 {
21    #[inline]
22    fn from(k: SyntaxKind) -> u16 {
23        k as u16
24    }
25}
26
27impl SyntaxKind {
28    #[inline]
29    pub fn is_trivia(self) -> bool {
30        matches!(self, SyntaxKind::WHITESPACE | SyntaxKind::COMMENT)
31    }
32
33    /// Returns true if this is an identifier or a keyword.
34    #[inline]
35    pub fn is_any_identifier(self) -> bool {
36        // Assuming no edition removed keywords...
37        self == SyntaxKind::IDENT || self.is_keyword(Edition::LATEST)
38    }
39}