use std::collections::HashMap;
use std::sync::Arc;
use crate::Backend;
use crate::php_type::PhpType;
use crate::types::{
ClassInfo, ClassLikeKind, ConstantInfo, MethodInfo, ParameterInfo, PropertyInfo, Visibility,
};
pub fn make_backend() -> Backend {
Backend::new_test()
}
pub fn make_class(name: &str) -> ClassInfo {
ClassInfo {
kind: ClassLikeKind::Class,
name: name.to_string(),
methods: Default::default(),
properties: Default::default(),
constants: Default::default(),
start_offset: 0,
end_offset: 0,
keyword_offset: 0,
parent_class: None,
interfaces: Vec::new(),
used_traits: Vec::new(),
mixins: Vec::new(),
mixin_generics: Vec::new(),
is_final: false,
is_abstract: false,
deprecation_message: None,
deprecated_replacement: None,
links: Vec::new(),
see_refs: Vec::new(),
template_params: Vec::new(),
template_param_bounds: HashMap::new(),
template_param_defaults: HashMap::new(),
extends_generics: Vec::new(),
implements_generics: Vec::new(),
use_generics: Vec::new(),
type_aliases: HashMap::new(),
trait_precedences: Vec::new(),
trait_aliases: Vec::new(),
class_docblock: None,
file_namespace: None,
backed_type: None,
attribute_targets: 0,
laravel: None,
}
}
pub fn make_method(name: &str, return_type: Option<&str>) -> MethodInfo {
MethodInfo::virtual_method(name, return_type)
}
pub fn make_method_with_params(
name: &str,
return_type: Option<&str>,
params: Vec<ParameterInfo>,
) -> MethodInfo {
MethodInfo {
parameters: params,
..MethodInfo::virtual_method(name, return_type)
}
}
pub fn make_property(name: &str, type_hint: Option<&str>) -> PropertyInfo {
PropertyInfo::virtual_property(name, type_hint)
}
pub fn make_constant(name: &str) -> ConstantInfo {
ConstantInfo {
name: name.to_string(),
name_offset: 0,
type_hint: None,
visibility: Visibility::Public,
deprecation_message: None,
deprecated_replacement: None,
see_refs: Vec::new(),
description: None,
is_enum_case: false,
enum_value: None,
value: None,
is_virtual: true,
}
}
pub fn make_param(name: &str, type_hint: Option<&str>, is_required: bool) -> ParameterInfo {
ParameterInfo {
name: name.to_string(),
is_required,
type_hint: type_hint.map(PhpType::parse),
native_type_hint: type_hint.map(PhpType::parse),
description: None,
default_value: None,
is_variadic: false,
is_reference: false,
closure_this_type: None,
}
}
pub fn no_loader(_name: &str) -> Option<Arc<ClassInfo>> {
None
}