#![cfg_attr(coverage_nightly, coverage(off))]
use rustc_hash::{FxHashMap, FxHashSet};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DependencyGraph {
pub nodes: FxHashMap<String, NodeInfo>,
pub edges: Vec<Edge>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NodeInfo {
pub id: String,
pub label: String,
pub node_type: NodeType,
pub file_path: String,
pub line_number: usize,
pub complexity: u32,
#[serde(default)]
pub metadata: FxHashMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct Edge {
pub from: String,
pub to: String,
pub edge_type: EdgeType,
pub weight: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum NodeType {
Function,
Class,
Module,
Trait,
Interface,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub enum EdgeType {
Calls,
Imports,
Inherits,
Implements,
Uses,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub enum DagType {
CallGraph,
ImportGraph,
Inheritance,
FullDependency,
}
include!("dag_impls.rs");
include!("dag_tests.rs");
#[cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
mod property_tests {
use proptest::prelude::*;
proptest! {
#[test]
fn basic_property_stability(_input in ".*") {
prop_assert!(true);
}
#[test]
fn module_consistency_check(_x in 0u32..1000) {
prop_assert!(_x < 1001);
}
}
}