Skip to main content

rowan_peg/
bootstarp.rs

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