oak_dockerfile/kind/
mod.rs1pub type DockerfileToken = Token<DockerfileSyntaxKind>;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize)]
5pub enum DockerfileSyntaxKind {
6 Identifier,
8 String,
9 Number,
10 Whitespace,
11 Newline,
12
13 From,
15 Run,
16 Cmd,
17 Label,
18 Maintainer,
19 Expose,
20 Env,
21 Add,
22 Copy,
23 Entrypoint,
24 Volume,
25 User,
26 Workdir,
27 Arg,
28 Onbuild,
29 Stopsignal,
30 Healthcheck,
31 Shell,
32
33 As,
35 None,
36 Interval,
37 Timeout,
38 StartPeriod,
39 Retries,
40
41 Equal, Equals, Colon, Comma, Semicolon, Dollar, LeftBracket, RightBracket, LeftBrace, RightBrace, LeftParen, RightParen, Comment,
57
58 Path,
60
61 Root,
63 Statement,
64 Error,
65 Eof,
66}
67
68impl DockerfileSyntaxKind {
69 pub fn is_instruction(&self) -> bool {
70 matches!(
71 self,
72 Self::From
73 | Self::Run
74 | Self::Cmd
75 | Self::Label
76 | Self::Maintainer
77 | Self::Expose
78 | Self::Env
79 | Self::Add
80 | Self::Copy
81 | Self::Entrypoint
82 | Self::Volume
83 | Self::User
84 | Self::Workdir
85 | Self::Arg
86 | Self::Onbuild
87 | Self::Stopsignal
88 | Self::Healthcheck
89 | Self::Shell
90 )
91 }
92
93 pub fn is_trivia(&self) -> bool {
94 matches!(self, Self::Whitespace | Self::Newline | Self::Comment)
95 }
96}
97
98use oak_core::{ElementType, Token, TokenType, UniversalElementRole, UniversalTokenRole};
99
100impl TokenType for DockerfileSyntaxKind {
101 const END_OF_STREAM: Self = Self::Eof;
102 type Role = UniversalTokenRole;
103
104 fn role(&self) -> Self::Role {
105 match self {
106 Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
107 Self::Comment => UniversalTokenRole::Comment,
108 Self::Eof => UniversalTokenRole::Eof,
109 Self::Error => UniversalTokenRole::Error,
110 Self::From
111 | Self::Run
112 | Self::Cmd
113 | Self::Label
114 | Self::Maintainer
115 | Self::Expose
116 | Self::Env
117 | Self::Add
118 | Self::Copy
119 | Self::Entrypoint
120 | Self::Volume
121 | Self::User
122 | Self::Workdir
123 | Self::Arg
124 | Self::Onbuild
125 | Self::Stopsignal
126 | Self::Healthcheck
127 | Self::Shell => UniversalTokenRole::Keyword,
128 Self::Identifier => UniversalTokenRole::Name,
129 Self::String => UniversalTokenRole::Literal,
130 Self::Number => UniversalTokenRole::Literal,
131 _ => UniversalTokenRole::None,
132 }
133 }
134}
135
136impl ElementType for DockerfileSyntaxKind {
137 type Role = UniversalElementRole;
138
139 fn role(&self) -> Self::Role {
140 match self {
141 Self::Root => UniversalElementRole::Root,
142 Self::Statement => UniversalElementRole::Statement,
143 Self::Error => UniversalElementRole::Error,
144 _ => UniversalElementRole::None,
145 }
146 }
147}