pub struct Codebase {Show 13 fields
pub classes: DashMap<Arc<str>, ClassStorage>,
pub interfaces: DashMap<Arc<str>, InterfaceStorage>,
pub traits: DashMap<Arc<str>, TraitStorage>,
pub enums: DashMap<Arc<str>, EnumStorage>,
pub functions: DashMap<Arc<str>, FunctionStorage>,
pub constants: DashMap<Arc<str>, Union>,
pub referenced_methods: DashSet<Arc<str>>,
pub referenced_properties: DashSet<Arc<str>>,
pub referenced_functions: DashSet<Arc<str>>,
pub symbol_to_file: DashMap<Arc<str>, Arc<str>>,
pub known_symbols: DashSet<Arc<str>>,
pub file_imports: DashMap<Arc<str>, HashMap<String, String>>,
pub file_namespaces: DashMap<Arc<str>, String>,
/* private fields */
}Fields§
§classes: DashMap<Arc<str>, ClassStorage>§interfaces: DashMap<Arc<str>, InterfaceStorage>§traits: DashMap<Arc<str>, TraitStorage>§enums: DashMap<Arc<str>, EnumStorage>§functions: DashMap<Arc<str>, FunctionStorage>§constants: DashMap<Arc<str>, Union>§referenced_methods: DashSet<Arc<str>>Methods referenced during Pass 2 — key format: "ClassName::methodName".
Used by the dead-code detector (M18).
referenced_properties: DashSet<Arc<str>>Properties referenced during Pass 2 — key format: "ClassName::propName".
referenced_functions: DashSet<Arc<str>>Free functions referenced during Pass 2 — key: fully-qualified name.
symbol_to_file: DashMap<Arc<str>, Arc<str>>Maps every FQCN (class, interface, trait, enum, function) to the absolute path of the file that defines it. Populated during Pass 1.
known_symbols: DashSet<Arc<str>>Lightweight FQCN index populated by SymbolTable before Pass 1.
Enables O(1) “does this symbol exist?” checks before full definitions
are available.
file_imports: DashMap<Arc<str>, HashMap<String, String>>Per-file use alias maps: alias → FQCN. Populated during Pass 1.
Key: absolute file path (as Arc<str>).
Value: map of alias → fully-qualified class name.
Exposed as pub so that external consumers (e.g. php-lsp) can read
import data that mir already collects, instead of reimplementing it.
file_namespaces: DashMap<Arc<str>, String>Per-file current namespace (if any). Populated during Pass 1.
Key: absolute file path (as Arc<str>).
Value: the declared namespace string (e.g. "App\\Controller").
Exposed as pub so that external consumers (e.g. php-lsp) can read
namespace data that mir already collects, instead of reimplementing it.
Implementations§
Source§impl Codebase
impl Codebase
pub fn new() -> Self
Sourcepub fn invalidate_finalization(&self)
pub fn invalidate_finalization(&self)
Reset the finalization flag so that finalize() will run again.
Use this when new class definitions have been added after an initial
finalize() call (e.g., lazily loaded via PSR-4) and the inheritance
graph needs to be rebuilt.
Sourcepub fn remove_file_definitions(&self, file_path: &str)
pub fn remove_file_definitions(&self, file_path: &str)
Remove all definitions that were defined in the given file.
This clears classes, interfaces, traits, enums, functions, and constants
whose defining file matches file_path, as well as the file’s import
and namespace entries. After calling this, invalidate_finalization()
is called so the next finalize() rebuilds inheritance.
Sourcepub fn get_property(
&self,
fqcn: &str,
prop_name: &str,
) -> Option<PropertyStorage>
pub fn get_property( &self, fqcn: &str, prop_name: &str, ) -> Option<PropertyStorage>
Resolve a property, walking up the inheritance chain (parent classes and traits).
Sourcepub fn get_method(&self, fqcn: &str, method_name: &str) -> Option<MethodStorage>
pub fn get_method(&self, fqcn: &str, method_name: &str) -> Option<MethodStorage>
Resolve a method, walking up the inheritance chain.
Sourcepub fn extends_or_implements(&self, child: &str, ancestor: &str) -> bool
pub fn extends_or_implements(&self, child: &str, ancestor: &str) -> bool
Returns true if child extends or implements ancestor (transitively).
Sourcepub fn type_exists(&self, fqcn: &str) -> bool
pub fn type_exists(&self, fqcn: &str) -> bool
Whether a class/interface/trait/enum with this FQCN exists.
pub fn function_exists(&self, fqn: &str) -> bool
Sourcepub fn is_abstract_class(&self, fqcn: &str) -> bool
pub fn is_abstract_class(&self, fqcn: &str) -> bool
Returns true if the class is declared abstract.
Used to suppress UndefinedMethod on abstract class receivers: the concrete
subclass is expected to implement the method, matching Psalm errorLevel=3 behaviour.
Sourcepub fn get_class_template_params(&self, fqcn: &str) -> Vec<TemplateParam>
pub fn get_class_template_params(&self, fqcn: &str) -> Vec<TemplateParam>
Return the declared template params for fqcn (class or interface), or
an empty vec if the type is not found or has no templates.
Sourcepub fn has_magic_get(&self, fqcn: &str) -> bool
pub fn has_magic_get(&self, fqcn: &str) -> bool
Returns true if the class (or any ancestor/trait) defines a __get magic method.
Such classes allow arbitrary property access, suppressing UndefinedProperty.
Sourcepub fn has_unknown_ancestor(&self, fqcn: &str) -> bool
pub fn has_unknown_ancestor(&self, fqcn: &str) -> bool
Returns true if the class (or any of its ancestors) has a parent/interface/trait
that is NOT present in the codebase. Used to suppress UndefinedMethod false
positives: if a method might be inherited from an unscanned external class we
cannot confirm or deny its existence.
We use the pre-computed all_parents list (built during finalization) rather
than recursive DashMap lookups to avoid potential deadlocks.
Sourcepub fn resolve_class_name(&self, file: &str, name: &str) -> String
pub fn resolve_class_name(&self, file: &str, name: &str) -> String
Resolve a short class/function name to its FQCN using the import table
and namespace recorded for file during Pass 1.
- Names already containing
\(after stripping a leading\) are returned as-is (already fully qualified). self,parent,staticare returned unchanged (caller handles them).
Sourcepub fn get_symbol_location(&self, fqcn: &str) -> Option<Location>
pub fn get_symbol_location(&self, fqcn: &str) -> Option<Location>
Look up the definition location of any symbol (class, interface, trait, enum, function). Returns the file path and byte offsets.
Sourcepub fn get_member_location(
&self,
fqcn: &str,
member_name: &str,
) -> Option<Location>
pub fn get_member_location( &self, fqcn: &str, member_name: &str, ) -> Option<Location>
Look up the definition location of a class member (method, property, constant).
Sourcepub fn mark_method_referenced(&self, fqcn: &str, method_name: &str)
pub fn mark_method_referenced(&self, fqcn: &str, method_name: &str)
Mark a method as referenced from user code.
Sourcepub fn mark_property_referenced(&self, fqcn: &str, prop_name: &str)
pub fn mark_property_referenced(&self, fqcn: &str, prop_name: &str)
Mark a property as referenced from user code.
Sourcepub fn mark_function_referenced(&self, fqn: &str)
pub fn mark_function_referenced(&self, fqn: &str)
Mark a free function as referenced from user code.
pub fn is_method_referenced(&self, fqcn: &str, method_name: &str) -> bool
pub fn is_property_referenced(&self, fqcn: &str, prop_name: &str) -> bool
pub fn is_function_referenced(&self, fqn: &str) -> bool
Source§impl Codebase
impl Codebase
Sourcepub fn visible_members(&self, ty: &Union) -> Vec<MemberInfo>
pub fn visible_members(&self, ty: &Union) -> Vec<MemberInfo>
Return all members (methods, properties, constants) visible on the given type.
Walks the full class hierarchy including parents, interfaces, traits, and enums. For union types, returns the union of members from all constituent types.