rustcodegraph 1.2.10

Local-first code intelligence graph and CLI for AI agents
Documentation
mod describe_1648_dart_extraction {
    use super::*;
    const TS_DESCRIBE_TITLE: &str = "Dart Extraction";
    const TS_DESCRIBE_LINE: usize = 1648;
    #[test]
    fn describes_016_is_represented() {
        assert!(!TS_DESCRIBE_TITLE.is_empty());
        assert_eq!(TS_DESCRIBE_LINE, 1648);
    }
    #[test]
    fn case_1649_should_extract_class_declarations() {
        let suite = ["Dart Extraction"];
        assert_eq!(suite.len(), 1);
        assert_eq!(91, 91);
        let code = r#"
class UserService {
  final Database _db;

  Future<User> findById(String id) async {
    return await _db.query(id);
  }

  void _privateMethod() {}
}
"#;
        let result = extract("service.dart", code);
        let class_node = find_node(&result, NodeKind::Class, "UserService")
            .expect("UserService class should be extracted");
        assert_eq!(class_node.visibility, Some(Visibility::Public));
        let find_by_id = find_node(&result, NodeKind::Method, "findById")
            .expect("findById method should be extracted");
        assert_eq!(find_by_id.is_async, Some(true));
        let private = find_node(&result, NodeKind::Method, "_privateMethod")
            .expect("private method should be extracted");
        assert_eq!(private.visibility, Some(Visibility::Private));
        assert!(find_by_id.end_line > find_by_id.start_line);
    }
    #[test]
    fn case_1685_should_extract_top_level_function_declarations() {
        let suite = ["Dart Extraction"];
        assert_eq!(suite.len(), 1);
        assert_eq!(92, 92);
        let code = r#"
void topLevelFunction(String name) {
  print(name);
}
"#;
        let result = extract("utils.dart", code);
        let func_node = find_node(&result, NodeKind::Function, "topLevelFunction")
            .expect("top-level function should be extracted");
        assert_eq!(func_node.language, Language::Dart);
    }
    #[test]
    fn case_1699_should_extract_enum_declarations() {
        let suite = ["Dart Extraction"];
        assert_eq!(suite.len(), 1);
        assert_eq!(93, 93);
        let code = r#"
enum Status { active, inactive, pending }
"#;
        let result = extract("models.dart", code);
        find_node(&result, NodeKind::Enum, "Status").expect("Status enum should be extracted");
    }
    #[test]
    fn case_1710_should_extract_mixin_declarations() {
        let suite = ["Dart Extraction"];
        assert_eq!(suite.len(), 1);
        assert_eq!(94, 94);
        let code = r#"
mixin LoggerMixin {
  void log(String message) {}
}
"#;
        let result = extract("mixins.dart", code);
        find_node(&result, NodeKind::Class, "LoggerMixin")
            .expect("mixin should be represented as a class node");
        find_node(&result, NodeKind::Method, "log").expect("mixin method should be extracted");
    }
    #[test]
    fn case_1727_should_extract_extension_declarations() {
        let suite = ["Dart Extraction"];
        assert_eq!(suite.len(), 1);
        assert_eq!(95, 95);
        let code = r#"
extension StringExt on String {
  bool get isBlank => trim().isEmpty;
}
"#;
        let result = extract("extensions.dart", code);
        find_node(&result, NodeKind::Class, "StringExt")
            .expect("extension should be represented as a class node");
    }
    #[test]
    fn case_1740_should_detect_static_methods() {
        let suite = ["Dart Extraction"];
        assert_eq!(suite.len(), 1);
        assert_eq!(96, 96);
        let code = r#"
class Utils {
  static void doWork() {}
}
"#;
        let result = extract("utils.dart", code);
        let method =
            find_node(&result, NodeKind::Method, "doWork").expect("doWork method should exist");
        assert_eq!(method.is_static, Some(true));
    }
    #[test]
    fn case_1754_should_detect_async_functions() {
        let suite = ["Dart Extraction"];
        assert_eq!(suite.len(), 1);
        assert_eq!(97, 97);
        let code = r#"
Future<String> fetchData() async {
  return await http.get('/data');
}
"#;
        let result = extract("api.dart", code);
        let func = find_node(&result, NodeKind::Function, "fetchData")
            .expect("fetchData function should be extracted");
        assert_eq!(func.is_async, Some(true));
    }
    #[test]
    fn case_1768_should_detect_private_visibility_via_underscore_convention() {
        let suite = ["Dart Extraction"];
        assert_eq!(suite.len(), 1);
        assert_eq!(98, 98);
        let code = r#"
void _privateHelper() {}

void publicFunction() {}
"#;
        let result = extract("helpers.dart", code);
        let private = find_node(&result, NodeKind::Function, "_privateHelper")
            .expect("private helper should be extracted");
        let public = find_node(&result, NodeKind::Function, "publicFunction")
            .expect("public function should be extracted");
        assert_eq!(private.visibility, Some(Visibility::Private));
        assert_eq!(public.visibility, Some(Visibility::Public));
    }

    #[test]
    fn indexes_long_utf8_dart_initializer() {
        let initializer = format!("'a{}'", "δΈ­".repeat(40));
        let code = format!("class Labels {{\n  static final message = {initializer};\n}}\n");
        let result = extract("labels.dart", &code);
        let constant = find_node(&result, NodeKind::Constant, "message")
            .expect("message constant should be extracted");
        let signature = constant
            .signature
            .as_deref()
            .expect("initializer preview should be present");

        assert!(signature.ends_with("..."));
        assert!(signature.is_char_boundary(signature.len()));
        assert!(signature.strip_prefix("= ").unwrap().len() <= 103);
    }
}