forge_lint/sol/info/
pascal_case.rs
1use super::PascalCaseStruct;
2use crate::{
3 linter::{EarlyLintPass, LintContext},
4 sol::{Severity, SolLint},
5};
6use solar_ast::ItemStruct;
7
8declare_forge_lint!(
9 PASCAL_CASE_STRUCT,
10 Severity::Info,
11 "pascal-case-struct",
12 "structs should use PascalCase"
13);
14
15impl<'ast> EarlyLintPass<'ast> for PascalCaseStruct {
16 fn check_item_struct(&mut self, ctx: &LintContext<'_>, strukt: &'ast ItemStruct<'ast>) {
17 let name = strukt.name.as_str();
18 if name.len() > 1 && !is_pascal_case(name) {
19 ctx.emit(&PASCAL_CASE_STRUCT, strukt.name.span);
20 }
21 }
22}
23
24pub fn is_pascal_case(s: &str) -> bool {
26 if s.len() <= 1 {
27 return true;
28 }
29
30 s == format!("{}", heck::AsPascalCase(s)).as_str()
31}