use super::super::AstStrategy;
use crate::services::context::FileContext;
use crate::services::file_classifier::FileClassifier;
use anyhow::Result;
use async_trait::async_trait;
use std::path::Path;
#[cfg(feature = "c-ast")]
pub struct CStrategy;
#[cfg(feature = "c-ast")]
impl Default for CStrategy {
fn default() -> Self {
Self::new()
}
}
impl CStrategy {
#[must_use]
pub fn new() -> Self {
Self
}
}
#[cfg(feature = "c-ast")]
#[async_trait]
impl AstStrategy for CStrategy {
async fn analyze(&self, file_path: &Path, _classifier: &FileClassifier) -> Result<FileContext> {
Ok(FileContext {
path: file_path.to_string_lossy().to_string(),
language: "C".to_string(),
items: Vec::new(),
complexity_metrics: None,
})
}
fn primary_extension(&self) -> &'static str {
"c"
}
fn supported_extensions(&self) -> Vec<&'static str> {
vec!["c", "h"]
}
fn language_name(&self) -> &'static str {
"C"
}
}
#[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);
}
}
}