Skip to main content

krait/lang/
go.rs

1/// Strip Go method receiver prefix from a symbol name.
2///
3/// Go struct methods are indexed with a receiver prefix:
4///   `"(*ReceiverType).MethodName"` or `"ReceiverType.MethodName"`
5///
6/// Returns the base name (everything after the last `")."`), or the original
7/// string if no receiver prefix is present.
8#[must_use]
9pub fn base_name(s: &str) -> &str {
10    s.rfind(").").map_or(s, |i| &s[i + 2..])
11}
12
13#[cfg(test)]
14mod tests {
15    use super::*;
16
17    #[test]
18    fn strips_pointer_receiver() {
19        assert_eq!(
20            base_name("(*knowledgeService).CreateKnowledgeFromFile"),
21            "CreateKnowledgeFromFile"
22        );
23    }
24
25    #[test]
26    fn strips_value_receiver() {
27        assert_eq!(base_name("(userRepo).Save"), "Save");
28    }
29
30    #[test]
31    fn passthrough_no_receiver() {
32        assert_eq!(base_name("ProcessUsers"), "ProcessUsers");
33    }
34
35    #[test]
36    fn passthrough_empty() {
37        assert_eq!(base_name(""), "");
38    }
39}