1use oak_core::{ElementType, UniversalElementRole};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub enum CoqElementType {
7 Whitespace,
9 Newline,
11 Comment,
13 StringLiteral,
16 NumberLiteral,
18 Identifier,
20
21 Theorem,
24 Lemma,
26 Remark,
28 Fact,
30 Corollary,
32 Proposition,
34 Definition,
36 Example,
38 Fixpoint,
40 CoFixpoint,
42 Inductive,
44 CoInductive,
46 Record,
48 Structure,
50 Variant,
52 Module,
54 Section,
56 End,
58 Require,
60 Import,
62 Export,
64 Proof,
66 Qed,
68 Defined,
70 Admitted,
72 If,
74 Then,
76 Else,
78 Type,
80 Prop,
82 Set,
84 Check,
86 Print,
88 Search,
90 Locate,
92 About,
94 Match,
96 With,
98 Forall,
100 Exists,
102 Fun,
104 Let,
106 In,
108 Class,
110 Instance,
112 Intros,
114 Simpl,
116 Reflexivity,
118 Rewrite,
120 Apply,
122 Exact,
124 Assumption,
126 Auto,
128 Trivial,
130 Discriminate,
132 Injection,
134 Inversion,
136 Destruct,
138 Induction,
140 Generalize,
142 Clear,
144 Unfold,
146 Fold,
148 Compute,
150 Eval,
152 Show,
154 Goal,
156 Goals,
158 Undo,
160 Restart,
162 Admit,
164 Abort,
166 Parameter,
168 Axiom,
170 Variable,
172 Hypothesis,
174 Chapter,
176 Open,
178 Close,
180 Scope,
182 Notation,
184 Infix,
186 Reserved,
188 Bind,
190 Delimit,
192 Arguments,
194 Implicit,
196 Coercion,
198 Identity,
200 Canonical,
202
203 Arrow,
206 DoubleArrow,
208 Colon,
210 Semicolon,
212 Comma,
214 Dot,
216 Pipe,
218 Underscore,
220 Equal,
222 Plus,
224 Minus,
226 Star,
228 Slash,
230 Percent,
232 Less,
234 Greater,
236 LessEqual,
238 GreaterEqual,
240 NotEqual,
242 Tilde,
244 At,
246 Question,
248 Exclamation,
250 Ampersand,
252 Hash,
254 Dollar,
256 Backslash,
258 Caret,
260 LeftParen,
262 RightParen,
264 LeftBracket,
266 RightBracket,
268 LeftBrace,
270 RightBrace,
272 DoubleColon,
274 DoubleColonEqual,
276 ColonEqual,
278 Turnstile,
280 And,
282 Or,
284 LeftArrow,
286
287 Root,
290 Declaration,
292 Statement,
294 Expression,
296 Error,
298 Eof,
300}
301
302impl ElementType for CoqElementType {
303 type Role = UniversalElementRole;
304
305 fn role(&self) -> Self::Role {
306 match self {
307 _ => UniversalElementRole::None,
308 }
309 }
310}
311
312impl From<crate::lexer::token_type::CoqTokenType> for CoqElementType {
313 fn from(token: crate::lexer::token_type::CoqTokenType) -> Self {
314 match token {
315 crate::lexer::token_type::CoqTokenType::Whitespace => CoqElementType::Whitespace,
316 crate::lexer::token_type::CoqTokenType::Newline => CoqElementType::Newline,
317 crate::lexer::token_type::CoqTokenType::Comment => CoqElementType::Comment,
318 crate::lexer::token_type::CoqTokenType::StringLiteral => CoqElementType::StringLiteral,
319 crate::lexer::token_type::CoqTokenType::NumberLiteral => CoqElementType::NumberLiteral,
320 crate::lexer::token_type::CoqTokenType::Identifier => CoqElementType::Identifier,
321 crate::lexer::token_type::CoqTokenType::Theorem => CoqElementType::Theorem,
322 crate::lexer::token_type::CoqTokenType::Lemma => CoqElementType::Lemma,
323 crate::lexer::token_type::CoqTokenType::Remark => CoqElementType::Remark,
324 crate::lexer::token_type::CoqTokenType::Fact => CoqElementType::Fact,
325 crate::lexer::token_type::CoqTokenType::Corollary => CoqElementType::Corollary,
326 crate::lexer::token_type::CoqTokenType::Proposition => CoqElementType::Proposition,
327 crate::lexer::token_type::CoqTokenType::Definition => CoqElementType::Definition,
328 crate::lexer::token_type::CoqTokenType::Example => CoqElementType::Example,
329 crate::lexer::token_type::CoqTokenType::Fixpoint => CoqElementType::Fixpoint,
330 crate::lexer::token_type::CoqTokenType::CoFixpoint => CoqElementType::CoFixpoint,
331 crate::lexer::token_type::CoqTokenType::Inductive => CoqElementType::Inductive,
332 crate::lexer::token_type::CoqTokenType::CoInductive => CoqElementType::CoInductive,
333 crate::lexer::token_type::CoqTokenType::Record => CoqElementType::Record,
334 crate::lexer::token_type::CoqTokenType::Structure => CoqElementType::Structure,
335 crate::lexer::token_type::CoqTokenType::Variant => CoqElementType::Variant,
336 crate::lexer::token_type::CoqTokenType::Module => CoqElementType::Module,
337 crate::lexer::token_type::CoqTokenType::Section => CoqElementType::Section,
338 crate::lexer::token_type::CoqTokenType::End => CoqElementType::End,
339 crate::lexer::token_type::CoqTokenType::Require => CoqElementType::Require,
340 crate::lexer::token_type::CoqTokenType::Import => CoqElementType::Import,
341 crate::lexer::token_type::CoqTokenType::Export => CoqElementType::Export,
342 crate::lexer::token_type::CoqTokenType::Proof => CoqElementType::Proof,
343 crate::lexer::token_type::CoqTokenType::Qed => CoqElementType::Qed,
344 crate::lexer::token_type::CoqTokenType::Defined => CoqElementType::Defined,
345 crate::lexer::token_type::CoqTokenType::Admitted => CoqElementType::Admitted,
346 crate::lexer::token_type::CoqTokenType::If => CoqElementType::If,
347 crate::lexer::token_type::CoqTokenType::Then => CoqElementType::Then,
348 crate::lexer::token_type::CoqTokenType::Else => CoqElementType::Else,
349 crate::lexer::token_type::CoqTokenType::Type => CoqElementType::Type,
350 crate::lexer::token_type::CoqTokenType::Prop => CoqElementType::Prop,
351 crate::lexer::token_type::CoqTokenType::Set => CoqElementType::Set,
352 crate::lexer::token_type::CoqTokenType::Check => CoqElementType::Check,
353 crate::lexer::token_type::CoqTokenType::Print => CoqElementType::Print,
354 crate::lexer::token_type::CoqTokenType::Search => CoqElementType::Search,
355 crate::lexer::token_type::CoqTokenType::Locate => CoqElementType::Locate,
356 crate::lexer::token_type::CoqTokenType::About => CoqElementType::About,
357 crate::lexer::token_type::CoqTokenType::Match => CoqElementType::Match,
358 crate::lexer::token_type::CoqTokenType::With => CoqElementType::With,
359 crate::lexer::token_type::CoqTokenType::Forall => CoqElementType::Forall,
360 crate::lexer::token_type::CoqTokenType::Exists => CoqElementType::Exists,
361 crate::lexer::token_type::CoqTokenType::Fun => CoqElementType::Fun,
362 crate::lexer::token_type::CoqTokenType::Let => CoqElementType::Let,
363 crate::lexer::token_type::CoqTokenType::In => CoqElementType::In,
364 crate::lexer::token_type::CoqTokenType::Class => CoqElementType::Class,
365 crate::lexer::token_type::CoqTokenType::Instance => CoqElementType::Instance,
366 crate::lexer::token_type::CoqTokenType::Intros => CoqElementType::Intros,
367 crate::lexer::token_type::CoqTokenType::Simpl => CoqElementType::Simpl,
368 crate::lexer::token_type::CoqTokenType::Reflexivity => CoqElementType::Reflexivity,
369 crate::lexer::token_type::CoqTokenType::Rewrite => CoqElementType::Rewrite,
370 crate::lexer::token_type::CoqTokenType::Apply => CoqElementType::Apply,
371 crate::lexer::token_type::CoqTokenType::Exact => CoqElementType::Exact,
372 crate::lexer::token_type::CoqTokenType::Assumption => CoqElementType::Assumption,
373 crate::lexer::token_type::CoqTokenType::Auto => CoqElementType::Auto,
374 crate::lexer::token_type::CoqTokenType::Trivial => CoqElementType::Trivial,
375 crate::lexer::token_type::CoqTokenType::Discriminate => CoqElementType::Discriminate,
376 crate::lexer::token_type::CoqTokenType::Injection => CoqElementType::Injection,
377 crate::lexer::token_type::CoqTokenType::Inversion => CoqElementType::Inversion,
378 crate::lexer::token_type::CoqTokenType::Destruct => CoqElementType::Destruct,
379 crate::lexer::token_type::CoqTokenType::Induction => CoqElementType::Induction,
380 crate::lexer::token_type::CoqTokenType::Generalize => CoqElementType::Generalize,
381 crate::lexer::token_type::CoqTokenType::Clear => CoqElementType::Clear,
382 crate::lexer::token_type::CoqTokenType::Unfold => CoqElementType::Unfold,
383 crate::lexer::token_type::CoqTokenType::Fold => CoqElementType::Fold,
384 crate::lexer::token_type::CoqTokenType::Compute => CoqElementType::Compute,
385 crate::lexer::token_type::CoqTokenType::Eval => CoqElementType::Eval,
386 crate::lexer::token_type::CoqTokenType::Show => CoqElementType::Show,
387 crate::lexer::token_type::CoqTokenType::Goal => CoqElementType::Goal,
388 crate::lexer::token_type::CoqTokenType::Goals => CoqElementType::Goals,
389 crate::lexer::token_type::CoqTokenType::Undo => CoqElementType::Undo,
390 crate::lexer::token_type::CoqTokenType::Restart => CoqElementType::Restart,
391 crate::lexer::token_type::CoqTokenType::Admit => CoqElementType::Admit,
392 crate::lexer::token_type::CoqTokenType::Abort => CoqElementType::Abort,
393 crate::lexer::token_type::CoqTokenType::Parameter => CoqElementType::Parameter,
394 crate::lexer::token_type::CoqTokenType::Axiom => CoqElementType::Axiom,
395 crate::lexer::token_type::CoqTokenType::Variable => CoqElementType::Variable,
396 crate::lexer::token_type::CoqTokenType::Hypothesis => CoqElementType::Hypothesis,
397 crate::lexer::token_type::CoqTokenType::Chapter => CoqElementType::Chapter,
398 crate::lexer::token_type::CoqTokenType::Open => CoqElementType::Open,
399 crate::lexer::token_type::CoqTokenType::Close => CoqElementType::Close,
400 crate::lexer::token_type::CoqTokenType::Scope => CoqElementType::Scope,
401 crate::lexer::token_type::CoqTokenType::Notation => CoqElementType::Notation,
402 crate::lexer::token_type::CoqTokenType::Infix => CoqElementType::Infix,
403 crate::lexer::token_type::CoqTokenType::Reserved => CoqElementType::Reserved,
404 crate::lexer::token_type::CoqTokenType::Bind => CoqElementType::Bind,
405 crate::lexer::token_type::CoqTokenType::Delimit => CoqElementType::Delimit,
406 crate::lexer::token_type::CoqTokenType::Arguments => CoqElementType::Arguments,
407 crate::lexer::token_type::CoqTokenType::Implicit => CoqElementType::Implicit,
408 crate::lexer::token_type::CoqTokenType::Coercion => CoqElementType::Coercion,
409 crate::lexer::token_type::CoqTokenType::Identity => CoqElementType::Identity,
410 crate::lexer::token_type::CoqTokenType::Canonical => CoqElementType::Canonical,
411 crate::lexer::token_type::CoqTokenType::Arrow => CoqElementType::Arrow,
412 crate::lexer::token_type::CoqTokenType::DoubleArrow => CoqElementType::DoubleArrow,
413 crate::lexer::token_type::CoqTokenType::Colon => CoqElementType::Colon,
414 crate::lexer::token_type::CoqTokenType::Semicolon => CoqElementType::Semicolon,
415 crate::lexer::token_type::CoqTokenType::Comma => CoqElementType::Comma,
416 crate::lexer::token_type::CoqTokenType::Dot => CoqElementType::Dot,
417 crate::lexer::token_type::CoqTokenType::Pipe => CoqElementType::Pipe,
418 crate::lexer::token_type::CoqTokenType::Underscore => CoqElementType::Underscore,
419 crate::lexer::token_type::CoqTokenType::Equal => CoqElementType::Equal,
420 crate::lexer::token_type::CoqTokenType::Plus => CoqElementType::Plus,
421 crate::lexer::token_type::CoqTokenType::Minus => CoqElementType::Minus,
422 crate::lexer::token_type::CoqTokenType::Star => CoqElementType::Star,
423 crate::lexer::token_type::CoqTokenType::Slash => CoqElementType::Slash,
424 crate::lexer::token_type::CoqTokenType::Percent => CoqElementType::Percent,
425 crate::lexer::token_type::CoqTokenType::Less => CoqElementType::Less,
426 crate::lexer::token_type::CoqTokenType::Greater => CoqElementType::Greater,
427 crate::lexer::token_type::CoqTokenType::LessEqual => CoqElementType::LessEqual,
428 crate::lexer::token_type::CoqTokenType::GreaterEqual => CoqElementType::GreaterEqual,
429 crate::lexer::token_type::CoqTokenType::NotEqual => CoqElementType::NotEqual,
430 crate::lexer::token_type::CoqTokenType::Tilde => CoqElementType::Tilde,
431 crate::lexer::token_type::CoqTokenType::At => CoqElementType::At,
432 crate::lexer::token_type::CoqTokenType::Question => CoqElementType::Question,
433 crate::lexer::token_type::CoqTokenType::Exclamation => CoqElementType::Exclamation,
434 crate::lexer::token_type::CoqTokenType::Ampersand => CoqElementType::Ampersand,
435 crate::lexer::token_type::CoqTokenType::Hash => CoqElementType::Hash,
436 crate::lexer::token_type::CoqTokenType::Dollar => CoqElementType::Dollar,
437 crate::lexer::token_type::CoqTokenType::Backslash => CoqElementType::Backslash,
438 crate::lexer::token_type::CoqTokenType::Caret => CoqElementType::Caret,
439 crate::lexer::token_type::CoqTokenType::LeftParen => CoqElementType::LeftParen,
440 crate::lexer::token_type::CoqTokenType::RightParen => CoqElementType::RightParen,
441 crate::lexer::token_type::CoqTokenType::LeftBracket => CoqElementType::LeftBracket,
442 crate::lexer::token_type::CoqTokenType::RightBracket => CoqElementType::RightBracket,
443 crate::lexer::token_type::CoqTokenType::LeftBrace => CoqElementType::LeftBrace,
444 crate::lexer::token_type::CoqTokenType::RightBrace => CoqElementType::RightBrace,
445 crate::lexer::token_type::CoqTokenType::DoubleColon => CoqElementType::DoubleColon,
446 crate::lexer::token_type::CoqTokenType::DoubleColonEqual => CoqElementType::DoubleColonEqual,
447 crate::lexer::token_type::CoqTokenType::ColonEqual => CoqElementType::ColonEqual,
448 crate::lexer::token_type::CoqTokenType::Turnstile => CoqElementType::Turnstile,
449 crate::lexer::token_type::CoqTokenType::And => CoqElementType::And,
450 crate::lexer::token_type::CoqTokenType::Or => CoqElementType::Or,
451 crate::lexer::token_type::CoqTokenType::LeftArrow => CoqElementType::LeftArrow,
452 crate::lexer::token_type::CoqTokenType::Root => CoqElementType::Root,
453 crate::lexer::token_type::CoqTokenType::Declaration => CoqElementType::Declaration,
454 crate::lexer::token_type::CoqTokenType::Statement => CoqElementType::Statement,
455 crate::lexer::token_type::CoqTokenType::Expression => CoqElementType::Expression,
456 crate::lexer::token_type::CoqTokenType::Error => CoqElementType::Error,
457 crate::lexer::token_type::CoqTokenType::Eof => CoqElementType::Eof,
458 }
459 }
460}