1use regex::Regex;
2use serde::{Deserialize, Serialize};
3use std::fmt;
4
5#[derive(Clone, Debug, Default, Serialize, Deserialize)]
6#[serde(deny_unknown_fields)]
7pub struct Lint {
8 #[serde(default)]
9 pub naming: LintNaming,
10 #[serde(default)]
11 pub portability: LintPortability,
12}
13
14#[derive(Clone, Debug, Default, Serialize, Deserialize)]
15#[serde(deny_unknown_fields)]
16pub struct LintPortability {
17 #[serde(default)]
21 pub allow_in_dependencies: Vec<NonPortableItem>,
22}
23
24#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
25pub enum NonPortableItem {
26 #[serde(rename = "initial_assign")]
27 InitialAssign,
28 #[serde(rename = "multiple_assign")]
29 MultipleAssign,
30}
31
32impl fmt::Display for NonPortableItem {
33 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
34 let text = match self {
35 NonPortableItem::InitialAssign => "initial_assign",
36 NonPortableItem::MultipleAssign => "multiple_assign",
37 };
38 text.fmt(f)
39 }
40}
41
42#[derive(Clone, Debug, Default, Serialize, Deserialize)]
43#[serde(deny_unknown_fields)]
44pub struct LintNaming {
45 #[serde(default)]
46 pub case_clock_domain: Option<Case>,
47 #[serde(default)]
48 pub case_enum: Option<Case>,
49 #[serde(default)]
50 pub case_function: Option<Case>,
51 #[serde(default)]
52 pub case_function_inout: Option<Case>,
53 #[serde(default)]
54 pub case_function_input: Option<Case>,
55 #[serde(default)]
56 pub case_function_output: Option<Case>,
57 #[serde(default)]
58 pub case_instance: Option<Case>,
59 #[serde(default)]
60 pub case_interface: Option<Case>,
61 #[serde(default)]
62 pub case_modport: Option<Case>,
63 #[serde(default)]
64 pub case_module: Option<Case>,
65 #[serde(default)]
66 pub case_package: Option<Case>,
67 #[serde(default)]
68 pub case_parameter: Option<Case>,
69 #[serde(default)]
70 pub case_port_inout: Option<Case>,
71 #[serde(default)]
72 pub case_port_input: Option<Case>,
73 #[serde(default)]
74 pub case_port_modport: Option<Case>,
75 #[serde(default)]
76 pub case_port_output: Option<Case>,
77 #[serde(default)]
78 pub case_reg: Option<Case>,
79 #[serde(default)]
80 pub case_struct: Option<Case>,
81 #[serde(default)]
82 pub case_union: Option<Case>,
83 #[serde(default)]
84 pub case_var: Option<Case>,
85 #[serde(default)]
86 pub case_wire: Option<Case>,
87 #[serde(default)]
88 pub prefix_clock_domain: Option<String>,
89 #[serde(default)]
90 pub prefix_enum: Option<String>,
91 #[serde(default)]
92 pub prefix_function: Option<String>,
93 #[serde(default)]
94 pub prefix_function_inout: Option<String>,
95 #[serde(default)]
96 pub prefix_function_input: Option<String>,
97 #[serde(default)]
98 pub prefix_function_output: Option<String>,
99 #[serde(default)]
100 pub prefix_instance: Option<String>,
101 #[serde(default)]
102 pub prefix_interface: Option<String>,
103 #[serde(default)]
104 pub prefix_modport: Option<String>,
105 #[serde(default)]
106 pub prefix_module: Option<String>,
107 #[serde(default)]
108 pub prefix_package: Option<String>,
109 #[serde(default)]
110 pub prefix_parameter: Option<String>,
111 #[serde(default)]
112 pub prefix_port_inout: Option<String>,
113 #[serde(default)]
114 pub prefix_port_input: Option<String>,
115 #[serde(default)]
116 pub prefix_port_modport: Option<String>,
117 #[serde(default)]
118 pub prefix_port_output: Option<String>,
119 #[serde(default)]
120 pub prefix_reg: Option<String>,
121 #[serde(default)]
122 pub prefix_struct: Option<String>,
123 #[serde(default)]
124 pub prefix_union: Option<String>,
125 #[serde(default)]
126 pub prefix_var: Option<String>,
127 #[serde(default)]
128 pub prefix_wire: Option<String>,
129 #[serde(default)]
130 pub suffix_clock_domain: Option<String>,
131 #[serde(default)]
132 pub suffix_enum: Option<String>,
133 #[serde(default)]
134 pub suffix_function: Option<String>,
135 #[serde(default)]
136 pub suffix_function_inout: Option<String>,
137 #[serde(default)]
138 pub suffix_function_input: Option<String>,
139 #[serde(default)]
140 pub suffix_function_output: Option<String>,
141 #[serde(default)]
142 pub suffix_instance: Option<String>,
143 #[serde(default)]
144 pub suffix_interface: Option<String>,
145 #[serde(default)]
146 pub suffix_modport: Option<String>,
147 #[serde(default)]
148 pub suffix_module: Option<String>,
149 #[serde(default)]
150 pub suffix_package: Option<String>,
151 #[serde(default)]
152 pub suffix_parameter: Option<String>,
153 #[serde(default)]
154 pub suffix_port_inout: Option<String>,
155 #[serde(default)]
156 pub suffix_port_input: Option<String>,
157 #[serde(default)]
158 pub suffix_port_modport: Option<String>,
159 #[serde(default)]
160 pub suffix_port_output: Option<String>,
161 #[serde(default)]
162 pub suffix_reg: Option<String>,
163 #[serde(default)]
164 pub suffix_struct: Option<String>,
165 #[serde(default)]
166 pub suffix_union: Option<String>,
167 #[serde(default)]
168 pub suffix_var: Option<String>,
169 #[serde(default)]
170 pub suffix_wire: Option<String>,
171 #[serde(default, with = "serde_regex")]
172 pub re_forbidden_clock_domain: Option<Regex>,
173 #[serde(default, with = "serde_regex")]
174 pub re_forbidden_enum: Option<Regex>,
175 #[serde(default, with = "serde_regex")]
176 pub re_forbidden_function: Option<Regex>,
177 #[serde(default, with = "serde_regex")]
178 pub re_forbidden_function_inout: Option<Regex>,
179 #[serde(default, with = "serde_regex")]
180 pub re_forbidden_function_input: Option<Regex>,
181 #[serde(default, with = "serde_regex")]
182 pub re_forbidden_function_output: Option<Regex>,
183 #[serde(default, with = "serde_regex")]
184 pub re_forbidden_instance: Option<Regex>,
185 #[serde(default, with = "serde_regex")]
186 pub re_forbidden_interface: Option<Regex>,
187 #[serde(default, with = "serde_regex")]
188 pub re_forbidden_modport: Option<Regex>,
189 #[serde(default, with = "serde_regex")]
190 pub re_forbidden_module: Option<Regex>,
191 #[serde(default, with = "serde_regex")]
192 pub re_forbidden_package: Option<Regex>,
193 #[serde(default, with = "serde_regex")]
194 pub re_forbidden_parameter: Option<Regex>,
195 #[serde(default, with = "serde_regex")]
196 pub re_forbidden_port_inout: Option<Regex>,
197 #[serde(default, with = "serde_regex")]
198 pub re_forbidden_port_input: Option<Regex>,
199 #[serde(default, with = "serde_regex")]
200 pub re_forbidden_port_modport: Option<Regex>,
201 #[serde(default, with = "serde_regex")]
202 pub re_forbidden_port_output: Option<Regex>,
203 #[serde(default, with = "serde_regex")]
204 pub re_forbidden_reg: Option<Regex>,
205 #[serde(default, with = "serde_regex")]
206 pub re_forbidden_struct: Option<Regex>,
207 #[serde(default, with = "serde_regex")]
208 pub re_forbidden_union: Option<Regex>,
209 #[serde(default, with = "serde_regex")]
210 pub re_forbidden_var: Option<Regex>,
211 #[serde(default, with = "serde_regex")]
212 pub re_forbidden_wire: Option<Regex>,
213 #[serde(default, with = "serde_regex")]
214 pub re_required_clock_domain: Option<Regex>,
215 #[serde(default, with = "serde_regex")]
216 pub re_required_enum: Option<Regex>,
217 #[serde(default, with = "serde_regex")]
218 pub re_required_function: Option<Regex>,
219 #[serde(default, with = "serde_regex")]
220 pub re_required_function_inout: Option<Regex>,
221 #[serde(default, with = "serde_regex")]
222 pub re_required_function_input: Option<Regex>,
223 #[serde(default, with = "serde_regex")]
224 pub re_required_function_output: Option<Regex>,
225 #[serde(default, with = "serde_regex")]
226 pub re_required_instance: Option<Regex>,
227 #[serde(default, with = "serde_regex")]
228 pub re_required_interface: Option<Regex>,
229 #[serde(default, with = "serde_regex")]
230 pub re_required_modport: Option<Regex>,
231 #[serde(default, with = "serde_regex")]
232 pub re_required_module: Option<Regex>,
233 #[serde(default, with = "serde_regex")]
234 pub re_required_package: Option<Regex>,
235 #[serde(default, with = "serde_regex")]
236 pub re_required_parameter: Option<Regex>,
237 #[serde(default, with = "serde_regex")]
238 pub re_required_port_inout: Option<Regex>,
239 #[serde(default, with = "serde_regex")]
240 pub re_required_port_input: Option<Regex>,
241 #[serde(default, with = "serde_regex")]
242 pub re_required_port_modport: Option<Regex>,
243 #[serde(default, with = "serde_regex")]
244 pub re_required_port_output: Option<Regex>,
245 #[serde(default, with = "serde_regex")]
246 pub re_required_reg: Option<Regex>,
247 #[serde(default, with = "serde_regex")]
248 pub re_required_struct: Option<Regex>,
249 #[serde(default, with = "serde_regex")]
250 pub re_required_union: Option<Regex>,
251 #[serde(default, with = "serde_regex")]
252 pub re_required_var: Option<Regex>,
253 #[serde(default, with = "serde_regex")]
254 pub re_required_wire: Option<Regex>,
255}
256
257#[derive(Clone, Debug, Default, Serialize, Deserialize)]
258pub enum Case {
259 #[default]
260 #[serde(rename = "snake")]
261 Snake,
262 #[serde(rename = "screaming_snake")]
263 ScreamingSnake,
264 #[serde(rename = "upper_camel")]
265 UpperCamel,
266 #[serde(rename = "lower_camel")]
267 LowerCamel,
268}
269
270impl fmt::Display for Case {
271 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
272 let text = match self {
273 Case::Snake => "snake_case".to_string(),
274 Case::ScreamingSnake => "SCREAMING_SNAKE_CASE".to_string(),
275 Case::UpperCamel => "UpperCamelCase".to_string(),
276 Case::LowerCamel => "lowerCamelCase".to_string(),
277 };
278 text.fmt(f)
279 }
280}