use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ReferenceIntent {
Call {
method: String,
receiver: Option<String>,
line: usize,
arg_count: Option<usize>,
},
Extends {
parent: String,
line: usize,
},
Implements {
interface: String,
line: usize,
},
TypeReference {
type_name: String,
line: usize,
},
ValueReference {
value_name: String,
line: usize,
},
DomElementReference {
element_id: String,
line: usize,
},
CssClassUsage {
class_name: String,
line: usize,
},
HtmlFileImport {
file_path: String,
line: usize,
},
CssFileImport {
file_path: String,
line: usize,
},
RustMacroCall {
macro_name: String,
line: usize,
},
VclSubCall {
sub_name: String,
line: usize,
},
VclBackendRef {
backend_name: String,
line: usize,
},
VclProbeRef {
probe_name: String,
line: usize,
},
VclAclRef {
acl_name: String,
line: usize,
},
VclInclude {
path: String,
line: usize,
},
VclVmodImport {
module: String,
alias: Option<String>,
line: usize,
},
VclUnusedRef {
name: String,
line: usize,
},
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub enum RelationshipType {
Calls,
Extends,
Implements,
References,
ReferencesDOM,
UsesCSSClass,
ImportsScript,
ImportsStylesheet,
MacroCalls,
Contains,
GenericBound,
DependsOn,
Overrides,
UsesBackend,
UsesProbe,
UsesAcl,
Includes,
ImportsVmod,
DeclaredUnused,
}
impl std::fmt::Display for RelationshipType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
RelationshipType::Calls => write!(f, "CALLS"),
RelationshipType::Extends => write!(f, "EXTENDS"),
RelationshipType::Implements => write!(f, "IMPLEMENTS"),
RelationshipType::References => write!(f, "REFERENCES"),
RelationshipType::ReferencesDOM => write!(f, "REFERENCES_DOM"),
RelationshipType::UsesCSSClass => write!(f, "USES_CSS_CLASS"),
RelationshipType::ImportsScript => write!(f, "IMPORTS_SCRIPT"),
RelationshipType::ImportsStylesheet => write!(f, "IMPORTS_STYLESHEET"),
RelationshipType::MacroCalls => write!(f, "MACRO_CALLS"),
RelationshipType::Contains => write!(f, "CONTAINS"),
RelationshipType::GenericBound => write!(f, "GENERIC_BOUND"),
RelationshipType::DependsOn => write!(f, "DEPENDS_ON"),
RelationshipType::Overrides => write!(f, "OVERRIDES"),
RelationshipType::UsesBackend => write!(f, "USES_BACKEND"),
RelationshipType::UsesProbe => write!(f, "USES_PROBE"),
RelationshipType::UsesAcl => write!(f, "USES_ACL"),
RelationshipType::Includes => write!(f, "INCLUDES"),
RelationshipType::ImportsVmod => write!(f, "IMPORTS_VMOD"),
RelationshipType::DeclaredUnused => write!(f, "DECLARED_UNUSED"),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CallIntent {
pub method: String,
pub receiver: Option<String>,
pub line: usize,
pub arg_count: Option<usize>,
}
impl From<CallIntent> for ReferenceIntent {
fn from(call: CallIntent) -> Self {
ReferenceIntent::Call {
method: call.method,
receiver: call.receiver,
line: call.line,
arg_count: call.arg_count,
}
}
}