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
25/// Check if a string is PascalCase
26pub 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}