ra_ap_parser/
syntax_kind.rs

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