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