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