use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
use crate::{SourceFile, SourceModel};
#[derive(
Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize, JsonSchema,
)]
#[serde(rename_all = "lowercase")]
pub enum Severity {
Hint,
Warning,
Error,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum SmellCategory {
Bloaters,
OoAbusers,
ChangePreventers,
Dispensables,
Couplers,
Security,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct Location {
pub path: PathBuf,
pub start_line: usize,
pub end_line: usize,
pub name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct Finding {
pub smell_name: String,
pub category: SmellCategory,
pub severity: Severity,
pub location: Location,
pub message: String,
pub suggested_refactorings: Vec<String>,
}
pub struct AnalysisContext<'a> {
pub file: &'a SourceFile,
pub model: &'a SourceModel,
}
pub trait Plugin: Send + Sync {
fn name(&self) -> &str;
fn analyze(&self, ctx: &AnalysisContext) -> Vec<Finding>;
}