Skip to main content

wowlab_tidy/languages/rust/rules/correctness/
support.rs

1use ra_ap_syntax::ast::{self, HasGenericArgs};
2
3pub(super) fn weak_type_name(ty: &ast::Type) -> Option<String> {
4    match ty {
5        ast::Type::RefType(reference) => match reference.ty()? {
6            ast::Type::PathType(path)
7                if path
8                    .path()?
9                    .segment()?
10                    .name_ref()
11                    .is_some_and(|name| name.text() == "str") =>
12            {
13                Some("&str".to_string())
14            }
15            _ => None,
16        },
17        ast::Type::PathType(path) => {
18            let segment = path.path()?.segment()?;
19
20            if segment.generic_arg_list().is_some() {
21                return None;
22            }
23
24            let name = segment.name_ref()?.text().to_string();
25
26            matches!(
27                name.as_str(),
28                "u8" | "u16"
29                    | "u32"
30                    | "u64"
31                    | "u128"
32                    | "usize"
33                    | "i8"
34                    | "i16"
35                    | "i32"
36                    | "i64"
37                    | "i128"
38                    | "isize"
39                    | "f32"
40                    | "f64"
41                    | "bool"
42                    | "char"
43                    | "String"
44            )
45            .then_some(name)
46        }
47        _ => None,
48    }
49}