diff --git a/Cargo.lock b/Cargo.lock index be106647..9e97855c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1293,6 +1293,8 @@ dependencies = [ "abs-path", "lsp-types", "shrinkwraprs", + "strum", + "strum_macros", "thiserror", "uuid", "witcherscript", diff --git a/crates/analysis/Cargo.toml b/crates/analysis/Cargo.toml index aca19b90..bc1b74db 100644 --- a/crates/analysis/Cargo.toml +++ b/crates/analysis/Cargo.toml @@ -11,4 +11,6 @@ witcherscript = { path = "../core" } uuid.workspace = true thiserror.workspace = true lsp-types.workspace = true -shrinkwraprs.workspace = true \ No newline at end of file +shrinkwraprs.workspace = true +strum.workspace = true +strum_macros.workspace = true \ No newline at end of file diff --git a/crates/analysis/src/model/symbol_variant.rs b/crates/analysis/src/model/symbol_variant.rs index 8ba12358..ddf86bb5 100644 --- a/crates/analysis/src/model/symbol_variant.rs +++ b/crates/analysis/src/model/symbol_variant.rs @@ -1,7 +1,8 @@ +use strum_macros::{EnumIs, EnumTryAs}; use super::symbols::*; -#[derive(Debug, Clone)] +#[derive(Debug, Clone, EnumIs, EnumTryAs)] pub enum SymbolVariant { Primitive(PrimitiveTypeSymbol), Enum(EnumSymbol), @@ -40,381 +41,6 @@ impl SymbolVariant { SymbolVariant::LocalVar(v) => v, } } - - - pub fn into_primitive(self) -> Option { - if let SymbolVariant::Primitive(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_primitive(&self) -> Option<&PrimitiveTypeSymbol> { - if let SymbolVariant::Primitive(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_primitive_mut(&mut self) -> Option<&mut PrimitiveTypeSymbol> { - if let SymbolVariant::Primitive(v) = self { - Some(v) - } else { - None - } - } - - - pub fn into_enum(self) -> Option { - if let SymbolVariant::Enum(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_enum(&self) -> Option<&EnumSymbol> { - if let SymbolVariant::Enum(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_enum_mut(&mut self) -> Option<&mut EnumSymbol> { - if let SymbolVariant::Enum(v) = self { - Some(v) - } else { - None - } - } - - - pub fn into_enum_variant(self) -> Option { - if let SymbolVariant::EnumVariant(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_enum_variant(&self) -> Option<&EnumVariantSymbol> { - if let SymbolVariant::EnumVariant(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_enum_variant_mut(&mut self) -> Option<&mut EnumVariantSymbol> { - if let SymbolVariant::EnumVariant(v) = self { - Some(v) - } else { - None - } - } - - - pub fn into_struct(self) -> Option { - if let SymbolVariant::Struct(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_struct(&self) -> Option<&StructSymbol> { - if let SymbolVariant::Struct(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_struct_mut(&mut self) -> Option<&mut StructSymbol> { - if let SymbolVariant::Struct(v) = self { - Some(v) - } else { - None - } - } - - - pub fn into_class(self) -> Option { - if let SymbolVariant::Class(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_class(&self) -> Option<&ClassSymbol> { - if let SymbolVariant::Class(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_class_mut(&mut self) -> Option<&mut ClassSymbol> { - if let SymbolVariant::Class(v) = self { - Some(v) - } else { - None - } - } - - - pub fn into_state(self) -> Option { - if let SymbolVariant::State(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_state(&self) -> Option<&StateSymbol> { - if let SymbolVariant::State(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_state_mut(&mut self) -> Option<&mut StateSymbol> { - if let SymbolVariant::State(v) = self { - Some(v) - } else { - None - } - } - - - pub fn into_array(self) -> Option { - if let SymbolVariant::Array(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_array(&self) -> Option<&ArrayTypeSymbol> { - if let SymbolVariant::Array(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_array_mut(&mut self) -> Option<&mut ArrayTypeSymbol> { - if let SymbolVariant::Array(v) = self { - Some(v) - } else { - None - } - } - - - pub fn into_global_func(self) -> Option { - if let SymbolVariant::GlobalFunc(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_global_func(&self) -> Option<&GlobalFunctionSymbol> { - if let SymbolVariant::GlobalFunc(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_global_func_mut(&mut self) -> Option<&mut GlobalFunctionSymbol> { - if let SymbolVariant::GlobalFunc(v) = self { - Some(v) - } else { - None - } - } - - - pub fn into_member_func(self) -> Option { - if let SymbolVariant::MemberFunc(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_member_func(&self) -> Option<&MemberFunctionSymbol> { - if let SymbolVariant::MemberFunc(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_member_func_mut(&mut self) -> Option<&mut MemberFunctionSymbol> { - if let SymbolVariant::MemberFunc(v) = self { - Some(v) - } else { - None - } - } - - - pub fn into_event(self) -> Option { - if let SymbolVariant::Event(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_event(&self) -> Option<&EventSymbol> { - if let SymbolVariant::Event(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_event_mut(&mut self) -> Option<&mut EventSymbol> { - if let SymbolVariant::Event(v) = self { - Some(v) - } else { - None - } - } - - - pub fn into_func_param(self) -> Option { - if let SymbolVariant::FuncParam(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_func_param(&self) -> Option<&FunctionParameterSymbol> { - if let SymbolVariant::FuncParam(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_func_param_mut(&mut self) -> Option<&mut FunctionParameterSymbol> { - if let SymbolVariant::FuncParam(v) = self { - Some(v) - } else { - None - } - } - - - pub fn into_global_var(self) -> Option { - if let SymbolVariant::GlobalVar(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_global_var(&self) -> Option<&GlobalVarSymbol> { - if let SymbolVariant::GlobalVar(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_global_var_mut(&mut self) -> Option<&mut GlobalVarSymbol> { - if let SymbolVariant::GlobalVar(v) = self { - Some(v) - } else { - None - } - } - - - pub fn into_member_var(self) -> Option { - if let SymbolVariant::MemberVar(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_member_var(&self) -> Option<&MemberVarSymbol> { - if let SymbolVariant::MemberVar(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_member_var_mut(&mut self) -> Option<&mut MemberVarSymbol> { - if let SymbolVariant::MemberVar(v) = self { - Some(v) - } else { - None - } - } - - - pub fn into_autobind(self) -> Option { - if let SymbolVariant::Autobind(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_autobind(&self) -> Option<&AutobindSymbol> { - if let SymbolVariant::Autobind(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_autobind_mut(&mut self) -> Option<&mut AutobindSymbol> { - if let SymbolVariant::Autobind(v) = self { - Some(v) - } else { - None - } - } - - - pub fn into_local_var(self) -> Option { - if let SymbolVariant::LocalVar(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_local_var(&self) -> Option<&LocalVarSymbol> { - if let SymbolVariant::LocalVar(v) = self { - Some(v) - } else { - None - } - } - - pub fn as_local_var_mut(&mut self) -> Option<&mut LocalVarSymbol> { - if let SymbolVariant::LocalVar(v) = self { - Some(v) - } else { - None - } - } }