mod bindings;
mod croquis;
mod template;
mod vir;
pub use bindings::{
BindingMetadata, ImportStatementInfo, InvalidExport, InvalidExportKind, ReExportInfo,
TypeExport, TypeExportKind, UndefinedRef, UnusedTemplateVar, UnusedVarContext,
COMPILER_MACRO_NAMES,
};
pub use croquis::AnalysisStats;
pub use template::{
ComponentUsage, ElementIdInfo, ElementIdKind, EventListener, PassedProp, SlotUsage,
TemplateExpression, TemplateExpressionKind, TemplateInfo,
};
use crate::hoist::HoistTracker;
use crate::macros::MacroTracker;
use crate::provide::ProvideInjectTracker;
use crate::reactivity::ReactivityTracker;
use crate::setup_context::SetupContextTracker;
use crate::types::TypeResolver;
use crate::{ScopeChain, SymbolTable};
use vize_carton::{CompactString, FxHashMap, FxHashSet};
#[derive(Debug, Default)]
pub struct Croquis {
pub scopes: ScopeChain,
pub symbols: SymbolTable,
pub macros: MacroTracker,
pub reactivity: ReactivityTracker,
pub provide_inject: ProvideInjectTracker,
pub setup_context: SetupContextTracker,
pub types: TypeResolver,
pub hoists: HoistTracker,
pub bindings: BindingMetadata,
pub template_info: TemplateInfo,
pub used_components: FxHashSet<CompactString>,
pub component_usages: Vec<ComponentUsage>,
pub used_directives: FxHashSet<CompactString>,
pub undefined_refs: Vec<UndefinedRef>,
pub unused_bindings: Vec<CompactString>,
pub type_exports: Vec<TypeExport>,
pub invalid_exports: Vec<InvalidExport>,
pub template_expressions: Vec<TemplateExpression>,
pub element_ids: Vec<ElementIdInfo>,
pub import_statements: Vec<ImportStatementInfo>,
pub re_exports: Vec<ReExportInfo>,
pub binding_spans: FxHashMap<CompactString, (u32, u32)>,
}
#[cfg(test)]
mod tests {
use super::{BindingMetadata, Croquis};
use crate::BindingType;
#[test]
fn test_binding_metadata() {
let mut meta = BindingMetadata::script_setup();
meta.add("count", BindingType::SetupRef);
meta.add("state", BindingType::SetupReactiveConst);
meta.add("msg", BindingType::Props);
assert!(meta.is_script_setup);
assert!(meta.is_ref("count"));
assert!(!meta.is_ref("state"));
assert!(meta.is_prop("msg"));
}
#[test]
fn test_analysis_summary() {
let mut summary = Croquis::new();
summary.bindings.add("foo", BindingType::SetupRef);
assert!(summary.is_defined("foo"));
assert!(!summary.is_defined("bar"));
assert_eq!(summary.get_binding_type("foo"), Some(BindingType::SetupRef));
}
}