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