Skip to main content

mago_analyzer/plugin/libraries/stdlib/
mod.rs

1//! PHP standard library providers.
2
3pub mod array;
4pub mod closure;
5pub mod cookie;
6pub mod r#enum;
7pub mod filter;
8pub mod json;
9pub mod math;
10pub mod object;
11pub mod random;
12pub mod reflection;
13pub mod session;
14pub mod spl;
15pub mod string;
16pub mod url;
17
18use crate::plugin::Plugin;
19use crate::plugin::PluginMeta;
20use crate::plugin::PluginRegistry;
21
22/// Plugin providing type inference for PHP standard library functions.
23pub struct StdlibPlugin;
24
25static META: PluginMeta = PluginMeta::new(
26    "stdlib",
27    "PHP Standard Library",
28    "Type providers for PHP built-in functions (strlen, array_*, json_*, etc.)",
29    &["standard", "std", "php-stdlib"],
30    true,
31);
32
33impl Plugin for StdlibPlugin {
34    fn meta(&self) -> &'static PluginMeta {
35        &META
36    }
37
38    fn register(&self, registry: &mut PluginRegistry) {
39        registry.register_function_provider(string::StrlenProvider);
40        registry.register_function_provider(string::SprintfProvider);
41        registry.register_function_provider(json::JsonEncodeProvider);
42        registry.register_function_provider(random::RandProvider);
43        registry.register_function_provider(random::RandomIntProvider);
44        registry.register_function_provider(random::RandomBytesProvider);
45        registry.register_function_provider(spl::IteratorToArrayProvider);
46        registry.register_function_provider(array::ArrayColumnProvider);
47        registry.register_function_provider(array::ArrayFilterProvider);
48        registry.register_function_provider(array::ArrayFlipProvider);
49        registry.register_function_provider(array::ArrayIsListProvider);
50        registry.register_function_provider(array::ArrayKeyExistsProvider);
51        registry.register_function_provider(array::ArrayMapProvider);
52        registry.register_function_provider(array::ArrayMergeProvider);
53        registry.register_function_provider(array::CompactProvider);
54        registry.register_function_provider(object::GetObjectVarsProvider);
55        registry.register_function_provider(url::ParseUrlProvider);
56        registry.register_function_provider(filter::FilterVarProvider);
57        registry.register_function_provider(filter::FilterInputProvider);
58        registry.register_function_provider(math::MinProvider);
59        registry.register_function_provider(math::MaxProvider);
60        registry.register_function_provider(math::AbsProvider);
61        registry.register_function_provider(array::RangeProvider);
62
63        registry.register_function_assertion_provider(array::ArrayAllAssertionProvider);
64
65        registry.register_function_call_hook(cookie::SetCookieHook);
66        registry.register_function_call_hook(session::SessionSetSaveHandlerHook);
67        registry.register_function_call_hook(session::SessionSetCookieParamsHook);
68        registry.register_function_call_hook(math::IntdivHook);
69
70        registry.register_method_provider(closure::ClosureGetCurrentProvider);
71        registry.register_method_provider(r#enum::EnumCasesProvider);
72        registry.register_method_provider(reflection::ReflectionMethodGetNameProvider);
73        registry.register_method_provider(reflection::ReflectionMethodInvokeProvider);
74
75        registry.register_method_assertion_provider(reflection::ReflectionClassHasMethodAssertionProvider);
76    }
77}