rowan_peg/
bootstarp.rs

1// Generated by rowan-peg, do not edit it
2use rowan::{ast::{support, AstChildren, AstNode}, Language};
3
4macro_rules! classes {
5    ($($pat:tt)*) => {
6        |s, i| ::char_classes::FirstElem::first_elem(&s[i..])
7            .filter(::char_classes::any!($($pat)*))
8            .map_or(::peg::RuleResult::Failed, |ch| {
9                ::peg::RuleResult::Matched(i+ch.len_utf8(), ())
10            })
11    };
12}
13macro_rules! decl_ast_node {
14    ($node:ident, $kind:ident) => {
15        #[derive(Debug, Clone, PartialEq, Eq, Hash)]
16        pub struct $node(SyntaxNode);
17        impl AstNode for $node {
18            type Language = Lang;
19
20            fn syntax(&self) -> &rowan::SyntaxNode<Self::Language> {
21                &self.0
22            }
23
24            fn can_cast(kind: <Self::Language as Language>::Kind) -> bool {
25                kind == SyntaxKind::$kind
26            }
27
28            fn cast(node: rowan::SyntaxNode<Self::Language>) -> Option<Self> {
29                if Self::can_cast(node.kind()) {
30                    Some(Self(node))
31                } else {
32                    None
33                }
34            }
35        }
36        impl core::fmt::Display for $node {
37            fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
38                core::fmt::Display::fmt(self.syntax(), f)
39            }
40        }
41    };
42}
43
44#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
45pub enum Lang {}
46impl Language for Lang {
47    type Kind = SyntaxKind;
48
49    fn kind_to_raw(kind: Self::Kind) -> ::rowan::SyntaxKind {
50        kind.into()
51    }
52
53    fn kind_from_raw(raw: ::rowan::SyntaxKind) -> Self::Kind {
54        raw.into()
55    }
56}
57
58pub type SyntaxNode = ::rowan::SyntaxNode<Lang>;
59pub type SyntaxToken = ::rowan::SyntaxToken<Lang>;
60
61::peg::parser!(pub grammar parser<'b>(state: &'b ::rowan_peg_utils::ParseState<'input>) for str {
62    use SyntaxKind::*;
63
64    rule comment() = ()(()(g:({state.guard_none()})((g:({state.quiet().guard_token(COMMENT)}) s:$((quiet!{(()(g:({state.guard_none()})(";" (g:({state.guard_none()})(#{classes!(^"\n")}){g.accept_none()})*){g.accept_none()}))})) {g.accept_token(s)})){g.accept_none()}) / expected!("comment"))
65    rule whitespace() = ()(()(g:({state.guard_none()})((g:({state.quiet().guard_token(WHITESPACE)}) s:$((quiet!{(()(g:({state.guard_none()})((g:({state.guard_none()})(#{classes!(" \t\r\n")}){g.accept_none()})*){g.accept_none()}))})) {g.accept_token(s)})){g.accept_none()}))
66    pub rule trivia() = _
67    rule _() = (g:({state.guard(TRIVIA)}) ((()(g:({state.guard_none()})(whitespace() (g:({state.guard_none()})((()(g:({state.guard_none()})(comment() whitespace()){g.accept_none()}))){g.accept_none()})*){g.accept_none()}))) {g.accept()})
68    rule ident() = ()(()(g:({state.guard_none()})((g:({state.quiet().guard_token(IDENT)}) s:$((quiet!{(()(g:({state.guard_none()})(!(g:({state.quiet().guard_none()}) (quiet!{#{classes!("0-9")}}) {g.accept_none()}) (g:({state.guard_none()})((()(g:({state.guard_none()})(#{classes!("0-9a-zA-Z_-")}){g.accept_none()}) / ()(g:({state.guard_none()})(#{classes!(^"\u{00}-\u{a0}")}){g.accept_none()}))){g.accept_none()})+){g.accept_none()}))})) {g.accept_token(s)})){g.accept_none()}) / expected!("ident"))
69    rule number() = ()(()(g:({state.guard_none()})((g:({state.quiet().guard_token(NUMBER)}) s:$((quiet!{(()(g:({state.guard_none()})((g:({state.guard_none()})(#{classes!("0-9")}){g.accept_none()})+){g.accept_none()}))})) {g.accept_token(s)})){g.accept_none()}) / expected!("number"))
70    rule string() = ()(()(g:({state.guard_none()})((g:({state.quiet().guard_token(STRING)}) s:$((quiet!{(()(g:({state.guard_none()})("\"" (g:({state.guard_none()})(#{classes!(^"\"\r\n")}){g.accept_none()})* "\""){g.accept_none()}))})) {g.accept_token(s)})){g.accept_none()}) / expected!("string"))
71    rule matches() = ()(()(g:({state.guard_none()})((g:({state.quiet().guard_token(MATCHES)}) s:$((quiet!{(()(g:({state.guard_none()})("<" (g:({state.guard_none()})(#{classes!(^"\x3e\r\n")}){g.accept_none()})* ">"){g.accept_none()}))})) {g.accept_token(s)})){g.accept_none()}) / expected!("matches"))
72    rule label() = (g:({state.guard(LABEL)}) ((()(g:({state.guard_none()})(ident()){g.accept_none()}) / ()(g:({state.guard_none()})(string()){g.accept_none()}))) {g.accept()})
73    rule repeat_rest() = (g:({state.guard(REPEAT_REST)}) ((()(g:({state.guard_none()})((g:({state.quiet().guard_token(STAR)}) s:$((quiet!{"*"})) {g.accept_token(s)}) (g:({state.guard_none()})((()(g:({state.guard_none()})(number()){g.accept_none()}))){g.accept_none()})?){g.accept_none()}))) {g.accept()})
74    rule repeat() = (g:({state.guard(REPEAT)}) ((()(g:({state.guard_none()})((g:({state.quiet().guard_token(PLUS)}) s:$((quiet!{"+"})) {g.accept_token(s)})){g.accept_none()}) / ()(g:({state.guard_none()})(number() (g:({state.guard_none()})((()(g:({state.guard_none()})(repeat_rest()){g.accept_none()}))){g.accept_none()})?){g.accept_none()}) / ()(g:({state.guard_none()})(repeat_rest()){g.accept_none()}))) {g.accept()})
75    rule pat_expect() = (g:({state.guard(PAT_EXPECT)}) ((()(g:({state.guard_none()})((g:({state.quiet().guard_token(AT)}) s:$((quiet!{"@"})) {g.accept_token(s)}) label()){g.accept_none()}))) {g.accept()})
76    rule pat_atom() = (g:({state.guard(PAT_ATOM)}) ((()(g:({state.guard_none()})(ident() !(g:({state.quiet().guard_none()}) (quiet!{(()(g:({state.guard_none()})(_() (g:({state.quiet().guard_token(EQ)}) s:$((quiet!{"="})) {g.accept_token(s)})){g.accept_none()}))}) {g.accept_none()})){g.accept_none()}) / ()(g:({state.guard_none()})(string()){g.accept_none()}) / ()(g:({state.guard_none()})(matches()){g.accept_none()}) / ()(g:({state.guard_none()})((g:({state.quiet().guard_token(L_BRACK)}) s:$((quiet!{"["})) {g.accept_token(s)}) _() pat_choice() _() (g:({state.quiet().guard_token(R_BRACK)}) s:$((quiet!{"]"})) {g.accept_token(s)})){g.accept_none()}) / ()(g:({state.guard_none()})((g:({state.quiet().guard_token(L_PAREN)}) s:$((quiet!{"("})) {g.accept_token(s)}) _() pat_choice() _() (g:({state.quiet().guard_token(R_PAREN)}) s:$((quiet!{")"})) {g.accept_token(s)})){g.accept_none()}))) {g.accept()})
77    rule pat_op() = (g:({state.guard(PAT_OP)}) ((()(g:({state.guard_none()})((g:({state.quiet().guard_token(AMP)}) s:$((quiet!{"&"})) {g.accept_token(s)}) pat_atom()){g.accept_none()}) / ()(g:({state.guard_none()})((g:({state.quiet().guard_token(BANG)}) s:$((quiet!{"!"})) {g.accept_token(s)}) pat_atom()){g.accept_none()}) / ()(g:({state.guard_none()})((g:({state.quiet().guard_token(TILDE)}) s:$((quiet!{"~"})) {g.accept_token(s)}) pat_atom()){g.accept_none()}) / ()(g:({state.guard_none()})((g:({state.quiet().guard_token(DOLLAR)}) s:$((quiet!{"$"})) {g.accept_token(s)}) pat_atom()){g.accept_none()}) / ()(g:({state.guard_none()})(repeat() _() pat_atom()){g.accept_none()}) / ()(g:({state.guard_none()})(pat_atom()){g.accept_none()}))) {g.accept()})
78    rule pat_list() = (g:({state.guard(PAT_LIST)}) ((()(g:({state.guard_none()})(pat_op() (g:({state.guard_none()})((()(g:({state.guard_none()})(_() pat_op()){g.accept_none()}))){g.accept_none()})*){g.accept_none()}))) {g.accept()})
79    rule pat_choice() = (g:({state.guard(PAT_CHOICE)}) ((()(g:({state.guard_none()})(pat_list() (g:({state.guard_none()})((()(g:({state.guard_none()})(_() (g:({state.quiet().guard_token(SLASH)}) s:$((quiet!{"/"})) {g.accept_token(s)}) _() pat_list()){g.accept_none()}))){g.accept_none()})* (g:({state.guard_none()})((()(g:({state.guard_none()})(_() pat_expect()){g.accept_none()}))){g.accept_none()})?){g.accept_none()}))) {g.accept()})
80    rule named() = (g:({state.guard(NAMED)}) ((()(g:({state.guard_none()})(ident() _() (g:({state.quiet().guard_token(EQ)}) s:$((quiet!{"="})) {g.accept_token(s)}) _()){g.accept_none()}))) {g.accept()})
81    rule decl() = (g:({state.guard(DECL)}) ((()(g:({state.guard_none()})(named() pat_choice()){g.accept_none()}))) {g.accept()})
82    rule export() = (g:({state.guard(EXPORT)}) ((()(g:({state.guard_none()})((g:({state.guard_none()})((()(g:({state.guard_none()})(named()){g.accept_none()}))){g.accept_none()})? ident()){g.accept_none()}))) {g.accept()})
83    rule export_list() = (g:({state.guard(EXPORT_LIST)}) ((()(g:({state.guard_none()})((g:({state.quiet().guard_token(EXPORTS_KW)}) s:$((quiet!{"exports"})) {g.accept_token(s)}) _() (g:({state.quiet().guard_token(L_BRACK)}) s:$((quiet!{"["})) {g.accept_token(s)}) _() (g:({state.guard_none()})((()(g:({state.guard_none()})(export() _()){g.accept_none()}))){g.accept_none()})* (g:({state.quiet().guard_token(R_BRACK)}) s:$((quiet!{"]"})) {g.accept_token(s)})){g.accept_none()}))) {g.accept()})
84    pub rule decl_list() = (g:({state.guard(DECL_LIST)}) ((()(g:({state.guard_none()})(_() (g:({state.guard_none()})((()(g:({state.guard_none()})(export_list() _()){g.accept_none()}))){g.accept_none()})? (g:({state.guard_none()})((()(g:({state.guard_none()})(decl() _()){g.accept_none()}))){g.accept_none()})+){g.accept_none()}))) {g.accept()})
85});
86#[repr(u16)]
87#[allow(non_camel_case_types)]
88#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
89pub enum SyntaxKind {
90    COMMENT = 0,
91    WHITESPACE,
92    TRIVIA,
93    IDENT,
94    NUMBER,
95    STRING,
96    MATCHES,
97    LABEL,
98    REPEAT_REST,
99    STAR,
100    REPEAT,
101    PLUS,
102    PAT_EXPECT,
103    AT,
104    PAT_ATOM,
105    L_PAREN,
106    R_PAREN,
107    PAT_OP,
108    AMP,
109    BANG,
110    TILDE,
111    DOLLAR,
112    PAT_LIST,
113    PAT_CHOICE,
114    SLASH,
115    NAMED,
116    EQ,
117    DECL,
118    EXPORT,
119    EXPORT_LIST,
120    EXPORTS_KW,
121    L_BRACK,
122    R_BRACK,
123    DECL_LIST,
124}
125impl From<::rowan::SyntaxKind> for SyntaxKind { fn from(kind: ::rowan::SyntaxKind) -> Self { ::core::assert!(kind.0 <= Self::DECL_LIST as u16); unsafe { ::core::mem::transmute::<u16, SyntaxKind>(kind.0) } } }
126impl From<SyntaxKind> for ::rowan::SyntaxKind { fn from(kind: SyntaxKind) -> Self { ::rowan::SyntaxKind(kind as u16) } }
127decl_ast_node!(Trivia, TRIVIA);
128impl Trivia {
129}
130decl_ast_node!(Label, LABEL);
131impl Label {
132    pub fn ident(&self) -> Option<SyntaxToken> {
133        support::token(self.syntax(), SyntaxKind::IDENT)
134    }
135    pub fn string(&self) -> Option<SyntaxToken> {
136        support::token(self.syntax(), SyntaxKind::STRING)
137    }
138}
139decl_ast_node!(RepeatRest, REPEAT_REST);
140impl RepeatRest {
141    pub fn number(&self) -> Option<SyntaxToken> {
142        support::token(self.syntax(), SyntaxKind::NUMBER)
143    }
144    pub fn star(&self) -> SyntaxToken {
145        support::token(self.syntax(), SyntaxKind::STAR).unwrap()
146    }
147}
148decl_ast_node!(Repeat, REPEAT);
149impl Repeat {
150    pub fn number(&self) -> Option<SyntaxToken> {
151        support::token(self.syntax(), SyntaxKind::NUMBER)
152    }
153    pub fn plus(&self) -> Option<SyntaxToken> {
154        support::token(self.syntax(), SyntaxKind::PLUS)
155    }
156    pub fn repeat_rest(&self) -> Option<RepeatRest> {
157        support::child(self.syntax())
158    }
159}
160decl_ast_node!(PatExpect, PAT_EXPECT);
161impl PatExpect {
162    pub fn at(&self) -> SyntaxToken {
163        support::token(self.syntax(), SyntaxKind::AT).unwrap()
164    }
165    pub fn label(&self) -> Label {
166        support::child(self.syntax()).unwrap()
167    }
168}
169decl_ast_node!(PatAtom, PAT_ATOM);
170impl PatAtom {
171    pub fn ident(&self) -> Option<SyntaxToken> {
172        support::token(self.syntax(), SyntaxKind::IDENT)
173    }
174    pub fn l_brack(&self) -> Option<SyntaxToken> {
175        support::token(self.syntax(), SyntaxKind::L_BRACK)
176    }
177    pub fn l_paren(&self) -> Option<SyntaxToken> {
178        support::token(self.syntax(), SyntaxKind::L_PAREN)
179    }
180    pub fn matches(&self) -> Option<SyntaxToken> {
181        support::token(self.syntax(), SyntaxKind::MATCHES)
182    }
183    pub fn pat_choice(&self) -> Option<PatChoice> {
184        support::child(self.syntax())
185    }
186    pub fn r_brack(&self) -> Option<SyntaxToken> {
187        support::token(self.syntax(), SyntaxKind::R_BRACK)
188    }
189    pub fn r_paren(&self) -> Option<SyntaxToken> {
190        support::token(self.syntax(), SyntaxKind::R_PAREN)
191    }
192    pub fn string(&self) -> Option<SyntaxToken> {
193        support::token(self.syntax(), SyntaxKind::STRING)
194    }
195    pub fn trivias(&self) -> AstChildren<Trivia> {
196        support::children(self.syntax())
197    }
198}
199decl_ast_node!(PatOp, PAT_OP);
200impl PatOp {
201    pub fn amp(&self) -> Option<SyntaxToken> {
202        support::token(self.syntax(), SyntaxKind::AMP)
203    }
204    pub fn bang(&self) -> Option<SyntaxToken> {
205        support::token(self.syntax(), SyntaxKind::BANG)
206    }
207    pub fn dollar(&self) -> Option<SyntaxToken> {
208        support::token(self.syntax(), SyntaxKind::DOLLAR)
209    }
210    pub fn pat_atom(&self) -> PatAtom {
211        support::child(self.syntax()).unwrap()
212    }
213    pub fn repeat(&self) -> Option<Repeat> {
214        support::child(self.syntax())
215    }
216    pub fn tilde(&self) -> Option<SyntaxToken> {
217        support::token(self.syntax(), SyntaxKind::TILDE)
218    }
219    pub fn trivia(&self) -> Option<Trivia> {
220        support::child(self.syntax())
221    }
222}
223decl_ast_node!(PatList, PAT_LIST);
224impl PatList {
225    pub fn pat_ops(&self) -> AstChildren<PatOp> {
226        support::children(self.syntax())
227    }
228    pub fn trivias(&self) -> AstChildren<Trivia> {
229        support::children(self.syntax())
230    }
231}
232decl_ast_node!(PatChoice, PAT_CHOICE);
233impl PatChoice {
234    pub fn pat_expect(&self) -> Option<PatExpect> {
235        support::child(self.syntax())
236    }
237    pub fn pat_lists(&self) -> AstChildren<PatList> {
238        support::children(self.syntax())
239    }
240    pub fn trivias(&self) -> AstChildren<Trivia> {
241        support::children(self.syntax())
242    }
243}
244decl_ast_node!(Named, NAMED);
245impl Named {
246    pub fn eq(&self) -> SyntaxToken {
247        support::token(self.syntax(), SyntaxKind::EQ).unwrap()
248    }
249    pub fn ident(&self) -> SyntaxToken {
250        support::token(self.syntax(), SyntaxKind::IDENT).unwrap()
251    }
252    pub fn trivias(&self) -> AstChildren<Trivia> {
253        support::children(self.syntax())
254    }
255}
256decl_ast_node!(Decl, DECL);
257impl Decl {
258    pub fn named(&self) -> Named {
259        support::child(self.syntax()).unwrap()
260    }
261    pub fn pat_choice(&self) -> PatChoice {
262        support::child(self.syntax()).unwrap()
263    }
264}
265decl_ast_node!(Export, EXPORT);
266impl Export {
267    pub fn ident(&self) -> SyntaxToken {
268        support::token(self.syntax(), SyntaxKind::IDENT).unwrap()
269    }
270    pub fn named(&self) -> Option<Named> {
271        support::child(self.syntax())
272    }
273}
274decl_ast_node!(ExportList, EXPORT_LIST);
275impl ExportList {
276    pub fn exports(&self) -> AstChildren<Export> {
277        support::children(self.syntax())
278    }
279    pub fn exports_kw(&self) -> SyntaxToken {
280        support::token(self.syntax(), SyntaxKind::EXPORTS_KW).unwrap()
281    }
282    pub fn l_brack(&self) -> SyntaxToken {
283        support::token(self.syntax(), SyntaxKind::L_BRACK).unwrap()
284    }
285    pub fn r_brack(&self) -> SyntaxToken {
286        support::token(self.syntax(), SyntaxKind::R_BRACK).unwrap()
287    }
288    pub fn trivias(&self) -> AstChildren<Trivia> {
289        support::children(self.syntax())
290    }
291}
292decl_ast_node!(DeclList, DECL_LIST);
293impl DeclList {
294    pub fn decls(&self) -> AstChildren<Decl> {
295        support::children(self.syntax())
296    }
297    pub fn export_list(&self) -> Option<ExportList> {
298        support::child(self.syntax())
299    }
300    pub fn trivias(&self) -> AstChildren<Trivia> {
301        support::children(self.syntax())
302    }
303}
304