diff --git a/Glamourer.Api/.editorconfig b/Glamourer.Api/.editorconfig new file mode 100644 index 0000000..c645b57 --- /dev/null +++ b/Glamourer.Api/.editorconfig @@ -0,0 +1,3625 @@ +# Standard properties +charset = utf-8 +end_of_line = lf +insert_final_newline = true +csharp_indent_labels = one_less_than_current +csharp_prefer_simple_using_statement = true:suggestion +csharp_prefer_braces = true:silent +csharp_style_prefer_method_group_conversion = true:silent +csharp_style_expression_bodied_methods = false:silent +csharp_style_expression_bodied_constructors = false:silent +csharp_style_expression_bodied_operators = false:silent +csharp_style_expression_bodied_properties = true:silent +csharp_style_expression_bodied_indexers = true:silent +csharp_style_expression_bodied_accessors = true:silent +csharp_style_expression_bodied_lambdas = true:silent +csharp_style_expression_bodied_local_functions = false:silent +csharp_style_throw_expression = true:suggestion +csharp_style_prefer_null_check_over_type_check = true:suggestion +csharp_prefer_simple_default_expression = true:suggestion +csharp_style_prefer_local_over_anonymous_function = true:suggestion +csharp_style_prefer_index_operator = true:suggestion +csharp_style_prefer_range_operator = true:suggestion +csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion +csharp_style_prefer_tuple_swap = true:suggestion +csharp_style_inlined_variable_declaration = true:suggestion +csharp_style_prefer_top_level_statements = true:silent + +[*] +# Microsoft .NET properties +csharp_indent_braces=false +csharp_indent_switch_labels=true +csharp_new_line_before_catch=true +csharp_new_line_before_else=true +csharp_new_line_before_finally=true +csharp_new_line_before_members_in_object_initializers=true +csharp_new_line_before_open_brace=all +csharp_new_line_between_query_expression_clauses=true +csharp_preferred_modifier_order=public, private, protected, internal, new, abstract, virtual, sealed, override, static, readonly, extern, unsafe, volatile, async:suggestion +csharp_preserve_single_line_blocks=true +csharp_space_after_cast=false +csharp_space_after_colon_in_inheritance_clause=true +csharp_space_after_comma=true +csharp_space_after_dot=false +csharp_space_after_keywords_in_control_flow_statements=true +csharp_space_after_semicolon_in_for_statement=true +csharp_space_around_binary_operators=before_and_after +csharp_space_before_colon_in_inheritance_clause=true +csharp_space_before_comma=false +csharp_space_before_dot=false +csharp_space_before_open_square_brackets=false +csharp_space_before_semicolon_in_for_statement=false +csharp_space_between_empty_square_brackets=false +csharp_space_between_method_call_empty_parameter_list_parentheses=false +csharp_space_between_method_call_name_and_opening_parenthesis=false +csharp_space_between_method_call_parameter_list_parentheses=false +csharp_space_between_method_declaration_empty_parameter_list_parentheses=false +csharp_space_between_method_declaration_name_and_open_parenthesis=false +csharp_space_between_method_declaration_parameter_list_parentheses=false +csharp_space_between_parentheses=false +csharp_space_between_square_brackets=false +csharp_style_namespace_declarations= file_scoped:suggestion +csharp_style_var_elsewhere=true:suggestion +csharp_style_var_for_built_in_types=true:suggestion +csharp_style_var_when_type_is_apparent=true:suggestion +csharp_using_directive_placement= outside_namespace:silent +dotnet_diagnostic.bc40000.severity=warning +dotnet_diagnostic.bc400005.severity=warning +dotnet_diagnostic.bc40008.severity=warning +dotnet_diagnostic.bc40056.severity=warning +dotnet_diagnostic.bc42016.severity=warning +dotnet_diagnostic.bc42024.severity=warning +dotnet_diagnostic.bc42025.severity=warning +dotnet_diagnostic.bc42104.severity=warning +dotnet_diagnostic.bc42105.severity=warning +dotnet_diagnostic.bc42106.severity=warning +dotnet_diagnostic.bc42107.severity=warning +dotnet_diagnostic.bc42304.severity=warning +dotnet_diagnostic.bc42309.severity=warning +dotnet_diagnostic.bc42322.severity=warning +dotnet_diagnostic.bc42349.severity=warning +dotnet_diagnostic.bc42353.severity=warning +dotnet_diagnostic.bc42354.severity=warning +dotnet_diagnostic.bc42355.severity=warning +dotnet_diagnostic.bc42356.severity=warning +dotnet_diagnostic.bc42358.severity=warning +dotnet_diagnostic.bc42504.severity=warning +dotnet_diagnostic.bc42505.severity=warning +dotnet_diagnostic.cs0067.severity=warning +dotnet_diagnostic.cs0078.severity=warning +dotnet_diagnostic.cs0108.severity=warning +dotnet_diagnostic.cs0109.severity=warning +dotnet_diagnostic.cs0114.severity=warning +dotnet_diagnostic.cs0162.severity=warning +dotnet_diagnostic.cs0164.severity=warning +dotnet_diagnostic.cs0168.severity=warning +dotnet_diagnostic.cs0169.severity=warning +dotnet_diagnostic.cs0183.severity=warning +dotnet_diagnostic.cs0184.severity=warning +dotnet_diagnostic.cs0197.severity=warning +dotnet_diagnostic.cs0219.severity=warning +dotnet_diagnostic.cs0252.severity=warning +dotnet_diagnostic.cs0253.severity=warning +dotnet_diagnostic.cs0414.severity=warning +dotnet_diagnostic.cs0420.severity=warning +dotnet_diagnostic.cs0465.severity=warning +dotnet_diagnostic.cs0469.severity=warning +dotnet_diagnostic.cs0612.severity=warning +dotnet_diagnostic.cs0618.severity=warning +dotnet_diagnostic.cs0628.severity=warning +dotnet_diagnostic.cs0642.severity=warning +dotnet_diagnostic.cs0649.severity=warning +dotnet_diagnostic.cs0652.severity=warning +dotnet_diagnostic.cs0657.severity=warning +dotnet_diagnostic.cs0658.severity=warning +dotnet_diagnostic.cs0659.severity=warning +dotnet_diagnostic.cs0660.severity=warning +dotnet_diagnostic.cs0661.severity=warning +dotnet_diagnostic.cs0665.severity=warning +dotnet_diagnostic.cs0672.severity=warning +dotnet_diagnostic.cs0675.severity=warning +dotnet_diagnostic.cs0693.severity=warning +dotnet_diagnostic.cs1030.severity=warning +dotnet_diagnostic.cs1058.severity=warning +dotnet_diagnostic.cs1066.severity=warning +dotnet_diagnostic.cs1522.severity=warning +dotnet_diagnostic.cs1570.severity=warning +dotnet_diagnostic.cs1571.severity=warning +dotnet_diagnostic.cs1572.severity=warning +dotnet_diagnostic.cs1573.severity=warning +dotnet_diagnostic.cs1574.severity=warning +dotnet_diagnostic.cs1580.severity=warning +dotnet_diagnostic.cs1581.severity=warning +dotnet_diagnostic.cs1584.severity=warning +dotnet_diagnostic.cs1587.severity=warning +dotnet_diagnostic.cs1589.severity=warning +dotnet_diagnostic.cs1590.severity=warning +dotnet_diagnostic.cs1591.severity=warning +dotnet_diagnostic.cs1592.severity=warning +dotnet_diagnostic.cs1710.severity=warning +dotnet_diagnostic.cs1711.severity=warning +dotnet_diagnostic.cs1712.severity=warning +dotnet_diagnostic.cs1717.severity=warning +dotnet_diagnostic.cs1723.severity=warning +dotnet_diagnostic.cs1911.severity=warning +dotnet_diagnostic.cs1957.severity=warning +dotnet_diagnostic.cs1981.severity=warning +dotnet_diagnostic.cs1998.severity=warning +dotnet_diagnostic.cs4014.severity=warning +dotnet_diagnostic.cs7022.severity=warning +dotnet_diagnostic.cs7023.severity=warning +dotnet_diagnostic.cs7095.severity=warning +dotnet_diagnostic.cs8094.severity=warning +dotnet_diagnostic.cs8123.severity=warning +dotnet_diagnostic.cs8321.severity=warning +dotnet_diagnostic.cs8383.severity=warning +dotnet_diagnostic.cs8416.severity=warning +dotnet_diagnostic.cs8417.severity=warning +dotnet_diagnostic.cs8424.severity=warning +dotnet_diagnostic.cs8425.severity=warning +dotnet_diagnostic.cs8509.severity=warning +dotnet_diagnostic.cs8524.severity=warning +dotnet_diagnostic.cs8597.severity=warning +dotnet_diagnostic.cs8600.severity=warning +dotnet_diagnostic.cs8601.severity=warning +dotnet_diagnostic.cs8602.severity=warning +dotnet_diagnostic.cs8603.severity=warning +dotnet_diagnostic.cs8604.severity=warning +dotnet_diagnostic.cs8605.severity=warning +dotnet_diagnostic.cs8607.severity=warning +dotnet_diagnostic.cs8608.severity=warning +dotnet_diagnostic.cs8609.severity=warning +dotnet_diagnostic.cs8610.severity=warning +dotnet_diagnostic.cs8611.severity=warning +dotnet_diagnostic.cs8612.severity=warning +dotnet_diagnostic.cs8613.severity=warning +dotnet_diagnostic.cs8614.severity=warning +dotnet_diagnostic.cs8615.severity=warning +dotnet_diagnostic.cs8616.severity=warning +dotnet_diagnostic.cs8617.severity=warning +dotnet_diagnostic.cs8618.severity=warning +dotnet_diagnostic.cs8619.severity=warning +dotnet_diagnostic.cs8620.severity=warning +dotnet_diagnostic.cs8621.severity=warning +dotnet_diagnostic.cs8622.severity=warning +dotnet_diagnostic.cs8624.severity=warning +dotnet_diagnostic.cs8625.severity=warning +dotnet_diagnostic.cs8629.severity=warning +dotnet_diagnostic.cs8631.severity=warning +dotnet_diagnostic.cs8632.severity=none +dotnet_diagnostic.cs8633.severity=warning +dotnet_diagnostic.cs8634.severity=warning +dotnet_diagnostic.cs8643.severity=warning +dotnet_diagnostic.cs8644.severity=warning +dotnet_diagnostic.cs8645.severity=warning +dotnet_diagnostic.cs8655.severity=warning +dotnet_diagnostic.cs8656.severity=warning +dotnet_diagnostic.cs8667.severity=warning +dotnet_diagnostic.cs8669.severity=none +dotnet_diagnostic.cs8670.severity=warning +dotnet_diagnostic.cs8714.severity=warning +dotnet_diagnostic.cs8762.severity=warning +dotnet_diagnostic.cs8763.severity=warning +dotnet_diagnostic.cs8764.severity=warning +dotnet_diagnostic.cs8765.severity=warning +dotnet_diagnostic.cs8766.severity=warning +dotnet_diagnostic.cs8767.severity=warning +dotnet_diagnostic.cs8768.severity=warning +dotnet_diagnostic.cs8769.severity=warning +dotnet_diagnostic.cs8770.severity=warning +dotnet_diagnostic.cs8774.severity=warning +dotnet_diagnostic.cs8775.severity=warning +dotnet_diagnostic.cs8776.severity=warning +dotnet_diagnostic.cs8777.severity=warning +dotnet_diagnostic.cs8794.severity=warning +dotnet_diagnostic.cs8819.severity=warning +dotnet_diagnostic.cs8824.severity=warning +dotnet_diagnostic.cs8825.severity=warning +dotnet_diagnostic.cs8846.severity=warning +dotnet_diagnostic.cs8847.severity=warning +dotnet_diagnostic.cs8851.severity=warning +dotnet_diagnostic.cs8860.severity=warning +dotnet_diagnostic.cs8892.severity=warning +dotnet_diagnostic.cs8907.severity=warning +dotnet_diagnostic.cs8947.severity=warning +dotnet_diagnostic.cs8960.severity=warning +dotnet_diagnostic.cs8961.severity=warning +dotnet_diagnostic.cs8962.severity=warning +dotnet_diagnostic.cs8963.severity=warning +dotnet_diagnostic.cs8965.severity=warning +dotnet_diagnostic.cs8966.severity=warning +dotnet_diagnostic.cs8971.severity=warning +dotnet_diagnostic.wme006.severity=warning +dotnet_naming_rule.constants_rule.import_to_resharper=as_predefined +dotnet_naming_rule.constants_rule.severity = warning +dotnet_naming_rule.constants_rule.style = upper_camel_case_style +dotnet_naming_rule.constants_rule.symbols=constants_symbols +dotnet_naming_rule.event_rule.import_to_resharper=as_predefined +dotnet_naming_rule.event_rule.severity = warning +dotnet_naming_rule.event_rule.style = upper_camel_case_style +dotnet_naming_rule.event_rule.symbols=event_symbols +dotnet_naming_rule.interfaces_rule.import_to_resharper=as_predefined +dotnet_naming_rule.interfaces_rule.severity = warning +dotnet_naming_rule.interfaces_rule.style = i_upper_camel_case_style +dotnet_naming_rule.interfaces_rule.symbols=interfaces_symbols +dotnet_naming_rule.locals_rule.import_to_resharper=as_predefined +dotnet_naming_rule.locals_rule.severity = warning +dotnet_naming_rule.locals_rule.style = lower_camel_case_style_1 +dotnet_naming_rule.locals_rule.symbols=locals_symbols +dotnet_naming_rule.local_constants_rule.import_to_resharper=as_predefined +dotnet_naming_rule.local_constants_rule.severity = warning +dotnet_naming_rule.local_constants_rule.style = lower_camel_case_style_1 +dotnet_naming_rule.local_constants_rule.symbols=local_constants_symbols +dotnet_naming_rule.local_functions_rule.import_to_resharper=as_predefined +dotnet_naming_rule.local_functions_rule.severity = warning +dotnet_naming_rule.local_functions_rule.style = upper_camel_case_style +dotnet_naming_rule.local_functions_rule.symbols=local_functions_symbols +dotnet_naming_rule.method_rule.import_to_resharper=as_predefined +dotnet_naming_rule.method_rule.severity = warning +dotnet_naming_rule.method_rule.style = upper_camel_case_style +dotnet_naming_rule.method_rule.symbols=method_symbols +dotnet_naming_rule.parameters_rule.import_to_resharper=as_predefined +dotnet_naming_rule.parameters_rule.severity = warning +dotnet_naming_rule.parameters_rule.style = lower_camel_case_style_1 +dotnet_naming_rule.parameters_rule.symbols=parameters_symbols +dotnet_naming_rule.private_constants_rule.import_to_resharper=as_predefined +dotnet_naming_rule.private_constants_rule.severity = warning +dotnet_naming_rule.private_constants_rule.style = upper_camel_case_style +dotnet_naming_rule.private_constants_rule.symbols=private_constants_symbols +dotnet_naming_rule.private_instance_fields_rule.import_to_resharper=as_predefined +dotnet_naming_rule.private_instance_fields_rule.severity = warning +dotnet_naming_rule.private_instance_fields_rule.style = lower_camel_case_style +dotnet_naming_rule.private_instance_fields_rule.symbols=private_instance_fields_symbols +dotnet_naming_rule.private_static_fields_rule.import_to_resharper=as_predefined +dotnet_naming_rule.private_static_fields_rule.severity = warning +dotnet_naming_rule.private_static_fields_rule.style = lower_camel_case_style +dotnet_naming_rule.private_static_fields_rule.symbols=private_static_fields_symbols +dotnet_naming_rule.private_static_readonly_rule.import_to_resharper=as_predefined +dotnet_naming_rule.private_static_readonly_rule.severity = warning +dotnet_naming_rule.private_static_readonly_rule.style = upper_camel_case_style +dotnet_naming_rule.private_static_readonly_rule.symbols=private_static_readonly_symbols +dotnet_naming_rule.property_rule.import_to_resharper=as_predefined +dotnet_naming_rule.property_rule.severity = warning +dotnet_naming_rule.property_rule.style = upper_camel_case_style +dotnet_naming_rule.property_rule.symbols=property_symbols +dotnet_naming_rule.public_fields_rule.import_to_resharper=as_predefined +dotnet_naming_rule.public_fields_rule.severity = warning +dotnet_naming_rule.public_fields_rule.style = upper_camel_case_style +dotnet_naming_rule.public_fields_rule.symbols=public_fields_symbols +dotnet_naming_rule.static_readonly_rule.import_to_resharper=as_predefined +dotnet_naming_rule.static_readonly_rule.severity = warning +dotnet_naming_rule.static_readonly_rule.style = upper_camel_case_style +dotnet_naming_rule.static_readonly_rule.symbols=static_readonly_symbols +dotnet_naming_rule.types_and_namespaces_rule.import_to_resharper=as_predefined +dotnet_naming_rule.types_and_namespaces_rule.severity = warning +dotnet_naming_rule.types_and_namespaces_rule.style = upper_camel_case_style +dotnet_naming_rule.types_and_namespaces_rule.symbols=types_and_namespaces_symbols +dotnet_naming_rule.type_parameters_rule.import_to_resharper=as_predefined +dotnet_naming_rule.type_parameters_rule.severity = warning +dotnet_naming_rule.type_parameters_rule.style = t_upper_camel_case_style +dotnet_naming_rule.type_parameters_rule.symbols=type_parameters_symbols +dotnet_naming_style.i_upper_camel_case_style.capitalization=pascal_case +dotnet_naming_style.i_upper_camel_case_style.required_prefix=I +dotnet_naming_style.lower_camel_case_style.capitalization=camel_case +dotnet_naming_style.lower_camel_case_style.required_prefix=_ +dotnet_naming_style.lower_camel_case_style_1.capitalization=camel_case +dotnet_naming_style.t_upper_camel_case_style.capitalization=pascal_case +dotnet_naming_style.t_upper_camel_case_style.required_prefix=T +dotnet_naming_style.upper_camel_case_style.capitalization=pascal_case +dotnet_naming_symbols.constants_symbols.applicable_accessibilities=public,internal,protected,protected_internal,private_protected +dotnet_naming_symbols.constants_symbols.applicable_kinds=field +dotnet_naming_symbols.constants_symbols.required_modifiers=const +dotnet_naming_symbols.event_symbols.applicable_accessibilities=* +dotnet_naming_symbols.event_symbols.applicable_kinds=event +dotnet_naming_symbols.interfaces_symbols.applicable_accessibilities=* +dotnet_naming_symbols.interfaces_symbols.applicable_kinds=interface +dotnet_naming_symbols.locals_symbols.applicable_accessibilities=* +dotnet_naming_symbols.locals_symbols.applicable_kinds=local +dotnet_naming_symbols.local_constants_symbols.applicable_accessibilities=* +dotnet_naming_symbols.local_constants_symbols.applicable_kinds=local +dotnet_naming_symbols.local_constants_symbols.required_modifiers=const +dotnet_naming_symbols.local_functions_symbols.applicable_accessibilities=* +dotnet_naming_symbols.local_functions_symbols.applicable_kinds=local_function +dotnet_naming_symbols.method_symbols.applicable_accessibilities=* +dotnet_naming_symbols.method_symbols.applicable_kinds=method +dotnet_naming_symbols.parameters_symbols.applicable_accessibilities=* +dotnet_naming_symbols.parameters_symbols.applicable_kinds=parameter +dotnet_naming_symbols.private_constants_symbols.applicable_accessibilities=private +dotnet_naming_symbols.private_constants_symbols.applicable_kinds=field +dotnet_naming_symbols.private_constants_symbols.required_modifiers=const +dotnet_naming_symbols.private_instance_fields_symbols.applicable_accessibilities=private +dotnet_naming_symbols.private_instance_fields_symbols.applicable_kinds=field +dotnet_naming_symbols.private_static_fields_symbols.applicable_accessibilities=private +dotnet_naming_symbols.private_static_fields_symbols.applicable_kinds=field +dotnet_naming_symbols.private_static_fields_symbols.required_modifiers=static +dotnet_naming_symbols.private_static_readonly_symbols.applicable_accessibilities=private +dotnet_naming_symbols.private_static_readonly_symbols.applicable_kinds=field +dotnet_naming_symbols.private_static_readonly_symbols.required_modifiers=static,readonly +dotnet_naming_symbols.property_symbols.applicable_accessibilities=* +dotnet_naming_symbols.property_symbols.applicable_kinds=property +dotnet_naming_symbols.public_fields_symbols.applicable_accessibilities=public,internal,protected,protected_internal,private_protected +dotnet_naming_symbols.public_fields_symbols.applicable_kinds=field +dotnet_naming_symbols.static_readonly_symbols.applicable_accessibilities=public,internal,protected,protected_internal,private_protected +dotnet_naming_symbols.static_readonly_symbols.applicable_kinds=field +dotnet_naming_symbols.static_readonly_symbols.required_modifiers=static,readonly +dotnet_naming_symbols.types_and_namespaces_symbols.applicable_accessibilities=* +dotnet_naming_symbols.types_and_namespaces_symbols.applicable_kinds=namespace,class,struct,enum,delegate +dotnet_naming_symbols.type_parameters_symbols.applicable_accessibilities=* +dotnet_naming_symbols.type_parameters_symbols.applicable_kinds=type_parameter +dotnet_separate_import_directive_groups=false +dotnet_sort_system_directives_first=true +dotnet_style_parentheses_in_arithmetic_binary_operators=never_if_unnecessary:suggestion +dotnet_style_parentheses_in_other_binary_operators=never_if_unnecessary:suggestion +dotnet_style_parentheses_in_relational_binary_operators=never_if_unnecessary:suggestion +dotnet_style_predefined_type_for_locals_parameters_members=true:suggestion +dotnet_style_predefined_type_for_member_access=true:suggestion +dotnet_style_qualification_for_event=false:suggestion +dotnet_style_qualification_for_field=false:suggestion +dotnet_style_qualification_for_method=false:suggestion +dotnet_style_qualification_for_property=false:suggestion +dotnet_style_require_accessibility_modifiers=for_non_interface_members:suggestion +file_header_template= + +# ReSharper properties +resharper_accessor_owner_body=expression_body +resharper_alignment_tab_fill_style=use_spaces +resharper_align_first_arg_by_paren=false +resharper_align_linq_query=false +resharper_align_multiline_argument=true +resharper_align_multiline_array_and_object_initializer=false +resharper_align_multiline_array_initializer=true +resharper_align_multiline_binary_expressions_chain=false +resharper_align_multiline_binary_patterns=false +resharper_align_multiline_ctor_init=true +resharper_align_multiline_expression_braces=false +resharper_align_multiline_implements_list=true +resharper_align_multiline_property_pattern=false +resharper_align_multiline_statement_conditions=true +resharper_align_multiline_switch_expression=false +resharper_align_multiline_type_argument=true +resharper_align_multiline_type_parameter=true +resharper_align_multline_type_parameter_constrains=true +resharper_align_multline_type_parameter_list=false +resharper_align_tuple_components=false +resharper_align_union_type_usage=true +resharper_allow_alias=true +resharper_allow_comment_after_lbrace=false +resharper_allow_far_alignment=false +resharper_always_use_end_of_line_brace_style=false +resharper_apply_auto_detected_rules=false +resharper_apply_on_completion=false +resharper_arguments_anonymous_function=positional +resharper_arguments_literal=positional +resharper_arguments_named=positional +resharper_arguments_other=positional +resharper_arguments_skip_single=false +resharper_arguments_string_literal=positional +resharper_attribute_style=do_not_touch +resharper_autodetect_indent_settings=false +resharper_blank_lines_after_block_statements=1 +resharper_blank_lines_after_case=0 +resharper_blank_lines_after_control_transfer_statements=1 +resharper_blank_lines_after_file_scoped_namespace_directive=1 +resharper_blank_lines_after_imports=1 +resharper_blank_lines_after_multiline_statements=0 +resharper_blank_lines_after_options=1 +resharper_blank_lines_after_start_comment=1 +resharper_blank_lines_after_using_list=1 +resharper_blank_lines_around_accessor=0 +resharper_blank_lines_around_auto_property=1 +resharper_blank_lines_around_block_case_section=0 +resharper_blank_lines_around_class_definition=1 +resharper_blank_lines_around_field=1 +resharper_blank_lines_around_function_declaration=0 +resharper_blank_lines_around_function_definition=1 +resharper_blank_lines_around_global_attribute=0 +resharper_blank_lines_around_invocable=1 +resharper_blank_lines_around_local_method=1 +resharper_blank_lines_around_multiline_case_section=0 +resharper_blank_lines_around_namespace=1 +resharper_blank_lines_around_other_declaration=0 +resharper_blank_lines_around_property=1 +resharper_blank_lines_around_razor_functions=1 +resharper_blank_lines_around_razor_helpers=1 +resharper_blank_lines_around_razor_sections=1 +resharper_blank_lines_around_region=1 +resharper_blank_lines_around_single_line_accessor=0 +resharper_blank_lines_around_single_line_auto_property=0 +resharper_blank_lines_around_single_line_field=0 +resharper_blank_lines_around_single_line_function_definition=0 +resharper_blank_lines_around_single_line_invocable=0 +resharper_blank_lines_around_single_line_local_method=0 +resharper_blank_lines_around_single_line_property=0 +resharper_blank_lines_around_single_line_type=0 +resharper_blank_lines_around_type=1 +resharper_blank_lines_before_block_statements=0 +resharper_blank_lines_before_case=0 +resharper_blank_lines_before_control_transfer_statements=0 +resharper_blank_lines_before_multiline_statements=0 +resharper_blank_lines_before_single_line_comment=0 +resharper_blank_lines_inside_namespace=0 +resharper_blank_lines_inside_region=1 +resharper_blank_lines_inside_type=0 +resharper_blank_line_after_pi=true +resharper_braces_for_dowhile=required +resharper_braces_for_fixed=required +resharper_braces_for_for=required_for_multiline +resharper_braces_for_foreach=required_for_multiline +resharper_braces_for_ifelse=not_required_for_both +resharper_braces_for_lock=required +resharper_braces_for_using=required +resharper_braces_for_while=required_for_multiline +resharper_braces_redundant=true +resharper_break_template_declaration=line_break +resharper_can_use_global_alias=true +resharper_configure_await_analysis_mode=disabled +resharper_constructor_or_destructor_body=expression_body +resharper_continuous_indent_multiplier=1 +resharper_continuous_line_indent=single +resharper_cpp_align_multiline_argument=true +resharper_cpp_align_multiline_calls_chain=true +resharper_cpp_align_multiline_extends_list=true +resharper_cpp_align_multiline_for_stmt=true +resharper_cpp_align_multiline_parameter=true +resharper_cpp_align_multiple_declaration=true +resharper_cpp_align_ternary=align_not_nested +resharper_cpp_anonymous_method_declaration_braces=next_line +resharper_cpp_case_block_braces=next_line_shifted_2 +resharper_cpp_empty_block_style=multiline +resharper_cpp_indent_switch_labels=false +resharper_cpp_insert_final_newline=false +resharper_cpp_int_align_comments=false +resharper_cpp_invocable_declaration_braces=next_line +resharper_cpp_max_line_length=120 +resharper_cpp_new_line_before_catch=true +resharper_cpp_new_line_before_else=true +resharper_cpp_new_line_before_while=true +resharper_cpp_other_braces=next_line +resharper_cpp_space_around_binary_operator=true +resharper_cpp_type_declaration_braces=next_line +resharper_cpp_wrap_arguments_style=wrap_if_long +resharper_cpp_wrap_lines=true +resharper_cpp_wrap_parameters_style=wrap_if_long +resharper_csharp_align_multiline_argument=false +resharper_csharp_align_multiline_calls_chain=false +resharper_csharp_align_multiline_expression=false +resharper_csharp_align_multiline_extends_list=false +resharper_csharp_align_multiline_for_stmt=false +resharper_csharp_align_multiline_parameter=false +resharper_csharp_align_multiple_declaration=true +resharper_csharp_empty_block_style=together +resharper_csharp_insert_final_newline=true +resharper_csharp_int_align_comments=true +resharper_csharp_max_line_length=144 +resharper_csharp_naming_rule.enum_member=AaBb +resharper_csharp_naming_rule.method_property_event=AaBb +resharper_csharp_naming_rule.other=AaBb +resharper_csharp_new_line_before_while=false +resharper_csharp_prefer_qualified_reference=false +resharper_csharp_space_after_unary_operator=false +resharper_csharp_wrap_arguments_style=wrap_if_long +resharper_csharp_wrap_before_binary_opsign=true +resharper_csharp_wrap_for_stmt_header_style=wrap_if_long +resharper_csharp_wrap_lines=true +resharper_csharp_wrap_parameters_style=wrap_if_long +resharper_css_brace_style=end_of_line +resharper_css_insert_final_newline=false +resharper_css_keep_blank_lines_between_declarations=1 +resharper_css_max_line_length=120 +resharper_css_wrap_lines=true +resharper_cxxcli_property_declaration_braces=next_line +resharper_declarations_style=separate_lines +resharper_default_exception_variable_name=e +resharper_default_value_when_type_evident=default_literal +resharper_default_value_when_type_not_evident=default_literal +resharper_delete_quotes_from_solid_values=false +resharper_disable_blank_line_changes=false +resharper_disable_formatter=false +resharper_disable_indenter=false +resharper_disable_int_align=false +resharper_disable_line_break_changes=false +resharper_disable_line_break_removal=false +resharper_disable_space_changes=false +resharper_disable_space_changes_before_trailing_comment=false +resharper_dont_remove_extra_blank_lines=false +resharper_enable_wrapping=false +resharper_enforce_line_ending_style=false +resharper_event_handler_pattern_long=$object$On$event$ +resharper_event_handler_pattern_short=On$event$ +resharper_expression_braces=inside +resharper_expression_pars=inside +resharper_extra_spaces=remove_all +resharper_force_attribute_style=separate +resharper_force_chop_compound_do_expression=false +resharper_force_chop_compound_if_expression=false +resharper_force_chop_compound_while_expression=false +resharper_force_control_statements_braces=do_not_change +resharper_force_linebreaks_inside_complex_literals=true +resharper_force_variable_declarations_on_new_line=false +resharper_format_leading_spaces_decl=false +resharper_free_block_braces=next_line +resharper_function_declaration_return_type_style=do_not_change +resharper_function_definition_return_type_style=do_not_change +resharper_generator_mode=false +resharper_html_attribute_indent=align_by_first_attribute +resharper_html_insert_final_newline=false +resharper_html_linebreak_before_elements=body,div,p,form,h1,h2,h3 +resharper_html_max_blank_lines_between_tags=2 +resharper_html_max_line_length=120 +resharper_html_pi_attribute_style=on_single_line +resharper_html_space_before_self_closing=false +resharper_html_wrap_lines=true +resharper_ignore_space_preservation=false +resharper_include_prefix_comment_in_indent=false +resharper_indent_access_specifiers_from_class=false +resharper_indent_aligned_ternary=true +resharper_indent_anonymous_method_block=false +resharper_indent_braces_inside_statement_conditions=true +resharper_indent_case_from_select=true +resharper_indent_child_elements=OneIndent +resharper_indent_class_members_from_access_specifiers=false +resharper_indent_comment=true +resharper_indent_inside_namespace=true +resharper_indent_invocation_pars=inside +resharper_indent_left_par_inside_expression=false +resharper_indent_method_decl_pars=inside +resharper_indent_nested_fixed_stmt=false +resharper_indent_nested_foreach_stmt=true +resharper_indent_nested_for_stmt=true +resharper_indent_nested_lock_stmt=false +resharper_indent_nested_usings_stmt=false +resharper_indent_nested_while_stmt=true +resharper_indent_pars=inside +resharper_indent_preprocessor_directives=none +resharper_indent_preprocessor_if=no_indent +resharper_indent_preprocessor_other=no_indent +resharper_indent_preprocessor_region=usual_indent +resharper_indent_statement_pars=inside +resharper_indent_text=OneIndent +resharper_indent_typearg_angles=inside +resharper_indent_typeparam_angles=inside +resharper_indent_type_constraints=true +resharper_indent_wrapped_function_names=false +resharper_instance_members_qualify_declared_in=this_class, base_class +resharper_int_align=true +resharper_int_align_assignments=true +resharper_int_align_binary_expressions=false +resharper_int_align_declaration_names=false +resharper_int_align_eq=false +resharper_int_align_fields=true +resharper_int_align_fix_in_adjacent=true +resharper_int_align_invocations=true +resharper_int_align_methods=true +resharper_int_align_nested_ternary=true +resharper_int_align_parameters=false +resharper_int_align_properties=true +resharper_int_align_property_patterns=true +resharper_int_align_switch_expressions=true +resharper_int_align_switch_sections=true +resharper_int_align_variables=true +resharper_js_align_multiline_parameter=false +resharper_js_align_multiple_declaration=false +resharper_js_align_ternary=none +resharper_js_brace_style=end_of_line +resharper_js_empty_block_style=multiline +resharper_js_indent_switch_labels=false +resharper_js_insert_final_newline=false +resharper_js_keep_blank_lines_between_declarations=2 +resharper_js_max_line_length=120 +resharper_js_new_line_before_catch=false +resharper_js_new_line_before_else=false +resharper_js_new_line_before_finally=false +resharper_js_new_line_before_while=false +resharper_js_space_around_binary_operator=true +resharper_js_wrap_arguments_style=chop_if_long +resharper_js_wrap_before_binary_opsign=false +resharper_js_wrap_for_stmt_header_style=chop_if_long +resharper_js_wrap_lines=true +resharper_js_wrap_parameters_style=chop_if_long +resharper_keep_blank_lines_in_code=2 +resharper_keep_blank_lines_in_declarations=2 +resharper_keep_existing_attribute_arrangement=false +resharper_keep_existing_declaration_block_arrangement=false +resharper_keep_existing_declaration_parens_arrangement=true +resharper_keep_existing_embedded_arrangement=false +resharper_keep_existing_embedded_block_arrangement=false +resharper_keep_existing_enum_arrangement=false +resharper_keep_existing_expr_member_arrangement=false +resharper_keep_existing_initializer_arrangement=false +resharper_keep_existing_invocation_parens_arrangement=true +resharper_keep_existing_property_patterns_arrangement=true +resharper_keep_existing_switch_expression_arrangement=false +resharper_keep_nontrivial_alias=true +resharper_keep_user_linebreaks=true +resharper_keep_user_wrapping=true +resharper_linebreaks_around_razor_statements=true +resharper_linebreaks_inside_tags_for_elements_longer_than=2147483647 +resharper_linebreaks_inside_tags_for_elements_with_child_elements=true +resharper_linebreaks_inside_tags_for_multiline_elements=true +resharper_linebreak_before_all_elements=false +resharper_linebreak_before_multiline_elements=true +resharper_linebreak_before_singleline_elements=false +resharper_line_break_after_colon_in_member_initializer_lists=do_not_change +resharper_line_break_after_comma_in_member_initializer_lists=false +resharper_line_break_before_comma_in_member_initializer_lists=false +resharper_line_break_before_requires_clause=do_not_change +resharper_linkage_specification_braces=end_of_line +resharper_linkage_specification_indentation=none +resharper_local_function_body=expression_body +resharper_macro_block_begin= +resharper_macro_block_end= +resharper_max_array_initializer_elements_on_line=10000 +resharper_max_attribute_length_for_same_line=38 +resharper_max_enum_members_on_line=1 +resharper_max_formal_parameters_on_line=10000 +resharper_max_initializer_elements_on_line=1 +resharper_max_invocation_arguments_on_line=10000 +resharper_media_query_style=same_line +resharper_member_initializer_list_style=do_not_change +resharper_method_or_operator_body=expression_body +resharper_min_blank_lines_after_imports=0 +resharper_min_blank_lines_around_fields=0 +resharper_min_blank_lines_around_functions=1 +resharper_min_blank_lines_around_types=1 +resharper_min_blank_lines_between_declarations=1 +resharper_namespace_declaration_braces=next_line +resharper_namespace_indentation=all +resharper_nested_ternary_style=autodetect +resharper_new_line_before_enumerators=true +resharper_normalize_tag_names=false +resharper_no_indent_inside_elements=html,body,thead,tbody,tfoot +resharper_no_indent_inside_if_element_longer_than=200 +resharper_object_creation_when_type_evident=target_typed +resharper_object_creation_when_type_not_evident=explicitly_typed +resharper_old_engine=false +resharper_options_braces_pointy=false +resharper_outdent_binary_ops=true +resharper_outdent_binary_pattern_ops=false +resharper_outdent_commas=false +resharper_outdent_dots=false +resharper_outdent_namespace_member=false +resharper_outdent_statement_labels=false +resharper_outdent_ternary_ops=false +resharper_parentheses_non_obvious_operations=none, bitwise, bitwise_inclusive_or, bitwise_exclusive_or, shift, bitwise_and +resharper_parentheses_redundancy_style=remove_if_not_clarifies_precedence +resharper_parentheses_same_type_operations=false +resharper_pi_attributes_indent=align_by_first_attribute +resharper_place_attribute_on_same_line=false +resharper_place_class_decorator_on_the_same_line=false +resharper_place_comments_at_first_column=false +resharper_place_constructor_initializer_on_same_line=false +resharper_place_each_decorator_on_new_line=false +resharper_place_event_attribute_on_same_line=false +resharper_place_expr_accessor_on_single_line=true +resharper_place_expr_method_on_single_line=false +resharper_place_expr_property_on_single_line=false +resharper_place_field_decorator_on_the_same_line=false +resharper_place_linq_into_on_new_line=true +resharper_place_method_decorator_on_the_same_line=false +resharper_place_namespace_definitions_on_same_line=false +resharper_place_property_attribute_on_same_line=false +resharper_place_property_decorator_on_the_same_line=false +resharper_place_simple_case_statement_on_same_line=if_owner_is_single_line +resharper_place_simple_embedded_statement_on_same_line=false +resharper_place_simple_enum_on_single_line=true +resharper_place_simple_initializer_on_single_line=true +resharper_place_simple_property_pattern_on_single_line=true +resharper_place_simple_switch_expression_on_single_line=true +resharper_place_template_args_on_new_line=false +resharper_place_type_constraints_on_same_line=true +resharper_prefer_explicit_discard_declaration=false +resharper_prefer_separate_deconstructed_variables_declaration=false +resharper_preserve_spaces_inside_tags=pre,textarea +resharper_properties_style=separate_lines_for_nonsingle +resharper_protobuf_brace_style=end_of_line +resharper_protobuf_empty_block_style=together_same_line +resharper_protobuf_insert_final_newline=false +resharper_protobuf_max_line_length=120 +resharper_protobuf_wrap_lines=true +resharper_qualified_using_at_nested_scope=false +resharper_quote_style=doublequoted +resharper_razor_prefer_qualified_reference=true +resharper_remove_blank_lines_near_braces=false +resharper_remove_blank_lines_near_braces_in_code=true +resharper_remove_blank_lines_near_braces_in_declarations=true +resharper_remove_this_qualifier=true +resharper_requires_expression_braces=next_line +resharper_resx_attribute_indent=single_indent +resharper_resx_insert_final_newline=false +resharper_resx_linebreak_before_elements= +resharper_resx_max_blank_lines_between_tags=0 +resharper_resx_max_line_length=2147483647 +resharper_resx_pi_attribute_style=do_not_touch +resharper_resx_space_before_self_closing=false +resharper_resx_wrap_lines=false +resharper_resx_wrap_tags_and_pi=false +resharper_resx_wrap_text=false +resharper_selector_style=same_line +resharper_show_autodetect_configure_formatting_tip=true +resharper_simple_blocks=do_not_change +resharper_simple_block_style=do_not_change +resharper_simple_case_statement_style=do_not_change +resharper_simple_embedded_statement_style=do_not_change +resharper_single_statement_function_style=do_not_change +resharper_sort_attributes=false +resharper_sort_class_selectors=false +resharper_sort_usings=true +resharper_sort_usings_lowercase_first=false +resharper_spaces_around_eq_in_attribute=false +resharper_spaces_around_eq_in_pi_attribute=false +resharper_spaces_inside_tags=false +resharper_space_after_arrow=true +resharper_space_after_attributes=true +resharper_space_after_attribute_target_colon=true +resharper_space_after_cast=false +resharper_space_after_colon=true +resharper_space_after_colon_in_case=true +resharper_space_after_colon_in_inheritance_clause=true +resharper_space_after_colon_in_type_annotation=true +resharper_space_after_comma=true +resharper_space_after_for_colon=true +resharper_space_after_function_comma=true +resharper_space_after_keywords_in_control_flow_statements=true +resharper_space_after_last_attribute=false +resharper_space_after_last_pi_attribute=false +resharper_space_after_media_colon=true +resharper_space_after_media_comma=true +resharper_space_after_operator_keyword=true +resharper_space_after_property_colon=true +resharper_space_after_property_semicolon=true +resharper_space_after_ptr_in_data_member=true +resharper_space_after_ptr_in_data_members=false +resharper_space_after_ptr_in_method=true +resharper_space_after_ref_in_data_member=true +resharper_space_after_ref_in_data_members=false +resharper_space_after_ref_in_method=true +resharper_space_after_selector_comma=true +resharper_space_after_semicolon_in_for_statement=true +resharper_space_after_separator=false +resharper_space_after_ternary_colon=true +resharper_space_after_ternary_quest=true +resharper_space_after_triple_slash=true +resharper_space_after_type_parameter_constraint_colon=true +resharper_space_around_additive_op=true +resharper_space_around_alias_eq=true +resharper_space_around_assignment_op=true +resharper_space_around_assignment_operator=true +resharper_space_around_attribute_match_operator=false +resharper_space_around_deref_in_trailing_return_type=true +resharper_space_around_lambda_arrow=true +resharper_space_around_member_access_operator=false +resharper_space_around_operator=true +resharper_space_around_pipe_or_amper_in_type_usage=true +resharper_space_around_relational_op=true +resharper_space_around_selector_operator=true +resharper_space_around_shift_op=true +resharper_space_around_stmt_colon=true +resharper_space_around_ternary_operator=true +resharper_space_before_array_rank_parentheses=false +resharper_space_before_arrow=true +resharper_space_before_attribute_target_colon=false +resharper_space_before_checked_parentheses=false +resharper_space_before_colon=false +resharper_space_before_colon_in_case=false +resharper_space_before_colon_in_inheritance_clause=true +resharper_space_before_colon_in_type_annotation=false +resharper_space_before_comma=false +resharper_space_before_default_parentheses=false +resharper_space_before_empty_invocation_parentheses=false +resharper_space_before_empty_method_parentheses=false +resharper_space_before_for_colon=true +resharper_space_before_function_comma=false +resharper_space_before_initializer_braces=false +resharper_space_before_invocation_parentheses=false +resharper_space_before_label_colon=false +resharper_space_before_lambda_parentheses=false +resharper_space_before_media_colon=false +resharper_space_before_media_comma=false +resharper_space_before_method_parentheses=false +resharper_space_before_nameof_parentheses=false +resharper_space_before_new_parentheses=false +resharper_space_before_nullable_mark=false +resharper_space_before_open_square_brackets=false +resharper_space_before_pointer_asterik_declaration=false +resharper_space_before_property_colon=false +resharper_space_before_property_semicolon=false +resharper_space_before_ptr_in_abstract_decl=false +resharper_space_before_ptr_in_data_member=false +resharper_space_before_ptr_in_data_members=true +resharper_space_before_ptr_in_method=false +resharper_space_before_ref_in_abstract_decl=false +resharper_space_before_ref_in_data_member=false +resharper_space_before_ref_in_data_members=true +resharper_space_before_ref_in_method=false +resharper_space_before_selector_comma=false +resharper_space_before_semicolon=false +resharper_space_before_semicolon_in_for_statement=false +resharper_space_before_separator=false +resharper_space_before_singleline_accessorholder=true +resharper_space_before_sizeof_parentheses=false +resharper_space_before_template_args=false +resharper_space_before_template_params=true +resharper_space_before_ternary_colon=true +resharper_space_before_ternary_quest=true +resharper_space_before_trailing_comment=true +resharper_space_before_typeof_parentheses=false +resharper_space_before_type_argument_angle=false +resharper_space_before_type_parameters_brackets=false +resharper_space_before_type_parameter_angle=false +resharper_space_before_type_parameter_constraint_colon=true +resharper_space_before_type_parameter_parentheses=true +resharper_space_between_accessors_in_singleline_property=true +resharper_space_between_attribute_sections=true +resharper_space_between_closing_angle_brackets_in_template_args=false +resharper_space_between_empty_square_brackets=false +resharper_space_between_keyword_and_expression=true +resharper_space_between_keyword_and_type=true +resharper_space_between_method_call_empty_parameter_list_parentheses=false +resharper_space_between_method_call_name_and_opening_parenthesis=false +resharper_space_between_method_call_parameter_list_parentheses=false +resharper_space_between_method_declaration_empty_parameter_list_parentheses=false +resharper_space_between_method_declaration_name_and_open_parenthesis=false +resharper_space_between_method_declaration_parameter_list_parentheses=false +resharper_space_between_parentheses_of_control_flow_statements=false +resharper_space_between_square_brackets=false +resharper_space_between_typecast_parentheses=false +resharper_space_colon_after=true +resharper_space_colon_before=false +resharper_space_comma=true +resharper_space_equals=true +resharper_space_inside_braces=true +resharper_space_in_singleline_accessorholder=true +resharper_space_in_singleline_anonymous_method=true +resharper_space_in_singleline_method=true +resharper_space_near_postfix_and_prefix_op=false +resharper_space_within_array_initialization_braces=false +resharper_space_within_array_rank_empty_parentheses=false +resharper_space_within_array_rank_parentheses=false +resharper_space_within_attribute_angles=false +resharper_space_within_attribute_match_brackets=false +resharper_space_within_checked_parentheses=false +resharper_space_within_default_parentheses=false +resharper_space_within_empty_braces=true +resharper_space_within_empty_initializer_braces=false +resharper_space_within_empty_invocation_parentheses=false +resharper_space_within_empty_method_parentheses=false +resharper_space_within_empty_object_literal_braces=false +resharper_space_within_empty_template_params=false +resharper_space_within_expression_parentheses=false +resharper_space_within_function_parentheses=false +resharper_space_within_import_braces=true +resharper_space_within_initializer_braces=false +resharper_space_within_invocation_parentheses=false +resharper_space_within_media_block=true +resharper_space_within_media_parentheses=false +resharper_space_within_method_parentheses=false +resharper_space_within_nameof_parentheses=false +resharper_space_within_new_parentheses=false +resharper_space_within_object_literal_braces=true +resharper_space_within_parentheses=false +resharper_space_within_property_block=true +resharper_space_within_single_line_array_initializer_braces=true +resharper_space_within_sizeof_parentheses=false +resharper_space_within_template_args=false +resharper_space_within_template_argument=false +resharper_space_within_template_params=false +resharper_space_within_tuple_parentheses=false +resharper_space_within_typeof_parentheses=false +resharper_space_within_type_argument_angles=false +resharper_space_within_type_parameters_brackets=false +resharper_space_within_type_parameter_angles=false +resharper_space_within_type_parameter_parentheses=false +resharper_special_else_if_treatment=true +resharper_static_members_qualify_members=none +resharper_static_members_qualify_with=declared_type +resharper_stick_comment=true +resharper_support_vs_event_naming_pattern=true +resharper_termination_style=ensure_semicolon +resharper_toplevel_function_declaration_return_type_style=do_not_change +resharper_toplevel_function_definition_return_type_style=do_not_change +resharper_trailing_comma_in_multiline_lists=true +resharper_trailing_comma_in_singleline_lists=false +resharper_types_braces=end_of_line +resharper_use_continuous_indent_inside_initializer_braces=true +resharper_use_continuous_indent_inside_parens=true +resharper_use_continuous_line_indent_in_expression_braces=false +resharper_use_continuous_line_indent_in_method_pars=false +resharper_use_heuristics_for_body_style=true +resharper_use_indents_from_main_language_in_file=true +resharper_use_indent_from_previous_element=true +resharper_use_indent_from_vs=false +resharper_use_roslyn_logic_for_evident_types=false +resharper_vb_align_multiline_argument=true +resharper_vb_align_multiline_expression=true +resharper_vb_align_multiline_parameter=true +resharper_vb_align_multiple_declaration=true +resharper_vb_insert_final_newline=false +resharper_vb_max_line_length=120 +resharper_vb_place_field_attribute_on_same_line=true +resharper_vb_place_method_attribute_on_same_line=false +resharper_vb_place_type_attribute_on_same_line=false +resharper_vb_prefer_qualified_reference=false +resharper_vb_space_after_unary_operator=true +resharper_vb_space_around_multiplicative_op=false +resharper_vb_wrap_arguments_style=wrap_if_long +resharper_vb_wrap_before_binary_opsign=false +resharper_vb_wrap_lines=true +resharper_vb_wrap_parameters_style=wrap_if_long +resharper_wrap_after_binary_opsign=true +resharper_wrap_after_declaration_lpar=false +resharper_wrap_after_dot=false +resharper_wrap_after_dot_in_method_calls=false +resharper_wrap_after_expression_lbrace=true +resharper_wrap_after_invocation_lpar=false +resharper_wrap_around_elements=true +resharper_wrap_array_initializer_style=chop_always +resharper_wrap_array_literals=chop_if_long +resharper_wrap_base_clause_style=wrap_if_long +resharper_wrap_before_arrow_with_expressions=true +resharper_wrap_before_binary_pattern_op=true +resharper_wrap_before_colon=false +resharper_wrap_before_comma=false +resharper_wrap_before_comma_in_base_clause=false +resharper_wrap_before_declaration_lpar=false +resharper_wrap_before_declaration_rpar=false +resharper_wrap_before_dot=true +resharper_wrap_before_eq=false +resharper_wrap_before_expression_rbrace=true +resharper_wrap_before_extends_colon=false +resharper_wrap_before_first_type_parameter_constraint=false +resharper_wrap_before_invocation_lpar=false +resharper_wrap_before_invocation_rpar=false +resharper_wrap_before_linq_expression=false +resharper_wrap_before_ternary_opsigns=true +resharper_wrap_before_type_parameter_langle=false +resharper_wrap_braced_init_list_style=wrap_if_long +resharper_wrap_chained_binary_expressions=chop_if_long +resharper_wrap_chained_binary_patterns=wrap_if_long +resharper_wrap_chained_method_calls=wrap_if_long +resharper_wrap_ctor_initializer_style=wrap_if_long +resharper_wrap_enumeration_style=chop_if_long +resharper_wrap_enum_declaration=chop_always +resharper_wrap_enum_style=do_not_change +resharper_wrap_extends_list_style=wrap_if_long +resharper_wrap_imports=chop_if_long +resharper_wrap_multiple_declaration_style=chop_if_long +resharper_wrap_multiple_type_parameter_constraints_style=chop_if_long +resharper_wrap_object_literals=chop_if_long +resharper_wrap_property_pattern=chop_if_long +resharper_wrap_switch_expression=chop_always +resharper_wrap_ternary_expr_style=chop_if_long +resharper_wrap_union_type_usage=chop_if_long +resharper_wrap_verbatim_interpolated_strings=no_wrap +resharper_xmldoc_attribute_indent=single_indent +resharper_xmldoc_insert_final_newline=false +resharper_xmldoc_linebreak_before_elements=summary,remarks,example,returns,param,typeparam,value,para +resharper_xmldoc_max_blank_lines_between_tags=0 +resharper_xmldoc_max_line_length=120 +resharper_xmldoc_pi_attribute_style=do_not_touch +resharper_xmldoc_space_before_self_closing=true +resharper_xmldoc_wrap_lines=true +resharper_xmldoc_wrap_tags_and_pi=true +resharper_xmldoc_wrap_text=true +resharper_xml_attribute_indent=align_by_first_attribute +resharper_xml_insert_final_newline=false +resharper_xml_linebreak_before_elements= +resharper_xml_max_blank_lines_between_tags=2 +resharper_xml_max_line_length=120 +resharper_xml_pi_attribute_style=do_not_touch +resharper_xml_space_before_self_closing=true +resharper_xml_wrap_lines=true +resharper_xml_wrap_tags_and_pi=true +resharper_xml_wrap_text=false + +# ReSharper inspection severities +resharper_abstract_class_constructor_can_be_made_protected_highlighting=hint +resharper_access_rights_in_text_highlighting=warning +resharper_access_to_disposed_closure_highlighting=warning +resharper_access_to_for_each_variable_in_closure_highlighting=warning +resharper_access_to_modified_closure_highlighting=warning +resharper_access_to_static_member_via_derived_type_highlighting=warning +resharper_address_of_marshal_by_ref_object_highlighting=warning +resharper_amd_dependency_path_problem_highlighting=none +resharper_amd_external_module_highlighting=suggestion +resharper_angular_html_banana_highlighting=warning +resharper_annotate_can_be_null_parameter_highlighting=none +resharper_annotate_can_be_null_type_member_highlighting=none +resharper_annotate_not_null_parameter_highlighting=none +resharper_annotate_not_null_type_member_highlighting=none +resharper_annotation_conflict_in_hierarchy_highlighting=warning +resharper_annotation_redundancy_at_value_type_highlighting=warning +resharper_annotation_redundancy_in_hierarchy_highlighting=warning +resharper_arguments_style_anonymous_function_highlighting=hint +resharper_arguments_style_literal_highlighting=hint +resharper_arguments_style_named_expression_highlighting=hint +resharper_arguments_style_other_highlighting=hint +resharper_arguments_style_string_literal_highlighting=hint +resharper_arrange_accessor_owner_body_highlighting=suggestion +resharper_arrange_attributes_highlighting=none +resharper_arrange_constructor_or_destructor_body_highlighting=hint +resharper_arrange_default_value_when_type_evident_highlighting=suggestion +resharper_arrange_default_value_when_type_not_evident_highlighting=hint +resharper_arrange_local_function_body_highlighting=hint +resharper_arrange_method_or_operator_body_highlighting=hint +resharper_arrange_missing_parentheses_highlighting=hint +resharper_arrange_namespace_body_highlighting=hint +resharper_arrange_object_creation_when_type_evident_highlighting=suggestion +resharper_arrange_object_creation_when_type_not_evident_highlighting=hint +resharper_arrange_redundant_parentheses_highlighting=hint +resharper_arrange_static_member_qualifier_highlighting=hint +resharper_arrange_this_qualifier_highlighting=hint +resharper_arrange_trailing_comma_in_multiline_lists_highlighting=hint +resharper_arrange_trailing_comma_in_singleline_lists_highlighting=hint +resharper_arrange_type_member_modifiers_highlighting=hint +resharper_arrange_type_modifiers_highlighting=hint +resharper_arrange_var_keywords_in_deconstructing_declaration_highlighting=suggestion +resharper_asp_content_placeholder_not_resolved_highlighting=error +resharper_asp_custom_page_parser_filter_type_highlighting=warning +resharper_asp_dead_code_highlighting=warning +resharper_asp_entity_highlighting=warning +resharper_asp_image_highlighting=warning +resharper_asp_invalid_control_type_highlighting=error +resharper_asp_not_resolved_highlighting=error +resharper_asp_ods_method_reference_resolve_error_highlighting=error +resharper_asp_resolve_warning_highlighting=warning +resharper_asp_skin_not_resolved_highlighting=error +resharper_asp_tag_attribute_with_optional_value_highlighting=warning +resharper_asp_theme_not_resolved_highlighting=error +resharper_asp_unused_register_directive_highlighting_highlighting=warning +resharper_asp_warning_highlighting=warning +resharper_assigned_value_is_never_used_highlighting=warning +resharper_assigned_value_wont_be_assigned_to_corresponding_field_highlighting=warning +resharper_assignment_in_conditional_expression_highlighting=warning +resharper_assignment_in_condition_expression_highlighting=warning +resharper_assignment_is_fully_discarded_highlighting=warning +resharper_assign_null_to_not_null_attribute_highlighting=warning +resharper_assign_to_constant_highlighting=error +resharper_assign_to_implicit_global_in_function_scope_highlighting=warning +resharper_asxx_path_error_highlighting=warning +resharper_async_iterator_invocation_without_await_foreach_highlighting=warning +resharper_async_void_lambda_highlighting=warning +resharper_async_void_method_highlighting=none +resharper_auto_property_can_be_made_get_only_global_highlighting=suggestion +resharper_auto_property_can_be_made_get_only_local_highlighting=suggestion +resharper_bad_attribute_brackets_spaces_highlighting=none +resharper_bad_braces_spaces_highlighting=none +resharper_bad_child_statement_indent_highlighting=warning +resharper_bad_colon_spaces_highlighting=none +resharper_bad_comma_spaces_highlighting=none +resharper_bad_control_braces_indent_highlighting=suggestion +resharper_bad_control_braces_line_breaks_highlighting=none +resharper_bad_declaration_braces_indent_highlighting=none +resharper_bad_declaration_braces_line_breaks_highlighting=none +resharper_bad_empty_braces_line_breaks_highlighting=none +resharper_bad_expression_braces_indent_highlighting=none +resharper_bad_expression_braces_line_breaks_highlighting=none +resharper_bad_generic_brackets_spaces_highlighting=none +resharper_bad_indent_highlighting=none +resharper_bad_linq_line_breaks_highlighting=none +resharper_bad_list_line_breaks_highlighting=none +resharper_bad_member_access_spaces_highlighting=none +resharper_bad_namespace_braces_indent_highlighting=none +resharper_bad_parens_line_breaks_highlighting=none +resharper_bad_parens_spaces_highlighting=none +resharper_bad_preprocessor_indent_highlighting=none +resharper_bad_semicolon_spaces_highlighting=none +resharper_bad_spaces_after_keyword_highlighting=none +resharper_bad_square_brackets_spaces_highlighting=none +resharper_bad_switch_braces_indent_highlighting=none +resharper_bad_symbol_spaces_highlighting=none +resharper_base_member_has_params_highlighting=warning +resharper_base_method_call_with_default_parameter_highlighting=warning +resharper_base_object_equals_is_object_equals_highlighting=warning +resharper_base_object_get_hash_code_call_in_get_hash_code_highlighting=warning +resharper_bitwise_operator_on_enum_without_flags_highlighting=warning +resharper_block_scope_redeclaration_highlighting=error +resharper_built_in_type_reference_style_for_member_access_highlighting=hint +resharper_built_in_type_reference_style_highlighting=hint +resharper_by_ref_argument_is_volatile_field_highlighting=warning +resharper_caller_callee_using_error_highlighting=error +resharper_caller_callee_using_highlighting=warning +resharper_cannot_apply_equality_operator_to_type_highlighting=warning +resharper_center_tag_is_obsolete_highlighting=warning +resharper_check_for_reference_equality_instead_1_highlighting=suggestion +resharper_check_for_reference_equality_instead_2_highlighting=suggestion +resharper_check_for_reference_equality_instead_3_highlighting=suggestion +resharper_check_for_reference_equality_instead_4_highlighting=suggestion +resharper_check_namespace_highlighting=warning +resharper_class_cannot_be_instantiated_highlighting=warning +resharper_class_can_be_sealed_global_highlighting=none +resharper_class_can_be_sealed_local_highlighting=none +resharper_class_highlighting=suggestion +resharper_class_never_instantiated_global_highlighting=suggestion +resharper_class_never_instantiated_local_highlighting=suggestion +resharper_class_with_virtual_members_never_inherited_global_highlighting=suggestion +resharper_class_with_virtual_members_never_inherited_local_highlighting=suggestion +resharper_clear_attribute_is_obsolete_all_highlighting=warning +resharper_clear_attribute_is_obsolete_highlighting=warning +resharper_closure_on_modified_variable_highlighting=warning +resharper_coerced_equals_using_highlighting=warning +resharper_coerced_equals_using_with_null_undefined_highlighting=none +resharper_collection_never_queried_global_highlighting=warning +resharper_collection_never_queried_local_highlighting=warning +resharper_collection_never_updated_global_highlighting=warning +resharper_collection_never_updated_local_highlighting=warning +resharper_comma_not_valid_here_highlighting=error +resharper_comment_typo_highlighting=suggestion +resharper_common_js_external_module_highlighting=suggestion +resharper_compare_non_constrained_generic_with_null_highlighting=none +resharper_compare_of_floats_by_equality_operator_highlighting=none +resharper_conditional_ternary_equal_branch_highlighting=warning +resharper_condition_is_always_const_highlighting=warning +resharper_condition_is_always_true_or_false_highlighting=warning +resharper_confusing_char_as_integer_in_constructor_highlighting=warning +resharper_constant_conditional_access_qualifier_highlighting=warning +resharper_constant_null_coalescing_condition_highlighting=warning +resharper_constructor_call_not_used_highlighting=warning +resharper_constructor_initializer_loop_highlighting=warning +resharper_container_annotation_redundancy_highlighting=warning +resharper_context_value_is_provided_highlighting=none +resharper_contract_annotation_not_parsed_highlighting=warning +resharper_convert_closure_to_method_group_highlighting=suggestion +resharper_convert_conditional_ternary_expression_to_switch_expression_highlighting=hint +resharper_convert_if_do_to_while_highlighting=suggestion +resharper_convert_if_statement_to_conditional_ternary_expression_highlighting=suggestion +resharper_convert_if_statement_to_null_coalescing_assignment_highlighting=suggestion +resharper_convert_if_statement_to_null_coalescing_expression_highlighting=suggestion +resharper_convert_if_statement_to_return_statement_highlighting=hint +resharper_convert_if_statement_to_switch_expression_highlighting=hint +resharper_convert_if_statement_to_switch_statement_highlighting=hint +resharper_convert_if_to_or_expression_highlighting=suggestion +resharper_convert_nullable_to_short_form_highlighting=suggestion +resharper_convert_switch_statement_to_switch_expression_highlighting=hint +resharper_convert_to_auto_property_highlighting=suggestion +resharper_convert_to_auto_property_when_possible_highlighting=hint +resharper_convert_to_auto_property_with_private_setter_highlighting=hint +resharper_convert_to_compound_assignment_highlighting=hint +resharper_convert_to_constant_global_highlighting=hint +resharper_convert_to_constant_local_highlighting=hint +resharper_convert_to_lambda_expression_highlighting=suggestion +resharper_convert_to_lambda_expression_when_possible_highlighting=none +resharper_convert_to_local_function_highlighting=suggestion +resharper_convert_to_null_coalescing_compound_assignment_highlighting=suggestion +resharper_convert_to_primary_constructor_highlighting=suggestion +resharper_convert_to_static_class_highlighting=suggestion +resharper_convert_to_using_declaration_highlighting=suggestion +resharper_convert_to_vb_auto_property_highlighting=suggestion +resharper_convert_to_vb_auto_property_when_possible_highlighting=hint +resharper_convert_to_vb_auto_property_with_private_setter_highlighting=hint +resharper_convert_type_check_pattern_to_null_check_highlighting=warning +resharper_convert_type_check_to_null_check_highlighting=warning +resharper_co_variant_array_conversion_highlighting=warning +resharper_cpp_abstract_class_without_specifier_highlighting=warning +resharper_cpp_abstract_final_class_highlighting=warning +resharper_cpp_abstract_virtual_function_call_in_ctor_highlighting=error +resharper_cpp_access_specifier_with_no_declarations_highlighting=suggestion +resharper_cpp_assigned_value_is_never_used_highlighting=warning +resharper_cpp_awaiter_type_is_not_class_highlighting=warning +resharper_cpp_bad_angle_brackets_spaces_highlighting=none +resharper_cpp_bad_braces_spaces_highlighting=none +resharper_cpp_bad_child_statement_indent_highlighting=none +resharper_cpp_bad_colon_spaces_highlighting=none +resharper_cpp_bad_comma_spaces_highlighting=none +resharper_cpp_bad_control_braces_indent_highlighting=none +resharper_cpp_bad_control_braces_line_breaks_highlighting=none +resharper_cpp_bad_declaration_braces_indent_highlighting=none +resharper_cpp_bad_declaration_braces_line_breaks_highlighting=none +resharper_cpp_bad_empty_braces_line_breaks_highlighting=none +resharper_cpp_bad_expression_braces_indent_highlighting=none +resharper_cpp_bad_expression_braces_line_breaks_highlighting=none +resharper_cpp_bad_indent_highlighting=none +resharper_cpp_bad_list_line_breaks_highlighting=none +resharper_cpp_bad_member_access_spaces_highlighting=none +resharper_cpp_bad_namespace_braces_indent_highlighting=none +resharper_cpp_bad_parens_line_breaks_highlighting=none +resharper_cpp_bad_parens_spaces_highlighting=none +resharper_cpp_bad_semicolon_spaces_highlighting=none +resharper_cpp_bad_spaces_after_keyword_highlighting=none +resharper_cpp_bad_square_brackets_spaces_highlighting=none +resharper_cpp_bad_switch_braces_indent_highlighting=none +resharper_cpp_bad_symbol_spaces_highlighting=none +resharper_cpp_boolean_increment_expression_highlighting=warning +resharper_cpp_boost_format_bad_code_highlighting=warning +resharper_cpp_boost_format_legacy_code_highlighting=suggestion +resharper_cpp_boost_format_mixed_args_highlighting=error +resharper_cpp_boost_format_too_few_args_highlighting=error +resharper_cpp_boost_format_too_many_args_highlighting=warning +resharper_cpp_clang_tidy_abseil_duration_addition_highlighting=none +resharper_cpp_clang_tidy_abseil_duration_comparison_highlighting=none +resharper_cpp_clang_tidy_abseil_duration_conversion_cast_highlighting=none +resharper_cpp_clang_tidy_abseil_duration_division_highlighting=none +resharper_cpp_clang_tidy_abseil_duration_factory_float_highlighting=none +resharper_cpp_clang_tidy_abseil_duration_factory_scale_highlighting=none +resharper_cpp_clang_tidy_abseil_duration_subtraction_highlighting=none +resharper_cpp_clang_tidy_abseil_duration_unnecessary_conversion_highlighting=none +resharper_cpp_clang_tidy_abseil_faster_strsplit_delimiter_highlighting=none +resharper_cpp_clang_tidy_abseil_no_internal_dependencies_highlighting=none +resharper_cpp_clang_tidy_abseil_no_namespace_highlighting=none +resharper_cpp_clang_tidy_abseil_redundant_strcat_calls_highlighting=none +resharper_cpp_clang_tidy_abseil_string_find_startswith_highlighting=none +resharper_cpp_clang_tidy_abseil_string_find_str_contains_highlighting=none +resharper_cpp_clang_tidy_abseil_str_cat_append_highlighting=none +resharper_cpp_clang_tidy_abseil_time_comparison_highlighting=none +resharper_cpp_clang_tidy_abseil_time_subtraction_highlighting=none +resharper_cpp_clang_tidy_abseil_upgrade_duration_conversions_highlighting=none +resharper_cpp_clang_tidy_altera_id_dependent_backward_branch_highlighting=none +resharper_cpp_clang_tidy_altera_kernel_name_restriction_highlighting=none +resharper_cpp_clang_tidy_altera_single_work_item_barrier_highlighting=none +resharper_cpp_clang_tidy_altera_struct_pack_align_highlighting=none +resharper_cpp_clang_tidy_altera_unroll_loops_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_accept4_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_accept_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_creat_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_dup_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_epoll_create1_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_epoll_create_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_fopen_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_inotify_init1_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_inotify_init_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_memfd_create_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_open_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_pipe2_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_pipe_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_socket_highlighting=none +resharper_cpp_clang_tidy_android_comparison_in_temp_failure_retry_highlighting=none +resharper_cpp_clang_tidy_boost_use_to_string_highlighting=suggestion +resharper_cpp_clang_tidy_bugprone_argument_comment_highlighting=suggestion +resharper_cpp_clang_tidy_bugprone_assert_side_effect_highlighting=warning +resharper_cpp_clang_tidy_bugprone_bad_signal_to_kill_thread_highlighting=warning +resharper_cpp_clang_tidy_bugprone_bool_pointer_implicit_conversion_highlighting=none +resharper_cpp_clang_tidy_bugprone_branch_clone_highlighting=warning +resharper_cpp_clang_tidy_bugprone_copy_constructor_init_highlighting=warning +resharper_cpp_clang_tidy_bugprone_dangling_handle_highlighting=warning +resharper_cpp_clang_tidy_bugprone_dynamic_static_initializers_highlighting=warning +resharper_cpp_clang_tidy_bugprone_easily_swappable_parameters_highlighting=none +resharper_cpp_clang_tidy_bugprone_exception_escape_highlighting=none +resharper_cpp_clang_tidy_bugprone_fold_init_type_highlighting=warning +resharper_cpp_clang_tidy_bugprone_forwarding_reference_overload_highlighting=warning +resharper_cpp_clang_tidy_bugprone_forward_declaration_namespace_highlighting=warning +resharper_cpp_clang_tidy_bugprone_implicit_widening_of_multiplication_result_highlighting=warning +resharper_cpp_clang_tidy_bugprone_inaccurate_erase_highlighting=warning +resharper_cpp_clang_tidy_bugprone_incorrect_roundings_highlighting=warning +resharper_cpp_clang_tidy_bugprone_infinite_loop_highlighting=warning +resharper_cpp_clang_tidy_bugprone_integer_division_highlighting=warning +resharper_cpp_clang_tidy_bugprone_lambda_function_name_highlighting=warning +resharper_cpp_clang_tidy_bugprone_macro_parentheses_highlighting=warning +resharper_cpp_clang_tidy_bugprone_macro_repeated_side_effects_highlighting=warning +resharper_cpp_clang_tidy_bugprone_misplaced_operator_in_strlen_in_alloc_highlighting=warning +resharper_cpp_clang_tidy_bugprone_misplaced_pointer_arithmetic_in_alloc_highlighting=warning +resharper_cpp_clang_tidy_bugprone_misplaced_widening_cast_highlighting=warning +resharper_cpp_clang_tidy_bugprone_move_forwarding_reference_highlighting=warning +resharper_cpp_clang_tidy_bugprone_multiple_statement_macro_highlighting=warning +resharper_cpp_clang_tidy_bugprone_narrowing_conversions_highlighting=warning +resharper_cpp_clang_tidy_bugprone_not_null_terminated_result_highlighting=warning +resharper_cpp_clang_tidy_bugprone_no_escape_highlighting=warning +resharper_cpp_clang_tidy_bugprone_parent_virtual_call_highlighting=warning +resharper_cpp_clang_tidy_bugprone_posix_return_highlighting=warning +resharper_cpp_clang_tidy_bugprone_redundant_branch_condition_highlighting=warning +resharper_cpp_clang_tidy_bugprone_reserved_identifier_highlighting=warning +resharper_cpp_clang_tidy_bugprone_signal_handler_highlighting=warning +resharper_cpp_clang_tidy_bugprone_signed_char_misuse_highlighting=warning +resharper_cpp_clang_tidy_bugprone_sizeof_container_highlighting=warning +resharper_cpp_clang_tidy_bugprone_sizeof_expression_highlighting=warning +resharper_cpp_clang_tidy_bugprone_spuriously_wake_up_functions_highlighting=warning +resharper_cpp_clang_tidy_bugprone_string_constructor_highlighting=warning +resharper_cpp_clang_tidy_bugprone_string_integer_assignment_highlighting=warning +resharper_cpp_clang_tidy_bugprone_string_literal_with_embedded_nul_highlighting=warning +resharper_cpp_clang_tidy_bugprone_suspicious_enum_usage_highlighting=warning +resharper_cpp_clang_tidy_bugprone_suspicious_include_highlighting=warning +resharper_cpp_clang_tidy_bugprone_suspicious_memset_usage_highlighting=warning +resharper_cpp_clang_tidy_bugprone_suspicious_missing_comma_highlighting=warning +resharper_cpp_clang_tidy_bugprone_suspicious_semicolon_highlighting=warning +resharper_cpp_clang_tidy_bugprone_suspicious_string_compare_highlighting=warning +resharper_cpp_clang_tidy_bugprone_swapped_arguments_highlighting=warning +resharper_cpp_clang_tidy_bugprone_terminating_continue_highlighting=warning +resharper_cpp_clang_tidy_bugprone_throw_keyword_missing_highlighting=warning +resharper_cpp_clang_tidy_bugprone_too_small_loop_variable_highlighting=warning +resharper_cpp_clang_tidy_bugprone_undefined_memory_manipulation_highlighting=warning +resharper_cpp_clang_tidy_bugprone_undelegated_constructor_highlighting=warning +resharper_cpp_clang_tidy_bugprone_unhandled_exception_at_new_highlighting=none +resharper_cpp_clang_tidy_bugprone_unhandled_self_assignment_highlighting=warning +resharper_cpp_clang_tidy_bugprone_unused_raii_highlighting=warning +resharper_cpp_clang_tidy_bugprone_unused_return_value_highlighting=warning +resharper_cpp_clang_tidy_bugprone_use_after_move_highlighting=warning +resharper_cpp_clang_tidy_bugprone_virtual_near_miss_highlighting=suggestion +resharper_cpp_clang_tidy_cert_con36_c_highlighting=none +resharper_cpp_clang_tidy_cert_con54_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_dcl03_c_highlighting=none +resharper_cpp_clang_tidy_cert_dcl16_c_highlighting=none +resharper_cpp_clang_tidy_cert_dcl21_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_dcl37_c_highlighting=none +resharper_cpp_clang_tidy_cert_dcl50_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_dcl51_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_dcl54_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_dcl58_cpp_highlighting=warning +resharper_cpp_clang_tidy_cert_dcl59_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_env33_c_highlighting=none +resharper_cpp_clang_tidy_cert_err09_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_err34_c_highlighting=suggestion +resharper_cpp_clang_tidy_cert_err52_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_err58_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_err60_cpp_highlighting=warning +resharper_cpp_clang_tidy_cert_err61_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_fio38_c_highlighting=none +resharper_cpp_clang_tidy_cert_flp30_c_highlighting=warning +resharper_cpp_clang_tidy_cert_mem57_cpp_highlighting=warning +resharper_cpp_clang_tidy_cert_msc30_c_highlighting=none +resharper_cpp_clang_tidy_cert_msc32_c_highlighting=none +resharper_cpp_clang_tidy_cert_msc50_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_msc51_cpp_highlighting=warning +resharper_cpp_clang_tidy_cert_oop11_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_oop54_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_oop57_cpp_highlighting=warning +resharper_cpp_clang_tidy_cert_oop58_cpp_highlighting=warning +resharper_cpp_clang_tidy_cert_pos44_c_highlighting=none +resharper_cpp_clang_tidy_cert_pos47_c_highlighting=none +resharper_cpp_clang_tidy_cert_sig30_c_highlighting=none +resharper_cpp_clang_tidy_cert_str34_c_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_api_modeling_google_g_test_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_api_modeling_llvm_cast_value_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_api_modeling_llvm_return_value_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_api_modeling_std_c_library_functions_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_api_modeling_trust_nonnull_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_builtin_builtin_functions_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_builtin_no_return_functions_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_call_and_message_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_call_and_message_modeling_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_divide_zero_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_dynamic_type_propagation_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_nonnil_string_constants_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_non_null_param_checker_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_null_dereference_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_stack_address_escape_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_stack_addr_escape_base_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_undefined_binary_operator_result_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_array_subscript_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_assign_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_branch_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_captured_block_variable_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_undef_return_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_vla_size_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_inner_pointer_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_move_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_new_delete_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_new_delete_leaks_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_placement_new_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_pure_virtual_call_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_self_assignment_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_smart_ptr_modeling_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_virtual_call_modeling_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_deadcode_dead_stores_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_fuchsia_handle_checker_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_nullability_nullability_base_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_nullability_nullable_dereferenced_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_nullability_nullable_passed_to_nonnull_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_nullability_nullable_returned_from_nonnull_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_nullability_null_passed_to_nonnull_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_nullability_null_returned_from_nonnull_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_optin_cplusplus_uninitialized_object_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_optin_cplusplus_virtual_call_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_optin_mpi_mpi_checker_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_optin_osx_cocoa_localizability_empty_localization_context_checker_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_optin_osx_cocoa_localizability_non_localized_string_checker_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_optin_osx_os_object_c_style_cast_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_optin_performance_gcd_antipattern_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_optin_performance_padding_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_optin_portability_unix_api_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_api_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_at_sync_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_autorelease_write_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_class_release_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_dealloc_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_incompatible_method_types_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_loops_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_missing_super_call_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_nil_arg_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_non_nil_return_value_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_ns_autorelease_pool_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_ns_error_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_obj_c_generics_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_retain_count_base_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_retain_count_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_run_loop_autorelease_leak_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_self_init_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_super_dealloc_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_unused_ivars_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_variadic_method_types_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_cf_error_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_cf_number_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_cf_retain_release_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_containers_out_of_bounds_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_containers_pointer_sized_values_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_mig_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_ns_or_cf_error_deref_checker_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_number_object_conversion_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_obj_c_property_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_os_object_retain_count_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_sec_keychain_api_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_float_loop_counter_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_bcmp_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_bcopy_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_bzero_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_decode_value_of_obj_c_type_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_deprecated_or_unsafe_buffer_handling_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_getpw_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_gets_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_mkstemp_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_mktemp_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_rand_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_security_syntax_checker_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_strcpy_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_unchecked_return_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_vfork_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_unix_api_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_unix_cstring_bad_size_arg_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_unix_cstring_c_string_modeling_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_unix_cstring_null_arg_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_unix_dynamic_memory_modeling_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_unix_malloc_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_unix_malloc_sizeof_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_unix_mismatched_deallocator_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_unix_vfork_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_valist_copy_to_self_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_valist_uninitialized_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_valist_unterminated_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_valist_valist_base_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_webkit_no_uncounted_member_checker_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_webkit_ref_cntbl_base_virtual_dtor_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_webkit_uncounted_lambda_captures_checker_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_absolute_value_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_abstract_final_class_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_abstract_vbase_init_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_address_of_packed_member_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_address_of_temporary_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_aix_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_align_mismatch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_alloca_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_alloca_with_align_alignof_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_delete_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_ellipsis_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_macro_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_member_template_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_reversed_operator_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_analyzer_incompatible_plugin_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_anonymous_pack_parens_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_anon_enum_enum_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_arc_bridge_casts_disallowed_in_nonarc_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_arc_maybe_repeated_use_of_weak_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_arc_non_pod_memaccess_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_arc_perform_selector_leaks_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_arc_repeated_use_of_weak_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_arc_retain_cycles_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_arc_unsafe_retained_assign_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_argument_outside_range_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_array_bounds_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_array_bounds_pointer_arithmetic_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_asm_operand_widths_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_assign_enum_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_assume_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_atimport_in_framework_header_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_atomic_alignment_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_atomic_implicit_seq_cst_highlighting=suggestion +resharper_cpp_clang_tidy_clang_diagnostic_atomic_memory_ordering_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_atomic_property_with_user_defined_accessor_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_attribute_packed_for_bitfield_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_at_protocol_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_auto_disable_vptr_sanitizer_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_auto_import_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_auto_storage_class_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_auto_var_id_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_availability_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_avr_rtlib_linking_quirks_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_backslash_newline_escape_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_bad_function_cast_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_binding_in_condition_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_bind_to_temporary_copy_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_bitfield_constant_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_bitfield_enum_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_bitfield_width_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_bitwise_conditional_parentheses_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_bitwise_op_parentheses_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_block_capture_autoreleasing_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_bool_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_bool_operation_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_braced_scalar_init_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_bridge_cast_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_builtin_assume_aligned_alignment_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_builtin_macro_redefined_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_builtin_memcpy_chk_size_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_builtin_requires_header_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_c11_extensions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_c2x_extensions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_c99_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_c99_designator_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_c99_extensions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_called_once_parameter_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_call_to_pure_virtual_from_ctor_dtor_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cast_align_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cast_calling_convention_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cast_function_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cast_of_sel_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cast_qual_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cast_qual_unrelated_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cf_string_literal_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_char_subscripts_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_clang_cl_pch_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_class_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_class_varargs_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cmse_union_leak_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_comma_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_comment_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_compare_distinct_pointer_types_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_completion_handler_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_complex_component_init_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_compound_token_split_by_macro_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_compound_token_split_by_space_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_compound_token_split_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_concepts_ts_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_conditional_type_mismatch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_conditional_uninitialized_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_config_macros_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_constant_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_constant_evaluated_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_constant_logical_operand_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_constexpr_not_const_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_consumed_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_coroutine_missing_unhandled_exception_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_covered_switch_default_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_compat_deprecated_writable_strings_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_compat_reserved_user_defined_literal_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_extensions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_extra_semi_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_inline_namespace_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_long_long_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_narrowing_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp14_binary_literal_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp14_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp14_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp14_extensions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp17_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp17_compat_mangling_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp17_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp17_extensions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp20_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp20_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp20_designator_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp20_extensions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp2a_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp2a_extensions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp2b_extensions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_bind_to_temporary_copy_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_extra_semi_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_local_type_template_args_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_unnamed_type_template_args_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_compat_binary_literal_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_cpp14_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_cpp14_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_cpp14_cpp17_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_cpp14_cpp17_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cstring_format_directive_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ctad_maybe_unsupported_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_ctu_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cuda_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_custom_atomic_properties_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cxx_attribute_extension_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dangling_else_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dangling_field_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dangling_gsl_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dangling_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dangling_initializer_list_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_darwin_sdk_settings_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_date_time_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dealloc_in_category_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_debug_compression_unavailable_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_declaration_after_statement_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_defaulted_function_deleted_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_delegating_ctor_cycles_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_delete_abstract_non_virtual_dtor_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_delete_incomplete_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_delete_non_abstract_non_virtual_dtor_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_delete_non_virtual_dtor_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_altivec_src_compat_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_anon_enum_enum_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_array_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_attributes_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_comma_subscript_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_copy_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_copy_with_dtor_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_copy_with_user_provided_copy_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_copy_with_user_provided_dtor_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_declarations_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_dynamic_exception_spec_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_enum_compare_conditional_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_enum_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_enum_enum_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_enum_float_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_implementations_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_increment_bool_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_objc_isa_usage_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_objc_pointer_introspection_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_objc_pointer_introspection_perform_selector_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_register_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_this_capture_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_volatile_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_direct_ivar_access_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_disabled_macro_expansion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_distributed_object_modifiers_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_division_by_zero_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dllexport_explicit_instantiation_decl_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dllimport_static_field_def_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dll_attribute_on_redeclaration_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_documentation_deprecated_sync_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_documentation_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_documentation_html_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_documentation_pedantic_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_documentation_unknown_command_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_dollar_in_identifier_extension_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_double_promotion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dtor_name_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dtor_typedef_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_duplicate_decl_specifier_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_duplicate_enum_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_duplicate_method_arg_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_duplicate_method_match_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_duplicate_protocol_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dynamic_class_memaccess_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dynamic_exception_spec_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_embedded_directive_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_empty_body_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_empty_decomposition_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_empty_init_stmt_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_empty_translation_unit_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_encode_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_enum_compare_conditional_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_enum_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_enum_compare_switch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_enum_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_enum_enum_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_enum_float_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_enum_too_large_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_error_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_exceptions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_excess_initializers_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_exit_time_destructors_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_expansion_to_defined_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_explicit_initialize_call_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_explicit_ownership_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_export_unnamed_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_export_using_directive_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_extern_c_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_extern_initializer_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_extra_qualification_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_extra_semi_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_extra_semi_stmt_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_extra_tokens_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_final_dtor_non_final_class_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_fixed_enum_extension_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_fixed_point_overflow_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_flag_enum_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_flexible_array_extensions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_float_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_float_equal_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_float_overflow_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_float_zero_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_format_extra_args_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_format_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_format_insufficient_args_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_format_invalid_specifier_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_format_nonliteral_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_format_non_iso_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_format_pedantic_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_format_security_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_format_type_confusion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_format_zero_length_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_fortify_source_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_for_loop_analysis_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_four_char_constants_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_framework_include_private_from_public_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_frame_address_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_frame_larger_than_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_free_nonheap_object_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_function_def_in_objc_container_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_function_multiversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gcc_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_global_constructors_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_global_isel_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_alignof_expression_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_anonymous_struct_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_gnu_array_member_paren_init_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_auto_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_binary_literal_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_case_range_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_complex_integer_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_compound_literal_initializer_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_conditional_omitted_operand_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_designator_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_empty_initializer_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_empty_struct_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_flexible_array_initializer_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_flexible_array_union_member_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_folding_constant_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_imaginary_constant_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_include_next_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_inline_cpp_without_extern_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_label_as_value_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_redeclared_enum_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_statement_expression_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_static_float_init_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_string_literal_operator_template_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_union_cast_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_variable_sized_type_not_at_end_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_zero_variadic_macro_arguments_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_header_guard_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_header_hygiene_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_hip_only_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_idiomatic_parentheses_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ignored_attributes_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_ignored_availability_without_sdk_settings_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_ignored_optimization_argument_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ignored_pragmas_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ignored_pragma_intrinsic_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ignored_pragma_optimize_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_ignored_qualifiers_highlighting=suggestion +resharper_cpp_clang_tidy_clang_diagnostic_implicitly_unsigned_literal_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_atomic_properties_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_const_int_float_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_conversion_floating_point_to_bool_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_exception_spec_mismatch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_fallthrough_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_fallthrough_per_function_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_fixed_point_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_float_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_function_declaration_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_int_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_int_float_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_int_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_retain_self_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_import_preprocessor_directive_pedantic_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_inaccessible_base_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_include_next_absolute_path_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_include_next_outside_header_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_exception_spec_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_function_pointer_types_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_library_redeclaration_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_ms_struct_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_pointer_types_discards_qualifiers_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_pointer_types_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_property_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_sysroot_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incomplete_framework_module_declaration_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incomplete_implementation_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incomplete_module_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incomplete_setjmp_declaration_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incomplete_umbrella_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_inconsistent_dllimport_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_inconsistent_missing_destructor_override_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_inconsistent_missing_override_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_increment_bool_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_independent_class_attribute_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_infinite_recursion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_initializer_overrides_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_injected_class_name_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_inline_asm_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_inline_namespace_reopened_noninline_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_inline_new_delete_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_instantiation_after_specialization_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_integer_overflow_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_interrupt_service_routine_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_int_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_int_in_bool_context_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_int_to_pointer_cast_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_int_to_void_pointer_cast_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_constexpr_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_iboutlet_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_initializer_from_system_header_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_ios_deployment_target_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_noreturn_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_no_builtin_names_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_offsetof_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_or_nonexistent_directory_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_partial_specialization_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_pp_token_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_source_encoding_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_token_paste_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_jump_seh_finally_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_keyword_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_keyword_macro_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_knr_promoted_parameter_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_language_extension_token_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_large_by_value_copy_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_literal_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_literal_range_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_local_type_template_args_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_logical_not_parentheses_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_logical_op_parentheses_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_long_long_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_macro_redefined_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_main_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_main_return_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_malformed_warning_check_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_many_braces_around_scalar_init_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_max_tokens_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_max_unsigned_zero_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_memset_transposed_args_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_memsize_comparison_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_method_signatures_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_abstract_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_anon_tag_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_cast_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_charize_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_comment_paste_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_const_init_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_cpp_macro_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_default_arg_redefinition_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_drectve_section_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_end_of_file_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_enum_forward_reference_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_enum_value_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_exception_spec_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_exists_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_explicit_constructor_call_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_extra_qualification_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_fixed_enum_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_flexible_array_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_goto_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_inaccessible_base_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_include_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_mutable_reference_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_pure_definition_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_redeclare_static_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_sealed_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_static_assert_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_template_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_template_shadow_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_union_member_reference_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_unqualified_friend_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_using_decl_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_void_pseudo_dtor_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_misleading_indentation_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_mismatched_new_delete_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_mismatched_parameter_types_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_mismatched_return_types_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_mismatched_tags_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_braces_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_constinit_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_declarations_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_exception_spec_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_field_initializers_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_method_return_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_noescape_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_noreturn_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_prototypes_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_missing_prototype_for_cc_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_selector_name_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_sysroot_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_variable_declarations_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_misspelled_assumption_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_modules_ambiguous_internal_linkage_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_modules_import_nested_redundant_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_module_conflict_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_module_file_config_mismatch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_module_file_extension_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_module_import_in_extern_c_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_msvc_not_found_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_multichar_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_multiple_move_vbase_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nested_anon_types_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_newline_eof_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_new_returns_null_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_noderef_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nonnull_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nonportable_include_path_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nonportable_system_include_path_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nonportable_vector_initialization_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nontrivial_memaccess_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_non_c_typedef_for_linkage_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_non_literal_null_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_non_modular_include_in_framework_module_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_non_modular_include_in_module_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_non_pod_varargs_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_non_power_of_two_alignment_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_non_virtual_dtor_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nsconsumed_mismatch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nsreturns_mismatch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ns_object_attribute_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nullability_completeness_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nullability_completeness_on_arrays_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nullability_declspec_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nullability_extension_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nullability_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nullability_inferred_on_nested_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nullable_to_nonnull_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_null_arithmetic_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_null_character_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_null_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_null_dereference_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_null_pointer_arithmetic_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_null_pointer_subtraction_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_odr_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_old_style_cast_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_opencl_unsupported_rgba_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_openmp51_extensions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_openmp_clauses_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_openmp_loop_form_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_openmp_mapping_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_openmp_target_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_option_ignored_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ordered_compare_function_pointers_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_out_of_line_declaration_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_out_of_scope_function_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_overlength_strings_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_overloaded_shift_op_parentheses_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_overloaded_virtual_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_override_init_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_override_module_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_overriding_method_mismatch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_overriding_t_option_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_over_aligned_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_packed_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_padded_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_parentheses_equality_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_parentheses_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pass_failed_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pch_date_time_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pedantic_core_features_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pedantic_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pessimizing_move_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_arith_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_bool_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_integer_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_sign_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_to_enum_cast_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_to_int_cast_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_type_mismatch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_poison_system_directories_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_potentially_evaluated_expression_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pragmas_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pragma_clang_attribute_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pragma_messages_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pragma_once_outside_header_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pragma_pack_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pragma_pack_suspicious_include_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pragma_system_header_outside_header_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_predefined_identifier_outside_function_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pre_c2x_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_pre_c2x_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp14_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp14_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp17_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp17_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp20_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp20_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp2b_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp2b_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_pre_openmp51_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_private_extern_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_private_header_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_private_module_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_profile_instr_missing_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_profile_instr_out_of_date_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_profile_instr_unprofiled_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_property_access_dot_syntax_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_property_attribute_mismatch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_protocol_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_protocol_property_synthesis_ambiguity_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_psabi_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_qualified_void_return_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_quoted_include_in_framework_header_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_range_loop_analysis_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_range_loop_bind_reference_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_range_loop_construct_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_readonly_iboutlet_property_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_receiver_expr_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_receiver_forward_class_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_redeclared_class_member_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_redundant_move_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_redundant_parens_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_register_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_reinterpret_base_class_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_reorder_ctor_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_reorder_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_reorder_init_list_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_requires_expression_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_requires_super_attribute_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_reserved_identifier_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_reserved_id_macro_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_reserved_macro_identifier_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_reserved_user_defined_literal_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_retained_language_linkage_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_return_stack_address_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_return_std_move_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_return_type_c_linkage_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_return_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_rewrite_not_bool_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_section_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_selector_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_selector_type_mismatch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_self_assign_field_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_self_assign_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_self_assign_overloaded_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_self_move_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_semicolon_before_method_body_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_sentinel_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_serialized_diagnostics_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_shadow_field_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_shadow_field_in_constructor_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_shadow_field_in_constructor_modified_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_shadow_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_shadow_ivar_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_shadow_uncaptured_local_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_shift_count_negative_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_shift_count_overflow_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_shift_negative_value_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_shift_op_parentheses_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_shift_overflow_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_shift_sign_overflow_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_shorten64_to32_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_signed_enum_bitfield_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_signed_unsigned_wchar_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_sign_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_sign_conversion_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_sizeof_array_argument_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_sizeof_array_decay_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_sizeof_array_div_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_sizeof_pointer_div_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_sizeof_pointer_memaccess_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_slash_u_filename_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_slh_asm_goto_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_sometimes_uninitialized_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_source_uses_openmp_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_spir_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_static_float_init_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_static_inline_explicit_instantiation_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_static_in_inline_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_static_local_in_inline_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_static_self_init_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_stdlibcxx_not_found_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_strict_prototypes_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_strict_selector_match_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_string_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_string_concatenation_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_string_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_string_plus_char_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_string_plus_int_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_strlcpy_strlcat_size_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_strncat_size_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_suggest_destructor_override_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_suggest_override_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_super_class_method_mismatch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_suspicious_bzero_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_switch_bool_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_switch_enum_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_switch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_sync_fetch_and_nand_semantics_changed_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_bitwise_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_constant_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_constant_in_range_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_constant_out_of_range_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_objc_bool_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_overlap_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_pointer_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_type_limit_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_undefined_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_unsigned_char_zero_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_unsigned_enum_zero_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_unsigned_zero_compare_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_tautological_value_range_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tentative_definition_incomplete_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_analysis_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_attributes_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_beta_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_negative_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_precise_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_reference_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_verbose_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_trigraphs_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_typedef_redefinition_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_typename_missing_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_type_safety_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unable_to_open_stats_file_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unavailable_declarations_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_undeclared_selector_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_undefined_bool_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_undefined_func_template_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_undefined_inline_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_undefined_internal_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_undefined_internal_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_undefined_reinterpret_cast_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_undefined_var_template_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_undef_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_undef_prefix_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_underaligned_exception_object_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unevaluated_expression_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unguarded_availability_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unguarded_availability_new_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unicode_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unicode_homoglyph_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unicode_whitespace_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unicode_zero_width_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_uninitialized_const_reference_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_uninitialized_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unknown_argument_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unknown_attributes_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_unknown_cuda_version_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_unknown_escape_sequence_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unknown_pragmas_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_unknown_sanitizers_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unknown_warning_option_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unnamed_type_template_args_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unneeded_internal_declaration_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unneeded_member_function_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_break_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_loop_increment_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_return_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unsequenced_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_abs_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_availability_guard_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_cb_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_dll_base_class_template_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_friend_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_gpopt_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_nan_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_target_opt_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_visibility_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unusable_partial_specialization_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_but_set_parameter_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_unused_but_set_variable_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_unused_comparison_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_const_variable_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_exception_parameter_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_function_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_getter_return_value_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_label_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_lambda_capture_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_unused_local_typedef_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_macros_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_member_function_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_parameter_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_unused_private_field_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_property_ivar_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_result_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_template_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_value_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_variable_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_unused_volatile_lvalue_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_used_but_marked_unused_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_user_defined_literals_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_user_defined_warnings_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_varargs_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_variadic_macros_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_vector_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_vec_elem_size_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_vexing_parse_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_visibility_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_vla_extension_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_vla_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_void_pointer_to_enum_cast_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_void_pointer_to_int_cast_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_void_ptr_dereference_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_warnings_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_wasm_exception_spec_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_weak_template_vtables_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_weak_vtables_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_writable_strings_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_xor_used_as_pow_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_zero_as_null_pointer_constant_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_zero_length_array_highlighting=warning +resharper_cpp_clang_tidy_concurrency_mt_unsafe_highlighting=warning +resharper_cpp_clang_tidy_concurrency_thread_canceltype_asynchronous_highlighting=warning +resharper_cpp_clang_tidy_cppcoreguidelines_avoid_c_arrays_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_avoid_goto_highlighting=warning +resharper_cpp_clang_tidy_cppcoreguidelines_avoid_magic_numbers_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_avoid_non_const_global_variables_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_c_copy_assignment_signature_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_explicit_virtual_functions_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_init_variables_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_interfaces_global_init_highlighting=warning +resharper_cpp_clang_tidy_cppcoreguidelines_macro_usage_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_narrowing_conversions_highlighting=warning +resharper_cpp_clang_tidy_cppcoreguidelines_non_private_member_variables_in_classes_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_no_malloc_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_owning_memory_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_prefer_member_initializer_highlighting=suggestion +resharper_cpp_clang_tidy_cppcoreguidelines_pro_bounds_array_to_pointer_decay_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_bounds_constant_array_index_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_bounds_pointer_arithmetic_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_const_cast_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_cstyle_cast_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_member_init_highlighting=warning +resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_reinterpret_cast_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_static_cast_downcast_highlighting=suggestion +resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_union_access_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_vararg_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_slicing_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_special_member_functions_highlighting=suggestion +resharper_cpp_clang_tidy_darwin_avoid_spinlock_highlighting=none +resharper_cpp_clang_tidy_darwin_dispatch_once_nonstatic_highlighting=none +resharper_cpp_clang_tidy_fuchsia_default_arguments_calls_highlighting=none +resharper_cpp_clang_tidy_fuchsia_default_arguments_declarations_highlighting=none +resharper_cpp_clang_tidy_fuchsia_header_anon_namespaces_highlighting=none +resharper_cpp_clang_tidy_fuchsia_multiple_inheritance_highlighting=none +resharper_cpp_clang_tidy_fuchsia_overloaded_operator_highlighting=none +resharper_cpp_clang_tidy_fuchsia_statically_constructed_objects_highlighting=none +resharper_cpp_clang_tidy_fuchsia_trailing_return_highlighting=none +resharper_cpp_clang_tidy_fuchsia_virtual_inheritance_highlighting=none +resharper_cpp_clang_tidy_google_build_explicit_make_pair_highlighting=none +resharper_cpp_clang_tidy_google_build_namespaces_highlighting=none +resharper_cpp_clang_tidy_google_build_using_namespace_highlighting=none +resharper_cpp_clang_tidy_google_default_arguments_highlighting=none +resharper_cpp_clang_tidy_google_explicit_constructor_highlighting=none +resharper_cpp_clang_tidy_google_global_names_in_headers_highlighting=none +resharper_cpp_clang_tidy_google_objc_avoid_nsobject_new_highlighting=none +resharper_cpp_clang_tidy_google_objc_avoid_throwing_exception_highlighting=none +resharper_cpp_clang_tidy_google_objc_function_naming_highlighting=none +resharper_cpp_clang_tidy_google_objc_global_variable_declaration_highlighting=none +resharper_cpp_clang_tidy_google_readability_avoid_underscore_in_googletest_name_highlighting=none +resharper_cpp_clang_tidy_google_readability_braces_around_statements_highlighting=none +resharper_cpp_clang_tidy_google_readability_casting_highlighting=none +resharper_cpp_clang_tidy_google_readability_function_size_highlighting=none +resharper_cpp_clang_tidy_google_readability_namespace_comments_highlighting=none +resharper_cpp_clang_tidy_google_readability_todo_highlighting=none +resharper_cpp_clang_tidy_google_runtime_int_highlighting=none +resharper_cpp_clang_tidy_google_runtime_operator_highlighting=warning +resharper_cpp_clang_tidy_google_upgrade_googletest_case_highlighting=suggestion +resharper_cpp_clang_tidy_hicpp_avoid_c_arrays_highlighting=none +resharper_cpp_clang_tidy_hicpp_avoid_goto_highlighting=warning +resharper_cpp_clang_tidy_hicpp_braces_around_statements_highlighting=none +resharper_cpp_clang_tidy_hicpp_deprecated_headers_highlighting=none +resharper_cpp_clang_tidy_hicpp_exception_baseclass_highlighting=suggestion +resharper_cpp_clang_tidy_hicpp_explicit_conversions_highlighting=none +resharper_cpp_clang_tidy_hicpp_function_size_highlighting=none +resharper_cpp_clang_tidy_hicpp_invalid_access_moved_highlighting=none +resharper_cpp_clang_tidy_hicpp_member_init_highlighting=none +resharper_cpp_clang_tidy_hicpp_move_const_arg_highlighting=none +resharper_cpp_clang_tidy_hicpp_multiway_paths_covered_highlighting=warning +resharper_cpp_clang_tidy_hicpp_named_parameter_highlighting=none +resharper_cpp_clang_tidy_hicpp_new_delete_operators_highlighting=none +resharper_cpp_clang_tidy_hicpp_noexcept_move_highlighting=none +resharper_cpp_clang_tidy_hicpp_no_array_decay_highlighting=none +resharper_cpp_clang_tidy_hicpp_no_assembler_highlighting=none +resharper_cpp_clang_tidy_hicpp_no_malloc_highlighting=none +resharper_cpp_clang_tidy_hicpp_signed_bitwise_highlighting=none +resharper_cpp_clang_tidy_hicpp_special_member_functions_highlighting=none +resharper_cpp_clang_tidy_hicpp_static_assert_highlighting=none +resharper_cpp_clang_tidy_hicpp_undelegated_constructor_highlighting=none +resharper_cpp_clang_tidy_hicpp_uppercase_literal_suffix_highlighting=none +resharper_cpp_clang_tidy_hicpp_use_auto_highlighting=none +resharper_cpp_clang_tidy_hicpp_use_emplace_highlighting=none +resharper_cpp_clang_tidy_hicpp_use_equals_default_highlighting=none +resharper_cpp_clang_tidy_hicpp_use_equals_delete_highlighting=none +resharper_cpp_clang_tidy_hicpp_use_noexcept_highlighting=none +resharper_cpp_clang_tidy_hicpp_use_nullptr_highlighting=none +resharper_cpp_clang_tidy_hicpp_use_override_highlighting=none +resharper_cpp_clang_tidy_hicpp_vararg_highlighting=none +resharper_cpp_clang_tidy_highlighting_highlighting=suggestion +resharper_cpp_clang_tidy_linuxkernel_must_check_errs_highlighting=warning +resharper_cpp_clang_tidy_llvmlibc_callee_namespace_highlighting=none +resharper_cpp_clang_tidy_llvmlibc_implementation_in_namespace_highlighting=none +resharper_cpp_clang_tidy_llvmlibc_restrict_system_libc_headers_highlighting=none +resharper_cpp_clang_tidy_llvm_else_after_return_highlighting=none +resharper_cpp_clang_tidy_llvm_header_guard_highlighting=none +resharper_cpp_clang_tidy_llvm_include_order_highlighting=none +resharper_cpp_clang_tidy_llvm_namespace_comment_highlighting=none +resharper_cpp_clang_tidy_llvm_prefer_isa_or_dyn_cast_in_conditionals_highlighting=none +resharper_cpp_clang_tidy_llvm_prefer_register_over_unsigned_highlighting=suggestion +resharper_cpp_clang_tidy_llvm_qualified_auto_highlighting=none +resharper_cpp_clang_tidy_llvm_twine_local_highlighting=none +resharper_cpp_clang_tidy_misc_definitions_in_headers_highlighting=none +resharper_cpp_clang_tidy_misc_misplaced_const_highlighting=warning +resharper_cpp_clang_tidy_misc_new_delete_overloads_highlighting=warning +resharper_cpp_clang_tidy_misc_non_copyable_objects_highlighting=warning +resharper_cpp_clang_tidy_misc_non_private_member_variables_in_classes_highlighting=none +resharper_cpp_clang_tidy_misc_no_recursion_highlighting=none +resharper_cpp_clang_tidy_misc_redundant_expression_highlighting=warning +resharper_cpp_clang_tidy_misc_static_assert_highlighting=suggestion +resharper_cpp_clang_tidy_misc_throw_by_value_catch_by_reference_highlighting=warning +resharper_cpp_clang_tidy_misc_unconventional_assign_operator_highlighting=warning +resharper_cpp_clang_tidy_misc_uniqueptr_reset_release_highlighting=suggestion +resharper_cpp_clang_tidy_misc_unused_alias_decls_highlighting=suggestion +resharper_cpp_clang_tidy_misc_unused_parameters_highlighting=none +resharper_cpp_clang_tidy_misc_unused_using_decls_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_avoid_bind_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_avoid_c_arrays_highlighting=none +resharper_cpp_clang_tidy_modernize_concat_nested_namespaces_highlighting=none +resharper_cpp_clang_tidy_modernize_deprecated_headers_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_deprecated_ios_base_aliases_highlighting=warning +resharper_cpp_clang_tidy_modernize_loop_convert_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_make_shared_highlighting=none +resharper_cpp_clang_tidy_modernize_make_unique_highlighting=none +resharper_cpp_clang_tidy_modernize_pass_by_value_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_raw_string_literal_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_redundant_void_arg_highlighting=none +resharper_cpp_clang_tidy_modernize_replace_auto_ptr_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_replace_disallow_copy_and_assign_macro_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_replace_random_shuffle_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_return_braced_init_list_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_shrink_to_fit_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_unary_static_assert_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_use_auto_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_use_bool_literals_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_use_default_member_init_highlighting=none +resharper_cpp_clang_tidy_modernize_use_emplace_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_use_equals_default_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_use_equals_delete_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_use_nodiscard_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_use_noexcept_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_use_nullptr_highlighting=none +resharper_cpp_clang_tidy_modernize_use_override_highlighting=none +resharper_cpp_clang_tidy_modernize_use_trailing_return_type_highlighting=none +resharper_cpp_clang_tidy_modernize_use_transparent_functors_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_use_uncaught_exceptions_highlighting=warning +resharper_cpp_clang_tidy_modernize_use_using_highlighting=none +resharper_cpp_clang_tidy_mpi_buffer_deref_highlighting=warning +resharper_cpp_clang_tidy_mpi_type_mismatch_highlighting=warning +resharper_cpp_clang_tidy_objc_avoid_nserror_init_highlighting=warning +resharper_cpp_clang_tidy_objc_dealloc_in_category_highlighting=warning +resharper_cpp_clang_tidy_objc_forbidden_subclassing_highlighting=warning +resharper_cpp_clang_tidy_objc_missing_hash_highlighting=warning +resharper_cpp_clang_tidy_objc_nsinvocation_argument_lifetime_highlighting=warning +resharper_cpp_clang_tidy_objc_property_declaration_highlighting=warning +resharper_cpp_clang_tidy_objc_super_self_highlighting=warning +resharper_cpp_clang_tidy_openmp_exception_escape_highlighting=warning +resharper_cpp_clang_tidy_openmp_use_default_none_highlighting=warning +resharper_cpp_clang_tidy_performance_faster_string_find_highlighting=suggestion +resharper_cpp_clang_tidy_performance_for_range_copy_highlighting=suggestion +resharper_cpp_clang_tidy_performance_implicit_conversion_in_loop_highlighting=suggestion +resharper_cpp_clang_tidy_performance_inefficient_algorithm_highlighting=suggestion +resharper_cpp_clang_tidy_performance_inefficient_string_concatenation_highlighting=suggestion +resharper_cpp_clang_tidy_performance_inefficient_vector_operation_highlighting=suggestion +resharper_cpp_clang_tidy_performance_move_constructor_init_highlighting=warning +resharper_cpp_clang_tidy_performance_move_const_arg_highlighting=suggestion +resharper_cpp_clang_tidy_performance_noexcept_move_constructor_highlighting=none +resharper_cpp_clang_tidy_performance_no_automatic_move_highlighting=warning +resharper_cpp_clang_tidy_performance_no_int_to_ptr_highlighting=warning +resharper_cpp_clang_tidy_performance_trivially_destructible_highlighting=suggestion +resharper_cpp_clang_tidy_performance_type_promotion_in_math_fn_highlighting=suggestion +resharper_cpp_clang_tidy_performance_unnecessary_copy_initialization_highlighting=suggestion +resharper_cpp_clang_tidy_performance_unnecessary_value_param_highlighting=suggestion +resharper_cpp_clang_tidy_portability_restrict_system_includes_highlighting=none +resharper_cpp_clang_tidy_portability_simd_intrinsics_highlighting=none +resharper_cpp_clang_tidy_readability_avoid_const_params_in_decls_highlighting=none +resharper_cpp_clang_tidy_readability_braces_around_statements_highlighting=none +resharper_cpp_clang_tidy_readability_const_return_type_highlighting=none +resharper_cpp_clang_tidy_readability_container_size_empty_highlighting=suggestion +resharper_cpp_clang_tidy_readability_convert_member_functions_to_static_highlighting=none +resharper_cpp_clang_tidy_readability_delete_null_pointer_highlighting=suggestion +resharper_cpp_clang_tidy_readability_else_after_return_highlighting=none +resharper_cpp_clang_tidy_readability_function_cognitive_complexity_highlighting=none +resharper_cpp_clang_tidy_readability_function_size_highlighting=none +resharper_cpp_clang_tidy_readability_identifier_naming_highlighting=none +resharper_cpp_clang_tidy_readability_implicit_bool_conversion_highlighting=none +resharper_cpp_clang_tidy_readability_inconsistent_declaration_parameter_name_highlighting=suggestion +resharper_cpp_clang_tidy_readability_isolate_declaration_highlighting=none +resharper_cpp_clang_tidy_readability_magic_numbers_highlighting=none +resharper_cpp_clang_tidy_readability_make_member_function_const_highlighting=none +resharper_cpp_clang_tidy_readability_misleading_indentation_highlighting=none +resharper_cpp_clang_tidy_readability_misplaced_array_index_highlighting=suggestion +resharper_cpp_clang_tidy_readability_named_parameter_highlighting=none +resharper_cpp_clang_tidy_readability_non_const_parameter_highlighting=none +resharper_cpp_clang_tidy_readability_qualified_auto_highlighting=none +resharper_cpp_clang_tidy_readability_redundant_access_specifiers_highlighting=none +resharper_cpp_clang_tidy_readability_redundant_control_flow_highlighting=none +resharper_cpp_clang_tidy_readability_redundant_declaration_highlighting=suggestion +resharper_cpp_clang_tidy_readability_redundant_function_ptr_dereference_highlighting=suggestion +resharper_cpp_clang_tidy_readability_redundant_member_init_highlighting=none +resharper_cpp_clang_tidy_readability_redundant_preprocessor_highlighting=warning +resharper_cpp_clang_tidy_readability_redundant_smartptr_get_highlighting=suggestion +resharper_cpp_clang_tidy_readability_redundant_string_cstr_highlighting=suggestion +resharper_cpp_clang_tidy_readability_redundant_string_init_highlighting=suggestion +resharper_cpp_clang_tidy_readability_simplify_boolean_expr_highlighting=none +resharper_cpp_clang_tidy_readability_simplify_subscript_expr_highlighting=warning +resharper_cpp_clang_tidy_readability_static_accessed_through_instance_highlighting=suggestion +resharper_cpp_clang_tidy_readability_static_definition_in_anonymous_namespace_highlighting=none +resharper_cpp_clang_tidy_readability_string_compare_highlighting=warning +resharper_cpp_clang_tidy_readability_suspicious_call_argument_highlighting=warning +resharper_cpp_clang_tidy_readability_uniqueptr_delete_release_highlighting=suggestion +resharper_cpp_clang_tidy_readability_uppercase_literal_suffix_highlighting=none +resharper_cpp_clang_tidy_readability_use_anyofallof_highlighting=suggestion +resharper_cpp_clang_tidy_zircon_temporary_objects_highlighting=none +resharper_cpp_class_can_be_final_highlighting=hint +resharper_cpp_class_disallow_lazy_merging_highlighting=warning +resharper_cpp_class_is_incomplete_highlighting=warning +resharper_cpp_class_needs_constructor_because_of_uninitialized_member_highlighting=warning +resharper_cpp_class_never_used_highlighting=warning +resharper_cpp_compile_time_constant_can_be_replaced_with_boolean_constant_highlighting=suggestion +resharper_cpp_const_parameter_in_declaration_highlighting=suggestion +resharper_cpp_const_value_function_return_type_highlighting=suggestion +resharper_cpp_coroutine_call_resolve_error_highlighting=warning +resharper_cpp_cv_qualifier_can_not_be_applied_to_reference_highlighting=warning +resharper_cpp_c_style_cast_highlighting=suggestion +resharper_cpp_declaration_hides_local_highlighting=warning +resharper_cpp_declaration_hides_uncaptured_local_highlighting=hint +resharper_cpp_declaration_specifier_without_declarators_highlighting=warning +resharper_cpp_declarator_disambiguated_as_function_highlighting=warning +resharper_cpp_declarator_never_used_highlighting=warning +resharper_cpp_declarator_used_before_initialization_highlighting=error +resharper_cpp_defaulted_special_member_function_is_implicitly_deleted_highlighting=warning +resharper_cpp_default_case_not_handled_in_switch_statement_highlighting=warning +resharper_cpp_default_initialization_with_no_user_constructor_highlighting=warning +resharper_cpp_default_is_used_as_identifier_highlighting=warning +resharper_cpp_deleting_void_pointer_highlighting=warning +resharper_cpp_dependent_template_without_template_keyword_highlighting=warning +resharper_cpp_dependent_type_without_typename_keyword_highlighting=warning +resharper_cpp_deprecated_entity_highlighting=warning +resharper_cpp_deprecated_register_storage_class_specifier_highlighting=warning +resharper_cpp_dereference_operator_limit_exceeded_highlighting=warning +resharper_cpp_discarded_postfix_operator_result_highlighting=suggestion +resharper_cpp_doxygen_syntax_error_highlighting=warning +resharper_cpp_doxygen_undocumented_parameter_highlighting=suggestion +resharper_cpp_doxygen_unresolved_reference_highlighting=warning +resharper_cpp_empty_declaration_highlighting=warning +resharper_cpp_enforce_cv_qualifiers_order_highlighting=none +resharper_cpp_enforce_cv_qualifiers_placement_highlighting=none +resharper_cpp_enforce_do_statement_braces_highlighting=none +resharper_cpp_enforce_for_statement_braces_highlighting=none +resharper_cpp_enforce_function_declaration_style_highlighting=none +resharper_cpp_enforce_if_statement_braces_highlighting=none +resharper_cpp_enforce_nested_namespaces_style_highlighting=hint +resharper_cpp_enforce_overriding_destructor_style_highlighting=suggestion +resharper_cpp_enforce_overriding_function_style_highlighting=suggestion +resharper_cpp_enforce_type_alias_code_style_highlighting=none +resharper_cpp_enforce_while_statement_braces_highlighting=none +resharper_cpp_entity_assigned_but_no_read_highlighting=warning +resharper_cpp_entity_used_only_in_unevaluated_context_highlighting=warning +resharper_cpp_enumerator_never_used_highlighting=warning +resharper_cpp_equal_operands_in_binary_expression_highlighting=warning +resharper_cpp_explicit_specialization_in_non_namespace_scope_highlighting=warning +resharper_cpp_expression_without_side_effects_highlighting=warning +resharper_cpp_final_function_in_final_class_highlighting=suggestion +resharper_cpp_final_non_overriding_virtual_function_highlighting=suggestion +resharper_cpp_for_loop_can_be_replaced_with_while_highlighting=suggestion +resharper_cpp_functional_style_cast_highlighting=suggestion +resharper_cpp_function_doesnt_return_value_highlighting=warning +resharper_cpp_function_is_not_implemented_highlighting=warning +resharper_cpp_header_has_been_already_included_highlighting=hint +resharper_cpp_hidden_function_highlighting=warning +resharper_cpp_hiding_function_highlighting=warning +resharper_cpp_identical_operands_in_binary_expression_highlighting=warning +resharper_cpp_if_can_be_replaced_by_constexpr_if_highlighting=suggestion +resharper_cpp_implicit_default_constructor_not_available_highlighting=warning +resharper_cpp_incompatible_pointer_conversion_highlighting=warning +resharper_cpp_incomplete_switch_statement_highlighting=warning +resharper_cpp_inconsistent_naming_highlighting=hint +resharper_cpp_incorrect_blank_lines_near_braces_highlighting=none +resharper_cpp_initialized_value_is_always_rewritten_highlighting=warning +resharper_cpp_integral_to_pointer_conversion_highlighting=warning +resharper_cpp_invalid_line_continuation_highlighting=warning +resharper_cpp_join_declaration_and_assignment_highlighting=suggestion +resharper_cpp_lambda_capture_never_used_highlighting=warning +resharper_cpp_local_variable_may_be_const_highlighting=suggestion +resharper_cpp_local_variable_might_not_be_initialized_highlighting=warning +resharper_cpp_local_variable_with_non_trivial_dtor_is_never_used_highlighting=none +resharper_cpp_long_float_highlighting=warning +resharper_cpp_member_function_may_be_const_highlighting=suggestion +resharper_cpp_member_function_may_be_static_highlighting=suggestion +resharper_cpp_member_initializers_order_highlighting=suggestion +resharper_cpp_mismatched_class_tags_highlighting=warning +resharper_cpp_missing_blank_lines_highlighting=none +resharper_cpp_missing_include_guard_highlighting=warning +resharper_cpp_missing_indent_highlighting=none +resharper_cpp_missing_keyword_throw_highlighting=warning +resharper_cpp_missing_linebreak_highlighting=none +resharper_cpp_missing_space_highlighting=none +resharper_cpp_ms_ext_address_of_class_r_value_highlighting=warning +resharper_cpp_ms_ext_binding_r_value_to_lvalue_reference_highlighting=warning +resharper_cpp_ms_ext_copy_elision_in_copy_init_declarator_highlighting=warning +resharper_cpp_ms_ext_double_user_conversion_in_copy_init_highlighting=warning +resharper_cpp_ms_ext_not_initialized_static_const_local_var_highlighting=warning +resharper_cpp_ms_ext_reinterpret_cast_from_nullptr_highlighting=warning +resharper_cpp_multiple_spaces_highlighting=none +resharper_cpp_must_be_public_virtual_to_implement_interface_highlighting=warning +resharper_cpp_mutable_specifier_on_reference_member_highlighting=warning +resharper_cpp_nodiscard_function_without_return_value_highlighting=warning +resharper_cpp_non_exception_safe_resource_acquisition_highlighting=hint +resharper_cpp_non_explicit_conversion_operator_highlighting=hint +resharper_cpp_non_explicit_converting_constructor_highlighting=hint +resharper_cpp_non_inline_function_definition_in_header_file_highlighting=warning +resharper_cpp_non_inline_variable_definition_in_header_file_highlighting=warning +resharper_cpp_not_all_paths_return_value_highlighting=warning +resharper_cpp_no_discard_expression_highlighting=warning +resharper_cpp_object_member_might_not_be_initialized_highlighting=warning +resharper_cpp_outdent_is_off_prev_level_highlighting=none +resharper_cpp_out_parameter_must_be_written_highlighting=warning +resharper_cpp_parameter_may_be_const_highlighting=hint +resharper_cpp_parameter_may_be_const_ptr_or_ref_highlighting=suggestion +resharper_cpp_parameter_names_mismatch_highlighting=hint +resharper_cpp_parameter_never_used_highlighting=hint +resharper_cpp_parameter_value_is_reassigned_highlighting=warning +resharper_cpp_pointer_conversion_drops_qualifiers_highlighting=warning +resharper_cpp_pointer_to_integral_conversion_highlighting=warning +resharper_cpp_polymorphic_class_with_non_virtual_public_destructor_highlighting=warning +resharper_cpp_possibly_erroneous_empty_statements_highlighting=warning +resharper_cpp_possibly_uninitialized_member_highlighting=warning +resharper_cpp_possibly_unintended_object_slicing_highlighting=warning +resharper_cpp_precompiled_header_is_not_included_highlighting=error +resharper_cpp_precompiled_header_not_found_highlighting=error +resharper_cpp_printf_bad_format_highlighting=warning +resharper_cpp_printf_extra_arg_highlighting=warning +resharper_cpp_printf_missed_arg_highlighting=error +resharper_cpp_printf_risky_format_highlighting=warning +resharper_cpp_private_special_member_function_is_not_implemented_highlighting=warning +resharper_cpp_range_based_for_incompatible_reference_highlighting=warning +resharper_cpp_redefinition_of_default_argument_in_override_function_highlighting=warning +resharper_cpp_redundant_access_specifier_highlighting=hint +resharper_cpp_redundant_base_class_access_specifier_highlighting=hint +resharper_cpp_redundant_blank_lines_highlighting=none +resharper_cpp_redundant_boolean_expression_argument_highlighting=warning +resharper_cpp_redundant_cast_expression_highlighting=hint +resharper_cpp_redundant_const_specifier_highlighting=hint +resharper_cpp_redundant_control_flow_jump_highlighting=hint +resharper_cpp_redundant_elaborated_type_specifier_highlighting=hint +resharper_cpp_redundant_else_keyword_highlighting=hint +resharper_cpp_redundant_else_keyword_inside_compound_statement_highlighting=hint +resharper_cpp_redundant_empty_declaration_highlighting=hint +resharper_cpp_redundant_empty_statement_highlighting=hint +resharper_cpp_redundant_explicit_template_arguments_highlighting=hint +resharper_cpp_redundant_inline_specifier_highlighting=hint +resharper_cpp_redundant_lambda_parameter_list_highlighting=hint +resharper_cpp_redundant_linebreak_highlighting=none +resharper_cpp_redundant_member_initializer_highlighting=suggestion +resharper_cpp_redundant_namespace_definition_highlighting=suggestion +resharper_cpp_redundant_parentheses_highlighting=hint +resharper_cpp_redundant_qualifier_highlighting=hint +resharper_cpp_redundant_space_highlighting=none +resharper_cpp_redundant_static_specifier_on_member_allocation_function_highlighting=hint +resharper_cpp_redundant_template_keyword_highlighting=warning +resharper_cpp_redundant_typename_keyword_highlighting=warning +resharper_cpp_redundant_void_argument_list_highlighting=suggestion +resharper_cpp_reinterpret_cast_from_void_ptr_highlighting=suggestion +resharper_cpp_remove_redundant_braces_highlighting=none +resharper_cpp_replace_memset_with_zero_initialization_highlighting=suggestion +resharper_cpp_replace_tie_with_structured_binding_highlighting=suggestion +resharper_cpp_return_no_value_in_non_void_function_highlighting=warning +resharper_cpp_smart_pointer_vs_make_function_highlighting=suggestion +resharper_cpp_some_object_members_might_not_be_initialized_highlighting=warning +resharper_cpp_special_function_without_noexcept_specification_highlighting=warning +resharper_cpp_static_data_member_in_unnamed_struct_highlighting=warning +resharper_cpp_static_specifier_on_anonymous_namespace_member_highlighting=suggestion +resharper_cpp_string_literal_to_char_pointer_conversion_highlighting=warning +resharper_cpp_syntax_warning_highlighting=warning +resharper_cpp_tabs_and_spaces_mismatch_highlighting=none +resharper_cpp_tabs_are_disallowed_highlighting=none +resharper_cpp_tabs_outside_indent_highlighting=none +resharper_cpp_template_parameter_shadowing_highlighting=warning +resharper_cpp_this_arg_member_func_delegate_ctor_is_unsuported_by_dot_net_core_highlighting=none +resharper_cpp_throw_expression_can_be_replaced_with_rethrow_highlighting=warning +resharper_cpp_too_wide_scope_highlighting=suggestion +resharper_cpp_too_wide_scope_init_statement_highlighting=hint +resharper_cpp_type_alias_never_used_highlighting=warning +resharper_cpp_ue4_blueprint_callable_function_may_be_const_highlighting=hint +resharper_cpp_ue4_blueprint_callable_function_may_be_static_highlighting=hint +resharper_cpp_ue4_coding_standard_naming_violation_warning_highlighting=hint +resharper_cpp_ue4_coding_standard_u_class_naming_violation_error_highlighting=error +resharper_cpp_ue4_probable_memory_issues_with_u_objects_in_container_highlighting=warning +resharper_cpp_ue4_probable_memory_issues_with_u_object_highlighting=warning +resharper_cpp_ue_blueprint_callable_function_unused_highlighting=warning +resharper_cpp_ue_blueprint_implementable_event_not_implemented_highlighting=warning +resharper_cpp_ue_incorrect_engine_directory_highlighting=error +resharper_cpp_ue_non_existent_input_action_highlighting=warning +resharper_cpp_ue_non_existent_input_axis_highlighting=warning +resharper_cpp_ue_source_file_without_predefined_macros_highlighting=warning +resharper_cpp_ue_source_file_without_standard_library_highlighting=error +resharper_cpp_ue_version_file_doesnt_exist_highlighting=error +resharper_cpp_uninitialized_dependent_base_class_highlighting=warning +resharper_cpp_uninitialized_non_static_data_member_highlighting=warning +resharper_cpp_union_member_of_reference_type_highlighting=warning +resharper_cpp_unnamed_namespace_in_header_file_highlighting=warning +resharper_cpp_unnecessary_whitespace_highlighting=none +resharper_cpp_unreachable_code_highlighting=warning +resharper_cpp_unsigned_zero_comparison_highlighting=warning +resharper_cpp_unused_include_directive_highlighting=warning +resharper_cpp_user_defined_literal_suffix_does_not_start_with_underscore_highlighting=warning +resharper_cpp_use_algorithm_with_count_highlighting=suggestion +resharper_cpp_use_associative_contains_highlighting=suggestion +resharper_cpp_use_auto_for_numeric_highlighting=hint +resharper_cpp_use_auto_highlighting=hint +resharper_cpp_use_elements_view_highlighting=suggestion +resharper_cpp_use_erase_algorithm_highlighting=suggestion +resharper_cpp_use_familiar_template_syntax_for_generic_lambdas_highlighting=suggestion +resharper_cpp_use_range_algorithm_highlighting=suggestion +resharper_cpp_use_std_size_highlighting=suggestion +resharper_cpp_use_structured_binding_highlighting=hint +resharper_cpp_use_type_trait_alias_highlighting=suggestion +resharper_cpp_using_result_of_assignment_as_condition_highlighting=warning +resharper_cpp_u_function_macro_call_has_no_effect_highlighting=warning +resharper_cpp_u_property_macro_call_has_no_effect_highlighting=warning +resharper_cpp_variable_can_be_made_constexpr_highlighting=suggestion +resharper_cpp_virtual_function_call_inside_ctor_highlighting=warning +resharper_cpp_virtual_function_in_final_class_highlighting=warning +resharper_cpp_volatile_parameter_in_declaration_highlighting=suggestion +resharper_cpp_wrong_includes_order_highlighting=hint +resharper_cpp_wrong_indent_size_highlighting=none +resharper_cpp_wrong_slashes_in_include_directive_highlighting=hint +resharper_cpp_zero_constant_can_be_replaced_with_nullptr_highlighting=suggestion +resharper_cpp_zero_valued_expression_used_as_null_pointer_highlighting=warning +resharper_create_specialized_overload_highlighting=hint +resharper_css_browser_compatibility_highlighting=warning +resharper_css_caniuse_feature_requires_prefix_highlighting=hint +resharper_css_caniuse_unsupported_feature_highlighting=hint +resharper_css_not_resolved_highlighting=error +resharper_css_obsolete_highlighting=hint +resharper_css_property_does_not_override_vendor_property_highlighting=warning +resharper_cyclic_reference_comment_highlighting=none +resharper_c_declaration_with_implicit_int_type_highlighting=warning +resharper_c_sharp_build_cs_invalid_module_name_highlighting=warning +resharper_c_sharp_missing_plugin_dependency_highlighting=warning +resharper_declaration_hides_highlighting=hint +resharper_declaration_is_empty_highlighting=warning +resharper_declaration_visibility_error_highlighting=error +resharper_default_value_attribute_for_optional_parameter_highlighting=warning +resharper_deleting_non_qualified_reference_highlighting=error +resharper_dl_tag_contains_non_dt_or_dd_elements_highlighting=hint +resharper_double_colons_expected_highlighting=error +resharper_double_colons_preferred_highlighting=suggestion +resharper_double_negation_in_pattern_highlighting=suggestion +resharper_double_negation_of_boolean_highlighting=warning +resharper_double_negation_operator_highlighting=suggestion +resharper_duplicate_identifier_error_highlighting=error +resharper_duplicate_reference_comment_highlighting=warning +resharper_duplicate_resource_highlighting=warning +resharper_duplicating_local_declaration_highlighting=warning +resharper_duplicating_parameter_declaration_error_highlighting=error +resharper_duplicating_property_declaration_error_highlighting=error +resharper_duplicating_property_declaration_highlighting=warning +resharper_duplicating_switch_label_highlighting=warning +resharper_dynamic_shift_right_op_is_not_int_highlighting=warning +resharper_elided_trailing_element_highlighting=warning +resharper_empty_constructor_highlighting=warning +resharper_empty_destructor_highlighting=warning +resharper_empty_embedded_statement_highlighting=warning +resharper_empty_for_statement_highlighting=warning +resharper_empty_general_catch_clause_highlighting=warning +resharper_empty_namespace_highlighting=warning +resharper_empty_object_property_declaration_highlighting=error +resharper_empty_return_value_for_type_annotated_function_highlighting=warning +resharper_empty_statement_highlighting=warning +resharper_empty_title_tag_highlighting=hint +resharper_enforce_do_while_statement_braces_highlighting=none +resharper_enforce_fixed_statement_braces_highlighting=none +resharper_enforce_foreach_statement_braces_highlighting=none +resharper_enforce_for_statement_braces_highlighting=none +resharper_enforce_if_statement_braces_highlighting=none +resharper_enforce_lock_statement_braces_highlighting=none +resharper_enforce_using_statement_braces_highlighting=none +resharper_enforce_while_statement_braces_highlighting=none +resharper_entity_name_captured_only_global_highlighting=warning +resharper_entity_name_captured_only_local_highlighting=warning +resharper_enumerable_sum_in_explicit_unchecked_context_highlighting=warning +resharper_enum_underlying_type_is_int_highlighting=warning +resharper_equal_expression_comparison_highlighting=warning +resharper_error_in_xml_doc_reference_highlighting=error +resharper_es6_feature_highlighting=error +resharper_es7_feature_highlighting=error +resharper_eval_arguments_name_error_highlighting=error +resharper_event_never_invoked_global_highlighting=suggestion +resharper_event_never_subscribed_to_global_highlighting=suggestion +resharper_event_never_subscribed_to_local_highlighting=suggestion +resharper_event_unsubscription_via_anonymous_delegate_highlighting=warning +resharper_experimental_feature_highlighting=error +resharper_explicit_caller_info_argument_highlighting=warning +resharper_expression_is_always_const_highlighting=warning +resharper_expression_is_always_null_highlighting=warning +resharper_field_can_be_made_read_only_global_highlighting=suggestion +resharper_field_can_be_made_read_only_local_highlighting=suggestion +resharper_field_hides_interface_property_with_default_implementation_highlighting=warning +resharper_foreach_can_be_converted_to_query_using_another_get_enumerator_highlighting=hint +resharper_foreach_can_be_partly_converted_to_query_using_another_get_enumerator_highlighting=hint +resharper_format_string_placeholders_mismatch_highlighting=warning +resharper_format_string_problem_highlighting=warning +resharper_for_can_be_converted_to_foreach_highlighting=suggestion +resharper_for_statement_condition_is_true_highlighting=warning +resharper_functions_used_before_declared_highlighting=none +resharper_function_complexity_overflow_highlighting=none +resharper_function_never_returns_highlighting=warning +resharper_function_parameter_named_arguments_highlighting=warning +resharper_function_recursive_on_all_paths_highlighting=warning +resharper_function_used_out_of_scope_highlighting=warning +resharper_gc_suppress_finalize_for_type_without_destructor_highlighting=warning +resharper_generic_enumerator_not_disposed_highlighting=warning +resharper_heuristically_unreachable_code_highlighting=warning +resharper_heuristic_unreachable_code_highlighting=warning +resharper_hex_color_value_with_alpha_highlighting=error +resharper_html_attributes_quotes_highlighting=hint +resharper_html_attribute_not_resolved_highlighting=warning +resharper_html_attribute_value_not_resolved_highlighting=warning +resharper_html_dead_code_highlighting=warning +resharper_html_event_not_resolved_highlighting=warning +resharper_html_id_duplication_highlighting=warning +resharper_html_id_not_resolved_highlighting=warning +resharper_html_obsolete_highlighting=warning +resharper_html_path_error_highlighting=warning +resharper_html_tag_not_closed_highlighting=error +resharper_html_tag_not_resolved_highlighting=warning +resharper_html_tag_should_be_self_closed_highlighting=warning +resharper_html_tag_should_not_be_self_closed_highlighting=warning +resharper_html_warning_highlighting=warning +resharper_identifier_typo_highlighting=suggestion +resharper_implicit_any_error_highlighting=error +resharper_implicit_any_type_warning_highlighting=warning +resharper_import_keyword_not_with_invocation_highlighting=error +resharper_inactive_preprocessor_branch_highlighting=warning +resharper_inconsistently_synchronized_field_highlighting=warning +resharper_inconsistent_function_returns_highlighting=warning +resharper_inconsistent_naming_highlighting=warning +resharper_inconsistent_order_of_locks_highlighting=warning +resharper_incorrect_blank_lines_near_braces_highlighting=none +resharper_incorrect_operand_in_type_of_comparison_highlighting=warning +resharper_incorrect_triple_slash_location_highlighting=warning +resharper_indexing_by_invalid_range_highlighting=warning +resharper_inheritdoc_consider_usage_highlighting=none +resharper_inheritdoc_invalid_usage_highlighting=warning +resharper_inline_out_variable_declaration_highlighting=suggestion +resharper_inline_temporary_variable_highlighting=hint +resharper_internal_module_highlighting=suggestion +resharper_internal_or_private_member_not_documented_highlighting=none +resharper_interpolated_string_expression_is_not_i_formattable_highlighting=warning +resharper_introduce_optional_parameters_global_highlighting=suggestion +resharper_introduce_optional_parameters_local_highlighting=suggestion +resharper_introduce_variable_to_apply_guard_highlighting=hint +resharper_int_division_by_zero_highlighting=warning +resharper_int_variable_overflow_highlighting=warning +resharper_int_variable_overflow_in_checked_context_highlighting=warning +resharper_int_variable_overflow_in_unchecked_context_highlighting=warning +resharper_invalid_attribute_value_highlighting=warning +resharper_invalid_json_syntax_highlighting=error +resharper_invalid_task_element_highlighting=none +resharper_invalid_value_highlighting=error +resharper_invalid_value_type_highlighting=warning +resharper_invalid_xml_doc_comment_highlighting=warning +resharper_invert_condition_1_highlighting=hint +resharper_invert_if_highlighting=hint +resharper_invocation_is_skipped_highlighting=hint +resharper_invocation_of_non_function_highlighting=warning +resharper_invoked_expression_maybe_non_function_highlighting=warning +resharper_invoke_as_extension_method_highlighting=suggestion +resharper_is_expression_always_false_highlighting=warning +resharper_is_expression_always_true_highlighting=warning +resharper_iterator_method_result_is_ignored_highlighting=warning +resharper_iterator_never_returns_highlighting=warning +resharper_join_declaration_and_initializer_highlighting=suggestion +resharper_join_declaration_and_initializer_js_highlighting=suggestion +resharper_join_null_check_with_usage_highlighting=suggestion +resharper_join_null_check_with_usage_when_possible_highlighting=none +resharper_json_validation_failed_highlighting=error +resharper_js_path_not_found_highlighting=error +resharper_js_unreachable_code_highlighting=warning +resharper_jump_must_be_in_loop_highlighting=warning +resharper_label_or_semicolon_expected_highlighting=error +resharper_lambda_expression_can_be_made_static_highlighting=none +resharper_lambda_expression_must_be_static_highlighting=suggestion +resharper_lambda_highlighting=suggestion +resharper_lambda_should_not_capture_context_highlighting=warning +resharper_less_specific_overload_than_main_signature_highlighting=warning +resharper_lexical_declaration_needs_block_highlighting=error +resharper_localizable_element_highlighting=warning +resharper_local_function_can_be_made_static_highlighting=none +resharper_local_function_hides_method_highlighting=warning +resharper_local_function_redefined_later_highlighting=warning +resharper_local_variable_hides_member_highlighting=warning +resharper_long_literal_ending_lower_l_highlighting=warning +resharper_loop_can_be_converted_to_query_highlighting=hint +resharper_loop_can_be_partly_converted_to_query_highlighting=none +resharper_loop_variable_is_never_changed_inside_loop_highlighting=warning +resharper_l_value_is_expected_highlighting=error +resharper_markup_attribute_typo_highlighting=suggestion +resharper_markup_text_typo_highlighting=suggestion +resharper_math_abs_method_is_redundant_highlighting=warning +resharper_math_clamp_min_greater_than_max_highlighting=warning +resharper_meaningless_default_parameter_value_highlighting=warning +resharper_member_can_be_internal_highlighting=none +resharper_member_can_be_made_static_global_highlighting=hint +resharper_member_can_be_made_static_local_highlighting=hint +resharper_member_can_be_private_global_highlighting=suggestion +resharper_member_can_be_private_local_highlighting=suggestion +resharper_member_can_be_protected_global_highlighting=suggestion +resharper_member_can_be_protected_local_highlighting=suggestion +resharper_member_hides_interface_member_with_default_implementation_highlighting=warning +resharper_member_hides_static_from_outer_class_highlighting=warning +resharper_member_initializer_value_ignored_highlighting=warning +resharper_merge_and_pattern_highlighting=suggestion +resharper_merge_cast_with_type_check_highlighting=suggestion +resharper_merge_conditional_expression_highlighting=suggestion +resharper_merge_conditional_expression_when_possible_highlighting=none +resharper_merge_into_logical_pattern_highlighting=hint +resharper_merge_into_negated_pattern_highlighting=hint +resharper_merge_into_pattern_highlighting=suggestion +resharper_merge_nested_property_patterns_highlighting=suggestion +resharper_merge_sequential_checks_highlighting=hint +resharper_merge_sequential_checks_when_possible_highlighting=none +resharper_method_has_async_overload_highlighting=suggestion +resharper_method_has_async_overload_with_cancellation_highlighting=suggestion +resharper_method_overload_with_optional_parameter_highlighting=warning +resharper_method_safe_this_highlighting=suggestion +resharper_method_supports_cancellation_highlighting=suggestion +resharper_missing_alt_attribute_in_img_tag_highlighting=hint +resharper_missing_attribute_highlighting=warning +resharper_missing_blank_lines_highlighting=none +resharper_missing_body_tag_highlighting=warning +resharper_missing_has_own_property_in_foreach_highlighting=warning +resharper_missing_head_and_body_tags_highlighting=warning +resharper_missing_head_tag_highlighting=warning +resharper_missing_indent_highlighting=none +resharper_missing_linebreak_highlighting=none +resharper_missing_space_highlighting=none +resharper_missing_title_tag_highlighting=hint +resharper_misuse_of_owner_function_this_highlighting=warning +resharper_more_specific_foreach_variable_type_available_highlighting=suggestion +resharper_more_specific_signature_after_less_specific_highlighting=warning +resharper_move_to_existing_positional_deconstruction_pattern_highlighting=hint +resharper_multiple_declarations_in_foreach_highlighting=error +resharper_multiple_nullable_attributes_usage_highlighting=warning +resharper_multiple_order_by_highlighting=warning +resharper_multiple_output_tags_highlighting=warning +resharper_multiple_resolve_candidates_in_text_highlighting=warning +resharper_multiple_spaces_highlighting=none +resharper_multiple_statements_on_one_line_highlighting=none +resharper_multiple_type_members_on_one_line_highlighting=none +resharper_must_use_return_value_highlighting=warning +resharper_mvc_action_not_resolved_highlighting=error +resharper_mvc_area_not_resolved_highlighting=error +resharper_mvc_controller_not_resolved_highlighting=error +resharper_mvc_invalid_model_type_highlighting=error +resharper_mvc_masterpage_not_resolved_highlighting=error +resharper_mvc_partial_view_not_resolved_highlighting=error +resharper_mvc_template_not_resolved_highlighting=error +resharper_mvc_view_component_not_resolved_highlighting=error +resharper_mvc_view_component_view_not_resolved_highlighting=error +resharper_mvc_view_not_resolved_highlighting=error +resharper_native_type_prototype_extending_highlighting=warning +resharper_native_type_prototype_overwriting_highlighting=warning +resharper_negation_of_relational_pattern_highlighting=suggestion +resharper_negative_equality_expression_highlighting=suggestion +resharper_negative_index_highlighting=warning +resharper_nested_string_interpolation_highlighting=suggestion +resharper_non_assigned_constant_highlighting=error +resharper_non_atomic_compound_operator_highlighting=warning +resharper_non_constant_equality_expression_has_constant_result_highlighting=warning +resharper_non_parsable_element_highlighting=warning +resharper_non_readonly_member_in_get_hash_code_highlighting=warning +resharper_non_volatile_field_in_double_check_locking_highlighting=warning +resharper_not_accessed_field_global_highlighting=suggestion +resharper_not_accessed_field_local_highlighting=warning +resharper_not_accessed_positional_property_global_highlighting=warning +resharper_not_accessed_positional_property_local_highlighting=warning +resharper_not_accessed_variable_highlighting=warning +resharper_not_all_paths_return_value_highlighting=warning +resharper_not_assigned_out_parameter_highlighting=warning +resharper_not_declared_in_parent_culture_highlighting=warning +resharper_not_null_member_is_not_initialized_highlighting=warning +resharper_not_observable_annotation_redundancy_highlighting=warning +resharper_not_overridden_in_specific_culture_highlighting=warning +resharper_not_resolved_highlighting=warning +resharper_not_resolved_in_text_highlighting=warning +resharper_nullable_warning_suppression_is_used_highlighting=none +resharper_n_unit_async_method_must_be_task_highlighting=warning +resharper_n_unit_attribute_produces_too_many_tests_highlighting=none +resharper_n_unit_auto_fixture_incorrect_argument_type_highlighting=warning +resharper_n_unit_auto_fixture_missed_test_attribute_highlighting=warning +resharper_n_unit_auto_fixture_missed_test_or_test_fixture_attribute_highlighting=warning +resharper_n_unit_auto_fixture_redundant_argument_in_inline_auto_data_attribute_highlighting=warning +resharper_n_unit_duplicate_values_highlighting=warning +resharper_n_unit_ignored_parameter_attribute_highlighting=warning +resharper_n_unit_implicit_unspecified_null_values_highlighting=warning +resharper_n_unit_incorrect_argument_type_highlighting=warning +resharper_n_unit_incorrect_expected_result_type_highlighting=warning +resharper_n_unit_incorrect_range_bounds_highlighting=warning +resharper_n_unit_method_with_parameters_and_test_attribute_highlighting=warning +resharper_n_unit_missing_arguments_in_test_case_attribute_highlighting=warning +resharper_n_unit_non_public_method_with_test_attribute_highlighting=warning +resharper_n_unit_no_values_provided_highlighting=warning +resharper_n_unit_parameter_type_is_not_compatible_with_attribute_highlighting=warning +resharper_n_unit_range_attribute_bounds_are_out_of_range_highlighting=warning +resharper_n_unit_range_step_sign_mismatch_highlighting=warning +resharper_n_unit_range_step_value_must_not_be_zero_highlighting=warning +resharper_n_unit_range_to_value_is_not_reachable_highlighting=warning +resharper_n_unit_redundant_argument_instead_of_expected_result_highlighting=warning +resharper_n_unit_redundant_argument_in_test_case_attribute_highlighting=warning +resharper_n_unit_redundant_expected_result_in_test_case_attribute_highlighting=warning +resharper_n_unit_test_case_attribute_requires_expected_result_highlighting=warning +resharper_n_unit_test_case_result_property_duplicates_expected_result_highlighting=warning +resharper_n_unit_test_case_result_property_is_obsolete_highlighting=warning +resharper_n_unit_test_case_source_cannot_be_resolved_highlighting=warning +resharper_n_unit_test_case_source_must_be_field_property_method_highlighting=warning +resharper_n_unit_test_case_source_must_be_static_highlighting=warning +resharper_n_unit_test_case_source_should_implement_i_enumerable_highlighting=warning +resharper_object_creation_as_statement_highlighting=warning +resharper_object_destructuring_without_parentheses_highlighting=error +resharper_object_literals_are_not_comma_free_highlighting=error +resharper_obsolete_element_error_highlighting=error +resharper_obsolete_element_highlighting=warning +resharper_octal_literals_not_allowed_error_highlighting=error +resharper_ol_tag_contains_non_li_elements_highlighting=hint +resharper_one_way_operation_contract_with_return_type_highlighting=warning +resharper_operation_contract_without_service_contract_highlighting=warning +resharper_operator_is_can_be_used_highlighting=warning +resharper_optional_parameter_hierarchy_mismatch_highlighting=warning +resharper_optional_parameter_ref_out_highlighting=warning +resharper_other_tags_inside_script1_highlighting=error +resharper_other_tags_inside_script2_highlighting=error +resharper_other_tags_inside_unclosed_script_highlighting=error +resharper_outdent_is_off_prev_level_highlighting=none +resharper_output_tag_required_highlighting=warning +resharper_out_parameter_value_is_always_discarded_global_highlighting=suggestion +resharper_out_parameter_value_is_always_discarded_local_highlighting=warning +resharper_overload_signature_inferring_highlighting=hint +resharper_overridden_with_empty_value_highlighting=warning +resharper_overridden_with_same_value_highlighting=suggestion +resharper_parameter_doesnt_make_any_sense_highlighting=warning +resharper_parameter_hides_member_highlighting=warning +resharper_parameter_only_used_for_precondition_check_global_highlighting=suggestion +resharper_parameter_only_used_for_precondition_check_local_highlighting=warning +resharper_parameter_type_can_be_enumerable_global_highlighting=hint +resharper_parameter_type_can_be_enumerable_local_highlighting=hint +resharper_parameter_value_is_not_used_highlighting=warning +resharper_partial_method_parameter_name_mismatch_highlighting=warning +resharper_partial_method_with_single_part_highlighting=warning +resharper_partial_type_with_single_part_highlighting=warning +resharper_pass_string_interpolation_highlighting=hint +resharper_path_not_resolved_highlighting=error +resharper_pattern_always_matches_highlighting=warning +resharper_pattern_is_always_true_or_false_highlighting=warning +resharper_pattern_never_matches_highlighting=warning +resharper_polymorphic_field_like_event_invocation_highlighting=warning +resharper_possible_infinite_inheritance_highlighting=warning +resharper_possible_intended_rethrow_highlighting=warning +resharper_possible_interface_member_ambiguity_highlighting=warning +resharper_possible_invalid_cast_exception_highlighting=warning +resharper_possible_invalid_cast_exception_in_foreach_loop_highlighting=warning +resharper_possible_invalid_operation_exception_highlighting=warning +resharper_possible_loss_of_fraction_highlighting=warning +resharper_possible_mistaken_argument_highlighting=warning +resharper_possible_mistaken_call_to_get_type_1_highlighting=warning +resharper_possible_mistaken_call_to_get_type_2_highlighting=warning +resharper_possible_multiple_enumeration_highlighting=warning +resharper_possible_multiple_write_access_in_double_check_locking_highlighting=warning +resharper_possible_null_reference_exception_highlighting=warning +resharper_possible_struct_member_modification_of_non_variable_struct_highlighting=warning +resharper_possible_unintended_linear_search_in_set_highlighting=warning +resharper_possible_unintended_queryable_as_enumerable_highlighting=suggestion +resharper_possible_unintended_reference_comparison_highlighting=warning +resharper_possible_write_to_me_highlighting=warning +resharper_possibly_impure_method_call_on_readonly_variable_highlighting=warning +resharper_possibly_incorrectly_broken_statement_highlighting=warning +resharper_possibly_missing_indexer_initializer_comma_highlighting=warning +resharper_possibly_mistaken_use_of_interpolated_string_insert_highlighting=warning +resharper_possibly_mistaken_use_of_params_method_highlighting=warning +resharper_possibly_unassigned_property_highlighting=hint +resharper_private_field_can_be_converted_to_local_variable_highlighting=warning +resharper_private_variable_can_be_made_readonly_highlighting=hint +resharper_property_can_be_made_init_only_global_highlighting=suggestion +resharper_property_can_be_made_init_only_local_highlighting=suggestion +resharper_property_getter_cannot_have_parameters_highlighting=error +resharper_property_not_resolved_highlighting=error +resharper_property_setter_must_have_single_parameter_highlighting=error +resharper_public_constructor_in_abstract_class_highlighting=suggestion +resharper_pure_attribute_on_void_method_highlighting=warning +resharper_qualified_expression_is_null_highlighting=warning +resharper_qualified_expression_maybe_null_highlighting=warning +resharper_razor_layout_not_resolved_highlighting=error +resharper_razor_section_not_resolved_highlighting=error +resharper_read_access_in_double_check_locking_highlighting=warning +resharper_redundant_abstract_modifier_highlighting=warning +resharper_redundant_always_match_subpattern_highlighting=suggestion +resharper_redundant_anonymous_type_property_name_highlighting=warning +resharper_redundant_argument_default_value_highlighting=warning +resharper_redundant_array_creation_expression_highlighting=hint +resharper_redundant_array_lower_bound_specification_highlighting=warning +resharper_redundant_assignment_highlighting=warning +resharper_redundant_attribute_parentheses_highlighting=hint +resharper_redundant_attribute_usage_property_highlighting=suggestion +resharper_redundant_base_constructor_call_highlighting=warning +resharper_redundant_base_qualifier_highlighting=warning +resharper_redundant_blank_lines_highlighting=none +resharper_redundant_block_highlighting=warning +resharper_redundant_bool_compare_highlighting=warning +resharper_redundant_case_label_highlighting=warning +resharper_redundant_cast_highlighting=warning +resharper_redundant_catch_clause_highlighting=warning +resharper_redundant_check_before_assignment_highlighting=warning +resharper_redundant_collection_initializer_element_braces_highlighting=hint +resharper_redundant_comparison_with_boolean_highlighting=warning +resharper_redundant_configure_await_highlighting=suggestion +resharper_redundant_css_hack_highlighting=warning +resharper_redundant_declaration_semicolon_highlighting=hint +resharper_redundant_default_member_initializer_highlighting=warning +resharper_redundant_delegate_creation_highlighting=warning +resharper_redundant_disable_warning_comment_highlighting=warning +resharper_redundant_discard_designation_highlighting=suggestion +resharper_redundant_else_block_highlighting=warning +resharper_redundant_empty_case_else_highlighting=warning +resharper_redundant_empty_constructor_highlighting=warning +resharper_redundant_empty_finally_block_highlighting=warning +resharper_redundant_empty_object_creation_argument_list_highlighting=hint +resharper_redundant_empty_object_or_collection_initializer_highlighting=warning +resharper_redundant_empty_switch_section_highlighting=warning +resharper_redundant_enumerable_cast_call_highlighting=warning +resharper_redundant_enum_case_label_for_default_section_highlighting=none +resharper_redundant_explicit_array_creation_highlighting=warning +resharper_redundant_explicit_array_size_highlighting=warning +resharper_redundant_explicit_nullable_creation_highlighting=warning +resharper_redundant_explicit_params_array_creation_highlighting=suggestion +resharper_redundant_explicit_positional_property_declaration_highlighting=warning +resharper_redundant_explicit_tuple_component_name_highlighting=warning +resharper_redundant_extends_list_entry_highlighting=warning +resharper_redundant_fixed_pointer_declaration_highlighting=suggestion +resharper_redundant_highlighting=warning +resharper_redundant_if_else_block_highlighting=hint +resharper_redundant_if_statement_then_keyword_highlighting=none +resharper_redundant_immediate_delegate_invocation_highlighting=suggestion +resharper_redundant_intermediate_variable_highlighting=hint +resharper_redundant_is_before_relational_pattern_highlighting=suggestion +resharper_redundant_iterator_keyword_highlighting=warning +resharper_redundant_jump_statement_highlighting=warning +resharper_redundant_lambda_parameter_type_highlighting=warning +resharper_redundant_lambda_signature_parentheses_highlighting=hint +resharper_redundant_linebreak_highlighting=none +resharper_redundant_local_class_name_highlighting=hint +resharper_redundant_local_function_name_highlighting=hint +resharper_redundant_logical_conditional_expression_operand_highlighting=warning +resharper_redundant_me_qualifier_highlighting=warning +resharper_redundant_my_base_qualifier_highlighting=warning +resharper_redundant_my_class_qualifier_highlighting=warning +resharper_redundant_name_qualifier_highlighting=warning +resharper_redundant_not_null_constraint_highlighting=warning +resharper_redundant_nullable_annotation_on_reference_type_constraint_highlighting=warning +resharper_redundant_nullable_annotation_on_type_constraint_has_non_nullable_base_type_highlighting=warning +resharper_redundant_nullable_annotation_on_type_constraint_has_non_nullable_type_kind_highlighting=warning +resharper_redundant_nullable_flow_attribute_highlighting=warning +resharper_redundant_nullable_type_mark_highlighting=warning +resharper_redundant_nullness_attribute_with_nullable_reference_types_highlighting=warning +resharper_redundant_overflow_checking_context_highlighting=warning +resharper_redundant_overload_global_highlighting=suggestion +resharper_redundant_overload_local_highlighting=suggestion +resharper_redundant_overridden_member_highlighting=warning +resharper_redundant_params_highlighting=warning +resharper_redundant_parentheses_highlighting=none +resharper_redundant_parent_type_declaration_highlighting=warning +resharper_redundant_pattern_parentheses_highlighting=hint +resharper_redundant_property_parentheses_highlighting=hint +resharper_redundant_property_pattern_clause_highlighting=suggestion +resharper_redundant_qualifier_highlighting=warning +resharper_redundant_query_order_by_ascending_keyword_highlighting=hint +resharper_redundant_range_bound_highlighting=suggestion +resharper_redundant_readonly_modifier_highlighting=suggestion +resharper_redundant_record_body_highlighting=warning +resharper_redundant_record_class_keyword_highlighting=warning +resharper_redundant_setter_value_parameter_declaration_highlighting=hint +resharper_redundant_space_highlighting=none +resharper_redundant_string_format_call_highlighting=warning +resharper_redundant_string_interpolation_highlighting=suggestion +resharper_redundant_string_to_char_array_call_highlighting=warning +resharper_redundant_string_type_highlighting=suggestion +resharper_redundant_suppress_nullable_warning_expression_highlighting=warning +resharper_redundant_ternary_expression_highlighting=warning +resharper_redundant_to_string_call_for_value_type_highlighting=hint +resharper_redundant_to_string_call_highlighting=warning +resharper_redundant_type_arguments_of_method_highlighting=warning +resharper_redundant_type_cast_highlighting=warning +resharper_redundant_type_cast_structural_highlighting=warning +resharper_redundant_type_check_in_pattern_highlighting=warning +resharper_redundant_units_highlighting=warning +resharper_redundant_unsafe_context_highlighting=warning +resharper_redundant_using_directive_global_highlighting=warning +resharper_redundant_using_directive_highlighting=warning +resharper_redundant_variable_type_specification_highlighting=hint +resharper_redundant_verbatim_prefix_highlighting=suggestion +resharper_redundant_verbatim_string_prefix_highlighting=suggestion +resharper_redundant_with_expression_highlighting=suggestion +resharper_reference_equals_with_value_type_highlighting=warning +resharper_reg_exp_inspections_highlighting=warning +resharper_remove_constructor_invocation_highlighting=none +resharper_remove_redundant_braces_highlighting=none +resharper_remove_redundant_or_statement_false_highlighting=suggestion +resharper_remove_redundant_or_statement_true_highlighting=suggestion +resharper_remove_to_list_1_highlighting=suggestion +resharper_remove_to_list_2_highlighting=suggestion +resharper_replace_auto_property_with_computed_property_highlighting=hint +resharper_replace_indicing_with_array_destructuring_highlighting=hint +resharper_replace_indicing_with_short_hand_properties_after_destructuring_highlighting=hint +resharper_replace_object_pattern_with_var_pattern_highlighting=suggestion +resharper_replace_slice_with_range_indexer_highlighting=hint +resharper_replace_substring_with_range_indexer_highlighting=hint +resharper_replace_undefined_checking_series_with_object_destructuring_highlighting=hint +resharper_replace_with_destructuring_swap_highlighting=hint +resharper_replace_with_first_or_default_1_highlighting=suggestion +resharper_replace_with_first_or_default_2_highlighting=suggestion +resharper_replace_with_first_or_default_3_highlighting=suggestion +resharper_replace_with_first_or_default_4_highlighting=suggestion +resharper_replace_with_last_or_default_1_highlighting=suggestion +resharper_replace_with_last_or_default_2_highlighting=suggestion +resharper_replace_with_last_or_default_3_highlighting=suggestion +resharper_replace_with_last_or_default_4_highlighting=suggestion +resharper_replace_with_of_type_1_highlighting=suggestion +resharper_replace_with_of_type_2_highlighting=suggestion +resharper_replace_with_of_type_3_highlighting=suggestion +resharper_replace_with_of_type_any_1_highlighting=suggestion +resharper_replace_with_of_type_any_2_highlighting=suggestion +resharper_replace_with_of_type_count_1_highlighting=suggestion +resharper_replace_with_of_type_count_2_highlighting=suggestion +resharper_replace_with_of_type_first_1_highlighting=suggestion +resharper_replace_with_of_type_first_2_highlighting=suggestion +resharper_replace_with_of_type_first_or_default_1_highlighting=suggestion +resharper_replace_with_of_type_first_or_default_2_highlighting=suggestion +resharper_replace_with_of_type_last_1_highlighting=suggestion +resharper_replace_with_of_type_last_2_highlighting=suggestion +resharper_replace_with_of_type_last_or_default_1_highlighting=suggestion +resharper_replace_with_of_type_last_or_default_2_highlighting=suggestion +resharper_replace_with_of_type_long_count_highlighting=suggestion +resharper_replace_with_of_type_single_1_highlighting=suggestion +resharper_replace_with_of_type_single_2_highlighting=suggestion +resharper_replace_with_of_type_single_or_default_1_highlighting=suggestion +resharper_replace_with_of_type_single_or_default_2_highlighting=suggestion +resharper_replace_with_of_type_where_highlighting=suggestion +resharper_replace_with_simple_assignment_false_highlighting=suggestion +resharper_replace_with_simple_assignment_true_highlighting=suggestion +resharper_replace_with_single_assignment_false_highlighting=suggestion +resharper_replace_with_single_assignment_true_highlighting=suggestion +resharper_replace_with_single_call_to_any_highlighting=suggestion +resharper_replace_with_single_call_to_count_highlighting=suggestion +resharper_replace_with_single_call_to_first_highlighting=suggestion +resharper_replace_with_single_call_to_first_or_default_highlighting=suggestion +resharper_replace_with_single_call_to_last_highlighting=suggestion +resharper_replace_with_single_call_to_last_or_default_highlighting=suggestion +resharper_replace_with_single_call_to_single_highlighting=suggestion +resharper_replace_with_single_call_to_single_or_default_highlighting=suggestion +resharper_replace_with_single_or_default_1_highlighting=suggestion +resharper_replace_with_single_or_default_2_highlighting=suggestion +resharper_replace_with_single_or_default_3_highlighting=suggestion +resharper_replace_with_single_or_default_4_highlighting=suggestion +resharper_replace_with_string_is_null_or_empty_highlighting=suggestion +resharper_required_base_types_conflict_highlighting=warning +resharper_required_base_types_direct_conflict_highlighting=warning +resharper_required_base_types_is_not_inherited_highlighting=warning +resharper_requires_fallback_color_highlighting=warning +resharper_resource_item_not_resolved_highlighting=error +resharper_resource_not_resolved_highlighting=error +resharper_resx_not_resolved_highlighting=warning +resharper_return_from_global_scopet_with_value_highlighting=warning +resharper_return_type_can_be_enumerable_global_highlighting=hint +resharper_return_type_can_be_enumerable_local_highlighting=hint +resharper_return_type_can_be_not_nullable_highlighting=warning +resharper_return_value_of_pure_method_is_not_used_highlighting=warning +resharper_route_templates_action_route_prefix_can_be_extracted_to_controller_route_highlighting=hint +resharper_route_templates_ambiguous_matching_constraint_constructor_highlighting=warning +resharper_route_templates_ambiguous_route_match_highlighting=warning +resharper_route_templates_constraint_argument_cannot_be_converted_highlighting=warning +resharper_route_templates_controller_route_parameter_is_not_passed_to_methods_highlighting=hint +resharper_route_templates_duplicated_parameter_highlighting=warning +resharper_route_templates_matching_constraint_constructor_not_resolved_highlighting=warning +resharper_route_templates_method_missing_route_parameters_highlighting=hint +resharper_route_templates_optional_parameter_can_be_preceded_only_by_single_period_highlighting=warning +resharper_route_templates_optional_parameter_must_be_at_the_end_of_segment_highlighting=warning +resharper_route_templates_parameter_constraint_can_be_specified_highlighting=hint +resharper_route_templates_parameter_type_and_constraints_mismatch_highlighting=warning +resharper_route_templates_parameter_type_can_be_made_stricter_highlighting=suggestion +resharper_route_templates_route_parameter_constraint_not_resolved_highlighting=warning +resharper_route_templates_route_parameter_is_not_passed_to_method_highlighting=hint +resharper_route_templates_route_token_not_resolved_highlighting=warning +resharper_route_templates_symbol_not_resolved_highlighting=warning +resharper_route_templates_syntax_error_highlighting=warning +resharper_safe_cast_is_used_as_type_check_highlighting=suggestion +resharper_same_imports_with_different_name_highlighting=warning +resharper_same_variable_assignment_highlighting=warning +resharper_script_tag_has_both_src_and_content_attributes_highlighting=error +resharper_script_tag_with_content_before_includes_highlighting=hint +resharper_sealed_member_in_sealed_class_highlighting=warning +resharper_separate_control_transfer_statement_highlighting=none +resharper_service_contract_without_operations_highlighting=warning +resharper_shift_expression_real_shift_count_is_zero_highlighting=warning +resharper_shift_expression_result_equals_zero_highlighting=warning +resharper_shift_expression_right_operand_not_equal_real_count_highlighting=warning +resharper_shift_expression_zero_left_operand_highlighting=warning +resharper_similar_anonymous_type_nearby_highlighting=hint +resharper_similar_expressions_comparison_highlighting=warning +resharper_simplify_conditional_operator_highlighting=suggestion +resharper_simplify_conditional_ternary_expression_highlighting=suggestion +resharper_simplify_i_if_highlighting=suggestion +resharper_simplify_linq_expression_use_all_highlighting=suggestion +resharper_simplify_linq_expression_use_any_highlighting=suggestion +resharper_simplify_string_interpolation_highlighting=suggestion +resharper_specify_a_culture_in_string_conversion_explicitly_highlighting=warning +resharper_specify_string_comparison_highlighting=hint +resharper_specify_variable_type_explicitly_highlighting=hint +resharper_spin_lock_in_readonly_field_highlighting=warning +resharper_stack_alloc_inside_loop_highlighting=warning +resharper_statement_termination_highlighting=warning +resharper_static_member_initializer_referes_to_member_below_highlighting=warning +resharper_static_member_in_generic_type_highlighting=none +resharper_static_problem_in_text_highlighting=warning +resharper_string_compare_is_culture_specific_1_highlighting=warning +resharper_string_compare_is_culture_specific_2_highlighting=warning +resharper_string_compare_is_culture_specific_3_highlighting=warning +resharper_string_compare_is_culture_specific_4_highlighting=warning +resharper_string_compare_is_culture_specific_5_highlighting=warning +resharper_string_compare_is_culture_specific_6_highlighting=warning +resharper_string_compare_to_is_culture_specific_highlighting=warning +resharper_string_concatenation_to_template_string_highlighting=hint +resharper_string_ends_with_is_culture_specific_highlighting=none +resharper_string_index_of_is_culture_specific_1_highlighting=warning +resharper_string_index_of_is_culture_specific_2_highlighting=warning +resharper_string_index_of_is_culture_specific_3_highlighting=warning +resharper_string_last_index_of_is_culture_specific_1_highlighting=warning +resharper_string_last_index_of_is_culture_specific_2_highlighting=warning +resharper_string_last_index_of_is_culture_specific_3_highlighting=warning +resharper_string_literal_as_interpolation_argument_highlighting=suggestion +resharper_string_literal_typo_highlighting=suggestion +resharper_string_literal_wrong_quotes_highlighting=hint +resharper_string_starts_with_is_culture_specific_highlighting=none +resharper_structured_message_template_problem_highlighting=warning +resharper_struct_can_be_made_read_only_highlighting=suggestion +resharper_struct_member_can_be_made_read_only_highlighting=none +resharper_suggest_base_type_for_parameter_highlighting=hint +resharper_suggest_base_type_for_parameter_in_constructor_highlighting=hint +resharper_suggest_discard_declaration_var_style_highlighting=hint +resharper_suggest_var_or_type_built_in_types_highlighting=hint +resharper_suggest_var_or_type_deconstruction_declarations_highlighting=hint +resharper_suggest_var_or_type_elsewhere_highlighting=hint +resharper_suggest_var_or_type_simple_types_highlighting=hint +resharper_super_call_highlighting=suggestion +resharper_super_call_prohibits_this_highlighting=error +resharper_suppress_nullable_warning_expression_as_inverted_is_expression_highlighting=warning +resharper_suspicious_instanceof_check_highlighting=warning +resharper_suspicious_lambda_block_highlighting=warning +resharper_suspicious_lock_over_synchronization_primitive_highlighting=warning +resharper_suspicious_math_sign_method_highlighting=warning +resharper_suspicious_parameter_name_in_argument_null_exception_highlighting=warning +resharper_suspicious_this_usage_highlighting=warning +resharper_suspicious_typeof_check_highlighting=warning +resharper_suspicious_type_conversion_global_highlighting=warning +resharper_swap_via_deconstruction_highlighting=suggestion +resharper_switch_expression_handles_some_known_enum_values_with_exception_in_default_highlighting=hint +resharper_switch_statement_for_enum_misses_default_section_highlighting=hint +resharper_switch_statement_handles_some_known_enum_values_with_default_highlighting=hint +resharper_switch_statement_missing_some_enum_cases_no_default_highlighting=none +resharper_symbol_from_not_copied_locally_reference_used_warning_highlighting=warning +resharper_syntax_is_not_allowed_highlighting=warning +resharper_tabs_and_spaces_mismatch_highlighting=none +resharper_tabs_are_disallowed_highlighting=none +resharper_tabs_outside_indent_highlighting=none +resharper_tail_recursive_call_highlighting=hint +resharper_tasks_not_loaded_highlighting=warning +resharper_ternary_can_be_replaced_by_its_condition_highlighting=warning +resharper_this_in_global_context_highlighting=warning +resharper_thread_static_at_instance_field_highlighting=warning +resharper_thread_static_field_has_initializer_highlighting=warning +resharper_throw_must_be_followed_by_expression_highlighting=error +resharper_too_wide_local_variable_scope_highlighting=suggestion +resharper_try_cast_always_succeeds_highlighting=suggestion +resharper_try_statements_can_be_merged_highlighting=hint +resharper_ts_not_resolved_highlighting=error +resharper_ts_resolved_from_inaccessible_module_highlighting=error +resharper_type_guard_doesnt_affect_anything_highlighting=warning +resharper_type_guard_produces_never_type_highlighting=warning +resharper_type_parameter_can_be_variant_highlighting=suggestion +resharper_type_parameter_hides_type_param_from_outer_scope_highlighting=warning +resharper_ul_tag_contains_non_li_elements_highlighting=hint +resharper_unassigned_field_global_highlighting=suggestion +resharper_unassigned_field_local_highlighting=warning +resharper_unassigned_get_only_auto_property_highlighting=warning +resharper_unassigned_readonly_field_highlighting=warning +resharper_unclosed_script_highlighting=error +resharper_undeclared_global_variable_using_highlighting=warning +resharper_unexpected_value_highlighting=error +resharper_unknown_css_class_highlighting=warning +resharper_unknown_css_variable_highlighting=warning +resharper_unknown_css_vendor_extension_highlighting=hint +resharper_unknown_item_group_highlighting=warning +resharper_unknown_metadata_highlighting=warning +resharper_unknown_output_parameter_highlighting=warning +resharper_unknown_property_highlighting=warning +resharper_unknown_target_highlighting=warning +resharper_unknown_task_attribute_highlighting=warning +resharper_unknown_task_highlighting=warning +resharper_unnecessary_whitespace_highlighting=none +resharper_unreachable_switch_arm_due_to_integer_analysis_highlighting=warning +resharper_unreachable_switch_case_due_to_integer_analysis_highlighting=warning +resharper_unreal_header_tool_error_highlighting=error +resharper_unreal_header_tool_parser_error_highlighting=error +resharper_unreal_header_tool_warning_highlighting=warning +resharper_unsafe_comma_in_object_properties_list_highlighting=warning +resharper_unsupported_required_base_type_highlighting=warning +resharper_unused_anonymous_method_signature_highlighting=warning +resharper_unused_auto_property_accessor_global_highlighting=warning +resharper_unused_auto_property_accessor_local_highlighting=warning +resharper_unused_import_clause_highlighting=warning +resharper_unused_inherited_parameter_highlighting=hint +resharper_unused_locals_highlighting=warning +resharper_unused_local_function_highlighting=warning +resharper_unused_local_function_parameter_highlighting=warning +resharper_unused_local_function_return_value_highlighting=warning +resharper_unused_local_import_highlighting=warning +resharper_unused_member_global_highlighting=suggestion +resharper_unused_member_hierarchy_global_highlighting=suggestion +resharper_unused_member_hierarchy_local_highlighting=warning +resharper_unused_member_in_super_global_highlighting=suggestion +resharper_unused_member_in_super_local_highlighting=warning +resharper_unused_member_local_highlighting=warning +resharper_unused_method_return_value_global_highlighting=suggestion +resharper_unused_method_return_value_local_highlighting=warning +resharper_unused_parameter_global_highlighting=suggestion +resharper_unused_parameter_highlighting=warning +resharper_unused_parameter_in_partial_method_highlighting=warning +resharper_unused_parameter_local_highlighting=warning +resharper_unused_property_highlighting=warning +resharper_unused_tuple_component_in_return_value_highlighting=warning +resharper_unused_type_global_highlighting=suggestion +resharper_unused_type_local_highlighting=warning +resharper_unused_type_parameter_highlighting=warning +resharper_unused_variable_highlighting=warning +resharper_usage_of_definitely_unassigned_value_highlighting=warning +resharper_usage_of_possibly_unassigned_value_highlighting=warning +resharper_useless_binary_operation_highlighting=warning +resharper_useless_comparison_to_integral_constant_highlighting=warning +resharper_use_array_creation_expression_1_highlighting=suggestion +resharper_use_array_creation_expression_2_highlighting=suggestion +resharper_use_array_empty_method_highlighting=suggestion +resharper_use_as_instead_of_type_cast_highlighting=hint +resharper_use_await_using_highlighting=suggestion +resharper_use_cancellation_token_for_i_async_enumerable_highlighting=suggestion +resharper_use_collection_count_property_highlighting=suggestion +resharper_use_configure_await_false_for_async_disposable_highlighting=none +resharper_use_configure_await_false_highlighting=suggestion +resharper_use_deconstruction_highlighting=hint +resharper_use_deconstruction_on_parameter_highlighting=hint +resharper_use_empty_types_field_highlighting=suggestion +resharper_use_event_args_empty_field_highlighting=suggestion +resharper_use_format_specifier_in_format_string_highlighting=suggestion +resharper_use_implicitly_typed_variable_evident_highlighting=hint +resharper_use_implicitly_typed_variable_highlighting=none +resharper_use_implicit_by_val_modifier_highlighting=hint +resharper_use_indexed_property_highlighting=suggestion +resharper_use_index_from_end_expression_highlighting=suggestion +resharper_use_is_operator_1_highlighting=suggestion +resharper_use_is_operator_2_highlighting=suggestion +resharper_use_method_any_0_highlighting=suggestion +resharper_use_method_any_1_highlighting=suggestion +resharper_use_method_any_2_highlighting=suggestion +resharper_use_method_any_3_highlighting=suggestion +resharper_use_method_any_4_highlighting=suggestion +resharper_use_method_is_instance_of_type_highlighting=suggestion +resharper_use_nameof_expression_for_part_of_the_string_highlighting=none +resharper_use_nameof_expression_highlighting=suggestion +resharper_use_name_of_instead_of_type_of_highlighting=suggestion +resharper_use_negated_pattern_in_is_expression_highlighting=hint +resharper_use_negated_pattern_matching_highlighting=hint +resharper_use_nullable_annotation_instead_of_attribute_highlighting=suggestion +resharper_use_nullable_attributes_supported_by_compiler_highlighting=suggestion +resharper_use_nullable_reference_types_annotation_syntax_highlighting=warning +resharper_use_null_propagation_highlighting=hint +resharper_use_null_propagation_when_possible_highlighting=none +resharper_use_object_or_collection_initializer_highlighting=suggestion +resharper_use_of_implicit_global_in_function_scope_highlighting=warning +resharper_use_of_possibly_unassigned_property_highlighting=warning +resharper_use_pattern_matching_highlighting=suggestion +resharper_use_positional_deconstruction_pattern_highlighting=none +resharper_use_string_interpolation_highlighting=suggestion +resharper_use_switch_case_pattern_variable_highlighting=suggestion +resharper_use_throw_if_null_method_highlighting=none +resharper_use_verbatim_string_highlighting=hint +resharper_using_of_reserved_word_error_highlighting=error +resharper_using_of_reserved_word_highlighting=warning +resharper_value_parameter_not_used_highlighting=warning +resharper_value_range_attribute_violation_highlighting=warning +resharper_value_should_have_units_highlighting=error +resharper_variable_can_be_made_const_highlighting=hint +resharper_variable_can_be_made_let_highlighting=hint +resharper_variable_can_be_moved_to_inner_block_highlighting=hint +resharper_variable_can_be_not_nullable_highlighting=warning +resharper_variable_hides_outer_variable_highlighting=warning +resharper_variable_used_before_declared_highlighting=warning +resharper_variable_used_in_inner_scope_before_declared_highlighting=warning +resharper_variable_used_out_of_scope_highlighting=warning +resharper_vb_check_for_reference_equality_instead_1_highlighting=suggestion +resharper_vb_check_for_reference_equality_instead_2_highlighting=suggestion +resharper_vb_possible_mistaken_argument_highlighting=warning +resharper_vb_possible_mistaken_call_to_get_type_1_highlighting=warning +resharper_vb_possible_mistaken_call_to_get_type_2_highlighting=warning +resharper_vb_remove_to_list_1_highlighting=suggestion +resharper_vb_remove_to_list_2_highlighting=suggestion +resharper_vb_replace_with_first_or_default_highlighting=suggestion +resharper_vb_replace_with_last_or_default_highlighting=suggestion +resharper_vb_replace_with_of_type_1_highlighting=suggestion +resharper_vb_replace_with_of_type_2_highlighting=suggestion +resharper_vb_replace_with_of_type_any_1_highlighting=suggestion +resharper_vb_replace_with_of_type_any_2_highlighting=suggestion +resharper_vb_replace_with_of_type_count_1_highlighting=suggestion +resharper_vb_replace_with_of_type_count_2_highlighting=suggestion +resharper_vb_replace_with_of_type_first_1_highlighting=suggestion +resharper_vb_replace_with_of_type_first_2_highlighting=suggestion +resharper_vb_replace_with_of_type_first_or_default_1_highlighting=suggestion +resharper_vb_replace_with_of_type_first_or_default_2_highlighting=suggestion +resharper_vb_replace_with_of_type_last_1_highlighting=suggestion +resharper_vb_replace_with_of_type_last_2_highlighting=suggestion +resharper_vb_replace_with_of_type_last_or_default_1_highlighting=suggestion +resharper_vb_replace_with_of_type_last_or_default_2_highlighting=suggestion +resharper_vb_replace_with_of_type_single_1_highlighting=suggestion +resharper_vb_replace_with_of_type_single_2_highlighting=suggestion +resharper_vb_replace_with_of_type_single_or_default_1_highlighting=suggestion +resharper_vb_replace_with_of_type_single_or_default_2_highlighting=suggestion +resharper_vb_replace_with_of_type_where_highlighting=suggestion +resharper_vb_replace_with_single_assignment_1_highlighting=suggestion +resharper_vb_replace_with_single_assignment_2_highlighting=suggestion +resharper_vb_replace_with_single_call_to_any_highlighting=suggestion +resharper_vb_replace_with_single_call_to_count_highlighting=suggestion +resharper_vb_replace_with_single_call_to_first_highlighting=suggestion +resharper_vb_replace_with_single_call_to_first_or_default_highlighting=suggestion +resharper_vb_replace_with_single_call_to_last_highlighting=suggestion +resharper_vb_replace_with_single_call_to_last_or_default_highlighting=suggestion +resharper_vb_replace_with_single_call_to_single_highlighting=suggestion +resharper_vb_replace_with_single_call_to_single_or_default_highlighting=suggestion +resharper_vb_replace_with_single_or_default_highlighting=suggestion +resharper_vb_simplify_linq_expression_10_highlighting=hint +resharper_vb_simplify_linq_expression_1_highlighting=suggestion +resharper_vb_simplify_linq_expression_2_highlighting=suggestion +resharper_vb_simplify_linq_expression_3_highlighting=suggestion +resharper_vb_simplify_linq_expression_4_highlighting=suggestion +resharper_vb_simplify_linq_expression_5_highlighting=suggestion +resharper_vb_simplify_linq_expression_6_highlighting=suggestion +resharper_vb_simplify_linq_expression_7_highlighting=hint +resharper_vb_simplify_linq_expression_8_highlighting=hint +resharper_vb_simplify_linq_expression_9_highlighting=hint +resharper_vb_string_compare_is_culture_specific_1_highlighting=warning +resharper_vb_string_compare_is_culture_specific_2_highlighting=warning +resharper_vb_string_compare_is_culture_specific_3_highlighting=warning +resharper_vb_string_compare_is_culture_specific_4_highlighting=warning +resharper_vb_string_compare_is_culture_specific_5_highlighting=warning +resharper_vb_string_compare_is_culture_specific_6_highlighting=warning +resharper_vb_string_compare_to_is_culture_specific_highlighting=warning +resharper_vb_string_ends_with_is_culture_specific_highlighting=none +resharper_vb_string_index_of_is_culture_specific_1_highlighting=warning +resharper_vb_string_index_of_is_culture_specific_2_highlighting=warning +resharper_vb_string_index_of_is_culture_specific_3_highlighting=warning +resharper_vb_string_last_index_of_is_culture_specific_1_highlighting=warning +resharper_vb_string_last_index_of_is_culture_specific_2_highlighting=warning +resharper_vb_string_last_index_of_is_culture_specific_3_highlighting=warning +resharper_vb_string_starts_with_is_culture_specific_highlighting=none +resharper_vb_unreachable_code_highlighting=warning +resharper_vb_use_array_creation_expression_1_highlighting=suggestion +resharper_vb_use_array_creation_expression_2_highlighting=suggestion +resharper_vb_use_first_instead_highlighting=warning +resharper_vb_use_method_any_1_highlighting=suggestion +resharper_vb_use_method_any_2_highlighting=suggestion +resharper_vb_use_method_any_3_highlighting=suggestion +resharper_vb_use_method_any_4_highlighting=suggestion +resharper_vb_use_method_any_5_highlighting=suggestion +resharper_vb_use_method_is_instance_of_type_highlighting=suggestion +resharper_vb_use_type_of_is_operator_1_highlighting=suggestion +resharper_vb_use_type_of_is_operator_2_highlighting=suggestion +resharper_virtual_member_call_in_constructor_highlighting=warning +resharper_virtual_member_never_overridden_global_highlighting=suggestion +resharper_virtual_member_never_overridden_local_highlighting=suggestion +resharper_void_method_with_must_use_return_value_attribute_highlighting=warning +resharper_web_config_module_not_resolved_highlighting=error +resharper_web_config_module_qualification_resolve_highlighting=warning +resharper_web_config_redundant_add_namespace_tag_highlighting=warning +resharper_web_config_redundant_location_tag_highlighting=warning +resharper_web_config_tag_prefix_redundand_highlighting=warning +resharper_web_config_type_not_resolved_highlighting=error +resharper_web_config_unused_add_tag_highlighting=warning +resharper_web_config_unused_element_due_to_config_source_attribute_highlighting=warning +resharper_web_config_unused_remove_or_clear_tag_highlighting=warning +resharper_web_config_web_config_path_warning_highlighting=warning +resharper_web_config_wrong_module_highlighting=error +resharper_web_ignored_path_highlighting=none +resharper_web_mapped_path_highlighting=hint +resharper_with_expression_instead_of_initializer_highlighting=suggestion +resharper_with_statement_using_error_highlighting=error +resharper_wrong_expression_statement_highlighting=warning +resharper_wrong_indent_size_highlighting=none +resharper_wrong_metadata_use_highlighting=none +resharper_wrong_public_modifier_specification_highlighting=hint +resharper_wrong_require_relative_path_highlighting=hint +resharper_xaml_assign_null_to_not_null_attribute_highlighting=warning +resharper_xaml_avalonia_wrong_binding_mode_for_stream_binding_operator_highlighting=warning +resharper_xaml_binding_without_context_not_resolved_highlighting=hint +resharper_xaml_binding_with_context_not_resolved_highlighting=warning +resharper_xaml_compiled_binding_missing_data_type_error_highlighting_highlighting=error +resharper_xaml_constructor_warning_highlighting=warning +resharper_xaml_decimal_parsing_is_culture_dependent_highlighting=warning +resharper_xaml_dependency_property_resolve_error_highlighting=warning +resharper_xaml_duplicate_style_setter_highlighting=warning +resharper_xaml_dynamic_resource_error_highlighting=error +resharper_xaml_element_name_reference_not_resolved_highlighting=error +resharper_xaml_empty_grid_length_definition_highlighting=error +resharper_xaml_grid_definitions_can_be_converted_to_attribute_highlighting=hint +resharper_xaml_ignored_path_highlighting_highlighting=none +resharper_xaml_index_out_of_grid_definition_highlighting=warning +resharper_xaml_invalid_member_type_highlighting=error +resharper_xaml_invalid_resource_target_type_highlighting=error +resharper_xaml_invalid_resource_type_highlighting=error +resharper_xaml_invalid_type_highlighting=error +resharper_xaml_language_level_highlighting=error +resharper_xaml_mapped_path_highlighting_highlighting=hint +resharper_xaml_method_arguments_will_be_ignored_highlighting=warning +resharper_xaml_missing_grid_index_highlighting=warning +resharper_xaml_overloads_collision_highlighting=warning +resharper_xaml_parent_is_out_of_current_component_tree_highlighting=warning +resharper_xaml_path_error_highlighting=warning +resharper_xaml_possible_null_reference_exception_highlighting=suggestion +resharper_xaml_redundant_attached_property_highlighting=warning +resharper_xaml_redundant_binding_mode_attribute_highlighting=warning +resharper_xaml_redundant_collection_property_highlighting=warning +resharper_xaml_redundant_freeze_attribute_highlighting=warning +resharper_xaml_redundant_grid_definitions_highlighting=warning +resharper_xaml_redundant_grid_span_highlighting=warning +resharper_xaml_redundant_modifiers_attribute_highlighting=warning +resharper_xaml_redundant_namespace_alias_highlighting=warning +resharper_xaml_redundant_name_attribute_highlighting=warning +resharper_xaml_redundant_property_type_qualifier_highlighting=warning +resharper_xaml_redundant_resource_highlighting=warning +resharper_xaml_redundant_styled_value_highlighting=warning +resharper_xaml_redundant_update_source_trigger_attribute_highlighting=warning +resharper_xaml_redundant_xamarin_forms_class_declaration_highlighting=warning +resharper_xaml_resource_file_path_case_mismatch_highlighting=warning +resharper_xaml_routed_event_resolve_error_highlighting=warning +resharper_xaml_static_resource_not_resolved_highlighting=warning +resharper_xaml_style_class_not_found_highlighting=warning +resharper_xaml_style_invalid_target_type_highlighting=error +resharper_xaml_unexpected_text_token_highlighting=error +resharper_xaml_xaml_duplicate_device_family_type_view_highlighting_highlighting=error +resharper_xaml_xaml_mismatched_device_family_view_clr_name_highlighting_highlighting=warning +resharper_xaml_xaml_relative_source_default_mode_warning_highlighting_highlighting=warning +resharper_xaml_xaml_unknown_device_family_type_highlighting_highlighting=warning +resharper_xaml_xaml_xamarin_forms_data_type_and_binding_context_type_mismatched_highlighting_highlighting=warning +resharper_xaml_x_key_attribute_disallowed_highlighting=error +resharper_xml_doc_comment_syntax_problem_highlighting=warning +resharper_xunit_xunit_test_with_console_output_highlighting=warning + +[*.{cshtml,htm,html,proto,razor}] +indent_style=tab +indent_size=tab +tab_width=4 + +[*.{asax,ascx,aspx,axaml,c,c++,cc,cginc,compute,cp,cpp,cs,css,cu,cuh,cxx,h,hh,hlsl,hlsli,hlslinc,hpp,hxx,inc,inl,ino,ipp,js,jsx,master,mpp,mq4,mq5,mqh,paml,skin,tpp,ts,tsx,usf,ush,vb,xaml,xamlx,xoml}] +indent_style=space +indent_size=4 +tab_width=4 + +[ "*.proto" ] +indent_style=tab +indent_size=tab +tab_width=4 + +[*.{asax,ascx,aspx,axaml,cs,cshtml,css,htm,html,js,jsx,master,paml,razor,skin,ts,tsx,vb,xaml,xamlx,xoml}] +indent_style=space +indent_size=4 +tab_width=4 + +[*.{appxmanifest,axml,build,config,csproj,dbml,discomap,dtd,json,jsproj,lsproj,njsproj,nuspec,proj,props,resjson,resw,resx,StyleCop,targets,tasks,vbproj,xml,xsd}] +indent_style=space +indent_size=2 +tab_width=2 + +[*.{appxmanifest,asax,ascx,aspx,axaml,axml,build,c,c++,cc,cginc,compute,config,cp,cpp,cs,cshtml,csproj,css,cu,cuh,cxx,dbml,discomap,dtd,h,hh,hlsl,hlsli,hlslinc,hpp,htm,html,hxx,inc,inl,ino,ipp,js,json,jsproj,jsx,lsproj,master,mpp,mq4,mq5,mqh,njsproj,nuspec,paml,proj,props,proto,razor,resjson,resw,resx,skin,StyleCop,targets,tasks,tpp,ts,tsx,usf,ush,vb,vbproj,xaml,xamlx,xml,xoml,xsd}] +indent_style=space +indent_size= 4 +tab_width= 4 +dotnet_style_operator_placement_when_wrapping = beginning_of_line +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_null_propagation = true:suggestion +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion +dotnet_style_prefer_auto_properties = true:silent +dotnet_style_object_initializer = true:suggestion +dotnet_style_collection_initializer = true:suggestion +dotnet_style_prefer_simplified_boolean_expressions = true:suggestion +dotnet_style_prefer_conditional_expression_over_assignment = true:silent +dotnet_style_prefer_conditional_expression_over_return = true:silent +dotnet_style_explicit_tuple_names = true:suggestion +dotnet_style_prefer_inferred_tuple_names = true:suggestion +dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion +dotnet_style_prefer_compound_assignment = true:suggestion +dotnet_style_prefer_simplified_interpolation = true:suggestion +dotnet_style_namespace_match_folder = true:suggestion +insert_final_newline = true diff --git a/Glamourer.Api/.gitignore b/Glamourer.Api/.gitignore new file mode 100644 index 0000000..3e16852 --- /dev/null +++ b/Glamourer.Api/.gitignore @@ -0,0 +1,3 @@ +bin/ +obj/ +.vs/ \ No newline at end of file diff --git a/Glamourer.Api/Api/IGlamourerApi.cs b/Glamourer.Api/Api/IGlamourerApi.cs new file mode 100644 index 0000000..fe2bfef --- /dev/null +++ b/Glamourer.Api/Api/IGlamourerApi.cs @@ -0,0 +1,14 @@ +namespace Glamourer.Api.Api; + +/// The full API available. +public interface IGlamourerApi : IGlamourerApiBase +{ + /// + public IGlamourerApiDesigns Designs { get; } + + /// + public IGlamourerApiItems Items { get; } + + /// + public IGlamourerApiState State { get; } +} diff --git a/Glamourer.Api/Api/IGlamourerApiBase.cs b/Glamourer.Api/Api/IGlamourerApiBase.cs new file mode 100644 index 0000000..8e1fe71 --- /dev/null +++ b/Glamourer.Api/Api/IGlamourerApiBase.cs @@ -0,0 +1,11 @@ +namespace Glamourer.Api.Api; + +/// Basic API functions. +public interface IGlamourerApiBase +{ + /// + /// Get the current API version of the Glamourer available in this installation. + /// Major version changes indicate incompatibilities, minor version changes are backward-compatible additions. + /// + public (int Major, int Minor) ApiVersion { get; } +} diff --git a/Glamourer.Api/Api/IGlamourerApiDesigns.cs b/Glamourer.Api/Api/IGlamourerApiDesigns.cs new file mode 100644 index 0000000..1bad29b --- /dev/null +++ b/Glamourer.Api/Api/IGlamourerApiDesigns.cs @@ -0,0 +1,33 @@ +using Glamourer.Api.Enums; + +namespace Glamourer.Api.Api; + +/// All functions related to Glamourer designs. +public interface IGlamourerApiDesigns +{ + /// Obtain a list of all available designs. + /// A dictionary of all designs from their GUID to their current display name. + public Dictionary GetDesignList(); + + /// Apply an existing design to an actor. + /// The GUID of the design to apply. + /// The game object index of the actor to be manipulated. + /// A key to unlock or lock the state if necessary. + /// The flags used for the reversion. Respects Once, Equipment, Customization, Lock (see .) + /// DesignNotFound, ActorNotFound, InvalidKey, Success. + public GlamourerApiEc ApplyDesign(Guid designId, int objectIndex, uint key, ApplyFlag flags); + + /// Apply an existing design to an actor. + /// The GUID of the design to apply. + /// The name of the players to be manipulated. + /// A key to unlock or lock the state if necessary. + /// The flags used for the reversion. Respects Once, Equipment, Customization, Lock (see .) + /// DesignNotFound, ActorNotFound, InvalidKey, Success. + /// /// + /// The player does not have to be currently available as long as he has a persisted Glamourer state.
+ /// Only players are checked for name equality, no NPCs.
+ /// If multiple players of the same name are found, all of them are reverted.
+ /// Prefer to use the index-based function unless you need to get the state of someone currently unavailable. + ///
+ public GlamourerApiEc ApplyDesignName(Guid designId, string playerName, uint key, ApplyFlag flags); +} diff --git a/Glamourer.Api/Api/IGlamourerApiItems.cs b/Glamourer.Api/Api/IGlamourerApiItems.cs new file mode 100644 index 0000000..349a643 --- /dev/null +++ b/Glamourer.Api/Api/IGlamourerApiItems.cs @@ -0,0 +1,80 @@ +using Glamourer.Api.Enums; + +namespace Glamourer.Api.Api; + +/// All functions related to items. +public interface IGlamourerApiItems +{ + /// Set a single item on an actor. + /// The game object index of the actor to be manipulated. + /// The slot to apply the item to. + /// The (Custom) ID of the item to apply. + /// The IDs of the stains to apply to the item. + /// A key to unlock or lock the state if necessary. + /// The flags used for the reversion. Respects Once (see .) + /// ItemInvalid, ActorNotFound, ActorNotHuman, InvalidKey, Success. + /// The item ID can be a custom item ID in Glamourer's format for models without an associated item, or a normal game item ID. + public GlamourerApiEc SetItem(int objectIndex, ApiEquipSlot slot, ulong itemId, IReadOnlyList stains, uint key, ApplyFlag flags); + + /// Set a single item on players. + /// The name of the players to be manipulated. + /// The slot to apply the item to. + /// The (Custom) ID of the item to apply. + /// The IDs of the stains to apply to the item. + /// A key to unlock or lock the state if necessary. + /// The flags used for the reversion. Respects Once (see .) + /// ItemInvalid, ActorNotFound, ActorNotHuman, InvalidKey, Success. + /// + /// The item ID can be a custom item ID in Glamourer's format for models without an associated item, or a normal game item ID.
+ /// The player does not have to be currently available as long as he has a persisted Glamourer state.
+ /// Only players are checked for name equality, no NPCs.
+ /// If multiple players of the same name are found, all of them are modified.
+ /// Prefer to use the index-based function unless you need to get the state of someone currently unavailable. + ///
+ public GlamourerApiEc SetItemName(string playerName, ApiEquipSlot slot, ulong itemId, IReadOnlyList stains, uint key, + ApplyFlag flags); + + /// Set a single bonus item on an actor. + /// The game object index of the actor to be manipulated. + /// The bonus slot to apply the item to. + /// The bonus item sheet ID of the item to apply (including stain). + /// A key to unlock or lock the state if necessary. + /// The flags used for the reversion. Respects Once (see .) + /// ItemInvalid, ActorNotFound, ActorNotHuman, InvalidKey, Success. + /// The bonus item ID can currently not be a custom item ID in Glamourer's format for models without an associated item. Use 0 to remove the bonus item. + public GlamourerApiEc SetBonusItem(int objectIndex, ApiBonusSlot slot, ulong bonusItemId, uint key, ApplyFlag flags); + + /// Set a single bonus item on an actor. + /// The game object index of the actor to be manipulated. + /// The bonus slot to apply the item to. + /// The bonus item sheet ID of the item to apply (including stain). + /// A key to unlock or lock the state if necessary. + /// The flags used for the reversion. Respects Once (see .) + /// ItemInvalid, ActorNotFound, ActorNotHuman, InvalidKey, Success. + /// + /// The bonus item ID can currently not be a custom item ID in Glamourer's format for models without an associated item. Use 0 to remove the bonus item.
+ /// The player does not have to be currently available as long as he has a persisted Glamourer state.
+ /// Only players are checked for name equality, no NPCs.
+ /// If multiple players of the same name are found, all of them are modified.
+ /// Prefer to use the index-based function unless you need to get the state of someone currently unavailable. + ///
+ public GlamourerApiEc SetBonusItemName(string playerName, ApiBonusSlot slot, ulong bonusItemId, uint key, ApplyFlag flags); + + /// Set the defined Meta State flags to the active or inactive state on actor. + /// The game object index of the actor to be manipulated. + /// The flags defining which meta states to update to the new value. This can be multiple at once. + /// The new value to update to. + /// A key to unlock or lock the state if necessary. + /// The flags used for the reversion. Respects Once (see .) + /// ItemInvalid, ActorNotFound, ActorNotHuman, InvalidKey, Success. + public GlamourerApiEc SetMetaState(int objectIndex, MetaFlag types, bool newValue, uint key, ApplyFlag flags); + + /// Set the defined Meta State flags to the active or inactive state on actor (by name) + /// The name of the players to be manipulated. + /// The flags defining which meta states to update to the new value. This can be multiple at once. + /// The new value to update to. + /// A key to unlock or lock the state if necessary. + /// The flags used for the reversion. Respects Once (see .) + /// ItemInvalid, ActorNotFound, ActorNotHuman, InvalidKey, Success. + public GlamourerApiEc SetMetaStateName(string playerName, MetaFlag types, bool newValue, uint key, ApplyFlag flags); +} diff --git a/Glamourer.Api/Api/IGlamourerApiState.cs b/Glamourer.Api/Api/IGlamourerApiState.cs new file mode 100644 index 0000000..645873c --- /dev/null +++ b/Glamourer.Api/Api/IGlamourerApiState.cs @@ -0,0 +1,124 @@ +using Glamourer.Api.Enums; +using Newtonsoft.Json.Linq; + +namespace Glamourer.Api.Api; + +/// Any functions related to Glamourer's state tracking. +public interface IGlamourerApiState +{ + /// Get the current Glamourer state of an actor. + /// The game object index of the desired actor. + /// A key to unlock the state if necessary. + /// ActorNotFound, InvalidKey or Success, and the state on success. + /// The actor does not need to have a prior Glamourer state as long as it can be found. + public (GlamourerApiEc, JObject?) GetState(int objectIndex, uint key); + + /// Get the current Glamourer state of a player character. + /// The name of the desired player. + /// A key to unlock the state if necessary. + /// ActorNotFound, InvalidKey or Success, and the state on success. + /// + /// The player does not have to be currently available as long as he has a persisted Glamourer state. + /// Only players are checked for name equality, no NPCs. + /// If multiple players of the same name are found, the first is returned. + /// Prefer to use the index-based function unless you need to get the state of someone currently unavailable. + /// + public (GlamourerApiEc, JObject?) GetStateName(string playerName, uint key); + + /// + public (GlamourerApiEc, string?) GetStateBase64(int objectIndex, uint key); + + /// + public (GlamourerApiEc, string?) GetStateBase64Name(string objectName, uint key); + + /// Apply a supplied state to an actor. + /// The state, which can be either a Glamourer-supplied JObject or a Base64 string. + /// The game object index of the actor to be manipulated. + /// A key to unlock or lock the state if necessary. + /// The flags used for the application. Respects Once, Equipment, Customization and Lock (see .) + /// ActorNotFound, InvalidKey, ActorNotHuman, Success. + public GlamourerApiEc ApplyState(object applyState, int objectIndex, uint key, ApplyFlag flags); + + /// Apply a supplied state to players. + /// The state, which can be either a Glamourer-supplied JObject or a Base64 string. + /// The name of the player to be manipulated. + /// A key to unlock or lock the state if necessary. + /// The flags used for the application. Respects Once, Equipment, Customization and Lock (see .) + /// ActorNotFound, InvalidKey, ActorNotHuman, Success. + /// + /// The player does not have to be currently available as long as he has a persisted Glamourer state.
+ /// Only players are checked for name equality, no NPCs.
+ /// If multiple players of the same name are found, all of them are manipulated.
+ /// Prefer to use the index-based function unless you need to get the state of someone currently unavailable. + ///
+ public GlamourerApiEc ApplyStateName(object applyState, string playerName, uint key, ApplyFlag flags); + + /// Revert the Glamourer state of an actor to Game state. + /// The game object index of the actor to be manipulated. + /// A key to unlock the state if necessary. + /// The flags used for the reversion. Respects Equipment and Customization (see .) + /// ActorNotFound, InvalidKey, Success, NothingDone. + public GlamourerApiEc RevertState(int objectIndex, uint key, ApplyFlag flags); + + /// Revert the Glamourer state of players to game state. + /// The name of the players to be reverted. + /// A key to unlock the state if necessary. + /// The flags used for the reversion. Respects Equipment and Customization (see .) + /// ActorNotFound, InvalidKey, Success, NothingDone. + /// /// + /// The player does not have to be currently available as long as he has a persisted Glamourer state.
+ /// Only players are checked for name equality, no NPCs.
+ /// If multiple players of the same name are found, all of them are reverted.
+ /// Prefer to use the index-based function unless you need to get the state of someone currently unavailable. + ///
+ public GlamourerApiEc RevertStateName(string playerName, uint key, ApplyFlag flags); + + /// Unlock the Glamourer state of an actor with a key. + /// The game object index of the actor to be manipulated. + /// A key to unlock the state. + /// ActorNotFound, InvalidKey, Success, NothingDone. + public GlamourerApiEc UnlockState(int objectIndex, uint key); + + /// Unlock the Glamourer state of players with a key. + /// The name of the players to be unlocked. + /// A key to unlock the state. + /// InvalidKey, Success, NothingDone. + public GlamourerApiEc UnlockStateName(string playerName, uint key); + + /// Unlock all active glamourer states with a key. + /// The key to unlock states with. + /// The number of unlocked states. + public int UnlockAll(uint key); + + /// Revert the Glamourer state of an actor to automation state. + /// The game object index of the actor to be manipulated. + /// A key to unlock the state if necessary. + /// The flags used for the reversion. Respects Once and Lock (see .) + /// ActorNotFound, InvalidKey, Success, NothingDone. + public GlamourerApiEc RevertToAutomation(int objectIndex, uint key, ApplyFlag flags); + + /// Revert the Glamourer state of players to automation state. + /// The name of the players to be reverted. + /// A key to unlock the state if necessary. + /// The flags used for the reversion. Respects Once and Lock (see .) + /// ActorNotFound, InvalidKey, Success, NothingDone. + /// /// + /// The player does not have to be currently available as long as he has a persisted Glamourer state.
+ /// Only players are checked for name equality, no NPCs.
+ /// If multiple players of the same name are found, all of them are reverted.
+ /// Prefer to use the index-based function unless you need to get the state of someone currently unavailable. + ///
+ public GlamourerApiEc RevertToAutomationName(string playerName, uint key, ApplyFlag flags); + + /// Invoked with the game object pointer (if available) whenever an actors tracked state changes. + public event Action StateChanged; + + /// Invoked with the game object pointer (if available) whenever an actors tracked state changes, with the type of change. + public event Action StateChangedWithType; + + /// Invoked with the game object pointer (if available) whenever an actors tracked state finalizes a grouped change consisting of multiple smaller changes. + public event Action StateFinalized; + + /// Invoked when the player enters or leaves GPose (true => entered GPose, false => left GPose). + public event Action? GPoseChanged; +} diff --git a/Glamourer.Api/Enums/ApiBonusSlot.cs b/Glamourer.Api/Enums/ApiBonusSlot.cs new file mode 100644 index 0000000..fadda1f --- /dev/null +++ b/Glamourer.Api/Enums/ApiBonusSlot.cs @@ -0,0 +1,11 @@ +namespace Glamourer.Api.Enums; + +/// Bonus item slots restricted to API-relevant slots. +public enum ApiBonusSlot : byte +{ + /// No slot. + Unknown = 0, + + /// The Glasses slot. + Glasses = 1, +} diff --git a/Glamourer.Api/Enums/ApiEquipSlot.cs b/Glamourer.Api/Enums/ApiEquipSlot.cs new file mode 100644 index 0000000..e87e0a3 --- /dev/null +++ b/Glamourer.Api/Enums/ApiEquipSlot.cs @@ -0,0 +1,45 @@ +namespace Glamourer.Api.Enums; + +/// Equip slots restricted to API-relevant slots, but compatible with GameData.EquipSlots. +public enum ApiEquipSlot : byte +{ + /// No slot. + Unknown = 0, + + /// Mainhand, also used for both-handed weapons. + MainHand = 1, + + /// Offhand, used for shields or if you want to apply the offhand component of certain weapons. + OffHand = 2, + + /// Head. + Head = 3, + + /// Body. + Body = 4, + + /// Hands. + Hands = 5, + + /// Legs. + Legs = 7, + + /// Feet. + Feet = 8, + + /// Ears. + Ears = 9, + + /// Neck. + Neck = 10, + + /// Wrists. + Wrists = 11, + + /// Right Finger. + RFinger = 12, + + /// Left Finger. + /// Not officially existing, means "weapon could be equipped in either hand" for the game. + LFinger = 14, +} diff --git a/Glamourer.Api/Enums/ApplyFlag.cs b/Glamourer.Api/Enums/ApplyFlag.cs new file mode 100644 index 0000000..19d826f --- /dev/null +++ b/Glamourer.Api/Enums/ApplyFlag.cs @@ -0,0 +1,31 @@ +namespace Glamourer.Api.Enums; + +/// Application flags that can be used in different situations. +[Flags] +public enum ApplyFlag : ulong +{ + /// Apply the selected manipulation only once, without forcing the state into automation. + Once = 0x01, + + /// Apply the selected manipulation on the equipment (might be more or less supported). + Equipment = 0x02, + + /// Apply the selected manipulation on the customizations (might be more or less supported). + Customization = 0x04, + + /// Lock the state with the given key after applying the selected manipulation + Lock = 0x08, +} + +/// Extensions for apply flags. +public static class ApplyFlagEx +{ + /// The default application flags for design-based manipulations. + public const ApplyFlag DesignDefault = ApplyFlag.Once | ApplyFlag.Equipment | ApplyFlag.Customization; + + /// The default application flags for state-based manipulations. + public const ApplyFlag StateDefault = ApplyFlag.Equipment | ApplyFlag.Customization | ApplyFlag.Lock; + + /// The default application flags for reverse manipulations. + public const ApplyFlag RevertDefault = ApplyFlag.Equipment | ApplyFlag.Customization; +} diff --git a/Glamourer.Api/Enums/GlamourerApiEc.cs b/Glamourer.Api/Enums/GlamourerApiEc.cs new file mode 100644 index 0000000..2302e9f --- /dev/null +++ b/Glamourer.Api/Enums/GlamourerApiEc.cs @@ -0,0 +1,29 @@ +namespace Glamourer.Api.Enums; + +/// Return codes for API functions. +public enum GlamourerApiEc +{ + /// The function succeeded. + Success = 0, + + /// The function did not encounter a problem, but also did not do anything. + NothingDone = 1, + + /// The requested actor was not found. + ActorNotFound = 2, + + /// The requested actor was not human, but should have been. + ActorNotHuman, + + /// The requested design was not found. + DesignNotFound, + + /// The requested item was not found or could not be applied to the requested slot. + ItemInvalid, + + /// The state of an actor could not be manipulated because it was locked and the provided key could not unlock it. + InvalidKey, + + /// The provided object could not be converted into a valid Glamourer state to apply. + InvalidState, +} diff --git a/Glamourer.Api/Enums/SetMetaFlag.cs b/Glamourer.Api/Enums/SetMetaFlag.cs new file mode 100644 index 0000000..98158af --- /dev/null +++ b/Glamourer.Api/Enums/SetMetaFlag.cs @@ -0,0 +1,11 @@ +namespace Glamourer.Api.Enums; + +/// Application flags for setting the meta state of an actor. +[Flags] +public enum MetaFlag : ulong +{ + Wetness = 0x01, + HatState = 0x02, + VisorState = 0x04, + WeaponState = 0x08, +} diff --git a/Glamourer.Api/Enums/StateChangeType.cs b/Glamourer.Api/Enums/StateChangeType.cs new file mode 100644 index 0000000..9151751 --- /dev/null +++ b/Glamourer.Api/Enums/StateChangeType.cs @@ -0,0 +1,47 @@ +namespace Glamourer.Api.Enums; + +/// What type of information changed in a state. +public enum StateChangeType +{ + /// A characters saved state had the model id changed. This means everything may have changed. + Model = 0, + + /// A characters saved state had multiple customization values changed. + EntireCustomize = 1, + + /// A characters saved state had a customization value changed. + Customize = 2, + + /// A characters saved state had an equipment piece changed. + Equip = 3, + + /// A characters saved state had its weapons changed. + Weapon = 4, + + /// A characters saved state had a stain changed. + Stains = 5, + + /// A characters saved state had a crest visibility changed. + Crest = 6, + + /// A characters saved state had its customize parameter changed. + Parameter = 7, + + /// A characters saved state had a material color table value changed. + MaterialValue = 8, + + /// A characters saved state had a design applied. This means everything may have changed. + Design = 9, + + /// A characters saved state had its state reset to its game values. + Reset = 10, + + /// A characters saved state had a meta toggle changed. + Other = 11, + + /// A characters state was reapplied. Data is null. + Reapply = 12, + + /// A characters saved state had a bonus item changed. + BonusItem = 13, +} diff --git a/Glamourer.Api/Enums/StateFinalizationType.cs b/Glamourer.Api/Enums/StateFinalizationType.cs new file mode 100644 index 0000000..70c4eb7 --- /dev/null +++ b/Glamourer.Api/Enums/StateFinalizationType.cs @@ -0,0 +1,36 @@ +namespace Glamourer.Api.Enums; + +/// What type of Glamourer process was performed on the actors state to update it. +public enum StateFinalizationType +{ + /// A characters saved state had the model id altered. + ModelChange = 0, + + /// A singular Design was applied to an actors state. + DesignApplied = 1, + + /// A characters saved state had been reset to game values. + Revert = 2, + + /// A characters saved state had only its customization data reset to game state. + RevertCustomize = 3, + + /// A characters saved state had only its equipment data reset to game state. + RevertEquipment = 4, + + /// A characters saved state had its advanced values reverted to game state. + RevertAdvanced = 5, + + /// A characters saved state was reverted to automation state on top of their game state + RevertAutomation = 6, + + /// A characters saved state had a generic reapply as a single operation. + Reapply = 7, + + /// A characters saved state had their automation state reapplied over their existing state. + ReapplyAutomation = 8, + + /// A characters save state finished applying all updated slots for game state on gearset change or initial load. + Gearset = 9, +} + diff --git a/Glamourer.Api/Glamourer.Api.csproj b/Glamourer.Api/Glamourer.Api.csproj new file mode 100644 index 0000000..7a1a14c --- /dev/null +++ b/Glamourer.Api/Glamourer.Api.csproj @@ -0,0 +1,34 @@ + + + Glamourer.Api + Glamourer + Copyright © 2025 + 2.4.1.0 + 2.4.1.0 + 2.4.1 + README.md + bin\$(Configuration)\ + + + + true + true + Glamourer.Api + Ottermandias + https://github.com/Ottermandias/Glamourer + Auxiliary functions for Glamourers external API. + MIT + + + + false + + + + 1591 + + + + + + diff --git a/Glamourer.Api/Glamourer.Api.csproj.DotSettings b/Glamourer.Api/Glamourer.Api.csproj.DotSettings new file mode 100644 index 0000000..7d7508c --- /dev/null +++ b/Glamourer.Api/Glamourer.Api.csproj.DotSettings @@ -0,0 +1,2 @@ + + True \ No newline at end of file diff --git a/Glamourer.Api/GlobalUsings.cs b/Glamourer.Api/GlobalUsings.cs new file mode 100644 index 0000000..850275e --- /dev/null +++ b/Glamourer.Api/GlobalUsings.cs @@ -0,0 +1,4 @@ +// Global using directives + +global using System; +global using System.Collections.Generic; diff --git a/Glamourer.Api/Helpers/ActionSubscriber.cs b/Glamourer.Api/Helpers/ActionSubscriber.cs new file mode 100644 index 0000000..d6edcb2 --- /dev/null +++ b/Glamourer.Api/Helpers/ActionSubscriber.cs @@ -0,0 +1,114 @@ +using Dalamud.Plugin; +using Dalamud.Plugin.Ipc; + +namespace Glamourer.Api.Helpers; + +/// +/// Specialized subscriber only allowing to invoke actions. +/// +public class ActionSubscriber +{ + private readonly ICallGateSubscriber? _subscriber; + + /// Whether the subscriber could successfully be created. + public bool Valid + => _subscriber != null; + + protected ActionSubscriber(IDalamudPluginInterface pi, string label) + { + try + { + _subscriber = pi.GetIpcSubscriber(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// Invoke the action. See the source of the subscriber for details. + protected void Invoke() + => _subscriber?.InvokeAction(); +} + +/// +public class ActionSubscriber +{ + private readonly ICallGateSubscriber? _subscriber; + + /// Whether the subscriber could successfully be created. + public bool Valid + => _subscriber != null; + + protected ActionSubscriber(IDalamudPluginInterface pi, string label) + { + try + { + _subscriber = pi.GetIpcSubscriber(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// Invoke the action. See the source of the subscriber for details. + protected void Invoke(T1 a) + => _subscriber?.InvokeAction(a); +} + +/// +public class ActionSubscriber +{ + private readonly ICallGateSubscriber? _subscriber; + + /// + public bool Valid + => _subscriber != null; + + protected ActionSubscriber(IDalamudPluginInterface pi, string label) + { + try + { + _subscriber = pi.GetIpcSubscriber(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + protected void Invoke(T1 a, T2 b) + => _subscriber?.InvokeAction(a, b); +} + +/// +public class ActionSubscriber +{ + private readonly ICallGateSubscriber? _subscriber; + + /// + public bool Valid + => _subscriber != null; + + protected ActionSubscriber(IDalamudPluginInterface pi, string label) + { + try + { + _subscriber = pi.GetIpcSubscriber(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + protected void Invoke(T1 a, T2 b, T3 c) + => _subscriber?.InvokeAction(a, b, c); +} diff --git a/Glamourer.Api/Helpers/EventProvider.cs b/Glamourer.Api/Helpers/EventProvider.cs new file mode 100644 index 0000000..1ce3f81 --- /dev/null +++ b/Glamourer.Api/Helpers/EventProvider.cs @@ -0,0 +1,234 @@ +using Dalamud.Plugin; +using Dalamud.Plugin.Ipc; +using Dalamud.Plugin.Services; + +namespace Glamourer.Api.Helpers; + +/// +/// Specialized disposable Provider for Events. +/// Will execute the unsubscriber action on dispose if any is provided. +/// Can only be invoked and disposed. +/// +public sealed class EventProvider : IDisposable +{ + private readonly IPluginLog _log; + private ICallGateProvider? _provider; + private Delegate? _unsubscriber; + + public EventProvider(IDalamudPluginInterface pi, string label, (Action Add, Action Del)? subscribe = null) + { + _unsubscriber = null; + _log = PluginLogHelper.GetLog(pi); + try + { + _provider = pi.GetIpcProvider(label); + subscribe?.Add(Invoke); + _unsubscriber = subscribe?.Del; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + } + + public EventProvider(IDalamudPluginInterface pi, string label, Action add, Action del) + { + _unsubscriber = null; + _log = PluginLogHelper.GetLog(pi); + try + { + _provider = pi.GetIpcProvider(label); + add(this); + _unsubscriber = del; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + } + + /// Invoke the event. + public void Invoke() + { + try + { + _provider?.SendMessage(); + } + catch (Exception e) + { + _log.Error($"Exception thrown on IPC event:\n{e}"); + } + } + + public void Dispose() + { + switch (_unsubscriber) + { + case Action a: + a(Invoke); + break; + case Action b: + b(this); + break; + } + + _unsubscriber = null; + _provider = null; + GC.SuppressFinalize(this); + } + + ~EventProvider() + => Dispose(); +} + +/// +public sealed class EventProvider : IDisposable +{ + private readonly IPluginLog _log; + private ICallGateProvider? _provider; + private Delegate? _unsubscriber; + + public EventProvider(IDalamudPluginInterface pi, string label, (Action> Add, Action> Del)? subscribe = null) + { + _unsubscriber = null; + _log = PluginLogHelper.GetLog(pi); + try + { + _provider = pi.GetIpcProvider(label); + subscribe?.Add(Invoke); + _unsubscriber = subscribe?.Del; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + } + + public EventProvider(IDalamudPluginInterface pi, string label, Action> add, Action> del) + { + _unsubscriber = null; + _log = PluginLogHelper.GetLog(pi); + try + { + _provider = pi.GetIpcProvider(label); + add(this); + _unsubscriber = del; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + } + + /// + public void Invoke(T1 a) + { + try + { + _provider?.SendMessage(a); + } + catch (Exception e) + { + _log.Error($"Exception thrown on IPC event:\n{e}"); + } + } + + public void Dispose() + { + switch (_unsubscriber) + { + case Action> a: + a(Invoke); + break; + case Action> b: + b(this); + break; + } + + _unsubscriber = null; + _provider = null; + GC.SuppressFinalize(this); + } + + ~EventProvider() + => Dispose(); +} + +/// +public sealed class EventProvider : IDisposable +{ + private readonly IPluginLog _log; + private ICallGateProvider? _provider; + private Delegate? _unsubscriber; + + public EventProvider(IDalamudPluginInterface pi, string label, (Action> Add, Action> Del)? subscribe = null) + { + _unsubscriber = null; + _log = PluginLogHelper.GetLog(pi); + try + { + _provider = pi.GetIpcProvider(label); + subscribe?.Add(Invoke); + _unsubscriber = subscribe?.Del; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + } + + public EventProvider(IDalamudPluginInterface pi, string label, Action> add, Action> del) + { + _unsubscriber = null; + _log = PluginLogHelper.GetLog(pi); + try + { + _provider = pi.GetIpcProvider(label); + add(this); + _unsubscriber = del; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + } + + /// + public void Invoke(T1 a, T2 b) + { + try + { + _provider?.SendMessage(a, b); + } + catch (Exception e) + { + _log.Error($"Exception thrown on IPC event:\n{e}"); + } + } + + public void Dispose() + { + switch (_unsubscriber) + { + case Action> a: + a(Invoke); + break; + case Action> b: + b(this); + break; + } + + _unsubscriber = null; + _provider = null; + GC.SuppressFinalize(this); + } + + ~EventProvider() + => Dispose(); +} diff --git a/Glamourer.Api/Helpers/EventSubscriber.cs b/Glamourer.Api/Helpers/EventSubscriber.cs new file mode 100644 index 0000000..f91cc91 --- /dev/null +++ b/Glamourer.Api/Helpers/EventSubscriber.cs @@ -0,0 +1,394 @@ +using Dalamud.Plugin; +using Dalamud.Plugin.Ipc; +using Dalamud.Plugin.Services; + +namespace Glamourer.Api.Helpers; + +/// +/// Specialized disposable Subscriber for Events. +/// Subscriptions are wrapped to be individually exception-safe. +/// Can be enabled and disabled. +/// +public sealed class EventSubscriber : IDisposable +{ + private readonly string _label; + private readonly IPluginLog _log; + private readonly Dictionary _delegates = new(); + private ICallGateSubscriber? _subscriber; + private bool _disabled; + + public EventSubscriber(IDalamudPluginInterface pi, string label, params Action[] actions) + { + _label = label; + _log = PluginLogHelper.GetLog(pi); + try + { + _subscriber = pi.GetIpcSubscriber(label); + foreach (var action in actions) + Event += action; + + _disabled = false; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + /// Enable all currently subscribed actions registered with this EventSubscriber. + /// Does nothing if it is already enabled. + /// + public void Enable() + { + if (_disabled && _subscriber != null) + { + foreach (var action in _delegates.Values) + _subscriber.Subscribe(action); + + _disabled = false; + } + } + + /// + /// Disable all subscribed actions registered with this EventSubscriber. + /// Does nothing if it is already disabled. + /// Does not forget the actions, only disables them. + /// + public void Disable() + { + if (!_disabled) + { + if (_subscriber != null) + foreach (var action in _delegates.Values) + _subscriber.Unsubscribe(action); + + _disabled = true; + } + } + + /// + /// Add or remove an action to the IPC event, if it is valid. + /// + public event Action Event + { + add + { + if (_subscriber != null && !_delegates.ContainsKey(value)) + { + void Action() + { + try + { + value(); + } + catch (Exception e) + { + _log.Error($"Exception invoking IPC event {_label}:\n{e}"); + } + } + + if (_delegates.TryAdd(value, Action) && !_disabled) + _subscriber.Subscribe(Action); + } + } + remove + { + if (_subscriber != null && _delegates.Remove(value, out var action)) + _subscriber.Unsubscribe(action); + } + } + + public void Dispose() + { + Disable(); + _subscriber = null; + _delegates.Clear(); + } + + ~EventSubscriber() + => Dispose(); +} + +/// +public sealed class EventSubscriber : IDisposable +{ + private readonly string _label; + private readonly IPluginLog _log; + private readonly Dictionary, Action> _delegates = new(); + private ICallGateSubscriber? _subscriber; + private bool _disabled; + + public EventSubscriber(IDalamudPluginInterface pi, string label, params Action[] actions) + { + _label = label; + _log = PluginLogHelper.GetLog(pi); + try + { + _subscriber = pi.GetIpcSubscriber(label); + foreach (var action in actions) + Event += action; + + _disabled = false; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + public void Enable() + { + if (_disabled && _subscriber != null) + { + foreach (var action in _delegates.Values) + _subscriber.Subscribe(action); + + _disabled = false; + } + } + + /// + public void Disable() + { + if (!_disabled) + { + if (_subscriber != null) + foreach (var action in _delegates.Values) + _subscriber.Unsubscribe(action); + + _disabled = true; + } + } + + /// + public event Action Event + { + add + { + if (_subscriber != null && !_delegates.ContainsKey(value)) + { + void Action(T1 a) + { + try + { + value(a); + } + catch (Exception e) + { + _log.Error($"Exception invoking IPC event {_label}:\n{e}"); + } + } + + if (_delegates.TryAdd(value, Action) && !_disabled) + _subscriber.Subscribe(Action); + } + } + remove + { + if (_subscriber != null && _delegates.Remove(value, out var action)) + _subscriber.Unsubscribe(action); + } + } + + public void Dispose() + { + Disable(); + _subscriber = null; + _delegates.Clear(); + } + + ~EventSubscriber() + => Dispose(); +} + +/// +public sealed class EventSubscriber : IDisposable +{ + private readonly string _label; + private readonly IPluginLog _log; + private readonly Dictionary, Action> _delegates = new(); + private ICallGateSubscriber? _subscriber; + private bool _disabled; + + public EventSubscriber(IDalamudPluginInterface pi, string label, params Action[] actions) + { + _label = label; + _log = PluginLogHelper.GetLog(pi); + try + { + _subscriber = pi.GetIpcSubscriber(label); + foreach (var action in actions) + Event += action; + + _disabled = false; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + public void Enable() + { + if (_disabled && _subscriber != null) + { + foreach (var action in _delegates.Values) + _subscriber.Subscribe(action); + + _disabled = false; + } + } + + /// + public void Disable() + { + if (!_disabled) + { + if (_subscriber != null) + foreach (var action in _delegates.Values) + _subscriber.Unsubscribe(action); + + _disabled = true; + } + } + + /// + public event Action Event + { + add + { + if (_subscriber != null && !_delegates.ContainsKey(value)) + { + void Action(T1 a, T2 b) + { + try + { + value(a, b); + } + catch (Exception e) + { + _log.Error($"Exception invoking IPC event {_label}:\n{e}"); + } + } + + if (_delegates.TryAdd(value, Action) && !_disabled) + _subscriber.Subscribe(Action); + } + } + remove + { + if (_subscriber != null && _delegates.Remove(value, out var action)) + _subscriber.Unsubscribe(action); + } + } + + public void Dispose() + { + Disable(); + _subscriber = null; + _delegates.Clear(); + } + + ~EventSubscriber() + => Dispose(); +} + +/// +public sealed class EventSubscriber : IDisposable +{ + private readonly string _label; + private readonly IPluginLog _log; + private readonly Dictionary, Action> _delegates = new(); + private ICallGateSubscriber? _subscriber; + private bool _disabled; + + public EventSubscriber(IDalamudPluginInterface pi, string label, params Action[] actions) + { + _label = label; + _log = PluginLogHelper.GetLog(pi); + try + { + _subscriber = pi.GetIpcSubscriber(label); + foreach (var action in actions) + Event += action; + + _disabled = false; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + public void Enable() + { + if (_disabled && _subscriber != null) + { + foreach (var action in _delegates.Values) + _subscriber.Subscribe(action); + + _disabled = false; + } + } + + /// + public void Disable() + { + if (!_disabled) + { + if (_subscriber != null) + foreach (var action in _delegates.Values) + _subscriber.Unsubscribe(action); + + _disabled = true; + } + } + + /// + public event Action Event + { + add + { + if (_subscriber != null && !_delegates.ContainsKey(value)) + { + void Action(T1 a, T2 b, T3 c) + { + try + { + value(a, b, c); + } + catch (Exception e) + { + _log.Error($"Exception invoking IPC event {_label}:\n{e}"); + } + } + + if (_delegates.TryAdd(value, Action) && !_disabled) + _subscriber.Subscribe(Action); + } + } + remove + { + if (_subscriber != null && _delegates.Remove(value, out var action)) + _subscriber.Unsubscribe(action); + } + } + + public void Dispose() + { + Disable(); + _subscriber = null; + _delegates.Clear(); + } + + ~EventSubscriber() + => Dispose(); +} diff --git a/Glamourer.Api/Helpers/FuncProvider.cs b/Glamourer.Api/Helpers/FuncProvider.cs new file mode 100644 index 0000000..572f913 --- /dev/null +++ b/Glamourer.Api/Helpers/FuncProvider.cs @@ -0,0 +1,224 @@ +using Dalamud.Plugin; +using Dalamud.Plugin.Ipc; + +namespace Glamourer.Api.Helpers; + +/// +/// Specialized disposable Provider for Funcs. +/// +public sealed class FuncProvider : IDisposable +{ + private ICallGateProvider? _provider; + + public FuncProvider(IDalamudPluginInterface pi, string label, Func func) + { + try + { + _provider = pi.GetIpcProvider(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + + _provider?.RegisterFunc(func); + } + + public void Dispose() + { + _provider?.UnregisterFunc(); + _provider = null; + GC.SuppressFinalize(this); + } + + ~FuncProvider() + => Dispose(); +} + +/// +public sealed class FuncProvider : IDisposable +{ + private ICallGateProvider? _provider; + + public FuncProvider(IDalamudPluginInterface pi, string label, Func func) + { + try + { + _provider = pi.GetIpcProvider(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + + _provider?.RegisterFunc(func); + } + + public void Dispose() + { + _provider?.UnregisterFunc(); + _provider = null; + GC.SuppressFinalize(this); + } + + ~FuncProvider() + => Dispose(); +} + +/// +public sealed class FuncProvider : IDisposable +{ + private ICallGateProvider? _provider; + + public FuncProvider(IDalamudPluginInterface pi, string label, Func func) + { + try + { + _provider = pi.GetIpcProvider(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + + _provider?.RegisterFunc(func); + } + + public void Dispose() + { + _provider?.UnregisterFunc(); + _provider = null; + GC.SuppressFinalize(this); + } + + ~FuncProvider() + => Dispose(); +} + +/// +public sealed class FuncProvider : IDisposable +{ + private ICallGateProvider? _provider; + + public FuncProvider(IDalamudPluginInterface pi, string label, Func func) + { + try + { + _provider = pi.GetIpcProvider(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + + _provider?.RegisterFunc(func); + } + + public void Dispose() + { + _provider?.UnregisterFunc(); + _provider = null; + GC.SuppressFinalize(this); + } + + ~FuncProvider() + => Dispose(); +} + +/// +public sealed class FuncProvider : IDisposable +{ + private ICallGateProvider? _provider; + + public FuncProvider(IDalamudPluginInterface pi, string label, Func func) + { + try + { + _provider = pi.GetIpcProvider(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + + _provider?.RegisterFunc(func); + } + + public void Dispose() + { + _provider?.UnregisterFunc(); + _provider = null; + GC.SuppressFinalize(this); + } + + ~FuncProvider() + => Dispose(); +} + +/// +public sealed class FuncProvider : IDisposable +{ + private ICallGateProvider? _provider; + + public FuncProvider(IDalamudPluginInterface pi, string label, Func func) + { + try + { + _provider = pi.GetIpcProvider(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + + _provider?.RegisterFunc(func); + } + + public void Dispose() + { + _provider?.UnregisterFunc(); + _provider = null; + GC.SuppressFinalize(this); + } + + ~FuncProvider() + => Dispose(); +} + + +/// +public sealed class FuncProvider : IDisposable +{ + private ICallGateProvider? _provider; + + public FuncProvider(IDalamudPluginInterface pi, string label, Func func) + { + try + { + _provider = pi.GetIpcProvider(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + + _provider?.RegisterFunc(func); + } + + public void Dispose() + { + _provider?.UnregisterFunc(); + _provider = null; + GC.SuppressFinalize(this); + } + + ~FuncProvider() + => Dispose(); +} diff --git a/Glamourer.Api/Helpers/FuncSubscriber.cs b/Glamourer.Api/Helpers/FuncSubscriber.cs new file mode 100644 index 0000000..1d33601 --- /dev/null +++ b/Glamourer.Api/Helpers/FuncSubscriber.cs @@ -0,0 +1,217 @@ +using Dalamud.Plugin; +using Dalamud.Plugin.Ipc; +using Dalamud.Plugin.Ipc.Exceptions; + +namespace Glamourer.Api.Helpers; + +/// +/// Specialized subscriber only allowing to invoke functions with a return. +/// +public class FuncSubscriber +{ + private readonly string _label; + private readonly ICallGateSubscriber? _subscriber; + + /// Whether the subscriber could successfully be created. + public bool Valid + => _subscriber != null; + + /// + protected FuncSubscriber(IDalamudPluginInterface pi, string label) + { + _label = label; + try + { + _subscriber = pi.GetIpcSubscriber(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// Invoke the function. See the source of the subscriber for details. + protected TRet Invoke() + => _subscriber != null ? _subscriber.InvokeFunc() : throw new IpcNotReadyError(_label); +} + +/// +public class FuncSubscriber +{ + private readonly string _label; + private readonly ICallGateSubscriber? _subscriber; + + /// + public bool Valid + => _subscriber != null; + + /// + protected FuncSubscriber(IDalamudPluginInterface pi, string label) + { + _label = label; + try + { + _subscriber = pi.GetIpcSubscriber(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + protected TRet Invoke(T1 a) + => _subscriber != null ? _subscriber.InvokeFunc(a) : throw new IpcNotReadyError(_label); +} + +/// +public class FuncSubscriber +{ + private readonly string _label; + private readonly ICallGateSubscriber? _subscriber; + + /// + public bool Valid + => _subscriber != null; + + /// + protected FuncSubscriber(IDalamudPluginInterface pi, string label) + { + _label = label; + try + { + _subscriber = pi.GetIpcSubscriber(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + protected TRet Invoke(T1 a, T2 b) + => _subscriber != null ? _subscriber.InvokeFunc(a, b) : throw new IpcNotReadyError(_label); +} + +/// +public class FuncSubscriber +{ + private readonly string _label; + private readonly ICallGateSubscriber? _subscriber; + + /// + public bool Valid + => _subscriber != null; + + /// + protected FuncSubscriber(IDalamudPluginInterface pi, string label) + { + _label = label; + try + { + _subscriber = pi.GetIpcSubscriber(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + protected TRet Invoke(T1 a, T2 b, T3 c) + => _subscriber != null ? _subscriber.InvokeFunc(a, b, c) : throw new IpcNotReadyError(_label); +} + +/// +public class FuncSubscriber +{ + private readonly string _label; + private readonly ICallGateSubscriber? _subscriber; + + /// + public bool Valid + => _subscriber != null; + + /// + protected FuncSubscriber(IDalamudPluginInterface pi, string label) + { + _label = label; + try + { + _subscriber = pi.GetIpcSubscriber(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + protected TRet Invoke(T1 a, T2 b, T3 c, T4 d) + => _subscriber != null ? _subscriber.InvokeFunc(a, b, c, d) : throw new IpcNotReadyError(_label); +} + +/// +public class FuncSubscriber +{ + private readonly string _label; + private readonly ICallGateSubscriber? _subscriber; + + /// + public bool Valid + => _subscriber != null; + + /// + protected FuncSubscriber(IDalamudPluginInterface pi, string label) + { + _label = label; + try + { + _subscriber = pi.GetIpcSubscriber(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + protected TRet Invoke(T1 a, T2 b, T3 c, T4 d, T5 e) + => _subscriber != null ? _subscriber.InvokeFunc(a, b, c, d, e) : throw new IpcNotReadyError(_label); +} + +/// +public class FuncSubscriber +{ + private readonly string _label; + private readonly ICallGateSubscriber? _subscriber; + + /// + public bool Valid + => _subscriber != null; + + /// + protected FuncSubscriber(IDalamudPluginInterface pi, string label) + { + _label = label; + try + { + _subscriber = pi.GetIpcSubscriber(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + protected TRet Invoke(T1 a, T2 b, T3 c, T4 d, T5 e, T6 f) + => _subscriber != null ? _subscriber.InvokeFunc(a, b, c, d, e, f) : throw new IpcNotReadyError(_label); +} diff --git a/Glamourer.Api/Helpers/PluginLogHelper.cs b/Glamourer.Api/Helpers/PluginLogHelper.cs new file mode 100644 index 0000000..ca9f298 --- /dev/null +++ b/Glamourer.Api/Helpers/PluginLogHelper.cs @@ -0,0 +1,26 @@ +using Dalamud.IoC; +using Dalamud.Plugin; +using Dalamud.Plugin.Services; + +namespace Glamourer.Api.Helpers; + +internal class PluginLogHelper +{ + [PluginService] + private static IPluginLog? _log { get; set; } + + private PluginLogHelper(IDalamudPluginInterface pi) + => pi.Inject(this); + + public static void WriteError(IDalamudPluginInterface pi, string errorMessage) + => GetLog(pi).Error(errorMessage); + + public static IPluginLog GetLog(IDalamudPluginInterface pi) + { + if (_log != null) + return _log; + + _ = new PluginLogHelper(pi); + return _log!; + } +} diff --git a/Glamourer.Api/IpcSubscribers/Designs.cs b/Glamourer.Api/IpcSubscribers/Designs.cs new file mode 100644 index 0000000..69d4191 --- /dev/null +++ b/Glamourer.Api/IpcSubscribers/Designs.cs @@ -0,0 +1,52 @@ +using Dalamud.Plugin; +using Glamourer.Api.Api; +using Glamourer.Api.Enums; +using Glamourer.Api.Helpers; + +namespace Glamourer.Api.IpcSubscribers; + +/// +public sealed class GetDesignList(IDalamudPluginInterface pi) + : FuncSubscriber>(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(GetDesignList)}.V2"; + + /// + public new Dictionary Invoke() + => base.Invoke(); + + /// Create a provider. + public static FuncProvider> Provider(IDalamudPluginInterface pi, IGlamourerApiDesigns api) + => new(pi, Label, api.GetDesignList); +} + +/// +public sealed class ApplyDesign(IDalamudPluginInterface pi) : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(ApplyDesign)}"; + + /// + public GlamourerApiEc Invoke(Guid designId, int objectIndex, uint key = 0, ApplyFlag flags = ApplyFlagEx.DesignDefault) + => (GlamourerApiEc)Invoke(designId, objectIndex, key, (ulong)flags); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IGlamourerApiDesigns api) + => new(pi, Label, (a, b, c, d) => (int)api.ApplyDesign(a, b, c, (ApplyFlag)d)); +} + +/// +public sealed class ApplyDesignName(IDalamudPluginInterface pi) : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(ApplyDesignName)}"; + + /// + public GlamourerApiEc Invoke(Guid designId, string objectName, uint key = 0, ApplyFlag flags = ApplyFlagEx.DesignDefault) + => (GlamourerApiEc)Invoke(designId, objectName, key, (ulong)flags); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IGlamourerApiDesigns api) + => new(pi, Label, (a, b, c, d) => (int)api.ApplyDesignName(a, b, c, (ApplyFlag)d)); +} diff --git a/Glamourer.Api/IpcSubscribers/Items.cs b/Glamourer.Api/IpcSubscribers/Items.cs new file mode 100644 index 0000000..f0802e9 --- /dev/null +++ b/Glamourer.Api/IpcSubscribers/Items.cs @@ -0,0 +1,110 @@ +using Dalamud.Plugin; +using Glamourer.Api.Api; +using Glamourer.Api.Enums; +using Glamourer.Api.Helpers; + +namespace Glamourer.Api.IpcSubscribers; + +/// +public sealed class SetItem(IDalamudPluginInterface pi) + : FuncSubscriber, uint, ulong, int>(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(SetItem)}.V3"; + + /// + public GlamourerApiEc Invoke(int objectIndex, ApiEquipSlot slot, ulong itemId, IReadOnlyList stain, uint key = 0, + ApplyFlag flags = ApplyFlag.Once) + => (GlamourerApiEc)Invoke(objectIndex, (byte)slot, itemId, stain, key, (ulong)flags); + + /// Create a provider. + public static FuncProvider, uint, ulong, int> Provider(IDalamudPluginInterface pi, + IGlamourerApiItems api) + => new(pi, Label, (a, b, c, d, e, f) => (int)api.SetItem(a, (ApiEquipSlot)b, c, d, e, (ApplyFlag)f)); +} + +/// +public sealed class SetItemName(IDalamudPluginInterface pi) + : FuncSubscriber, uint, ulong, int>(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(SetItemName)}.V2"; + + /// + public GlamourerApiEc Invoke(string objectName, ApiEquipSlot slot, ulong itemId, IReadOnlyList stain, uint key = 0, + ApplyFlag flags = ApplyFlag.Once) + => (GlamourerApiEc)Invoke(objectName, (byte)slot, itemId, stain, key, (ulong)flags); + + /// Create a provider. + public static FuncProvider, uint, ulong, int> Provider(IDalamudPluginInterface pi, + IGlamourerApiItems api) + => new(pi, Label, (a, b, c, d, e, f) => (int)api.SetItemName(a, (ApiEquipSlot)b, c, d, e, (ApplyFlag)f)); +} + +/// +public sealed class SetBonusItem(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(SetBonusItem)}"; + + /// + public GlamourerApiEc Invoke(int objectIndex, ApiBonusSlot slot, ulong itemId, uint key = 0, ApplyFlag flags = ApplyFlag.Once) + => (GlamourerApiEc)Invoke(objectIndex, (byte)slot, itemId, key, (ulong)flags); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IGlamourerApiItems api) + => new(pi, Label, (a, b, c, d, e) => (int)api.SetBonusItem(a, (ApiBonusSlot)b, c, d, (ApplyFlag)e)); +} + +/// +public sealed class SetBonusItemName(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(SetBonusItemName)}.V2"; + + /// + public GlamourerApiEc Invoke(string objectName, ApiBonusSlot slot, ulong itemId, uint key = 0, ApplyFlag flags = ApplyFlag.Once) + => (GlamourerApiEc)Invoke(objectName, (byte)slot, itemId, key, (ulong)flags); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IGlamourerApiItems api) + => new(pi, Label, (a, b, c, d, e) => (int)api.SetBonusItemName(a, (ApiBonusSlot)b, c, d, (ApplyFlag)e)); +} + +/// +public sealed class SetMetaState(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(SetMetaState)}"; + + /// + public GlamourerApiEc Invoke(int objectIndex, MetaFlag types, bool newValue, uint key = 0, + ApplyFlag flags = ApplyFlag.Once) + => (GlamourerApiEc)Invoke(objectIndex, (ulong)types, newValue, key, (ulong)flags); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, + IGlamourerApiItems api) + => new(pi, Label, (a, b, c, d, e) => (int)api.SetMetaState(a, (MetaFlag)b, c, d, (ApplyFlag)e)); +} + +/// +public sealed class SetMetaStateName(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(SetMetaStateName)}"; + + /// + public GlamourerApiEc Invoke(string objectName, MetaFlag types, bool newValue, uint key = 0, + ApplyFlag flags = ApplyFlag.Once) + => (GlamourerApiEc)Invoke(objectName, (ulong)types, newValue, key, (ulong)flags); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, + IGlamourerApiItems api) + => new(pi, Label, (a, b, c, d, e) => (int)api.SetMetaStateName(a, (MetaFlag)b, c, d, (ApplyFlag)e)); +} diff --git a/Glamourer.Api/IpcSubscribers/Legacy/Designs.cs b/Glamourer.Api/IpcSubscribers/Legacy/Designs.cs new file mode 100644 index 0000000..0e45eb1 --- /dev/null +++ b/Glamourer.Api/IpcSubscribers/Legacy/Designs.cs @@ -0,0 +1,52 @@ +using Dalamud.Game.ClientState.Objects.Types; +using Dalamud.Plugin; +using Glamourer.Api.Helpers; + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + +namespace Glamourer.Api.IpcSubscribers.Legacy; + +public sealed class GetDesignList(IDalamudPluginInterface pi) + : FuncSubscriber<(string Name, Guid Identifier)[]>(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(GetDesignList)}"; + + public new (string Name, Guid Identifier)[] Invoke() + => base.Invoke(); +} + +public sealed class ApplyByGuid(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(ApplyByGuid)}"; + + public new void Invoke(Guid design, string name) + => base.Invoke(design, name); +} + +public sealed class ApplyByGuidOnce(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(ApplyByGuidOnce)}"; + + public new void Invoke(Guid design, string name) + => base.Invoke(design, name); +} + +public sealed class ApplyByGuidToCharacter(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(ApplyByGuidToCharacter)}"; + + public new void Invoke(Guid design, ICharacter? character) + => base.Invoke(design, character); +} + +public sealed class ApplyByGuidOnceToCharacter(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(ApplyByGuidOnceToCharacter)}"; + + public new void Invoke(Guid design, ICharacter? character) + => base.Invoke(design, character); +} diff --git a/Glamourer.Api/IpcSubscribers/Legacy/Items.cs b/Glamourer.Api/IpcSubscribers/Legacy/Items.cs new file mode 100644 index 0000000..cf98ea4 --- /dev/null +++ b/Glamourer.Api/IpcSubscribers/Legacy/Items.cs @@ -0,0 +1,66 @@ +using Dalamud.Game.ClientState.Objects.Types; +using Dalamud.Plugin; +using Glamourer.Api.Api; +using Glamourer.Api.Enums; +using Glamourer.Api.Helpers; + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + +namespace Glamourer.Api.IpcSubscribers.Legacy; + +public sealed class SetItem(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(SetItem)}"; + + public new GlamourerApiEc Invoke(ICharacter? character, byte slot, ulong itemId, byte stainId, uint key) + => (GlamourerApiEc)base.Invoke(character, slot, itemId, stainId, key); +} + +public sealed class SetItemOnce(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(SetItemOnce)}"; + + public new GlamourerApiEc Invoke(ICharacter? character, byte slot, ulong itemId, byte stainId, uint key) + => (GlamourerApiEc)base.Invoke(character, slot, itemId, stainId, key); +} + +public sealed class SetItemByActorName(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(SetItemByActorName)}"; + + public new GlamourerApiEc Invoke(string actorName, byte slot, ulong itemId, byte stainId, uint key) + => (GlamourerApiEc)base.Invoke(actorName, slot, itemId, stainId, key); +} + +public sealed class SetItemOnceByActorName(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(SetItemOnceByActorName)}"; + + public new GlamourerApiEc Invoke(string actorName, byte slot, ulong itemId, byte stainId, uint key) + => (GlamourerApiEc)base.Invoke(actorName, slot, itemId, stainId, key); +} + +public sealed class SetItemV2(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(SetItem)}.V2"; + + public GlamourerApiEc Invoke(int objectIndex, ApiEquipSlot slot, ulong itemId, byte stain, uint key = 0, ApplyFlag flags = ApplyFlag.Once) + => (GlamourerApiEc)Invoke(objectIndex, (byte)slot, itemId, stain, key, (ulong)flags); +} + +public sealed class SetItemName(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(SetItemName)}"; + + public GlamourerApiEc Invoke(string objectName, ApiEquipSlot slot, ulong itemId, byte stain, uint key = 0, ApplyFlag flags = ApplyFlag.Once) + => (GlamourerApiEc)Invoke(objectName, (byte)slot, itemId, stain, key, (ulong)flags); + + public static FuncProvider Provider(IDalamudPluginInterface pi, IGlamourerApiItems api) + => new(pi, Label, (a, b, c, d, e, f) => (int)api.SetItemName(a, (ApiEquipSlot)b, c, [d], e, (ApplyFlag)f)); +} diff --git a/Glamourer.Api/IpcSubscribers/Legacy/PluginState.cs b/Glamourer.Api/IpcSubscribers/Legacy/PluginState.cs new file mode 100644 index 0000000..7bf8ed1 --- /dev/null +++ b/Glamourer.Api/IpcSubscribers/Legacy/PluginState.cs @@ -0,0 +1,15 @@ +using Dalamud.Plugin; +using Glamourer.Api.Helpers; + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + +namespace Glamourer.Api.IpcSubscribers.Legacy; + +public sealed class ApiVersions(IDalamudPluginInterface pi) + : FuncSubscriber<(int, int)>(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(ApiVersions)}"; + + public new (int Major, int Minor) Invoke() + => base.Invoke(); +} diff --git a/Glamourer.Api/IpcSubscribers/Legacy/State.cs b/Glamourer.Api/IpcSubscribers/Legacy/State.cs new file mode 100644 index 0000000..94be708 --- /dev/null +++ b/Glamourer.Api/IpcSubscribers/Legacy/State.cs @@ -0,0 +1,250 @@ +using Dalamud.Game.ClientState.Objects.Types; +using Dalamud.Plugin; +using Glamourer.Api.Helpers; + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + +namespace Glamourer.Api.IpcSubscribers.Legacy; + +public sealed class Revert(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(Revert)}"; + + public new void Invoke(string characterName) + => base.Invoke(characterName); +} + +public sealed class RevertCharacter(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(RevertCharacter)}"; + + public new void Invoke(ICharacter? character) + => base.Invoke(character); +} + +public sealed class RevertLock(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(RevertLock)}"; + + public new void Invoke(string characterName, uint key) + => base.Invoke(characterName, key); +} + +public sealed class RevertCharacterLock(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(RevertCharacterLock)}"; + + public new void Invoke(ICharacter? character, uint key) + => base.Invoke(character, key); +} + +public sealed class RevertToAutomation(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(RevertToAutomation)}"; + + public new bool Invoke(string characterName, uint key) + => base.Invoke(characterName, key); +} + +public sealed class RevertToAutomationCharacter(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(RevertToAutomationCharacter)}"; + + public new bool Invoke(ICharacter? character, uint key) + => base.Invoke(character, key); +} + +public sealed class Unlock(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(Unlock)}"; + + public new bool Invoke(ICharacter? character, uint key) + => base.Invoke(character, key); +} + +public sealed class UnlockName(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(UnlockName)}"; + + public new bool Invoke(string characterName, uint key) + => base.Invoke(characterName, key); +} + +public static class StateChanged +{ + public const string Label = $"Penumbra.{nameof(StateChanged)}"; + + public static EventSubscriber> Subscriber(IDalamudPluginInterface pi, + params Action>[] actions) + => new(pi, Label, actions); +} + +public sealed class GetAllCustomization(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(GetAllCustomization)}"; + + public new string? Invoke(string characterName) + => base.Invoke(characterName); +} + +public sealed class GetAllCustomizationFromCharacter(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(GetAllCustomizationFromCharacter)}"; + + public new string? Invoke(ICharacter? character) + => base.Invoke(character); +} + +public sealed class GetAllCustomizationLocked(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(GetAllCustomizationLocked)}"; + + public new string? Invoke(string characterName, uint key) + => base.Invoke(characterName, key); +} + +public sealed class GetAllCustomizationFromLockedCharacter(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(GetAllCustomizationFromLockedCharacter)}"; + + public new string? Invoke(ICharacter? character, uint key) + => base.Invoke(character, key); +} + +public sealed class ApplyAll(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(ApplyAll)}"; + + public new void Invoke(string characterName, string stateBase64) + => base.Invoke(characterName, stateBase64); +} + +public sealed class ApplyAllOnce(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(ApplyAllOnce)}"; + + public new void Invoke(string characterName, string stateBase64) + => base.Invoke(characterName, stateBase64); +} + +public sealed class ApplyAllToCharacter(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(ApplyAllToCharacter)}"; + + public new void Invoke(ICharacter? character, string stateBase64) + => base.Invoke(character, stateBase64); +} + +public sealed class ApplyAllOnceToCharacter(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(ApplyAllOnceToCharacter)}"; + + public new void Invoke(ICharacter? character, string stateBase64) + => base.Invoke(character, stateBase64); +} + +public sealed class ApplyOnlyEquipment(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(ApplyOnlyEquipment)}"; + + public new void Invoke(string characterName, string stateBase64) + => base.Invoke(characterName, stateBase64); +} + +public sealed class ApplyOnlyEquipmentToCharacter(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(ApplyOnlyEquipmentToCharacter)}"; + + public new void Invoke(ICharacter? character, string stateBase64) + => base.Invoke(character, stateBase64); +} + +public sealed class ApplyOnlyCustomization(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(ApplyOnlyCustomization)}"; + + public new void Invoke(string characterName, string stateBase64) + => base.Invoke(characterName, stateBase64); +} + +public sealed class ApplyOnlyCustomizationToCharacter(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(ApplyOnlyCustomizationToCharacter)}"; + + public new void Invoke(ICharacter? character, string stateBase64) + => base.Invoke(character, stateBase64); +} + +public sealed class ApplyAllLock(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(ApplyAllLock)}"; + + public new void Invoke(string characterName, string stateBase64, uint key) + => base.Invoke(characterName, stateBase64, key); +} + +public sealed class ApplyAllToCharacterLock(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(ApplyAllToCharacterLock)}"; + + public new void Invoke(ICharacter? character, string stateBase64, uint key) + => base.Invoke(character, stateBase64, key); +} + +public sealed class ApplyOnlyEquipmentLock(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(ApplyOnlyEquipmentLock)}"; + + public new void Invoke(string characterName, string stateBase64, uint key) + => base.Invoke(characterName, stateBase64, key); +} + +public sealed class ApplyOnlyEquipmentToCharacterLock(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(ApplyOnlyEquipmentToCharacterLock)}"; + + public new void Invoke(ICharacter? character, string stateBase64, uint key) + => base.Invoke(character, stateBase64, key); +} + +public sealed class ApplyOnlyCustomizationLock(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(ApplyOnlyCustomizationLock)}"; + + public new void Invoke(string characterName, string stateBase64, uint key) + => base.Invoke(characterName, stateBase64, key); +} + +public sealed class ApplyOnlyCustomizationToCharacterLock(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Glamourer.{nameof(ApplyOnlyCustomizationToCharacterLock)}"; + + public new void Invoke(ICharacter? character, string stateBase64, uint key) + => base.Invoke(character, stateBase64, key); +} diff --git a/Glamourer.Api/IpcSubscribers/PluginState.cs b/Glamourer.Api/IpcSubscribers/PluginState.cs new file mode 100644 index 0000000..cb44e72 --- /dev/null +++ b/Glamourer.Api/IpcSubscribers/PluginState.cs @@ -0,0 +1,51 @@ +using Dalamud.Plugin; +using Glamourer.Api.Api; +using Glamourer.Api.Helpers; + +namespace Glamourer.Api.IpcSubscribers; + +/// +public sealed class ApiVersion(IDalamudPluginInterface pi) + : FuncSubscriber<(int, int)>(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(ApiVersion)}.V2"; + + /// + public new (int Major, int Minor) Invoke() + => base.Invoke(); + + /// Create a provider. + public static FuncProvider<(int, int)> Provider(IDalamudPluginInterface pi, IGlamourerApiBase api) + => new(pi, Label, () => api.ApiVersion); +} + +/// Triggered when the Glamourer API is initialized and ready. +public static class Initialized +{ + /// The label. + public const string Label = $"Glamourer.{nameof(Initialized)}"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi) + => new(pi, Label); +} + +/// Triggered when the Glamourer API is fully disposed and unavailable. +public static class Disposed +{ + /// The label. + public const string Label = $"Glamourer.{nameof(Disposed)}"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi) + => new(pi, Label); +} diff --git a/Glamourer.Api/IpcSubscribers/State.cs b/Glamourer.Api/IpcSubscribers/State.cs new file mode 100644 index 0000000..a9468aa --- /dev/null +++ b/Glamourer.Api/IpcSubscribers/State.cs @@ -0,0 +1,311 @@ +using Dalamud.Plugin; +using Glamourer.Api.Api; +using Glamourer.Api.Enums; +using Glamourer.Api.Helpers; +using Newtonsoft.Json.Linq; + +namespace Glamourer.Api.IpcSubscribers; + +/// +public sealed class GetState(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(GetState)}"; + + /// + public new (GlamourerApiEc, JObject?) Invoke(int objectIndex, uint key = 0) + { + var (ec, data) = base.Invoke(objectIndex, key); + return ((GlamourerApiEc)ec, data); + } + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IGlamourerApiState api) + => new(pi, Label, (a, b) => + { + var (ec, data) = api.GetState(a, b); + return ((int)ec, data); + }); +} + +/// +public sealed class GetStateName(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(GetStateName)}"; + + /// + public new (GlamourerApiEc, JObject?) Invoke(string objectName, uint key = 0) + { + var (ec, data) = base.Invoke(objectName, key); + return ((GlamourerApiEc)ec, data); + } + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IGlamourerApiState api) + => new(pi, Label, (i, k) => + { + var (ec, data) = api.GetStateName(i, k); + return ((int)ec, data); + }); +} + +/// +public sealed class GetStateBase64(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(GetStateBase64)}"; + + /// + public new (GlamourerApiEc, string?) Invoke(int objectIndex, uint key = 0) + { + var (ec, data) = base.Invoke(objectIndex, key); + return ((GlamourerApiEc)ec, data); + } + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IGlamourerApiState api) + => new(pi, Label, (a, b) => + { + var (ec, data) = api.GetStateBase64(a, b); + return ((int)ec, data); + }); +} + +/// +public sealed class GetStateBase64Name(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(GetStateBase64Name)}"; + + /// + public new (GlamourerApiEc, string?) Invoke(string objectName, uint key = 0) + { + var (ec, data) = base.Invoke(objectName, key); + return ((GlamourerApiEc)ec, data); + } + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IGlamourerApiState api) + => new(pi, Label, (i, k) => + { + var (ec, data) = api.GetStateBase64Name(i, k); + return ((int)ec, data); + }); +} + +/// +public sealed class ApplyState(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(ApplyState)}"; + + /// + public GlamourerApiEc Invoke(JObject state, int objectIndex, uint key = 0, ApplyFlag flags = ApplyFlagEx.StateDefault) + => (GlamourerApiEc)Invoke(state, objectIndex, key, (ulong)flags); + + /// + public GlamourerApiEc Invoke(string base64State, int objectIndex, uint key = 0, ApplyFlag flags = ApplyFlagEx.StateDefault) + => (GlamourerApiEc)Invoke(base64State, objectIndex, key, (ulong)flags); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IGlamourerApiState api) + => new(pi, Label, (a, b, c, d) => (int)api.ApplyState(a, b, c, (ApplyFlag)d)); +} + +/// +public sealed class ApplyStateName(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(ApplyStateName)}"; + + /// + public GlamourerApiEc Invoke(JObject state, string objectName, uint key = 0, ApplyFlag flags = ApplyFlagEx.StateDefault) + => (GlamourerApiEc)Invoke(state, objectName, key, (ulong)flags); + + /// + public GlamourerApiEc Invoke(string base64State, string objectName, uint key = 0, ApplyFlag flags = ApplyFlagEx.StateDefault) + => (GlamourerApiEc)Invoke(base64State, objectName, key, (ulong)flags); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IGlamourerApiState api) + => new(pi, Label, (a, b, c, d) => (int)api.ApplyStateName(a, b, c, (ApplyFlag)d)); +} + +/// +public sealed class RevertState(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(RevertState)}"; + + /// + public GlamourerApiEc Invoke(int objectIndex, uint key = 0, ApplyFlag flags = ApplyFlagEx.RevertDefault) + => (GlamourerApiEc)Invoke(objectIndex, key, (ulong)flags); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IGlamourerApiState api) + => new(pi, Label, (a, b, c) => (int)api.RevertState(a, b, (ApplyFlag)c)); +} + +/// +public sealed class RevertStateName(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(RevertStateName)}"; + + /// + public GlamourerApiEc Invoke(string objectName, uint key = 0, ApplyFlag flags = ApplyFlagEx.RevertDefault) + => (GlamourerApiEc)Invoke(objectName, key, (ulong)flags); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IGlamourerApiState api) + => new(pi, Label, (a, b, c) => (int)api.RevertStateName(a, b, (ApplyFlag)c)); +} + +/// +public sealed class UnlockState(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(UnlockState)}"; + + /// + public new GlamourerApiEc Invoke(int objectIndex, uint key = 0) + => (GlamourerApiEc)base.Invoke(objectIndex, key); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IGlamourerApiState api) + => new(pi, Label, (a, b) => (int)api.UnlockState(a, b)); +} + +/// +public sealed class UnlockStateName(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(UnlockStateName)}"; + + /// + public new GlamourerApiEc Invoke(string objectName, uint key = 0) + => (GlamourerApiEc)base.Invoke(objectName, key); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IGlamourerApiState api) + => new(pi, Label, (a, b) => (int)api.UnlockStateName(a, b)); +} + +/// +public sealed class UnlockAll(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(UnlockAll)}"; + + /// + public new int Invoke(uint key) + => base.Invoke(key); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IGlamourerApiState api) + => new(pi, Label, api.UnlockAll); +} + +/// +public sealed class RevertToAutomation(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(RevertToAutomation)}.V2"; + + /// + public GlamourerApiEc Invoke(int objectIndex, uint key = 0, ApplyFlag flags = ApplyFlagEx.RevertDefault) + => (GlamourerApiEc)Invoke(objectIndex, key, (ulong)flags); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IGlamourerApiState api) + => new(pi, Label, (a, b, c) => (int)api.RevertToAutomation(a, b, (ApplyFlag)c)); +} + +/// +public sealed class RevertToAutomationName(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Glamourer.{nameof(RevertToAutomationName)}"; + + /// + public GlamourerApiEc Invoke(string objectName, uint key = 0, ApplyFlag flags = ApplyFlagEx.RevertDefault) + => (GlamourerApiEc)Invoke(objectName, key, (ulong)flags); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IGlamourerApiState api) + => new(pi, Label, (a, b, c) => (int)api.RevertToAutomationName(a, b, (ApplyFlag)c)); +} + +/// +public static class StateChanged +{ + /// The label. + public const string Label = $"Penumbra.{nameof(StateChanged)}.V2"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi, IGlamourerApiState api) + => new(pi, Label, (t => api.StateChanged += t, t => api.StateChanged -= t)); +} + +/// +public static class StateChangedWithType +{ + /// The label. + public const string Label = $"Penumbra.{nameof(StateChangedWithType)}"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi, IGlamourerApiState api) + => new(pi, Label, (t => api.StateChangedWithType += t, t => api.StateChangedWithType -= t)); +} + +/// +public static class StateFinalized +{ + /// The label. + public const string Label = $"Penumbra.{nameof(StateFinalized)}"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi, IGlamourerApiState api) + => new(pi, Label, (t => api.StateFinalized += t, t => api.StateFinalized -= t)); +} + +/// +public static class GPoseChanged +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GPoseChanged)}"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi, IGlamourerApiState api) + => new(pi, Label, (t => api.GPoseChanged += t, t => api.GPoseChanged -= t)); +} diff --git a/Glamourer.Api/README.md b/Glamourer.Api/README.md new file mode 100644 index 0000000..e49aaaf --- /dev/null +++ b/Glamourer.Api/README.md @@ -0,0 +1,4 @@ +# Glamourer + +This is an auxiliary repository for Glamourers external API. +For more information, see the [main repo](https://github.com/Ottermandias/Glamourer). \ No newline at end of file diff --git a/Glamourer.Api/packages.lock.json b/Glamourer.Api/packages.lock.json new file mode 100644 index 0000000..1d39508 --- /dev/null +++ b/Glamourer.Api/packages.lock.json @@ -0,0 +1,13 @@ +{ + "version": 1, + "dependencies": { + "net9.0-windows7.0": { + "DotNet.ReproducibleBuilds": { + "type": "Direct", + "requested": "[1.2.25, )", + "resolved": "1.2.25", + "contentHash": "xCXiw7BCxHJ8pF6wPepRUddlh2dlQlbr81gXA72hdk4FLHkKXas7EH/n+fk5UCA/YfMqG1Z6XaPiUjDbUNBUzg==" + } + } + } +} \ No newline at end of file diff --git a/MareSynchronos/FileCache/CacheMonitor.cs b/MareSynchronos/FileCache/CacheMonitor.cs index b905f7c..194dbb0 100644 --- a/MareSynchronos/FileCache/CacheMonitor.cs +++ b/MareSynchronos/FileCache/CacheMonitor.cs @@ -122,24 +122,24 @@ public sealed class CacheMonitor : DisposableMediatorSubscriberBase public bool StorageisNTFS { get; private set; } = false; - public void StartMareWatcher(string? marePath) + public void StartMareWatcher(string? snowPath) { MareWatcher?.Dispose(); - if (string.IsNullOrEmpty(marePath) || !Directory.Exists(marePath)) + if (string.IsNullOrEmpty(snowPath) || !Directory.Exists(snowPath)) { MareWatcher = null; - Logger.LogWarning("Mare file path is not set, cannot start the FSW for Mare."); + Logger.LogWarning("Umbra file path is not set, cannot start the FSW for Umbra."); return; } DriveInfo di = new(new DirectoryInfo(_configService.Current.CacheFolder).Root.FullName); StorageisNTFS = string.Equals("NTFS", di.DriveFormat, StringComparison.OrdinalIgnoreCase); - Logger.LogInformation("Mare Storage is on NTFS drive: {isNtfs}", StorageisNTFS); + Logger.LogInformation("Umbra Storage is on NTFS drive: {isNtfs}", StorageisNTFS); - Logger.LogDebug("Initializing Mare FSW on {path}", marePath); + Logger.LogDebug("Initializing Mare FSW on {path}", snowPath); MareWatcher = new() { - Path = marePath, + Path = snowPath, InternalBufferSize = 8388608, NotifyFilter = NotifyFilters.CreationTime | NotifyFilters.LastWrite @@ -161,7 +161,7 @@ public sealed class CacheMonitor : DisposableMediatorSubscriberBase if (string.IsNullOrEmpty(substPath)) { SubstWatcher = null; - Logger.LogWarning("Mare file path is not set, cannot start the FSW for Mare."); + Logger.LogWarning("Umbra file path is not set, cannot start the FSW for Umbra."); return; } @@ -197,7 +197,7 @@ public sealed class CacheMonitor : DisposableMediatorSubscriberBase private void MareWatcher_FileChanged(object sender, FileSystemEventArgs e) { - Logger.LogTrace("Mare FSW: FileChanged: {change} => {path}", e.ChangeType, e.FullPath); + Logger.LogTrace("Umbra FSW: FileChanged: {change} => {path}", e.ChangeType, e.FullPath); if (!AllowedFileExtensions.Any(ext => e.FullPath.EndsWith(ext, StringComparison.OrdinalIgnoreCase))) return; @@ -631,7 +631,7 @@ public sealed class CacheMonitor : DisposableMediatorSubscriberBase if (string.IsNullOrEmpty(_configService.Current.CacheFolder) || !Directory.Exists(_configService.Current.CacheFolder)) { cacheDirExists = false; - Logger.LogWarning("UmbraSync Cache directory is not set or does not exist."); + Logger.LogWarning("Umbra Cache directory is not set or does not exist."); } if (!penDirExists || !cacheDirExists) { diff --git a/MareSynchronos/FileCache/FileCacheManager.cs b/MareSynchronos/FileCache/FileCacheManager.cs index 8ce7fb0..0c3b1ab 100644 --- a/MareSynchronos/FileCache/FileCacheManager.cs +++ b/MareSynchronos/FileCache/FileCacheManager.cs @@ -465,7 +465,7 @@ public sealed class FileCacheManager : IHostedService if (!_ipcManager.Penumbra.APIAvailable || string.IsNullOrEmpty(_ipcManager.Penumbra.ModDirectory)) { _mareMediator.Publish(new NotificationMessage("Penumbra not connected", - "Could not load local file cache data. Penumbra is not connected or not properly set up. Please enable and/or configure Penumbra properly to use UmbraSync. After, reload UmbraSync in the Plugin installer.", + "Could not load local file cache data. Penumbra is not connected or not properly set up. Please enable and/or configure Penumbra properly to use Umbra. After, reload Umbra in the Plugin installer.", MareConfiguration.Models.NotificationType.Error)); } diff --git a/MareSynchronos/Interop/Ipc/IpcCallerGlamourer.cs b/MareSynchronos/Interop/Ipc/IpcCallerGlamourer.cs index 4b02452..1b2d900 100644 --- a/MareSynchronos/Interop/Ipc/IpcCallerGlamourer.cs +++ b/MareSynchronos/Interop/Ipc/IpcCallerGlamourer.cs @@ -109,7 +109,7 @@ public sealed class IpcCallerGlamourer : DisposableMediatorSubscriberBase, IIpcC if (!apiAvailable && !_shownGlamourerUnavailable) { _shownGlamourerUnavailable = true; - _mareMediator.Publish(new NotificationMessage("Glamourer inactive", "Your Glamourer installation is not active or out of date. Update Glamourer to continue to use UmbraSync. If you just updated Glamourer, ignore this message.", + _mareMediator.Publish(new NotificationMessage("Glamourer inactive", "Your Glamourer installation is not active or out of date. Update Glamourer to continue to use Umbra. If you just updated Glamourer, ignore this message.", NotificationType.Error)); } } diff --git a/MareSynchronos/Interop/Ipc/IpcCallerMoodles.cs b/MareSynchronos/Interop/Ipc/IpcCallerMoodles.cs index 44b6ce5..be38465 100644 --- a/MareSynchronos/Interop/Ipc/IpcCallerMoodles.cs +++ b/MareSynchronos/Interop/Ipc/IpcCallerMoodles.cs @@ -27,9 +27,9 @@ public sealed class IpcCallerMoodles : IIpcCaller _moodlesApiVersion = pi.GetIpcSubscriber("Moodles.Version"); _moodlesOnChange = pi.GetIpcSubscriber("Moodles.StatusManagerModified"); - _moodlesGetStatus = pi.GetIpcSubscriber("Moodles.GetStatusManagerByPtr"); - _moodlesSetStatus = pi.GetIpcSubscriber("Moodles.SetStatusManagerByPtr"); - _moodlesRevertStatus = pi.GetIpcSubscriber("Moodles.ClearStatusManagerByPtr"); + _moodlesGetStatus = pi.GetIpcSubscriber("Moodles.GetStatusManagerByPtrV2"); + _moodlesSetStatus = pi.GetIpcSubscriber("Moodles.SetStatusManagerByPtrV2"); + _moodlesRevertStatus = pi.GetIpcSubscriber("Moodles.ClearStatusManagerByPtrV2"); _moodlesOnChange.Subscribe(OnMoodlesChange); @@ -47,7 +47,7 @@ public sealed class IpcCallerMoodles : IIpcCaller { try { - APIAvailable = _moodlesApiVersion.InvokeFunc() == 1; + APIAvailable = _moodlesApiVersion.InvokeFunc() == 3; } catch { diff --git a/MareSynchronos/Interop/Ipc/IpcCallerPenumbra.cs b/MareSynchronos/Interop/Ipc/IpcCallerPenumbra.cs index 9746431..0e006d4 100644 --- a/MareSynchronos/Interop/Ipc/IpcCallerPenumbra.cs +++ b/MareSynchronos/Interop/Ipc/IpcCallerPenumbra.cs @@ -114,7 +114,7 @@ public sealed class IpcCallerPenumbra : DisposableMediatorSubscriberBase, IIpcCa bool penumbraAvailable = false; try { - penumbraAvailable = _pluginLoaded && _pluginVersion >= new Version(1, 0, 1, 0); + penumbraAvailable = _pluginLoaded && _pluginVersion >= new Version(1, 5, 1, 0); try { penumbraAvailable &= _penumbraEnabled.Invoke(); @@ -136,7 +136,7 @@ public sealed class IpcCallerPenumbra : DisposableMediatorSubscriberBase, IIpcCa { _shownPenumbraUnavailable = true; _mareMediator.Publish(new NotificationMessage("Penumbra inactive", - "Your Penumbra installation is not active or out of date. Update Penumbra and/or the Enable Mods setting in Penumbra to continue to use UmbraSync. If you just updated Penumbra, ignore this message.", + "Your Penumbra installation is not active or out of date. Update Penumbra and/or the Enable Mods setting in Penumbra to continue to use Umbra. If you just updated Penumbra, ignore this message.", NotificationType.Error)); } } @@ -225,9 +225,15 @@ public sealed class IpcCallerPenumbra : DisposableMediatorSubscriberBase, IIpcCa return await _dalamudUtil.RunOnFrameworkThread(() => { - var collName = "UmbraSync_" + uid; - var collId = _penumbraCreateNamedTemporaryCollection.Invoke(collName); + Guid collId; + var collName = "ElfSync_" + uid; + PenumbraApiEc penEC = _penumbraCreateNamedTemporaryCollection.Invoke(uid, collName, out collId); logger.LogTrace("Creating Temp Collection {collName}, GUID: {collId}", collName, collId); + if (penEC != PenumbraApiEc.Success) + { + logger.LogError("Failed to create temporary collection for {collName} with error code {penEC}. Please include this line in any error reports", collName, penEC); + return Guid.Empty; + } return collId; }).ConfigureAwait(false); diff --git a/MareSynchronos/Interop/Ipc/IpcCallerPetNames.cs b/MareSynchronos/Interop/Ipc/IpcCallerPetNames.cs index a662178..309556e 100644 --- a/MareSynchronos/Interop/Ipc/IpcCallerPetNames.cs +++ b/MareSynchronos/Interop/Ipc/IpcCallerPetNames.cs @@ -30,12 +30,12 @@ public sealed class IpcCallerPetNames : IIpcCaller _dalamudUtil = dalamudUtil; _mareMediator = mareMediator; - _petnamesReady = pi.GetIpcSubscriber("PetRenamer.Ready"); - _petnamesDisposing = pi.GetIpcSubscriber("PetRenamer.Disposing"); + _petnamesReady = pi.GetIpcSubscriber("PetRenamer.OnReady"); + _petnamesDisposing = pi.GetIpcSubscriber("PetRenamer.OnDisposing"); _apiVersion = pi.GetIpcSubscriber<(uint, uint)>("PetRenamer.ApiVersion"); - _enabled = pi.GetIpcSubscriber("PetRenamer.Enabled"); + _enabled = pi.GetIpcSubscriber("PetRenamer.IsEnabled"); - _playerDataChanged = pi.GetIpcSubscriber("PetRenamer.PlayerDataChanged"); + _playerDataChanged = pi.GetIpcSubscriber("PetRenamer.OnPlayerDataChanged"); _getPlayerData = pi.GetIpcSubscriber("PetRenamer.GetPlayerData"); _setPlayerData = pi.GetIpcSubscriber("PetRenamer.SetPlayerData"); _clearPlayerData = pi.GetIpcSubscriber("PetRenamer.ClearPlayerData"); @@ -56,7 +56,7 @@ public sealed class IpcCallerPetNames : IIpcCaller APIAvailable = _enabled?.InvokeFunc() ?? false; if (APIAvailable) { - APIAvailable = _apiVersion?.InvokeFunc() is { Item1: 3, Item2: >= 1 }; + APIAvailable = _apiVersion?.InvokeFunc() is { Item1: 4, Item2: >= 0 }; } } catch diff --git a/MareSynchronos/Interop/Ipc/IpcProvider.cs b/MareSynchronos/Interop/Ipc/IpcProvider.cs index 2c7dff4..1dd01e2 100644 --- a/MareSynchronos/Interop/Ipc/IpcProvider.cs +++ b/MareSynchronos/Interop/Ipc/IpcProvider.cs @@ -66,11 +66,11 @@ public class IpcProvider : IHostedService, IMediatorSubscriber public Task StartAsync(CancellationToken cancellationToken) { _logger.LogDebug("Starting IpcProvider Service"); - _loadFileProvider = _pi.GetIpcProvider("UmbraSyncSync.LoadMcdf"); + _loadFileProvider = _pi.GetIpcProvider("ElfSync.LoadMcdf"); _loadFileProvider.RegisterFunc(LoadMcdf); - _loadFileAsyncProvider = _pi.GetIpcProvider>("UmbraSyncSync.LoadMcdfAsync"); + _loadFileAsyncProvider = _pi.GetIpcProvider>("UmbraSync.LoadMcdfAsync"); _loadFileAsyncProvider.RegisterFunc(LoadMcdfAsync); - _handledGameAddresses = _pi.GetIpcProvider>("UmbraSyncSync.GetHandledAddresses"); + _handledGameAddresses = _pi.GetIpcProvider>("UmbraSync.GetHandledAddresses"); _handledGameAddresses.RegisterFunc(GetHandledAddresses); _loadFileProviderMare = _pi.GetIpcProvider("MareSynchronos.LoadMcdf"); diff --git a/MareSynchronos/MareConfiguration/Configurations/MareConfig.cs b/MareSynchronos/MareConfiguration/Configurations/MareConfig.cs index 8c03281..6047545 100644 --- a/MareSynchronos/MareConfiguration/Configurations/MareConfig.cs +++ b/MareSynchronos/MareConfiguration/Configurations/MareConfig.cs @@ -7,6 +7,8 @@ namespace MareSynchronos.MareConfiguration.Configurations; [Serializable] public class MareConfig : IMareConfiguration { + public int ExpectedTOSVersion = 2; + public int AcceptedTOSVersion { get; set; } = 0; public bool AcceptedAgreement { get; set; } = false; public string CacheFolder { get; set; } = string.Empty; public bool DisableOptionalPluginWarnings { get; set; } = false; @@ -31,7 +33,7 @@ public class MareConfig : IMareConfiguration public bool LogPerformance { get; set; } = false; public bool LogEvents { get; set; } = true; public bool HoldCombatApplication { get; set; } = false; - public double MaxLocalCacheInGiB { get; set; } = 20; + public double MaxLocalCacheInGiB { get; set; } = 100; public bool OpenGposeImportOnGposeStart { get; set; } = false; public bool OpenPopupOnAdd { get; set; } = true; public int ParallelDownloads { get; set; } = 10; diff --git a/MareSynchronos/MareConfiguration/Configurations/PlayerPerformanceConfig.cs b/MareSynchronos/MareConfiguration/Configurations/PlayerPerformanceConfig.cs index c8a14f5..6b45ac7 100644 --- a/MareSynchronos/MareConfiguration/Configurations/PlayerPerformanceConfig.cs +++ b/MareSynchronos/MareConfiguration/Configurations/PlayerPerformanceConfig.cs @@ -5,11 +5,11 @@ namespace MareSynchronos.MareConfiguration.Configurations; public class PlayerPerformanceConfig : IMareConfiguration { public int Version { get; set; } = 1; - public bool AutoPausePlayersExceedingThresholds { get; set; } = false; + public bool AutoPausePlayersExceedingThresholds { get; set; } = true; public bool NotifyAutoPauseDirectPairs { get; set; } = true; - public bool NotifyAutoPauseGroupPairs { get; set; } = false; - public int VRAMSizeAutoPauseThresholdMiB { get; set; } = 550; - public int TrisAutoPauseThresholdThousands { get; set; } = 375; + public bool NotifyAutoPauseGroupPairs { get; set; } = true; + public int VRAMSizeAutoPauseThresholdMiB { get; set; } = 500; + public int TrisAutoPauseThresholdThousands { get; set; } = 400; public bool IgnoreDirectPairs { get; set; } = true; public TextureShrinkMode TextureShrinkMode { get; set; } = TextureShrinkMode.Default; public bool TextureShrinkDeleteOriginal { get; set; } = false; diff --git a/MareSynchronos/MareConfiguration/Configurations/ServerConfig.cs b/MareSynchronos/MareConfiguration/Configurations/ServerConfig.cs index 77e53bd..739d15b 100644 --- a/MareSynchronos/MareConfiguration/Configurations/ServerConfig.cs +++ b/MareSynchronos/MareConfiguration/Configurations/ServerConfig.cs @@ -10,7 +10,7 @@ public class ServerConfig : IMareConfiguration public List ServerStorage { get; set; } = new() { - { new ServerStorage() { ServerName = ApiController.UmbraSyncServer, ServerUri = ApiController.UmbraSyncServiceUri } }, + { new ServerStorage() { ServerName = ApiController.UmbraServer, ServerUri = ApiController.UmbraServiceUri } }, }; public int Version { get; set; } = 1; diff --git a/MareSynchronos/MarePlugin.cs b/MareSynchronos/MarePlugin.cs index 911b263..458ac42 100644 --- a/MareSynchronos/MarePlugin.cs +++ b/MareSynchronos/MarePlugin.cs @@ -89,9 +89,9 @@ public class MarePlugin : MediatorSubscriberBase, IHostedService public Task StartAsync(CancellationToken cancellationToken) { var version = Assembly.GetExecutingAssembly().GetName().Version!; - Logger.LogInformation("Launching {name} {major}.{minor}.{build}.{rev}", "UmbraSync", version.Major, version.Minor, version.Build, version.Revision); + Logger.LogInformation("Launching {name} {major}.{minor}.{build}.{rev}", "Umbra Sync", version.Major, version.Minor, version.Build, version.Revision); Mediator.Publish(new EventMessage(new Services.Events.Event(nameof(MarePlugin), Services.Events.EventSeverity.Informational, - $"Starting UmbraSync {version.Major}.{version.Minor}.{version.Build}.{version.Revision}"))); + $"Starting Umbra Sync {version.Major}.{version.Minor}.{version.Build}.{version.Revision}"))); Mediator.Subscribe(this, (msg) => { if (_launchTask == null || _launchTask.IsCompleted) _launchTask = Task.Run(WaitForPlayerAndLaunchCharacterManager); }); Mediator.Subscribe(this, (_) => DalamudUtilOnLogIn()); @@ -157,7 +157,7 @@ public class MarePlugin : MediatorSubscriberBase, IHostedService if (_mareConfigService.Current.LogLevel != LogLevel.Information) { Mediator.Publish(new NotificationMessage("Abnormal Log Level", - $"Your log level is set to '{_mareConfigService.Current.LogLevel}' which is not recommended for normal usage. Set it to '{LogLevel.Information}' in \"UmbraSync Settings -> Debug\" unless instructed otherwise.", + $"Your log level is set to '{_mareConfigService.Current.LogLevel}' which is not recommended for normal usage. Set it to '{LogLevel.Information}' in \"Umbra Settings -> Debug\" unless instructed otherwise.", MareConfiguration.Models.NotificationType.Error, TimeSpan.FromSeconds(15000))); } #endif diff --git a/MareSynchronos/MareSynchronos.csproj b/MareSynchronos/MareSynchronos.csproj index c34fc9d..8d437a1 100644 --- a/MareSynchronos/MareSynchronos.csproj +++ b/MareSynchronos/MareSynchronos.csproj @@ -1,12 +1,10 @@  - - UmbraSync - 0.0.0.1 - 0.0.0.1 - 0.0.0.1 - - + + UmbraSync + UmbraSync + 0.0.3 + @@ -15,37 +13,38 @@ + - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + - - + + - - + + - - + + - - + + @@ -55,7 +54,6 @@ - diff --git a/MareSynchronos/PlayerData/Factories/PairHandlerFactory.cs b/MareSynchronos/PlayerData/Factories/PairHandlerFactory.cs index 145889a..0fadae8 100644 --- a/MareSynchronos/PlayerData/Factories/PairHandlerFactory.cs +++ b/MareSynchronos/PlayerData/Factories/PairHandlerFactory.cs @@ -27,14 +27,13 @@ public class PairHandlerFactory private readonly PluginWarningNotificationService _pluginWarningNotificationManager; private readonly PairAnalyzerFactory _pairAnalyzerFactory; private readonly VisibilityService _visibilityService; - private readonly NoSnapService _noSnapService; public PairHandlerFactory(ILoggerFactory loggerFactory, GameObjectHandlerFactory gameObjectHandlerFactory, IpcManager ipcManager, FileDownloadManagerFactory fileDownloadManagerFactory, DalamudUtilService dalamudUtilService, PluginWarningNotificationService pluginWarningNotificationManager, IHostApplicationLifetime hostApplicationLifetime, FileCacheManager fileCacheManager, MareMediator mareMediator, PlayerPerformanceService playerPerformanceService, ServerConfigurationManager serverConfigManager, PairAnalyzerFactory pairAnalyzerFactory, - MareConfigService configService, VisibilityService visibilityService, NoSnapService noSnapService) + MareConfigService configService, VisibilityService visibilityService) { _loggerFactory = loggerFactory; _gameObjectHandlerFactory = gameObjectHandlerFactory; @@ -50,13 +49,12 @@ public class PairHandlerFactory _pairAnalyzerFactory = pairAnalyzerFactory; _configService = configService; _visibilityService = visibilityService; - _noSnapService = noSnapService; } public PairHandler Create(Pair pair) { return new PairHandler(_loggerFactory.CreateLogger(), pair, _pairAnalyzerFactory.Create(pair), _gameObjectHandlerFactory, _ipcManager, _fileDownloadManagerFactory.Create(), _pluginWarningNotificationManager, _dalamudUtilService, _hostApplicationLifetime, - _fileCacheManager, _mareMediator, _playerPerformanceService, _serverConfigManager, _configService, _visibilityService, _noSnapService); + _fileCacheManager, _mareMediator, _playerPerformanceService, _serverConfigManager, _configService, _visibilityService); } } \ No newline at end of file diff --git a/MareSynchronos/PlayerData/Handlers/PairHandler.cs b/MareSynchronos/PlayerData/Handlers/PairHandler.cs index d12a347..26e3aee 100644 --- a/MareSynchronos/PlayerData/Handlers/PairHandler.cs +++ b/MareSynchronos/PlayerData/Handlers/PairHandler.cs @@ -32,7 +32,6 @@ public sealed class PairHandler : DisposableMediatorSubscriberBase private readonly ServerConfigurationManager _serverConfigManager; private readonly PluginWarningNotificationService _pluginWarningNotificationManager; private readonly VisibilityService _visibilityService; - private readonly NoSnapService _noSnapService; private CancellationTokenSource? _applicationCancellationTokenSource = new(); private Guid _applicationId; private Task? _applicationTask; @@ -55,8 +54,7 @@ public sealed class PairHandler : DisposableMediatorSubscriberBase FileCacheManager fileDbManager, MareMediator mediator, PlayerPerformanceService playerPerformanceService, ServerConfigurationManager serverConfigManager, - MareConfigService configService, VisibilityService visibilityService, - NoSnapService noSnapService) : base(logger, mediator) + MareConfigService configService, VisibilityService visibilityService) : base(logger, mediator) { Pair = pair; PairAnalyzer = pairAnalyzer; @@ -70,7 +68,6 @@ public sealed class PairHandler : DisposableMediatorSubscriberBase _serverConfigManager = serverConfigManager; _configService = configService; _visibilityService = visibilityService; - _noSnapService = noSnapService; _visibilityService.StartTracking(Pair.Ident); @@ -319,24 +316,6 @@ public sealed class PairHandler : DisposableMediatorSubscriberBase }); } - private void RegisterGposeClones() - { - var name = PlayerName; - if (name == null) - return; - _ = _dalamudUtil.RunOnFrameworkThread(() => - { - foreach (var actor in _dalamudUtil.GetGposeCharactersFromObjectTable()) - { - if (actor == null) continue; - var gposeName = actor.Name.TextValue; - if (!name.Equals(gposeName, StringComparison.Ordinal)) - continue; - _noSnapService.AddGposer(actor.ObjectIndex); - } - }); - } - private async Task UndoApplicationAsync(Guid applicationId = default) { Logger.LogDebug($"Undoing application of {Pair.UserPair}"); @@ -353,7 +332,6 @@ public sealed class PairHandler : DisposableMediatorSubscriberBase { await _ipcManager.Penumbra.RemoveTemporaryCollectionAsync(Logger, applicationId, _penumbraCollection).ConfigureAwait(false); _penumbraCollection = Guid.Empty; - RegisterGposeClones(); } if (_dalamudUtil is { IsZoning: false, IsInCutscene: false } && !string.IsNullOrEmpty(name)) @@ -385,10 +363,6 @@ public sealed class PairHandler : DisposableMediatorSubscriberBase } } } - else if (_dalamudUtil.IsInCutscene && !string.IsNullOrEmpty(name)) - { - _noSnapService.AddGposerNamed(name); - } } catch (Exception ex) { diff --git a/MareSynchronos/PlayerData/Pairs/Pair.cs b/MareSynchronos/PlayerData/Pairs/Pair.cs index d2f108c..1ca50bc 100644 --- a/MareSynchronos/PlayerData/Pairs/Pair.cs +++ b/MareSynchronos/PlayerData/Pairs/Pair.cs @@ -86,8 +86,8 @@ public class Pair : DisposableMediatorSubscriberBase { Name = name, OnClicked = action, - PrefixColor = 559, - PrefixChar = 'L' + PrefixColor = 526, + PrefixChar = 'S' }); } @@ -171,11 +171,6 @@ public class Pair : DisposableMediatorSubscriberBase if (_serverConfigurationManager.IsUidBlacklisted(UserData.UID)) HoldApplication("Blacklist", maxValue: 1); - if (NoSnapService.AnyLoaded) - HoldApplication("NoSnap", maxValue: 1); - else - UnholdApplication("NoSnap", skipApplication: true); - CachedPlayer.ApplyCharacterData(Guid.NewGuid(), RemoveNotSyncedFiles(LastReceivedCharacterData.DeepClone())!, forced); } diff --git a/MareSynchronos/Plugin.cs b/MareSynchronos/Plugin.cs index 7691d7d..a1eb4ab 100644 --- a/MareSynchronos/Plugin.cs +++ b/MareSynchronos/Plugin.cs @@ -29,7 +29,7 @@ using MareSynchronos.Services.CharaData; using MareSynchronos; -namespace UmbraSyncSync; +namespace Umbra; public sealed class Plugin : IDalamudPlugin { @@ -40,7 +40,7 @@ public sealed class Plugin : IDalamudPlugin #pragma warning restore CA2211, CS8618, MA0069, S1104, S2223 public Action? RealOnFrameworkUpdate { get; set; } - // Proxy function in the UmbraSyncSync namespace to avoid confusion in /xlstats + // Proxy function in the UmbraSync namespace to avoid confusion in /xlstats public void OnFrameworkUpdate(IFramework framework) { RealOnFrameworkUpdate?.Invoke(framework); @@ -126,7 +126,6 @@ public sealed class Plugin : IDalamudPlugin collection.AddSingleton(); collection.AddSingleton(); collection.AddSingleton(); - collection.AddSingleton(); collection.AddSingleton(); collection.AddSingleton(); collection.AddSingleton(); @@ -143,7 +142,6 @@ public sealed class Plugin : IDalamudPlugin collection.AddSingleton(); collection.AddSingleton(); collection.AddSingleton(); - collection.AddSingleton(); collection.AddSingleton((s) => new MareConfigService(pluginInterface.ConfigDirectory.FullName)); collection.AddSingleton((s) => new ServerConfigService(pluginInterface.ConfigDirectory.FullName)); @@ -169,7 +167,6 @@ public sealed class Plugin : IDalamudPlugin collection.AddSingleton>(s => s.GetRequiredService()); collection.AddSingleton(); collection.AddSingleton(); - collection.AddSingleton(); collection.AddSingleton(); @@ -210,8 +207,6 @@ public sealed class Plugin : IDalamudPlugin collection.AddHostedService(p => p.GetRequiredService()); collection.AddHostedService(p => p.GetRequiredService()); collection.AddHostedService(p => p.GetRequiredService()); - collection.AddHostedService(p => p.GetRequiredService()); - collection.AddHostedService(p => p.GetRequiredService()); }) .Build(); diff --git a/MareSynchronos/Services/CharaData/CharaDataCharacterHandler.cs b/MareSynchronos/Services/CharaData/CharaDataCharacterHandler.cs index 21e390f..2b76ddf 100644 --- a/MareSynchronos/Services/CharaData/CharaDataCharacterHandler.cs +++ b/MareSynchronos/Services/CharaData/CharaDataCharacterHandler.cs @@ -13,20 +13,18 @@ public sealed class CharaDataCharacterHandler : DisposableMediatorSubscriberBase private readonly GameObjectHandlerFactory _gameObjectHandlerFactory; private readonly DalamudUtilService _dalamudUtilService; private readonly IpcManager _ipcManager; - private readonly NoSnapService _noSnapService; private readonly Dictionary _handledCharaData = new(StringComparer.Ordinal); public IReadOnlyDictionary HandledCharaData => _handledCharaData; public CharaDataCharacterHandler(ILogger logger, MareMediator mediator, GameObjectHandlerFactory gameObjectHandlerFactory, DalamudUtilService dalamudUtilService, - IpcManager ipcManager, NoSnapService noSnapService) + IpcManager ipcManager) : base(logger, mediator) { _gameObjectHandlerFactory = gameObjectHandlerFactory; _dalamudUtilService = dalamudUtilService; _ipcManager = ipcManager; - _noSnapService = noSnapService; mediator.Subscribe(this, msg => { foreach (var chara in _handledCharaData) @@ -94,7 +92,6 @@ public sealed class CharaDataCharacterHandler : DisposableMediatorSubscriberBase _handledCharaData.Remove(handled.Name); await _dalamudUtilService.RunOnFrameworkThread(async () => { - RemoveGposer(handled); await RevertChara(handled.Name, handled.CustomizePlus).ConfigureAwait(false); }).ConfigureAwait(false); return true; @@ -103,7 +100,6 @@ public sealed class CharaDataCharacterHandler : DisposableMediatorSubscriberBase internal void AddHandledChara(HandledCharaDataEntry handledCharaDataEntry) { _handledCharaData.Add(handledCharaDataEntry.Name, handledCharaDataEntry); - _ = _dalamudUtilService.RunOnFrameworkThread(() => AddGposer(handledCharaDataEntry)); } public void UpdateHandledData(Dictionary newData) @@ -134,23 +130,4 @@ public sealed class CharaDataCharacterHandler : DisposableMediatorSubscriberBase if (handler.Address == nint.Zero) return null; return handler; } - - private int GetGposerObjectIndex(string name) - { - return _dalamudUtilService.GetGposeCharacterFromObjectTableByName(name, _dalamudUtilService.IsInGpose)?.ObjectIndex ?? -1; - } - - private void AddGposer(HandledCharaDataEntry handled) - { - int objectIndex = GetGposerObjectIndex(handled.Name); - if (objectIndex > 0) - _noSnapService.AddGposer(objectIndex); - } - - private void RemoveGposer(HandledCharaDataEntry handled) - { - int objectIndex = GetGposerObjectIndex(handled.Name); - if (objectIndex > 0) - _noSnapService.RemoveGposer(objectIndex); - } } diff --git a/MareSynchronos/Services/ChatService.cs b/MareSynchronos/Services/ChatService.cs index e32b81e..d6330ec 100644 --- a/MareSynchronos/Services/ChatService.cs +++ b/MareSynchronos/Services/ChatService.cs @@ -72,7 +72,7 @@ public class ChatService : DisposableMediatorSubscriberBase { var chatMsg = message.ChatMsg; var prefix = new SeStringBuilder(); - prefix.AddText("[BnnuyChat] "); + prefix.AddText("[SnowChat] "); _chatGui.Print(new XivChatEntry{ MessageBytes = [..prefix.Build().Encode(), ..message.ChatMsg.PayloadContent], Name = chatMsg.SenderName, @@ -207,7 +207,7 @@ public class ChatService : DisposableMediatorSubscriberBase } } - _chatGui.PrintError($"[UmbraSyncSync] Syncshell number #{shellNumber} not found"); + _chatGui.PrintError($"[UmbraSync] Syncshell number #{shellNumber} not found"); } public void SendChatShell(int shellNumber, byte[] chatBytes) @@ -236,6 +236,6 @@ public class ChatService : DisposableMediatorSubscriberBase } } - _chatGui.PrintError($"[UmbraSyncSync] Syncshell number #{shellNumber} not found"); + _chatGui.PrintError($"[UmbraSync] Syncshell number #{shellNumber} not found"); } } \ No newline at end of file diff --git a/MareSynchronos/Services/CommandManagerService.cs b/MareSynchronos/Services/CommandManagerService.cs index b845813..7ce8ab3 100644 --- a/MareSynchronos/Services/CommandManagerService.cs +++ b/MareSynchronos/Services/CommandManagerService.cs @@ -42,11 +42,11 @@ public sealed class CommandManagerService : IDisposable _mareConfigService = mareConfigService; _commandManager.AddHandler(_commandName, new CommandInfo(OnCommand) { - HelpMessage = "Opens the UmbraSync UI" + HelpMessage = "Opens the Umbra UI" }); _commandManager.AddHandler(_commandName2, new CommandInfo(OnCommand) { - HelpMessage = "Opens the UmbraSync UI" + HelpMessage = "Opens the Umbra UI" }); // Lazy registration of all possible /ss# commands which tbf is what the game does for linkshells anyway @@ -86,7 +86,7 @@ public sealed class CommandManagerService : IDisposable { if (_apiController.ServerState == WebAPI.SignalR.Utils.ServerState.Disconnecting) { - _mediator.Publish(new NotificationMessage("UmbraSync disconnecting", "Cannot use /toggle while UmbraSync is still disconnecting", + _mediator.Publish(new NotificationMessage("Umbra disconnecting", "Cannot use /toggle while Umbra is still disconnecting", NotificationType.Error)); } diff --git a/MareSynchronos/Services/DalamudUtilService.cs b/MareSynchronos/Services/DalamudUtilService.cs index 86a9621..70a480c 100644 --- a/MareSynchronos/Services/DalamudUtilService.cs +++ b/MareSynchronos/Services/DalamudUtilService.cs @@ -462,9 +462,9 @@ public class DalamudUtilService : IHostedService, IMediatorSubscriber { _logger.LogInformation("Starting DalamudUtilService"); #pragma warning disable S2696 // Instance members should not write to "static" fields - UmbraSyncSync.Plugin.Self.RealOnFrameworkUpdate = this.FrameworkOnUpdate; + Umbra.Plugin.Self.RealOnFrameworkUpdate = this.FrameworkOnUpdate; #pragma warning restore S2696 - _framework.Update += UmbraSyncSync.Plugin.Self.OnFrameworkUpdate; + _framework.Update += Umbra.Plugin.Self.OnFrameworkUpdate; if (IsLoggedIn) { _classJobId = _clientState.LocalPlayer!.ClassJob.RowId; @@ -479,7 +479,7 @@ public class DalamudUtilService : IHostedService, IMediatorSubscriber _logger.LogTrace("Stopping {type}", GetType()); Mediator.UnsubscribeAll(this); - _framework.Update -= UmbraSyncSync.Plugin.Self.OnFrameworkUpdate; + _framework.Update -= Umbra.Plugin.Self.OnFrameworkUpdate; return Task.CompletedTask; } diff --git a/MareSynchronos/Services/NoSnapService.cs b/MareSynchronos/Services/NoSnapService.cs deleted file mode 100644 index 226fab3..0000000 --- a/MareSynchronos/Services/NoSnapService.cs +++ /dev/null @@ -1,226 +0,0 @@ -using Dalamud.Plugin; -using MareSynchronos.Interop.Ipc; -using MareSynchronos.MareConfiguration.Models; -using MareSynchronos.Services.Mediator; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Logging; -using System.Text.Json.Serialization; - -namespace MareSynchronos.Services; - -public sealed class NoSnapService : IHostedService, IMediatorSubscriber -{ - private record NoSnapConfig - { - [JsonPropertyName("listOfPlugins")] - public string[]? ListOfPlugins { get; set; } - } - - private readonly ILogger _logger; - private readonly IDalamudPluginInterface _pluginInterface; - private readonly Dictionary _listOfPlugins = new(StringComparer.Ordinal) - { - ["Snapper"] = false, - ["Snappy"] = false, - ["Meddle.Plugin"] = false, - }; - private static readonly HashSet _gposers = new(); - private static readonly HashSet _gposersNamed = new(StringComparer.Ordinal); - private readonly IHostApplicationLifetime _hostApplicationLifetime; - private readonly DalamudUtilService _dalamudUtilService; - private readonly IpcManager _ipcManager; - private readonly RemoteConfigurationService _remoteConfig; - - public static bool AnyLoaded { get; private set; } = false; - public static string ActivePlugins { get; private set; } = string.Empty; - - public MareMediator Mediator { get; init; } - - public NoSnapService(ILogger logger, IDalamudPluginInterface pluginInterface, MareMediator mediator, - IHostApplicationLifetime hostApplicationLifetime, DalamudUtilService dalamudUtilService, IpcManager ipcManager, - RemoteConfigurationService remoteConfig) - { - _logger = logger; - _pluginInterface = pluginInterface; - Mediator = mediator; - _hostApplicationLifetime = hostApplicationLifetime; - _dalamudUtilService = dalamudUtilService; - _ipcManager = ipcManager; - _remoteConfig = remoteConfig; - - Mediator.Subscribe(this, msg => ClearGposeList()); - Mediator.Subscribe(this, msg => ClearGposeList()); - } - - public void AddGposer(int objectIndex) - { - if (AnyLoaded || _hostApplicationLifetime.ApplicationStopping.IsCancellationRequested) - { - _logger.LogTrace("Immediately reverting object index {id}", objectIndex); - RevertAndRedraw(objectIndex); - return; - } - - _logger.LogTrace("Registering gposer object index {id}", objectIndex); - lock (_gposers) - _gposers.Add(objectIndex); - } - - public void RemoveGposer(int objectIndex) - { - _logger.LogTrace("Un-registering gposer object index {id}", objectIndex); - lock (_gposers) - _gposers.Remove(objectIndex); - } - - public void AddGposerNamed(string name) - { - if (AnyLoaded || _hostApplicationLifetime.ApplicationStopping.IsCancellationRequested) - { - _logger.LogTrace("Immediately reverting {name}", name); - RevertAndRedraw(name); - return; - } - - _logger.LogTrace("Registering gposer {name}", name); - lock (_gposers) - _gposersNamed.Add(name); - } - - private void ClearGposeList() - { - if (_gposers.Count > 0 || _gposersNamed.Count > 0) - _logger.LogTrace("Clearing gposer list"); - lock (_gposers) - _gposers.Clear(); - lock (_gposersNamed) - _gposersNamed.Clear(); - } - - private void RevertAndRedraw(int objIndex, Guid applicationId = default) - { - if (applicationId == default) - applicationId = Guid.NewGuid(); - - try - { - _ipcManager.Glamourer.RevertNow(_logger, applicationId, objIndex); - _ipcManager.Penumbra.RedrawNow(_logger, applicationId, objIndex); - } - catch { } - } - - private void RevertAndRedraw(string name, Guid applicationId = default) - { - if (applicationId == default) - applicationId = Guid.NewGuid(); - - try - { - _ipcManager.Glamourer.RevertByNameNow(_logger, applicationId, name); - var addr = _dalamudUtilService.GetPlayerCharacterFromCachedTableByName(name); - if (addr != 0) - { - var obj = _dalamudUtilService.CreateGameObject(addr); - if (obj != null) - _ipcManager.Penumbra.RedrawNow(_logger, applicationId, obj.ObjectIndex); - } - } - catch { } - } - - private void RevertGposers() - { - List? gposersList = null; - List? gposersList2 = null; - - lock (_gposers) - { - if (_gposers.Count > 0) - { - gposersList = _gposers.ToList(); - _gposers.Clear(); - } - } - - lock (_gposersNamed) - { - if (_gposersNamed.Count > 0) - { - gposersList2 = _gposersNamed.ToList(); - _gposersNamed.Clear(); - } - } - - if (gposersList == null && gposersList2 == null) - return; - - _logger.LogInformation("Reverting gposers"); - - _dalamudUtilService.RunOnFrameworkThread(() => - { - Guid applicationId = Guid.NewGuid(); - - foreach (var gposer in gposersList ?? []) - RevertAndRedraw(gposer, applicationId); - - foreach (var gposerName in gposersList2 ?? []) - RevertAndRedraw(gposerName, applicationId); - }).GetAwaiter().GetResult(); - } - - public async Task StartAsync(CancellationToken cancellationToken) - { - var config = await _remoteConfig.GetConfigAsync("noSnap").ConfigureAwait(false) ?? new(); - - if (config.ListOfPlugins != null) - { - _listOfPlugins.Clear(); - foreach (var pluginName in config.ListOfPlugins) - _listOfPlugins.TryAdd(pluginName, value: false); - } - - foreach (var pluginName in _listOfPlugins.Keys) - { - _listOfPlugins[pluginName] = PluginWatcherService.GetInitialPluginState(_pluginInterface, pluginName)?.IsLoaded ?? false; - Mediator.SubscribeKeyed(this, pluginName, (msg) => - { - _listOfPlugins[pluginName] = msg.IsLoaded; - _logger.LogDebug("{pluginName} isLoaded = {isLoaded}", pluginName, msg.IsLoaded); - Update(); - }); - } - - Update(); - } - - public Task StopAsync(CancellationToken cancellationToken) - { - RevertGposers(); - return Task.CompletedTask; - } - - private void Update() - { - bool anyLoadedNow = _listOfPlugins.Values.Any(p => p); - - if (AnyLoaded != anyLoadedNow) - { - AnyLoaded = anyLoadedNow; - Mediator.Publish(new RecalculatePerformanceMessage(null)); - - if (AnyLoaded) - { - RevertGposers(); - var pluginList = string.Join(", ", _listOfPlugins.Where(p => p.Value).Select(p => p.Key)); - Mediator.Publish(new NotificationMessage("Incompatible plugin loaded", $"Synced player appearances will not apply until incompatible plugins are disabled: {pluginList}.", - NotificationType.Error)); - ActivePlugins = pluginList; - } - else - { - ActivePlugins = string.Empty; - } - } - } -} \ No newline at end of file diff --git a/MareSynchronos/Services/NotificationService.cs b/MareSynchronos/Services/NotificationService.cs index f3b5527..9a48c57 100644 --- a/MareSynchronos/Services/NotificationService.cs +++ b/MareSynchronos/Services/NotificationService.cs @@ -41,19 +41,19 @@ public class NotificationService : DisposableMediatorSubscriberBase, IHostedServ private void PrintErrorChat(string? message) { - SeStringBuilder se = new SeStringBuilder().AddText("[UmbraSyncSync] Error: " + message); + SeStringBuilder se = new SeStringBuilder().AddText("[UmbraSync] Error: " + message); _chatGui.PrintError(se.BuiltString); } private void PrintInfoChat(string? message) { - SeStringBuilder se = new SeStringBuilder().AddText("[UmbraSyncSync] Info: ").AddItalics(message ?? string.Empty); + SeStringBuilder se = new SeStringBuilder().AddText("[UmbraSync] Info: ").AddItalics(message ?? string.Empty); _chatGui.Print(se.BuiltString); } private void PrintWarnChat(string? message) { - SeStringBuilder se = new SeStringBuilder().AddText("[UmbraSyncSync] ").AddUiForeground("Warning: " + (message ?? string.Empty), 31).AddUiForegroundOff(); + SeStringBuilder se = new SeStringBuilder().AddText("[UmbraSync] ").AddUiForeground("Warning: " + (message ?? string.Empty), 31).AddUiForegroundOff(); _chatGui.Print(se.BuiltString); } diff --git a/MareSynchronos/Services/RemoteConfigurationService.cs b/MareSynchronos/Services/RemoteConfigurationService.cs deleted file mode 100644 index 763f7a1..0000000 --- a/MareSynchronos/Services/RemoteConfigurationService.cs +++ /dev/null @@ -1,201 +0,0 @@ -using Chaos.NaCl; -using MareSynchronos.MareConfiguration; -using Microsoft.Extensions.Logging; -using System.Net; -using System.Net.Http.Headers; -using System.Reflection; -using System.Text; -using System.Text.Json; -using System.Text.Json.Nodes; - -namespace MareSynchronos.Services; - -public sealed class RemoteConfigurationService -{ - private readonly static Dictionary ConfigPublicKeys = new(StringComparer.Ordinal) - { - { "UMBR4KEY", "+MwCXedODmU+yD7vtdI+Ho2iLx+PV3U0H2XRLP/gReA=" } - }; - - private readonly static string[] ConfigSources = [ - "https://umbra-sync.net/config/umbra.json" - ]; - - private readonly ILogger _logger; - private readonly RemoteConfigCacheService _configService; - private readonly Task _initTask; - - public RemoteConfigurationService(ILogger logger, RemoteConfigCacheService configService) - { - _logger = logger; - _configService = configService; - _initTask = Task.Run(DownloadConfig); - } - - public async Task GetConfigAsync(string sectionName) - { - await _initTask.ConfigureAwait(false); - if (!_configService.Current.Configuration.TryGetPropertyValue(sectionName, out var section)) - section = null; - return (section as JsonObject) ?? new(); - } - - public async Task GetConfigAsync(string sectionName) - { - try - { - var json = await GetConfigAsync(sectionName).ConfigureAwait(false); - return JsonSerializer.Deserialize(json); - } - catch (JsonException ex) - { - _logger.LogWarning(ex, "Invalid JSON in remote config: {sectionName}", sectionName); - return default; - } - } - - private async Task DownloadConfig() - { - string? jsonResponse = null; - - foreach (var remoteUrl in ConfigSources) - { - try - { - _logger.LogDebug("Fetching {url}", remoteUrl); - - using var httpClient = new HttpClient( - new HttpClientHandler - { - AllowAutoRedirect = true, - MaxAutomaticRedirections = 5 - } - ); - - httpClient.Timeout = TimeSpan.FromSeconds(6); - - var ver = Assembly.GetExecutingAssembly().GetName().Version; - httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("MareSynchronos", ver!.Major + "." + ver!.Minor + "." + ver!.Build)); - - var request = new HttpRequestMessage(HttpMethod.Get, remoteUrl); - - if (remoteUrl.Equals(_configService.Current.Origin, StringComparison.Ordinal)) - { - if (!string.IsNullOrEmpty(_configService.Current.ETag)) - request.Headers.IfNoneMatch.Add(new EntityTagHeaderValue(_configService.Current.ETag)); - - if (_configService.Current.LastModified != null) - request.Headers.IfModifiedSince = _configService.Current.LastModified; - } - - var response = await httpClient.SendAsync(request).ConfigureAwait(false); - - if (response.StatusCode == HttpStatusCode.NotModified) - { - _logger.LogDebug("Using cached remote configuration from {url}", remoteUrl); - return; - } - - response.EnsureSuccessStatusCode(); - - var contentType = response.Content.Headers.ContentType?.MediaType; - - if (contentType == null || !contentType.Equals("application/json", StringComparison.Ordinal)) - { - _logger.LogWarning("HTTP request for remote config failed: wrong MIME type"); - continue; - } - - _logger.LogInformation("Downloaded new configuration from {url}", remoteUrl); - - _configService.Current.Origin = remoteUrl; - _configService.Current.ETag = response.Headers.ETag?.ToString() ?? string.Empty; - - try - { - if (response.Content.Headers.Contains("Last-Modified")) - { - var lastModified = response.Content.Headers.GetValues("Last-Modified").First(); - _configService.Current.LastModified = DateTimeOffset.Parse(lastModified, System.Globalization.CultureInfo.InvariantCulture); - } - } - catch - { - _configService.Current.LastModified = null; - } - - jsonResponse = await response.Content.ReadAsStringAsync().ConfigureAwait(false); - break; - } - catch (Exception ex) - { - _logger.LogWarning(ex, "HTTP request for remote config failed"); - - if (remoteUrl.Equals(_configService.Current.Origin, StringComparison.Ordinal)) - { - _configService.Current.ETag = string.Empty; - _configService.Current.LastModified = null; - _configService.Save(); - } - } - } - - if (jsonResponse == null) - { - _logger.LogWarning("Could not download remote config"); - return; - } - - try - { - var jsonDoc = JsonNode.Parse(jsonResponse) as JsonObject; - - if (jsonDoc == null) - { - _logger.LogWarning("Downloaded remote config is not a JSON object"); - return; - } - - LoadConfig(jsonDoc); - } - catch (JsonException ex) - { - _logger.LogWarning(ex, "Invalid JSON in remote config response"); - } - } - - private static bool VerifySignature(string message, ulong ts, string signature, string pubKey) - { - byte[] msg = [.. BitConverter.GetBytes(ts), .. Encoding.UTF8.GetBytes(message)]; - byte[] sig = Convert.FromBase64String(signature); - byte[] pub = Convert.FromBase64String(pubKey); - return Ed25519.Verify(sig, msg, pub); - } - - private void LoadConfig(JsonObject jsonDoc) - { - var ts = jsonDoc["ts"]!.GetValue(); - - if (ts <= _configService.Current.Timestamp) - { - _logger.LogDebug("Remote configuration is not newer than cached config"); - return; - } - - var signatures = jsonDoc["sig"]!.AsObject(); - var configString = jsonDoc["config"]!.GetValue(); - bool verified = signatures.Any(sig => - ConfigPublicKeys.TryGetValue(sig.Key, out var pubKey) && - VerifySignature(configString, ts, sig.Value!.GetValue(), pubKey)); - - if (!verified) - { - _logger.LogWarning("Could not verify signature for downloaded remote config"); - return; - } - - _configService.Current.Configuration = JsonNode.Parse(configString)!.AsObject(); - _configService.Current.Timestamp = ts; - _configService.Save(); - } -} diff --git a/MareSynchronos/Services/RepoChangeConfig.cs b/MareSynchronos/Services/RepoChangeConfig.cs deleted file mode 100644 index eaf0b2e..0000000 --- a/MareSynchronos/Services/RepoChangeConfig.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Text.Json.Serialization; - -namespace MareSynchronos.Services; - -public record RepoChangeConfig -{ - [JsonPropertyName("current_repo")] - public string? CurrentRepo { get; set; } - - [JsonPropertyName("valid_repos")] - public string[]? ValidRepos { get; set; } -} \ No newline at end of file diff --git a/MareSynchronos/Services/RepoChangeService.cs b/MareSynchronos/Services/RepoChangeService.cs deleted file mode 100644 index 3265e02..0000000 --- a/MareSynchronos/Services/RepoChangeService.cs +++ /dev/null @@ -1,401 +0,0 @@ -using Dalamud.Plugin; -using Dalamud.Plugin.Services; -using Dalamud.Utility; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Logging; -using System.Reflection; - -namespace MareSynchronos.Services; - -/* Reflection code based almost entirely on ECommons DalamudReflector - -MIT License - -Copyright (c) 2023 NightmareXIV - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -*/ - -public sealed class RepoChangeService : IHostedService -{ - #region Reflection Helpers - private const BindingFlags AllFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static; - private const BindingFlags StaticFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static; - private const BindingFlags InstanceFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance; - - private static object GetFoP(object obj, string name) - { - Type? type = obj.GetType(); - while (type != null) - { - var fieldInfo = type.GetField(name, AllFlags); - if (fieldInfo != null) - { - return fieldInfo.GetValue(obj)!; - } - var propertyInfo = type.GetProperty(name, AllFlags); - if (propertyInfo != null) - { - return propertyInfo.GetValue(obj)!; - } - type = type.BaseType; - } - throw new Exception($"Reflection GetFoP failed (not found: {obj.GetType().Name}.{name})"); - } - - private static T GetFoP(object obj, string name) - { - return (T)GetFoP(obj, name); - } - - private static void SetFoP(object obj, string name, object value) - { - var type = obj.GetType(); - var field = type.GetField(name, AllFlags); - if (field != null) - { - field.SetValue(obj, value); - } - else - { - var prop = type.GetProperty(name, AllFlags)!; - if (prop == null) - throw new Exception($"Reflection SetFoP failed (not found: {type.Name}.{name})"); - prop.SetValue(obj, value); - } - } - - private static object? Call(object obj, string name, object[] @params, bool matchExactArgumentTypes = false) - { - MethodInfo? info; - var type = obj.GetType(); - if (!matchExactArgumentTypes) - { - info = type.GetMethod(name, AllFlags); - } - else - { - info = type.GetMethod(name, AllFlags, @params.Select(x => x.GetType()).ToArray()); - } - if (info == null) - throw new Exception($"Reflection Call failed (not found: {type.Name}.{name})"); - return info.Invoke(obj, @params); - } - - private static T Call(object obj, string name, object[] @params, bool matchExactArgumentTypes = false) - { - return (T)Call(obj, name, @params, matchExactArgumentTypes)!; - } - #endregion - - #region Dalamud Reflection - public object GetService(string serviceFullName) - { - return _pluginInterface.GetType().Assembly. - GetType("Dalamud.Service`1", true)!.MakeGenericType(_pluginInterface.GetType().Assembly.GetType(serviceFullName, true)!). - GetMethod("Get")!.Invoke(null, BindingFlags.Default, null, Array.Empty(), null)!; - } - - private object GetPluginManager() - { - return _pluginInterface.GetType().Assembly. - GetType("Dalamud.Service`1", true)!.MakeGenericType(_pluginInterface.GetType().Assembly.GetType("Dalamud.Plugin.Internal.PluginManager", true)!). - GetMethod("Get")!.Invoke(null, BindingFlags.Default, null, Array.Empty(), null)!; - } - - private void ReloadPluginMasters() - { - var mgr = GetService("Dalamud.Plugin.Internal.PluginManager"); - var pluginReload = mgr.GetType().GetMethod("SetPluginReposFromConfigAsync", BindingFlags.Instance | BindingFlags.Public)!; - pluginReload.Invoke(mgr, [true]); - } - - public void SaveDalamudConfig() - { - var conf = GetService("Dalamud.Configuration.Internal.DalamudConfiguration"); - var configSave = conf?.GetType().GetMethod("QueueSave", BindingFlags.Instance | BindingFlags.Public); - configSave?.Invoke(conf, null); - } - - private IEnumerable GetRepoByURL(string repoURL) - { - var conf = GetService("Dalamud.Configuration.Internal.DalamudConfiguration"); - var repolist = (System.Collections.IEnumerable)GetFoP(conf, "ThirdRepoList"); - foreach (var r in repolist) - { - if (((string)GetFoP(r, "Url")).Equals(repoURL, StringComparison.OrdinalIgnoreCase)) - yield return r; - } - } - - private bool HasRepo(string repoURL) - { - var conf = GetService("Dalamud.Configuration.Internal.DalamudConfiguration"); - var repolist = (System.Collections.IEnumerable)GetFoP(conf, "ThirdRepoList"); - foreach (var r in repolist) - { - if (((string)GetFoP(r, "Url")).Equals(repoURL, StringComparison.OrdinalIgnoreCase)) - return true; - } - return false; - } - - private void AddRepo(string repoURL, bool enabled) - { - var conf = GetService("Dalamud.Configuration.Internal.DalamudConfiguration"); - var repolist = (System.Collections.IEnumerable)GetFoP(conf, "ThirdRepoList"); - foreach (var r in repolist) - { - if (((string)GetFoP(r, "Url")).Equals(repoURL, StringComparison.OrdinalIgnoreCase)) - return; - } - var instance = Activator.CreateInstance(_pluginInterface.GetType().Assembly.GetType("Dalamud.Configuration.ThirdPartyRepoSettings")!)!; - SetFoP(instance, "Url", repoURL); - SetFoP(instance, "IsEnabled", enabled); - GetFoP(conf, "ThirdRepoList").Add(instance!); - } - - private void RemoveRepo(string repoURL) - { - var toRemove = new List(); - var conf = GetService("Dalamud.Configuration.Internal.DalamudConfiguration"); - var repolist = (System.Collections.IList)GetFoP(conf, "ThirdRepoList"); - foreach (var r in repolist) - { - if (((string)GetFoP(r, "Url")).Equals(repoURL, StringComparison.OrdinalIgnoreCase)) - toRemove.Add(r); - } - foreach (var r in toRemove) - repolist.Remove(r); - } - - public List<(object LocalPlugin, string InstalledFromUrl)> GetLocalPluginsByName(string internalName) - { - List<(object LocalPlugin, string RepoURL)> result = []; - - var pluginManager = GetPluginManager(); - var installedPlugins = (System.Collections.IList)pluginManager.GetType().GetProperty("InstalledPlugins")!.GetValue(pluginManager)!; - - foreach (var plugin in installedPlugins) - { - if (((string)plugin.GetType().GetProperty("InternalName")!.GetValue(plugin)!).Equals(internalName, StringComparison.Ordinal)) - { - var type = plugin.GetType(); - if (type.Name.Equals("LocalDevPlugin", StringComparison.Ordinal)) - continue; - var manifest = GetFoP(plugin, "manifest"); - string installedFromUrl = (string)GetFoP(manifest, "InstalledFromUrl"); - result.Add((plugin, installedFromUrl)); - } - } - - return result; - } - #endregion - - private readonly ILogger _logger; - private readonly RemoteConfigurationService _remoteConfig; - private readonly IDalamudPluginInterface _pluginInterface; - private readonly IFramework _framework; - - public RepoChangeService(ILogger logger, RemoteConfigurationService remoteConfig, IDalamudPluginInterface pluginInterface, IFramework framework) - { - _logger = logger; - _remoteConfig = remoteConfig; - _pluginInterface = pluginInterface; - _framework = framework; - } - - public async Task StartAsync(CancellationToken cancellationToken) - { - _logger.LogDebug("Starting RepoChange Service"); - var repoChangeConfig = await _remoteConfig.GetConfigAsync("repoChange").ConfigureAwait(false) ?? new(); - - var currentRepo = repoChangeConfig.CurrentRepo; - var validRepos = (repoChangeConfig.ValidRepos ?? []).ToList(); - - if (!currentRepo.IsNullOrEmpty() && !validRepos.Contains(currentRepo, StringComparer.Ordinal)) - validRepos.Add(currentRepo); - - if (validRepos.Count == 0) - { - _logger.LogInformation("No valid repos configured, skipping"); - return; - } - - await _framework.RunOnTick(() => - { - try - { - var internalName = Assembly.GetExecutingAssembly().GetName().Name!; - var localPlugins = GetLocalPluginsByName(internalName); - - var suffix = string.Empty; - - if (localPlugins.Count == 0) - { - _logger.LogInformation("Skipping: No intalled plugin found"); - return; - } - - var hasValidCustomRepoUrl = false; - - foreach (var vr in validRepos) - { - var vrCN = vr.Replace(".json", "_CN.json", StringComparison.Ordinal); - var vrKR = vr.Replace(".json", "_KR.json", StringComparison.Ordinal); - if (HasRepo(vr) || HasRepo(vrCN) || HasRepo(vrKR)) - { - hasValidCustomRepoUrl = true; - break; - } - } - - List oldRepos = []; - var pluginRepoUrl = localPlugins[0].InstalledFromUrl; - - if (pluginRepoUrl.Contains("_CN.json", StringComparison.Ordinal)) - suffix = "_CN"; - else if (pluginRepoUrl.Contains("_KR.json", StringComparison.Ordinal)) - suffix = "_KR"; - - bool hasOldPluginRepoUrl = false; - - foreach (var plugin in localPlugins) - { - foreach (var vr in validRepos) - { - var validRepo = vr.Replace(".json", $"{suffix}.json"); - if (!plugin.InstalledFromUrl.Equals(validRepo, StringComparison.Ordinal)) - { - oldRepos.Add(plugin.InstalledFromUrl); - hasOldPluginRepoUrl = true; - } - } - } - - if (hasValidCustomRepoUrl) - { - if (hasOldPluginRepoUrl) - _logger.LogInformation("Result: Repo URL is up to date, but plugin install source is incorrect"); - else - _logger.LogInformation("Result: Repo URL is up to date"); - } - else - { - _logger.LogInformation("Result: Repo URL needs to be replaced"); - } - - if (currentRepo.IsNullOrEmpty()) - { - _logger.LogWarning("No current repo URL configured"); - return; - } - - // Pre-test plugin repo url rewriting to ensure it succeeds before replacing the custom repo URL - if (hasOldPluginRepoUrl) - { - foreach (var plugin in localPlugins) - { - var manifest = GetFoP(plugin.LocalPlugin, "manifest"); - if (manifest == null) - throw new Exception("Plugin manifest is null"); - var manifestFile = GetFoP(plugin.LocalPlugin, "manifestFile"); - if (manifestFile == null) - throw new Exception("Plugin manifestFile is null"); - var repo = GetFoP(manifest, "InstalledFromUrl"); - if (((string)repo).IsNullOrEmpty()) - throw new Exception("Plugin repo url is null or empty"); - SetFoP(manifest, "InstalledFromUrl", repo); - } - } - - if (!hasValidCustomRepoUrl) - { - try - { - foreach (var oldRepo in oldRepos) - { - _logger.LogInformation("* Removing old repo: {r}", oldRepo); - RemoveRepo(oldRepo); - } - } - finally - { - _logger.LogInformation("* Adding current repo: {r}", currentRepo); - AddRepo(currentRepo, true); - } - } - - // This time do it for real, and crash the game if we fail, to avoid saving a broken state - if (hasOldPluginRepoUrl) - { - try - { - _logger.LogInformation("* Updating plugins"); - foreach (var plugin in localPlugins) - { - var manifest = GetFoP(plugin.LocalPlugin, "manifest"); - if (manifest == null) - throw new Exception("Plugin manifest is null"); - var manifestFile = GetFoP(plugin.LocalPlugin, "manifestFile"); - if (manifestFile == null) - throw new Exception("Plugin manifestFile is null"); - var repo = GetFoP(manifest, "InstalledFromUrl"); - if (((string)repo).IsNullOrEmpty()) - throw new Exception("Plugin repo url is null or empty"); - SetFoP(manifest, "InstalledFromUrl", currentRepo); - Call(manifest, "Save", [manifestFile, "RepoChange"]); - } - } - catch (Exception ex) - { - _logger.LogError(ex, "Exception while changing plugin install repo"); - foreach (var oldRepo in oldRepos) - { - _logger.LogInformation("* Restoring old repo: {r}", oldRepo); - AddRepo(oldRepo, true); - } - } - } - - if (!hasValidCustomRepoUrl || hasOldPluginRepoUrl) - { - _logger.LogInformation("* Saving dalamud config"); - SaveDalamudConfig(); - _logger.LogInformation("* Reloading plugin masters"); - ReloadPluginMasters(); - } - } - catch (Exception ex) - { - _logger.LogError(ex, "Exception in RepoChangeService"); - } - }, default, 10, cancellationToken).ConfigureAwait(false); - _logger.LogInformation("Started RepoChangeService"); - } - - public Task StopAsync(CancellationToken cancellationToken) - { - _ = cancellationToken; - _logger.LogDebug("Stopping RepoChange Service"); - return Task.CompletedTask; - } -} diff --git a/MareSynchronos/Services/ServerConfiguration/ServerConfigurationManager.cs b/MareSynchronos/Services/ServerConfiguration/ServerConfigurationManager.cs index 7e8056d..83410e2 100644 --- a/MareSynchronos/Services/ServerConfiguration/ServerConfigurationManager.cs +++ b/MareSynchronos/Services/ServerConfiguration/ServerConfigurationManager.cs @@ -496,17 +496,17 @@ public class ServerConfigurationManager private void EnsureMainExists() { - bool lopExists = false; + bool elfExists = false; for (int i = 0; i < _configService.Current.ServerStorage.Count; ++i) { var x = _configService.Current.ServerStorage[i]; - if (x.ServerUri.Equals(ApiController.UmbraSyncServiceUri, StringComparison.OrdinalIgnoreCase)) - lopExists = true; + if (x.ServerUri.Equals(ApiController.UmbraServiceUri, StringComparison.OrdinalIgnoreCase)) + elfExists = true; } - if (!lopExists) + if (!elfExists) { - _logger.LogDebug("Re-adding missing server {uri}", ApiController.UmbraSyncServiceUri); - _configService.Current.ServerStorage.Insert(0, new ServerStorage() { ServerUri = ApiController.UmbraSyncServiceUri, ServerName = ApiController.UmbraSyncServer }); + _logger.LogDebug("Re-adding missing server {uri}", ApiController.UmbraServiceUri); + _configService.Current.ServerStorage.Insert(0, new ServerStorage() { ServerUri = ApiController.UmbraServiceUri, ServerName = ApiController.UmbraServer }); if (_configService.Current.CurrentServer >= 0) _configService.Current.CurrentServer++; } diff --git a/MareSynchronos/UI/CharaDataHubUi.cs b/MareSynchronos/UI/CharaDataHubUi.cs index 88ddb4e..683d35f 100644 --- a/MareSynchronos/UI/CharaDataHubUi.cs +++ b/MareSynchronos/UI/CharaDataHubUi.cs @@ -79,7 +79,7 @@ internal sealed partial class CharaDataHubUi : WindowMediatorSubscriberBase UiSharedService uiSharedService, ServerConfigurationManager serverConfigurationManager, DalamudUtilService dalamudUtilService, FileDialogManager fileDialogManager, PairManager pairManager, CharaDataGposeTogetherManager charaDataGposeTogetherManager) - : base(logger, mediator, "UmbraSync Character Data Hub###UmbraSyncCharaDataUI", performanceCollectorService) + : base(logger, mediator, "Umbra Character Data Hub###UmbraCharaDataUI", performanceCollectorService) { SetWindowSizeConstraints(); diff --git a/MareSynchronos/UI/DownloadUi.cs b/MareSynchronos/UI/DownloadUi.cs index e6fc546..fe60cf2 100644 --- a/MareSynchronos/UI/DownloadUi.cs +++ b/MareSynchronos/UI/DownloadUi.cs @@ -23,7 +23,7 @@ public class DownloadUi : WindowMediatorSubscriberBase public DownloadUi(ILogger logger, DalamudUtilService dalamudUtilService, MareConfigService configService, FileUploadManager fileTransferManager, MareMediator mediator, UiSharedService uiShared, PerformanceCollectorService performanceCollectorService) - : base(logger, mediator, "UmbraSync Downloads", performanceCollectorService) + : base(logger, mediator, "Umbra Downloads", performanceCollectorService) { _dalamudUtilService = dalamudUtilService; _configService = configService; @@ -163,13 +163,13 @@ public class DownloadUi : WindowMediatorSubscriberBase UiSharedService.Color(0, 0, 0, transparency), 1); drawList.AddRectFilled(dlBarStart with { X = dlBarStart.X - dlBarBorder, Y = dlBarStart.Y - dlBarBorder }, dlBarEnd with { X = dlBarEnd.X + dlBarBorder, Y = dlBarEnd.Y + dlBarBorder }, - UiSharedService.Color(220, 220, 220, transparency), 1); + UiSharedService.Color(220, 220, 255, transparency), 1); drawList.AddRectFilled(dlBarStart, dlBarEnd, UiSharedService.Color(0, 0, 0, transparency), 1); var dlProgressPercent = transferredBytes / (double)totalBytes; drawList.AddRectFilled(dlBarStart, dlBarEnd with { X = dlBarStart.X + (float)(dlProgressPercent * dlBarWidth) }, - UiSharedService.Color(50, 205, 50, transparency), 1); + UiSharedService.Color(100, 100, 255, transparency), 1); if (_configService.Current.TransferBarsShowText) { diff --git a/MareSynchronos/UI/DtrEntry.cs b/MareSynchronos/UI/DtrEntry.cs index 14e535e..e75194c 100644 --- a/MareSynchronos/UI/DtrEntry.cs +++ b/MareSynchronos/UI/DtrEntry.cs @@ -104,7 +104,7 @@ public sealed class DtrEntry : IDisposable, IHostedService private IDtrBarEntry CreateEntry() { _logger.LogTrace("Creating new DtrBar entry"); - var entry = _dtrBar.Get("UmbraSync"); + var entry = _dtrBar.Get("Umbra"); entry.OnClick = _ => _mareMediator.Publish(new UiToggleMessage(typeof(CompactUi))); return entry; @@ -163,19 +163,19 @@ public sealed class DtrEntry : IDisposable, IHostedService .Select(x => string.Format("{0}", _configService.Current.PreferNoteInDtrTooltip ? x.GetNoteOrName() : x.PlayerName)); } - tooltip = $"UmbraSync: Connected{Environment.NewLine}----------{Environment.NewLine}{string.Join(Environment.NewLine, visiblePairs)}"; + tooltip = $"Umbra: Connected{Environment.NewLine}----------{Environment.NewLine}{string.Join(Environment.NewLine, visiblePairs)}"; colors = _configService.Current.DtrColorsPairsInRange; } else { - tooltip = "UmbraSync: Connected"; + tooltip = "Umbra: Connected"; colors = _configService.Current.DtrColorsDefault; } } else { text = RenderDtrStyle(_configService.Current.DtrStyle, "\uE04C"); - tooltip = "UmbraSync: Not Connected"; + tooltip = "Umbra: Not Connected"; colors = _configService.Current.DtrColorsNotConnected; } diff --git a/MareSynchronos/UI/EditProfileUi.cs b/MareSynchronos/UI/EditProfileUi.cs index d0c0628..4f4f623 100644 --- a/MareSynchronos/UI/EditProfileUi.cs +++ b/MareSynchronos/UI/EditProfileUi.cs @@ -35,7 +35,7 @@ public class EditProfileUi : WindowMediatorSubscriberBase ApiController apiController, UiSharedService uiSharedService, FileDialogManager fileDialogManager, ServerConfigurationManager serverConfigurationManager, MareProfileManager mareProfileManager, PerformanceCollectorService performanceCollectorService) - : base(logger, mediator, "UmbraSync Edit Profile###UmbraSyncSyncEditProfileUI", performanceCollectorService) + : base(logger, mediator, "Umbra Edit Profile###UmbraSyncEditProfileUI", performanceCollectorService) { IsOpen = false; this.SizeConstraints = new() diff --git a/MareSynchronos/UI/IntroUI.cs b/MareSynchronos/UI/IntroUI.cs index 509d9b0..0b64c1b 100644 --- a/MareSynchronos/UI/IntroUI.cs +++ b/MareSynchronos/UI/IntroUI.cs @@ -38,7 +38,7 @@ public partial class IntroUi : WindowMediatorSubscriberBase public IntroUi(ILogger logger, UiSharedService uiShared, MareConfigService configService, CacheMonitor fileCacheManager, ServerConfigurationManager serverConfigurationManager, MareMediator mareMediator, - PerformanceCollectorService performanceCollectorService, DalamudUtilService dalamudUtilService, AccountRegistrationService registerService) : base(logger, mareMediator, "UmbraSync Setup", performanceCollectorService) + PerformanceCollectorService performanceCollectorService, DalamudUtilService dalamudUtilService, AccountRegistrationService registerService) : base(logger, mareMediator, "Umbra Setup", performanceCollectorService) { _uiShared = uiShared; _configService = configService; @@ -108,9 +108,9 @@ public partial class IntroUi : WindowMediatorSubscriberBase if (!_configService.Current.AcceptedAgreement && !_readFirstPage) { - _uiShared.BigText("Welcome to UmbraSync"); + _uiShared.BigText("Welcome to Umbra"); ImGui.Separator(); - UiSharedService.TextWrapped("UmbraSync is a plugin that will replicate your full current character state including all Penumbra mods to other paired users. " + + UiSharedService.TextWrapped("Umbra is a plugin that will replicate your full current character state including all Penumbra mods to other paired users. " + "Note that you will have to have Penumbra as well as Glamourer installed to use this plugin."); UiSharedService.TextWrapped("We will have to setup a few things first before you can start using this plugin. Click on next to continue."); @@ -151,25 +151,36 @@ public partial class IntroUi : WindowMediatorSubscriberBase UiSharedService.ColorText(readThis, ImGuiColors.DalamudRed); ImGui.SetWindowFontScale(1.0f); ImGui.Separator(); - UiSharedService.TextWrapped(""" -All of the mod files currently active on your character as well as your current character state will be uploaded to the service you registered yourself at automatically. The plugin will exclusively upload the necessary mod files and not the whole mod. -"""); + To use Umbra, you must be over the age of 18, or 21 in some jurisdictions. + """); UiSharedService.TextWrapped(""" -If you are on a data capped internet connection, higher fees due to data usage depending on the amount of downloaded and uploaded mod files might occur. Mod files will be compressed on up- and download to save on bandwidth usage. Due to varying up- and download speeds, changes in characters might not be visible immediately. Files present on the service that already represent your active mod files will not be uploaded again. -"""); + All of the mod files currently active on your character as well as your current character state will be uploaded to the service you registered yourself at automatically. The plugin will exclusively upload the necessary mod files and not the whole mod. + """); UiSharedService.TextWrapped(""" -The mod files you are uploading are confidential and will not be distributed to parties other than the ones who are requesting the exact same mod files. Please think about who you are going to pair since it is unavoidable that they will receive and locally cache the necessary mod files that you have currently in use. Locally cached mod files will have arbitrary file names to discourage attempts at replicating the original mod. -"""); + If you are on a data capped internet connection, higher fees due to data usage depending on the amount of downloaded and uploaded mod files might occur. Mod files will be compressed on up- and download to save on bandwidth usage. Due to varying up- and download speeds, changes in characters might not be visible immediately. Files present on the service that already represent your active mod files will not be uploaded again. + """); UiSharedService.TextWrapped(""" -The plugin creator tried their best to keep you secure. However, there is no guarantee for 100% security. Do not blindly pair your client with everyone. -"""); + The mod files you are uploading are confidential and will not be distributed to parties other than the ones who are requesting the exact same mod files. Please think about who you are going to pair since it is unavoidable that they will receive and locally cache the necessary mod files that you have currently in use. Locally cached mod files will have arbitrary file names to discourage attempts at replicating the original mod. + """); UiSharedService.TextWrapped(""" -Mod files that are saved on the service will remain on the service as long as there are requests for the files from clients. After a period of not being used, the mod files will be automatically deleted. -"""); + The plugin creator tried their best to keep you secure. However, there is no guarantee for 100% security. Do not blindly pair your client with everyone. + """); UiSharedService.TextWrapped(""" -This service is provided as-is. -"""); + Mod files that are saved on the service will remain on the service as long as there are requests for the files from clients. After a period of not being used, the mod files will be automatically deleted. + """); + UiSharedService.TextWrapped(""" + Accounts that are inactive for ninety (90) days will be deleted for privacy reasons. + """); + UiSharedService.TextWrapped(""" + Umbra is operated from servers located in the European Union. You agree not to upload any content to the service that violates EU law; and more specifically, German law. + """); + UiSharedService.TextWrapped(""" + You may delete your account at any time from within the Settings panel of the plugin. Any mods unique to you will then be removed from the server within 14 days. + """); + UiSharedService.TextWrapped(""" + This service is provided as-is. + """); ImGui.Separator(); if (_timeoutTask?.IsCompleted ?? true) @@ -201,11 +212,11 @@ This service is provided as-is. } else { - UiSharedService.TextWrapped("To not unnecessary download files already present on your computer, UmbraSync will have to scan your Penumbra mod directory. " + - "Additionally, a local storage folder must be set where UmbraSync will download other character files to. " + + UiSharedService.TextWrapped("To not unnecessary download files already present on your computer, Umbra will have to scan your Penumbra mod directory. " + + "Additionally, a local storage folder must be set where Umbra will download other character files to. " + "Once the storage folder is set and the scan complete, this page will automatically forward to registration at a service."); UiSharedService.TextWrapped("Note: The initial scan, depending on the amount of mods you have, might take a while. Please wait until it is completed."); - UiSharedService.ColorTextWrapped("Warning: once past this step you should not delete the FileCache.csv of UmbraSync in the Plugin Configurations folder of Dalamud. " + + UiSharedService.ColorTextWrapped("Warning: once past this step you should not delete the FileCache.csv of Umbra in the Plugin Configurations folder of Dalamud. " + "Otherwise on the next launch a full re-scan of the file cache database will be initiated.", ImGuiColors.DalamudYellow); UiSharedService.ColorTextWrapped("Warning: if the scan is hanging and does nothing for a long time, chances are high your Penumbra folder is not set up properly.", ImGuiColors.DalamudYellow); _uiShared.DrawCacheDirectorySetting(); @@ -230,8 +241,8 @@ This service is provided as-is. _configService.Current.UseCompactor = useFileCompactor; _configService.Save(); } - UiSharedService.ColorTextWrapped("The File Compactor can save a tremendeous amount of space on the hard disk for downloads through UmbraSync. It will incur a minor CPU penalty on download but can speed up " + - "loading of other characters. It is recommended to keep it enabled. You can change this setting later anytime in the UmbraSync settings.", ImGuiColors.DalamudYellow); + UiSharedService.ColorTextWrapped("The File Compactor can save a tremendeous amount of space on the hard disk for downloads through Umbra. It will incur a minor CPU penalty on download but can speed up " + + "loading of other characters. It is recommended to keep it enabled. You can change this setting later anytime in the Umbra settings.", ImGuiColors.DalamudYellow); } } else if (!_uiShared.ApiController.IsConnected) @@ -239,7 +250,7 @@ This service is provided as-is. using (_uiShared.UidFont.Push()) ImGui.TextUnformatted("Service Registration"); ImGui.Separator(); - UiSharedService.TextWrapped("To be able to use UmbraSync you will have to register an account."); + UiSharedService.TextWrapped("To be able to use Umbra you will have to register an account."); UiSharedService.TextWrapped("Refer to the instructions at the location you obtained this plugin for more information or support."); ImGui.Separator(); @@ -251,8 +262,8 @@ This service is provided as-is. { ImGui.BeginDisabled(_registrationInProgress || _registrationSuccess || _secretKey.Length > 0); ImGui.Separator(); - ImGui.TextUnformatted("If you have not used UmbraSync before, click below to register a new account."); - if (_uiShared.IconTextButton(FontAwesomeIcon.Plus, "Register a new UmbraSync account")) + ImGui.TextUnformatted("If you have not used Umbra before, click below to register a new account."); + if (_uiShared.IconTextButton(FontAwesomeIcon.Plus, "Register a new Umbra account")) { _registrationInProgress = true; _ = Task.Run(async () => { diff --git a/MareSynchronos/UI/PermissionWindowUI.cs b/MareSynchronos/UI/PermissionWindowUI.cs index 0b233cf..fe68c4d 100644 --- a/MareSynchronos/UI/PermissionWindowUI.cs +++ b/MareSynchronos/UI/PermissionWindowUI.cs @@ -22,7 +22,7 @@ public class PermissionWindowUI : WindowMediatorSubscriberBase public PermissionWindowUI(ILogger logger, Pair pair, MareMediator mediator, UiSharedService uiSharedService, ApiController apiController, PerformanceCollectorService performanceCollectorService) - : base(logger, mediator, "Permissions for " + pair.UserData.AliasOrUID + "###UmbraSyncSyncPermissions" + pair.UserData.UID, performanceCollectorService) + : base(logger, mediator, "Permissions for " + pair.UserData.AliasOrUID + "###UmbraSyncPermissions" + pair.UserData.UID, performanceCollectorService) { Pair = pair; _uiSharedService = uiSharedService; diff --git a/MareSynchronos/UI/PlayerAnalysisUI.cs b/MareSynchronos/UI/PlayerAnalysisUI.cs index 1806524..9d3da20 100644 --- a/MareSynchronos/UI/PlayerAnalysisUI.cs +++ b/MareSynchronos/UI/PlayerAnalysisUI.cs @@ -24,7 +24,7 @@ public class PlayerAnalysisUI : WindowMediatorSubscriberBase public PlayerAnalysisUI(ILogger logger, Pair pair, MareMediator mediator, UiSharedService uiSharedService, PerformanceCollectorService performanceCollectorService) - : base(logger, mediator, "Character Data Analysis for " + pair.UserData.AliasOrUID + "###UmbraSyncPairAnalysis" + pair.UserData.UID, performanceCollectorService) + : base(logger, mediator, "Character Data Analysis for " + pair.UserData.AliasOrUID + "###UmbraPairAnalysis" + pair.UserData.UID, performanceCollectorService) { Pair = pair; _uiSharedService = uiSharedService; diff --git a/MareSynchronos/UI/PopoutProfileUi.cs b/MareSynchronos/UI/PopoutProfileUi.cs index 1d051c8..ea540ca 100644 --- a/MareSynchronos/UI/PopoutProfileUi.cs +++ b/MareSynchronos/UI/PopoutProfileUi.cs @@ -29,7 +29,7 @@ public class PopoutProfileUi : WindowMediatorSubscriberBase public PopoutProfileUi(ILogger logger, MareMediator mediator, UiSharedService uiSharedService, ServerConfigurationManager serverManager, MareConfigService mareConfigService, - MareProfileManager mareProfileManager, PairManager pairManager, PerformanceCollectorService performanceCollectorService) : base(logger, mediator, "###UmbraSyncSyncPopoutProfileUI", performanceCollectorService) + MareProfileManager mareProfileManager, PairManager pairManager, PerformanceCollectorService performanceCollectorService) : base(logger, mediator, "###UmbraSyncPopoutProfileUI", performanceCollectorService) { _uiSharedService = uiSharedService; _serverManager = serverManager; diff --git a/MareSynchronos/UI/SettingsUi.cs b/MareSynchronos/UI/SettingsUi.cs index 7858d09..3ffc48b 100644 --- a/MareSynchronos/UI/SettingsUi.cs +++ b/MareSynchronos/UI/SettingsUi.cs @@ -76,7 +76,7 @@ public class SettingsUi : WindowMediatorSubscriberBase FileCacheManager fileCacheManager, FileCompactor fileCompactor, ApiController apiController, IpcManager ipcManager, IpcProvider ipcProvider, CacheMonitor cacheMonitor, - DalamudUtilService dalamudUtilService, AccountRegistrationService registerService) : base(logger, mediator, "UmbraSync Settings", performanceCollector) + DalamudUtilService dalamudUtilService, AccountRegistrationService registerService) : base(logger, mediator, "Umbra Settings", performanceCollector) { _configService = configService; _pairManager = pairManager; @@ -581,16 +581,16 @@ public class SettingsUi : WindowMediatorSubscriberBase _uiShared.BigText("Advanced"); bool mareApi = _configService.Current.MareAPI; - if (ImGui.Checkbox("Enable Umbra Synchronos API", ref mareApi)) + if (ImGui.Checkbox("Enable Umbra Sync API", ref mareApi)) { _configService.Current.MareAPI = mareApi; _configService.Save(); _ipcProvider.HandleMareImpersonation(); } - _uiShared.DrawHelpText("Enables handling of the UmbraSync API. This currently includes:\n\n" + + _uiShared.DrawHelpText("Enables handling of the Umbra Sync API. This currently includes:\n\n" + " - MCDF loading support for other plugins\n" + " - Blocking Moodles applications to paired users\n\n" + - "If the UmbraSync plugin is loaded while this option is enabled, control of its API will be relinquished."); + "If the Umbra Sync plugin is loaded while this option is enabled, control of its API will be relinquished."); using (_ = ImRaii.PushIndent()) { @@ -728,7 +728,7 @@ public class SettingsUi : WindowMediatorSubscriberBase _uiShared.BigText("Storage"); - UiSharedService.TextWrapped("UmbraSync stores downloaded files from paired people permanently. This is to improve loading performance and requiring less downloads. " + + UiSharedService.TextWrapped("Umbra stores downloaded files from paired people permanently. This is to improve loading performance and requiring less downloads. " + "The storage governs itself by clearing data beyond the set storage size. Please set the storage size accordingly. It is not necessary to manually clear the storage."); _uiShared.DrawFileScanState(); @@ -745,7 +745,7 @@ public class SettingsUi : WindowMediatorSubscriberBase } ImGui.AlignTextToFramePadding(); - ImGui.TextUnformatted("Monitoring UmbraSync Storage Folder: " + (_cacheMonitor.MareWatcher?.Path ?? "Not monitoring")); + ImGui.TextUnformatted("Monitoring Umbra Storage Folder: " + (_cacheMonitor.MareWatcher?.Path ?? "Not monitoring")); if (string.IsNullOrEmpty(_cacheMonitor.MareWatcher?.Path)) { ImGui.SameLine(); @@ -763,7 +763,7 @@ public class SettingsUi : WindowMediatorSubscriberBase _cacheMonitor.StartPenumbraWatcher(_ipcManager.Penumbra.ModDirectory); _cacheMonitor.InvokeScan(); } - UiSharedService.AttachToolTip("Attempts to resume monitoring for both Penumbra and UmbraSync Storage. " + UiSharedService.AttachToolTip("Attempts to resume monitoring for both Penumbra and Umbra Storage. " + "Resuming the monitoring will also force a full scan to run." + Environment.NewLine + "If the button remains present after clicking it, consult /xllog for errors"); } @@ -776,8 +776,8 @@ public class SettingsUi : WindowMediatorSubscriberBase _cacheMonitor.StopMonitoring(); } } - UiSharedService.AttachToolTip("Stops the monitoring for both Penumbra and UmbraSync Storage. " - + "Do not stop the monitoring, unless you plan to move the Penumbra and UmbraSync Storage folders, to ensure correct functionality of UmbraSync." + Environment.NewLine + UiSharedService.AttachToolTip("Stops the monitoring for both Penumbra and Umbra Storage. " + + "Do not stop the monitoring, unless you plan to move the Penumbra and Umbra Storage folders, to ensure correct functionality of Umbra." + Environment.NewLine + "If you stop the monitoring to move folders around, resume it after you are finished moving the files." + UiSharedService.TooltipSeparator + "Hold CTRL to enable this button"); } @@ -794,7 +794,7 @@ public class SettingsUi : WindowMediatorSubscriberBase bool useFileCompactor = _configService.Current.UseCompactor; if (!useFileCompactor && !isLinux) { - UiSharedService.ColorTextWrapped("Hint: To free up space when using UmbraSync consider enabling the File Compactor", ImGuiColors.DalamudYellow); + UiSharedService.ColorTextWrapped("Hint: To free up space when using Umbra consider enabling the File Compactor", ImGuiColors.DalamudYellow); } if (isLinux || !_cacheMonitor.StorageisNTFS) ImGui.BeginDisabled(); if (ImGui.Checkbox("Use file compactor", ref useFileCompactor)) @@ -903,7 +903,7 @@ public class SettingsUi : WindowMediatorSubscriberBase } UiSharedService.AttachToolTip("You normally do not need to do this. THIS IS NOT SOMETHING YOU SHOULD BE DOING TO TRY TO FIX SYNC ISSUES." + Environment.NewLine + "This will solely remove all downloaded data from all players and will require you to re-download everything again." + Environment.NewLine - + "UmbraSync's storage is self-clearing and will not surpass the limit you have set it to." + Environment.NewLine + + "Umbra's storage is self-clearing and will not surpass the limit you have set it to." + Environment.NewLine + "If you still think you need to do this hold CTRL while pressing the button."); if (!_readClearCache) ImGui.EndDisabled(); @@ -975,14 +975,14 @@ public class SettingsUi : WindowMediatorSubscriberBase _configService.Current.EnableRightClickMenus = enableRightClickMenu; _configService.Save(); } - _uiShared.DrawHelpText("This will add UmbraSync related right click menu entries in the game UI on paired players."); + _uiShared.DrawHelpText("This will add Umbra related right click menu entries in the game UI on paired players."); if (ImGui.Checkbox("Display status and visible pair count in Server Info Bar", ref enableDtrEntry)) { _configService.Current.EnableDtrEntry = enableDtrEntry; _configService.Save(); } - _uiShared.DrawHelpText("This will add UmbraSync connection status and visible pair count in the Server Info Bar.\nYou can further configure this through your Dalamud Settings."); + _uiShared.DrawHelpText("This will add Umbra connection status and visible pair count in the Server Info Bar.\nYou can further configure this through your Dalamud Settings."); using (ImRaii.Disabled(!enableDtrEntry)) { @@ -1744,7 +1744,7 @@ public class SettingsUi : WindowMediatorSubscriberBase if (true) // Enable registration button for all servers { ImGui.SameLine(); - if (_uiShared.IconTextButton(FontAwesomeIcon.Plus, "Register a new UmbraSync account")) + if (_uiShared.IconTextButton(FontAwesomeIcon.Plus, "Register a new Umbra account")) { _registrationInProgress = true; _ = Task.Run(async () => { @@ -1800,7 +1800,7 @@ public class SettingsUi : WindowMediatorSubscriberBase { var serverName = selectedServer.ServerName; var serverUri = selectedServer.ServerUri; - var isMain = string.Equals(serverName, ApiController.UmbraSyncServer, StringComparison.OrdinalIgnoreCase); + var isMain = string.Equals(serverName, ApiController.UmbraServer, StringComparison.OrdinalIgnoreCase); var flags = isMain ? ImGuiInputTextFlags.ReadOnly : ImGuiInputTextFlags.None; if (ImGui.InputText("Service URI", ref serverUri, 255, flags)) diff --git a/MareSynchronos/UI/StandaloneProfileUi.cs b/MareSynchronos/UI/StandaloneProfileUi.cs index 88a3573..469ef19 100644 --- a/MareSynchronos/UI/StandaloneProfileUi.cs +++ b/MareSynchronos/UI/StandaloneProfileUi.cs @@ -26,7 +26,7 @@ public class StandaloneProfileUi : WindowMediatorSubscriberBase public StandaloneProfileUi(ILogger logger, MareMediator mediator, UiSharedService uiBuilder, ServerConfigurationManager serverManager, MareProfileManager mareProfileManager, PairManager pairManager, Pair pair, PerformanceCollectorService performanceCollector) - : base(logger, mediator, "Profile of " + pair.UserData.AliasOrUID + "##UmbraSyncSyncStandaloneProfileUI" + pair.UserData.AliasOrUID, performanceCollector) + : base(logger, mediator, "Profile of " + pair.UserData.AliasOrUID + "##UmbraSyncStandaloneProfileUI" + pair.UserData.AliasOrUID, performanceCollector) { _uiSharedService = uiBuilder; _serverManager = serverManager; diff --git a/MareSynchronos/UI/UISharedService.cs b/MareSynchronos/UI/UISharedService.cs index cdbfb6f..649e3d9 100644 --- a/MareSynchronos/UI/UISharedService.cs +++ b/MareSynchronos/UI/UISharedService.cs @@ -534,7 +534,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase public void DrawCacheDirectorySetting() { - ColorTextWrapped("Note: The storage folder should be somewhere close to root (i.e. C:\\UmbraSyncStorage) in a new empty folder. DO NOT point this to your game folder. DO NOT point this to your Penumbra folder.", ImGuiColors.DalamudYellow); + ColorTextWrapped("Note: The storage folder should be somewhere close to root (i.e. C:\\UmbraStorage) in a new empty folder. DO NOT point this to your game folder. DO NOT point this to your Penumbra folder.", ImGuiColors.DalamudYellow); var cacheDirectory = _configService.Current.CacheFolder; ImGui.SetNextItemWidth(400 * ImGuiHelpers.GlobalScale); ImGui.InputText("Storage Folder##cache", ref cacheDirectory, 255, ImGuiInputTextFlags.ReadOnly); @@ -544,7 +544,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase { if (IconButton(FontAwesomeIcon.Folder)) { - FileDialogManager.OpenFolderDialog("Pick UmbraSync Storage Folder", (success, path) => + FileDialogManager.OpenFolderDialog("Pick Umbra Storage Folder", (success, path) => { if (!success) return; @@ -604,7 +604,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase } else if (_cacheDirectoryHasOtherFilesThanCache) { - ColorTextWrapped("Your selected directory has files or directories inside that are not UmbraSync related. Use an empty directory or a previous storage directory only.", ImGuiColors.DalamudRed); + ColorTextWrapped("Your selected directory has files or directories inside that are not Umbra related. Use an empty directory or a previous storage directory only.", ImGuiColors.DalamudRed); } else if (!_cacheDirectoryIsValidPath) { @@ -619,7 +619,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase _configService.Current.MaxLocalCacheInGiB = maxCacheSize; _configService.Save(); } - DrawHelpText("The storage is automatically governed by UmbraSync. It will clear itself automatically once it reaches the set capacity by removing the oldest unused files. You typically do not need to clear it yourself."); + DrawHelpText("The storage is automatically governed by Umbra. It will clear itself automatically once it reaches the set capacity by removing the oldest unused files. You typically do not need to clear it yourself."); } public T? DrawCombo(string comboName, IEnumerable comboItems, Func toName, @@ -848,17 +848,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase if (!_penumbraExists || !_glamourerExists) { - ImGui.TextColored(ImGuiColors.DalamudRed, "You need to install both Penumbra and Glamourer and keep them up to date to use UmbraSync."); - return false; - } - else if (NoSnapService.AnyLoaded) - { - IconText(FontAwesomeIcon.ExclamationTriangle, ImGuiColors.DalamudYellow); - ImGui.SameLine(); - var cursorX = ImGui.GetCursorPosX(); - ImGui.TextColored(ImGuiColors.DalamudYellow, "Synced player appearances will not apply until incompatible plugins are disabled:"); - ImGui.SetCursorPosX(cursorX + 16.0f); - ImGui.TextColored(ImGuiColors.DalamudYellow, NoSnapService.ActivePlugins); + ImGui.TextColored(ImGuiColors.DalamudRed, "You need to install both Penumbra and Glamourer and keep them up to date to use Umbra."); return false; } diff --git a/MareSynchronos/UmbraSync.json b/MareSynchronos/UmbraSync.json index b147c8d..bcbc7a8 100644 --- a/MareSynchronos/UmbraSync.json +++ b/MareSynchronos/UmbraSync.json @@ -1,7 +1,7 @@ { "Author": "SirConstance", "Name": "UmbraSync", - "Punchline": "Il revient!", + "Punchline": "Share your true self.", "Description": "This plugin will synchronize your Penumbra mods and current Glamourer state with other paired clients automatically.", "InternalName": "UmbraSync", "ApplicableVersion": "any", diff --git a/MareSynchronos/WebAPI/AccountRegistrationService.cs b/MareSynchronos/WebAPI/AccountRegistrationService.cs index fab4de0..4b5d81b 100644 --- a/MareSynchronos/WebAPI/AccountRegistrationService.cs +++ b/MareSynchronos/WebAPI/AccountRegistrationService.cs @@ -17,18 +17,16 @@ public sealed class AccountRegistrationService : IDisposable private readonly HttpClient _httpClient; private readonly ILogger _logger; private readonly ServerConfigurationManager _serverManager; - private readonly RemoteConfigurationService _remoteConfig; private string GenerateSecretKey() { return Convert.ToHexString(SHA256.HashData(RandomNumberGenerator.GetBytes(64))); } - public AccountRegistrationService(ILogger logger, ServerConfigurationManager serverManager, RemoteConfigurationService remoteConfig) + public AccountRegistrationService(ILogger logger, ServerConfigurationManager serverManager) { _logger = logger; _serverManager = serverManager; - _remoteConfig = remoteConfig; _httpClient = new( new HttpClientHandler { @@ -47,22 +45,10 @@ public sealed class AccountRegistrationService : IDisposable public async Task RegisterAccount(CancellationToken token) { - var authApiUrl = _serverManager.CurrentApiUrl; - - // Override the API URL used for auth from remote config, if one is available - if (authApiUrl.Equals(ApiController.UmbraSyncServiceUri, StringComparison.Ordinal)) - { - var config = await _remoteConfig.GetConfigAsync("mainServer").ConfigureAwait(false) ?? new(); - if (!string.IsNullOrEmpty(config.ApiUrl)) - authApiUrl = config.ApiUrl; - else - authApiUrl = ApiController.UmbraSyncServiceApiUri; - } - var secretKey = GenerateSecretKey(); var hashedSecretKey = secretKey.GetHash256(); - Uri postUri = MareAuth.AuthRegisterV2FullPath(new Uri(authApiUrl + Uri postUri = MareAuth.AuthRegisterV2FullPath(new Uri(_serverManager.CurrentApiUrl .Replace("wss://", "https://", StringComparison.OrdinalIgnoreCase) .Replace("ws://", "http://", StringComparison.OrdinalIgnoreCase))); diff --git a/MareSynchronos/WebAPI/SignalR/ApiController.cs b/MareSynchronos/WebAPI/SignalR/ApiController.cs index 384cad7..6c8dc88 100644 --- a/MareSynchronos/WebAPI/SignalR/ApiController.cs +++ b/MareSynchronos/WebAPI/SignalR/ApiController.cs @@ -21,10 +21,10 @@ namespace MareSynchronos.WebAPI; #pragma warning disable MA0040 public sealed partial class ApiController : DisposableMediatorSubscriberBase, IMareHubClient { - public const string UmbraSyncServer = "UmbraSync Main Server (BETA)"; -public const string UmbraSyncServiceUri = "wss://umbra-sync.net/"; -public const string UmbraSyncServiceApiUri = "wss://umbra-sync.net/"; -public const string UmbraSyncServiceHubUri = "wss://umbra-sync.net/mare"; + public const string UmbraServer = "UmbraSync Main Server (BETA)"; + public const string UmbraServiceUri = "wss://umbra-sync.net/"; + public const string UmbraServiceApiUri = "wss://umbra-sync.net/"; + public const string UmbraServiceHubUri = "wss://umbra-sync.net/mare"; private readonly DalamudUtilService _dalamudUtil; private readonly HubFactory _hubFactory; @@ -194,7 +194,7 @@ public const string UmbraSyncServiceHubUri = "wss://umbra-sync.net/mare"; Mediator.Publish(new NotificationMessage("Client incompatible", $"Your client is outdated ({currentClientVer.Major}.{currentClientVer.Minor}.{currentClientVer.Build}), current is: " + $"{_connectionDto.CurrentClientVersion.Major}.{_connectionDto.CurrentClientVersion.Minor}.{_connectionDto.CurrentClientVersion.Build}. " + - $"This client version is incompatible and will not be able to connect. Please update your UmbraSync client.", + $"This client version is incompatible and will not be able to connect. Please update your Umbra client.", NotificationType.Error)); } await StopConnection(ServerState.VersionMisMatch).ConfigureAwait(false); @@ -206,7 +206,7 @@ public const string UmbraSyncServiceHubUri = "wss://umbra-sync.net/mare"; Mediator.Publish(new NotificationMessage("Client outdated", $"Your client is outdated ({currentClientVer.Major}.{currentClientVer.Minor}.{currentClientVer.Build}), current is: " + $"{_connectionDto.CurrentClientVersion.Major}.{_connectionDto.CurrentClientVersion.Minor}.{_connectionDto.CurrentClientVersion.Build}. " + - $"Please keep your UmbraSync client up-to-date.", + $"Please keep your Umbra client up-to-date.", NotificationType.Warning, TimeSpan.FromSeconds(15))); } diff --git a/MareSynchronos/WebAPI/SignalR/HubFactory.cs b/MareSynchronos/WebAPI/SignalR/HubFactory.cs index 2013231..887cca2 100644 --- a/MareSynchronos/WebAPI/SignalR/HubFactory.cs +++ b/MareSynchronos/WebAPI/SignalR/HubFactory.cs @@ -19,7 +19,6 @@ public class HubFactory : MediatorSubscriberBase { private readonly ILoggerProvider _loggingProvider; private readonly ServerConfigurationManager _serverConfigurationManager; - private readonly RemoteConfigurationService _remoteConfig; private readonly TokenProvider _tokenProvider; private HubConnection? _instance; private string _cachedConfigFor = string.Empty; @@ -27,11 +26,10 @@ public class HubFactory : MediatorSubscriberBase private bool _isDisposed = false; public HubFactory(ILogger logger, MareMediator mediator, - ServerConfigurationManager serverConfigurationManager, RemoteConfigurationService remoteConfig, + ServerConfigurationManager serverConfigurationManager, TokenProvider tokenProvider, ILoggerProvider pluginLog) : base(logger, mediator) { _serverConfigurationManager = serverConfigurationManager; - _remoteConfig = remoteConfig; _tokenProvider = tokenProvider; _loggingProvider = pluginLog; } @@ -87,16 +85,6 @@ public class HubFactory : MediatorSubscriberBase }; } - if (_serverConfigurationManager.CurrentApiUrl.Equals(ApiController.UmbraSyncServiceUri, StringComparison.Ordinal)) - { - var mainServerConfig = await _remoteConfig.GetConfigAsync("mainServer").ConfigureAwait(false) ?? new(); - defaultConfig = mainServerConfig; - if (string.IsNullOrEmpty(mainServerConfig.ApiUrl)) - defaultConfig.ApiUrl = ApiController.UmbraSyncServiceApiUri; - if (string.IsNullOrEmpty(mainServerConfig.HubUrl)) - defaultConfig.HubUrl = ApiController.UmbraSyncServiceHubUri; - } - string jsonResponse; if (stapledWellKnown != null) @@ -115,7 +103,7 @@ public class HubFactory : MediatorSubscriberBase _ => apiUrl.Scheme }; - var wellKnownUrl = $"{httpScheme}://{apiUrl.Host}/.well-known/umbra/client"; + var wellKnownUrl = $"{httpScheme}://{apiUrl.Host}/.well-known/Umbra/client"; Logger.LogTrace("Fetching hub config for {uri} via {wk}", _serverConfigurationManager.CurrentApiUrl, wellKnownUrl); using var httpClient = new HttpClient( diff --git a/MareSynchronos/WebAPI/SignalR/TokenProvider.cs b/MareSynchronos/WebAPI/SignalR/TokenProvider.cs index f7e57d7..4867239 100644 --- a/MareSynchronos/WebAPI/SignalR/TokenProvider.cs +++ b/MareSynchronos/WebAPI/SignalR/TokenProvider.cs @@ -20,16 +20,14 @@ public sealed class TokenProvider : IDisposable, IMediatorSubscriber private readonly HttpClient _httpClient; private readonly ILogger _logger; private readonly ServerConfigurationManager _serverManager; - private readonly RemoteConfigurationService _remoteConfig; private readonly ConcurrentDictionary _tokenCache = new(); private readonly ConcurrentDictionary _wellKnownCache = new(StringComparer.Ordinal); - public TokenProvider(ILogger logger, ServerConfigurationManager serverManager, RemoteConfigurationService remoteConfig, + public TokenProvider(ILogger logger, ServerConfigurationManager serverManager, DalamudUtilService dalamudUtil, MareMediator mareMediator) { _logger = logger; _serverManager = serverManager; - _remoteConfig = remoteConfig; _dalamudUtil = dalamudUtil; _httpClient = new( new HttpClientHandler @@ -70,23 +68,11 @@ public sealed class TokenProvider : IDisposable, IMediatorSubscriber Uri tokenUri; HttpResponseMessage result; - var authApiUrl = _serverManager.CurrentApiUrl; - - // Override the API URL used for auth from remote config, if one is available - if (authApiUrl.Equals(ApiController.UmbraSyncServiceUri, StringComparison.Ordinal)) - { - var config = await _remoteConfig.GetConfigAsync("mainServer").ConfigureAwait(false) ?? new(); - if (!string.IsNullOrEmpty(config.ApiUrl)) - authApiUrl = config.ApiUrl; - else - authApiUrl = ApiController.UmbraSyncServiceApiUri; - } - try { _logger.LogDebug("GetNewToken: Requesting"); - tokenUri = MareAuth.AuthV2FullPath(new Uri(authApiUrl + tokenUri = MareAuth.AuthV2FullPath(new Uri(_serverManager.CurrentApiUrl .Replace("wss://", "https://", StringComparison.OrdinalIgnoreCase) .Replace("ws://", "http://", StringComparison.OrdinalIgnoreCase))); var secretKey = _serverManager.GetSecretKey(out _)!; diff --git a/MareSynchronos/images/icon.png b/MareSynchronos/images/icon.png deleted file mode 100644 index c613251..0000000 Binary files a/MareSynchronos/images/icon.png and /dev/null differ diff --git a/MareSynchronos/packages.lock.json b/MareSynchronos/packages.lock.json index fc68154..94e0cec 100644 --- a/MareSynchronos/packages.lock.json +++ b/MareSynchronos/packages.lock.json @@ -2,6 +2,12 @@ "version": 1, "dependencies": { "net9.0-windows7.0": { + "Chaos.NaCl.Standard": { + "type": "Direct", + "requested": "[1.0.0, )", + "resolved": "1.0.0", + "contentHash": "8ajPyzu49LSIdPgeg56eDdKu1j8FZJngKgTn9rXHV3GNVly49XFvPAwoWuUT8xPze3OjVUOWQZaO82HWrYFFEw==" + }, "DalamudPackager": { "type": "Direct", "requested": "[13.0.0, )", @@ -25,9 +31,9 @@ }, "Glamourer.Api": { "type": "Direct", - "requested": "[2.4.1, )", - "resolved": "2.4.1", - "contentHash": "Q9jrGWDlIAXoMXihu+HbSRu8FpgR9xNy2j5YpAoqDHzhl2MZLgqAJPlQ+N5ISp6cn7xqQVMmxB9PchW2uEYoEA==" + "requested": "[2.6.0, )", + "resolved": "2.6.0", + "contentHash": "zysCZgNBRm3k3qvibyw/31MmEckX0Uh0ZsT+Sax3ZHnYIRELr9Qhbz3cjJz7u0RHGIrNJiRpktu/LxgHEqDItw==" }, "K4os.Compression.LZ4.Legacy": { "type": "Direct", @@ -51,80 +57,80 @@ }, "Meziantou.Analyzer": { "type": "Direct", - "requested": "[2.0.189, )", - "resolved": "2.0.189", - "contentHash": "/e+dh95vDdvCTbViV2cWpXJEXAj+VHq7FsBXCTTTsLcffV0bkgXDFAPY0zMpy+Vt91Cl2cBoSOfaAoSdtn796Q==" + "requested": "[2.0.212, )", + "resolved": "2.0.212", + "contentHash": "U91ktjjTRTccUs3Lk+hrLD9vW+2+lhnsOf4G1GpRSJi1pLn3uK5CU6wGP9Bmz1KlJs6Oz1GGoMhxQBoqQsmAuQ==" }, "Microsoft.AspNetCore.SignalR.Client": { "type": "Direct", - "requested": "[9.0.3, )", - "resolved": "9.0.3", - "contentHash": "V8K94AN9ADbpP2jxwt8Y++g7t/XZ7oEV+GZizNvLnR8dpCYWeveIZ/tItO54jfZJ5jmt5YyideOc+ErZbr1IZg==", + "requested": "[9.0.8, )", + "resolved": "9.0.8", + "contentHash": "cO+TZaWdhMn2cIYfPH9oFZaisJrx7X6SBAYdmGektPUAW2BYtMbH4HyLOnJ5CYo42zP9WgqhWHKqmoDm7+Ol5w==", "dependencies": { - "Microsoft.AspNetCore.Http.Connections.Client": "9.0.3", - "Microsoft.AspNetCore.SignalR.Client.Core": "9.0.3" + "Microsoft.AspNetCore.Http.Connections.Client": "9.0.8", + "Microsoft.AspNetCore.SignalR.Client.Core": "9.0.8" } }, "Microsoft.AspNetCore.SignalR.Protocols.MessagePack": { "type": "Direct", - "requested": "[9.0.3, )", - "resolved": "9.0.3", - "contentHash": "mMQ21T4NuqGrX1UzSe1WBmg6TUlOmpMgCoA9kAy/uBWBZlAA4+NFavbCULyJy6zTSUAvZkG3cGSnQN4dLJlF/w==", + "requested": "[9.0.8, )", + "resolved": "9.0.8", + "contentHash": "e6SC/Tp+SZKeEVYdu8blz9q4MkFW08D56IkQv9V3perF3a7v+GgGZ0DAY/HRS9zBuhFrqpXhJvxeHMw3PJLcOg==", "dependencies": { "MessagePack": "2.5.187", - "Microsoft.AspNetCore.SignalR.Common": "9.0.3" + "Microsoft.AspNetCore.SignalR.Common": "9.0.8" } }, "Microsoft.Extensions.Hosting": { "type": "Direct", - "requested": "[9.0.3, )", - "resolved": "9.0.3", - "contentHash": "ioFXglqFA9uCYcKHI3CLVTO3I75jWIhvVxiZBzGeSPxw7XdhDLh0QvbNFrMTbZk9qqEVQcylblcvcNXnFHYXyA==", + "requested": "[9.0.8, )", + "resolved": "9.0.8", + "contentHash": "O2VlzORrBbS2it203k5FOHrudDdmdrJovA73P/shdRGeLzvet4e4yXhGx52V2PNjYBQ0IO5M4xiNcL+6xIX6Bg==", "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.3", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.3", - "Microsoft.Extensions.Configuration.Binder": "9.0.3", - "Microsoft.Extensions.Configuration.CommandLine": "9.0.3", - "Microsoft.Extensions.Configuration.EnvironmentVariables": "9.0.3", - "Microsoft.Extensions.Configuration.FileExtensions": "9.0.3", - "Microsoft.Extensions.Configuration.Json": "9.0.3", - "Microsoft.Extensions.Configuration.UserSecrets": "9.0.3", - "Microsoft.Extensions.DependencyInjection": "9.0.3", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3", - "Microsoft.Extensions.Diagnostics": "9.0.3", - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.3", - "Microsoft.Extensions.FileProviders.Physical": "9.0.3", - "Microsoft.Extensions.Hosting.Abstractions": "9.0.3", - "Microsoft.Extensions.Logging": "9.0.3", - "Microsoft.Extensions.Logging.Abstractions": "9.0.3", - "Microsoft.Extensions.Logging.Configuration": "9.0.3", - "Microsoft.Extensions.Logging.Console": "9.0.3", - "Microsoft.Extensions.Logging.Debug": "9.0.3", - "Microsoft.Extensions.Logging.EventLog": "9.0.3", - "Microsoft.Extensions.Logging.EventSource": "9.0.3", - "Microsoft.Extensions.Options": "9.0.3" + "Microsoft.Extensions.Configuration": "9.0.8", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.8", + "Microsoft.Extensions.Configuration.Binder": "9.0.8", + "Microsoft.Extensions.Configuration.CommandLine": "9.0.8", + "Microsoft.Extensions.Configuration.EnvironmentVariables": "9.0.8", + "Microsoft.Extensions.Configuration.FileExtensions": "9.0.8", + "Microsoft.Extensions.Configuration.Json": "9.0.8", + "Microsoft.Extensions.Configuration.UserSecrets": "9.0.8", + "Microsoft.Extensions.DependencyInjection": "9.0.8", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8", + "Microsoft.Extensions.Diagnostics": "9.0.8", + "Microsoft.Extensions.FileProviders.Abstractions": "9.0.8", + "Microsoft.Extensions.FileProviders.Physical": "9.0.8", + "Microsoft.Extensions.Hosting.Abstractions": "9.0.8", + "Microsoft.Extensions.Logging": "9.0.8", + "Microsoft.Extensions.Logging.Abstractions": "9.0.8", + "Microsoft.Extensions.Logging.Configuration": "9.0.8", + "Microsoft.Extensions.Logging.Console": "9.0.8", + "Microsoft.Extensions.Logging.Debug": "9.0.8", + "Microsoft.Extensions.Logging.EventLog": "9.0.8", + "Microsoft.Extensions.Logging.EventSource": "9.0.8", + "Microsoft.Extensions.Options": "9.0.8" } }, "Penumbra.Api": { "type": "Direct", - "requested": "[5.6.1, )", - "resolved": "5.6.1", - "contentHash": "pZesXuBB9cMXKN10EfLJclLay3vjRYQy376PXXcPdx33kNI0jHwgPXGcy6BtVmoaMvn4UvK+EqGVYlt2b/Ns9Q==" + "requested": "[5.12.0, )", + "resolved": "5.12.0", + "contentHash": "XGWviAZgokj2djpH50FWgM24jOTpKUuDHvd0HwrzBRY6BEMmpb3HfGIl8+BDE/DqbpH63u6aO2TvzUV6BmXT5w==" }, "SonarAnalyzer.CSharp": { "type": "Direct", - "requested": "[10.7.0.110445, )", - "resolved": "10.7.0.110445", - "contentHash": "U4v2LWopxADYkUv7Z5CX7ifKMdDVqHb7a1bzppIQnQi4WQR6z1Zi5rDkCHlVYGEd1U/WMz1IJCU8OmFZLJpVig==" + "requested": "[10.15.0.120848, )", + "resolved": "10.15.0.120848", + "contentHash": "1hM3HVRl5jdC/ZBDu+G7CCYLXRGe/QaP01Zy+c9ETPhY7lWD8g8HiefY6sGaH0T3CJ4wAy0/waGgQTh0TYy0oQ==" }, "System.IdentityModel.Tokens.Jwt": { "type": "Direct", - "requested": "[8.7.0, )", - "resolved": "8.7.0", - "contentHash": "8dKL3A9pVqYCJIXHd4H2epQqLxSvKeNxGonR0e5g89yMchyvsM/NLuB06otx29BicUd6+LUJZgNZmvYjjPsPGg==", + "requested": "[8.14.0, )", + "resolved": "8.14.0", + "contentHash": "EYGgN/S+HK7S6F3GaaPLFAfK0UzMrkXFyWCvXpQWFYmZln3dqtbyIO7VuTM/iIIPMzkelg8ZLlBPvMhxj6nOAA==", "dependencies": { - "Microsoft.IdentityModel.JsonWebTokens": "8.7.0", - "Microsoft.IdentityModel.Tokens": "8.7.0" + "Microsoft.IdentityModel.JsonWebTokens": "8.14.0", + "Microsoft.IdentityModel.Tokens": "8.14.0" } }, "K4os.Compression.LZ4": { @@ -153,342 +159,342 @@ }, "Microsoft.AspNetCore.Connections.Abstractions": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "MWkNy/Yhv2q5ZVYPHjHN6pEE5Ya1r4opqSpnsW60bgpDOT54zZ6Kpqub4Tcat8ENsR5PZcTZ3eeSAthweUb/KA==", + "resolved": "9.0.8", + "contentHash": "mONfcKx7I4h6Rg+3b20bRyuy/GWz2yLsCNzKKqh1X4OfxnI7l0rdSxBwO203ebZFhjrdXnqMl7Op0N1FQ1Q5DQ==", "dependencies": { - "Microsoft.Extensions.Features": "9.0.3" + "Microsoft.Extensions.Features": "9.0.8" } }, "Microsoft.AspNetCore.Http.Connections.Client": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "bLoLX67FBeYK1KKGfXrmBki/F9EAK8EKCNkyADtfFjQkJ1Qhhw1sjBlcL8TbVnZxk+FaFsyCeBPmSHgOwNIJ/A==", + "resolved": "9.0.8", + "contentHash": "Ob2n+H3358kvubgXu9hY95MZB6X91PUGJvtWaHGEX7eZ+9bYdUCYs57ukJiIziH+aD9yO9e36bgKIT1WJEtfmA==", "dependencies": { - "Microsoft.AspNetCore.Http.Connections.Common": "9.0.3", - "Microsoft.Extensions.Logging.Abstractions": "9.0.3", - "Microsoft.Extensions.Options": "9.0.3", - "System.Net.ServerSentEvents": "9.0.3" + "Microsoft.AspNetCore.Http.Connections.Common": "9.0.8", + "Microsoft.Extensions.Logging.Abstractions": "9.0.8", + "Microsoft.Extensions.Options": "9.0.8", + "System.Net.ServerSentEvents": "9.0.8" } }, "Microsoft.AspNetCore.Http.Connections.Common": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "GYDAXEmaG/q9UgixPchsLAVbBUbdgG3hd8J7Af4k4GIKLsibAhos7QY7hHicyULJvRtl03totiRi5Z+JIKEnUA==", + "resolved": "9.0.8", + "contentHash": "150BRlecnjL+6C+yw/bDP49+ONh7BmaJZTRik6KtbaS+cWnEDVXnhE5PTKlFqCYBD5T8wdjKoF5+lzKHJUK47A==", "dependencies": { - "Microsoft.AspNetCore.Connections.Abstractions": "9.0.3" + "Microsoft.AspNetCore.Connections.Abstractions": "9.0.8" } }, "Microsoft.AspNetCore.SignalR.Client.Core": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "R2N03AK5FH8KIENfJGER4SgjJFMJTBiYuLbovbRunp5R4knO+iysfbYMfEFO3kn98ElWr/747dS4AeWQOEEQsg==", + "resolved": "9.0.8", + "contentHash": "EZ4KaPVQ9rDxZYWQ1sYiPfXEbomhKwp5Fn/0q1XtOgTilV/nN2lgA06KTofVJSeVVRwYdlZggflcQNcKCG0xcg==", "dependencies": { - "Microsoft.AspNetCore.SignalR.Common": "9.0.3", - "Microsoft.AspNetCore.SignalR.Protocols.Json": "9.0.3", - "Microsoft.Extensions.DependencyInjection": "9.0.3", - "Microsoft.Extensions.Logging": "9.0.3", - "System.Threading.Channels": "9.0.3" + "Microsoft.AspNetCore.SignalR.Common": "9.0.8", + "Microsoft.AspNetCore.SignalR.Protocols.Json": "9.0.8", + "Microsoft.Extensions.DependencyInjection": "9.0.8", + "Microsoft.Extensions.Logging": "9.0.8", + "System.Threading.Channels": "9.0.8" } }, "Microsoft.AspNetCore.SignalR.Common": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "/568tq8YVas1mDgeScmQdQV4ZDRjdyqDS3rAo17R5Bs4puMaNM80wQSwcvsmN5gSwH6L/XRTmD1J1uRIyKXrCg==", + "resolved": "9.0.8", + "contentHash": "oNOEDf2UGLU63Qi7LB8OJdfG1CGybVO34bhotpkvAQUJ5zH8Ewf7EvqeHlUgg6cVyrdC+vewOFxTysw212FTyw==", "dependencies": { - "Microsoft.AspNetCore.Connections.Abstractions": "9.0.3", - "Microsoft.Extensions.Options": "9.0.3" + "Microsoft.AspNetCore.Connections.Abstractions": "9.0.8", + "Microsoft.Extensions.Options": "9.0.8" } }, "Microsoft.AspNetCore.SignalR.Protocols.Json": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "jvOdsquqrbWMP3/Aq4s8/yVeCxBkjvxarv/2WgubKkQT8nZ46aKY3Rvj1uolp4N3TuaMGlnd6mhK/tF7jCat2Q==", + "resolved": "9.0.8", + "contentHash": "9LtBkzS2iYOSiUx1NDI91abM5xxD5MUYtdlvwCtMMr6YdsMzHvDUrgPK2N3hpYE94vmj0srt423Kwd1aOqmGPg==", "dependencies": { - "Microsoft.AspNetCore.SignalR.Common": "9.0.3" + "Microsoft.AspNetCore.SignalR.Common": "9.0.8" } }, "Microsoft.Extensions.Configuration": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "RIEeZxWYm77+OWLwgik7DzSVSONjqkmcbuCb1koZdGAV7BgOUWnLz80VMyHZMw3onrVwFCCMHBBdruBPuQTvkg==", + "resolved": "9.0.8", + "contentHash": "6m+8Xgmf8UWL0p/oGqBM+0KbHE5/ePXbV1hKXgC59zEv0aa0DW5oiiyxDbK5kH5j4gIvyD5uWL0+HadKBJngvQ==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.3", - "Microsoft.Extensions.Primitives": "9.0.3" + "Microsoft.Extensions.Configuration.Abstractions": "9.0.8", + "Microsoft.Extensions.Primitives": "9.0.8" } }, "Microsoft.Extensions.Configuration.Abstractions": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "q5qlbm6GRUrle2ZZxy9aqS/wWoc+mRD3JeP6rcpiJTh5XcemYkplAcJKq8lU11ZfPom5lfbZZfnQvDqcUhqD5Q==", + "resolved": "9.0.8", + "contentHash": "yNou2KM35RvzOh4vUFtl2l33rWPvOCoba+nzEDJ+BgD8aOL/jew4WPCibQvntRfOJ2pJU8ARygSMD+pdjvDHuA==", "dependencies": { - "Microsoft.Extensions.Primitives": "9.0.3" + "Microsoft.Extensions.Primitives": "9.0.8" } }, "Microsoft.Extensions.Configuration.Binder": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "ad82pYBUSQbd3WIboxsS1HzFdRuHKRa2CpYwie/o6dZAxUjt62yFwjoVdM7Iw2VO5fHV1rJwa7jJZBNZin0E7Q==", + "resolved": "9.0.8", + "contentHash": "0vK9DnYrYChdiH3yRZWkkp4x4LbrfkWEdBc5HOsQ8t/0CLOWKXKkkhOE8A1shlex0hGydbGrhObeypxz/QTm+w==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.3" + "Microsoft.Extensions.Configuration.Abstractions": "9.0.8" } }, "Microsoft.Extensions.Configuration.CommandLine": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "rVwz4ml/Jve/QzzUlyTVOKXVZ37op9RK6Ize4uPmJ3S5c2ErExoy816+dslBQ06ZrFq8M9bpnV5LVBuPD1ONHQ==", + "resolved": "9.0.8", + "contentHash": "vB6eDQ5prED5jHBqmSDNYzlCXsTSylYY7co9c7guhnz0zhx+jZ8BTHgO7y/Wl1dV2jAO15mKNWuyHRIRtWwGQg==", "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.3", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.3" + "Microsoft.Extensions.Configuration": "9.0.8", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.8" } }, "Microsoft.Extensions.Configuration.EnvironmentVariables": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "fo84UIa8aSBG3pOtzLsgkj1YkOVfYFy2YWcRTCevHHAkuVsxnYnKBrcW2pyFgqqfQ/rT8K1nmRXHDdQIZ8PDig==", + "resolved": "9.0.8", + "contentHash": "9qileEYXDodlPN9DfPd5sHSfU2nSrI1r5BHVqLaLyb/7mPi335cy4ar/0ix4tXb2Aer/Pu4e5/zdwxt7lrtSyQ==", "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.3", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.3" + "Microsoft.Extensions.Configuration": "9.0.8", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.8" } }, "Microsoft.Extensions.Configuration.FileExtensions": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "tBNMSDJ2q7WQK2zwPhHY5I/q95t7sf6dT079mGrNm0yOZF/gM9JvR/LtCb/rwhRmh7A6XMnzv5WbpCh9KLq9EQ==", + "resolved": "9.0.8", + "contentHash": "2jgx58Jpk3oKT7KRn8x/cFf3QDTjQP+KUbyBnynAcB2iBx1Eq9EdNMCu0QEbYuaZOaQru/Kwdffary+hn58Wwg==", "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.3", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.3", - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.3", - "Microsoft.Extensions.FileProviders.Physical": "9.0.3", - "Microsoft.Extensions.Primitives": "9.0.3" + "Microsoft.Extensions.Configuration": "9.0.8", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.8", + "Microsoft.Extensions.FileProviders.Abstractions": "9.0.8", + "Microsoft.Extensions.FileProviders.Physical": "9.0.8", + "Microsoft.Extensions.Primitives": "9.0.8" } }, "Microsoft.Extensions.Configuration.Json": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "mjkp3ZwynNacZk4uq93I0DyCY48FZmi3yRV0xlfeDuWh44KcDunPXHwt8IWr4kL7cVM6eiFVe6YTJg97KzUAUA==", + "resolved": "9.0.8", + "contentHash": "vjxzcnL7ul322+kpvELisXaZl8/5MYs6JfI9DZLQWsao1nA/4FL48yPwDK986hbJTWc64JxOOaMym0SQ/dy32w==", "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.3", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.3", - "Microsoft.Extensions.Configuration.FileExtensions": "9.0.3", - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.3" + "Microsoft.Extensions.Configuration": "9.0.8", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.8", + "Microsoft.Extensions.Configuration.FileExtensions": "9.0.8", + "Microsoft.Extensions.FileProviders.Abstractions": "9.0.8" } }, "Microsoft.Extensions.Configuration.UserSecrets": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "vwkBQ5jqmfX7nD7CFvB3k1uSeNBKRcYRDvlk3pxJzJfm/cgT4R+hQg5AFXW/1aLKjz0q7brpRocHC5GK2sjvEw==", + "resolved": "9.0.8", + "contentHash": "UgH18nQkuMJgxjn1539I83N6LhnKQlLhQm3ppe+PGsFpYsC6eGpF/1KvDRm/bmqsrg0NXhurrv4k2r0e8vWX/Q==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.3", - "Microsoft.Extensions.Configuration.Json": "9.0.3", - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.3", - "Microsoft.Extensions.FileProviders.Physical": "9.0.3" + "Microsoft.Extensions.Configuration.Abstractions": "9.0.8", + "Microsoft.Extensions.Configuration.Json": "9.0.8", + "Microsoft.Extensions.FileProviders.Abstractions": "9.0.8", + "Microsoft.Extensions.FileProviders.Physical": "9.0.8" } }, "Microsoft.Extensions.DependencyInjection": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "lDbxJpkl6X8KZGpkAxgrrthQ42YeiR0xjPp7KPx+sCPc3ZbpaIbjzd0QQ+9kDdK2RU2DOl3pc6tQyAgEZY3V0A==", + "resolved": "9.0.8", + "contentHash": "JJjI2Fa+QtZcUyuNjbKn04OjIUX5IgFGFu/Xc+qvzh1rXdZHLcnqqVXhR4093bGirTwacRlHiVg1XYI9xum6QQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8" } }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "TfaHPSe39NyL2wxkisRxXK7xvHGZYBZ+dy3r+mqGvnxKgAPdHkMu3QMQZI4pquP6W5FIQBqs8FJpWV8ffCgDqQ==" + "resolved": "9.0.8", + "contentHash": "xY3lTjj4+ZYmiKIkyWitddrp1uL5uYiweQjqo4BKBw01ZC4HhcfgLghDpPZcUlppgWAFqFy9SgkiYWOMx365pw==" }, "Microsoft.Extensions.Diagnostics": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "gqhbIq6adm0+/9IlDYmchekoxNkmUTm7rfTG3k4zzoQkjRuD8TQGwL1WnIcTDt4aQ+j+Vu0OQrjI8GlpJQQhIA==", + "resolved": "9.0.8", + "contentHash": "BKkLCFXzJvNmdngeYBf72VXoZqTJSb1orvjdzDLaGobicoGFBPW8ug2ru1nnEewMEwJzMgnsjHQY8EaKWmVhKg==", "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.3", - "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.3", - "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.3" + "Microsoft.Extensions.Configuration": "9.0.8", + "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.8", + "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.8" } }, "Microsoft.Extensions.Diagnostics.Abstractions": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "/fn0Xe8t+3YbMfwyTk4hFirWyAG1pBA5ogVYsrKAuuD2gbqOWhFuSA28auCmS3z8Y2eq3miDIKq4pFVRWA+J6g==", + "resolved": "9.0.8", + "contentHash": "UDY7blv4DCyIJ/8CkNrQKLaAZFypXQavRZ2DWf/2zi1mxYYKKw2t8AOCBWxNntyPZHPGhtEmL3snFM98ADZqTw==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3", - "Microsoft.Extensions.Options": "9.0.3" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8", + "Microsoft.Extensions.Options": "9.0.8" } }, "Microsoft.Extensions.Features": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "jZuO3APLh0ePwtT9PDxiMdPwpDdct/kuExlXLCZZ+XFje/Xt815MM827EFJuxTBAbL148ywyfJyjIZ92osP5WA==" + "resolved": "9.0.8", + "contentHash": "oyPrbpRFa0uWik3PMwpK1mbAr+inZTEkaBsnMjHyT74YN0ot6knA7OnyFLg+oM4MwW5PZIS4HHW9efy0+gj+oQ==" }, "Microsoft.Extensions.FileProviders.Abstractions": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "umczZ3+QPpzlrW/lkvy+IB0p52+qZ5w++aqx2lTCMOaPKzwcbVdrJgiQ3ajw5QWBp7gChLUiCYkSlWUpfjv24g==", + "resolved": "9.0.8", + "contentHash": "4zZbQ4w+hCMm9J+z5NOj3giIPT2MhZxx05HX/MGuAmDBbjOuXlYIIRN+t4V6OLxy5nXZIcXO+dQMB/OWubuDkw==", "dependencies": { - "Microsoft.Extensions.Primitives": "9.0.3" + "Microsoft.Extensions.Primitives": "9.0.8" } }, "Microsoft.Extensions.FileProviders.Physical": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "th2+tQBV5oWjgKhip9GjiIv2AEK3QvfAO3tZcqV3F3dEt5D6Gb411RntCj1+8GS9HaRRSxjSGx/fCrMqIjkb1Q==", + "resolved": "9.0.8", + "contentHash": "FlOe2i7UUIfY0l0ChaIYtlXjdWWutR4DMRKZaGD6z4G1uVTteFkbBfxUIoi1uGmrZQxXe/yv/cfwiT0tK2xyXA==", "dependencies": { - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.3", - "Microsoft.Extensions.FileSystemGlobbing": "9.0.3", - "Microsoft.Extensions.Primitives": "9.0.3" + "Microsoft.Extensions.FileProviders.Abstractions": "9.0.8", + "Microsoft.Extensions.FileSystemGlobbing": "9.0.8", + "Microsoft.Extensions.Primitives": "9.0.8" } }, "Microsoft.Extensions.FileSystemGlobbing": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "Rec77KHk4iNpFznHi5/6wF3MlUDcKqg26t8gRYbUm1PSukZ4B6mrXpZsJSNOiwyhhQVkjYbaoZxi5XJgRQ5lFg==" + "resolved": "9.0.8", + "contentHash": "96Ub5LmwYfIGVoXkbe4kjs+ivK6fLBTwKJAOMfUNV0R+AkZRItlgROFqXEWMUlXBTPM1/kKu26Ueu5As6RDzJA==" }, "Microsoft.Extensions.Hosting.Abstractions": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "rHabYVhQsGYNfgnfnYLqZRx/hLe85i6jW5rnDjA9pjt3x7yjPv8T/EXcgN5T9T38FAVwZRA+RMGUkEHbxvCOBQ==", + "resolved": "9.0.8", + "contentHash": "WNrad20tySNCPe9aJUK7Wfwh+RiyLF+id02FKW8Qfc+HAzNQHazcqMXAbwG/kmbS89uvan/nKK1MufkRahjrJA==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.3", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3", - "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.3", - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.3", - "Microsoft.Extensions.Logging.Abstractions": "9.0.3" + "Microsoft.Extensions.Configuration.Abstractions": "9.0.8", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8", + "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.8", + "Microsoft.Extensions.FileProviders.Abstractions": "9.0.8", + "Microsoft.Extensions.Logging.Abstractions": "9.0.8" } }, "Microsoft.Extensions.Logging": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "utIi2R1nm+PCWkvWBf1Ou6LWqg9iLfHU23r8yyU9VCvda4dEs7xbTZSwGa5KuwbpzpgCbHCIuKaFHB3zyFmnGw==", + "resolved": "9.0.8", + "contentHash": "Z/7ze+0iheT7FJeZPqJKARYvyC2bmwu3whbm/48BJjdlGVvgDguoCqJIkI/67NkroTYobd5geai1WheNQvWrgA==", "dependencies": { - "Microsoft.Extensions.DependencyInjection": "9.0.3", - "Microsoft.Extensions.Logging.Abstractions": "9.0.3", - "Microsoft.Extensions.Options": "9.0.3" + "Microsoft.Extensions.DependencyInjection": "9.0.8", + "Microsoft.Extensions.Logging.Abstractions": "9.0.8", + "Microsoft.Extensions.Options": "9.0.8" } }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "H/MBMLt9A/69Ux4OrV7oCKt3DcMT04o5SCqDolulzQA66TLFEpYYb4qedMs/uwrLtyHXGuDGWKZse/oa8W9AZw==", + "resolved": "9.0.8", + "contentHash": "pYnAffJL7ARD/HCnnPvnFKSIHnTSmWz84WIlT9tPeQ4lHNiu0Az7N/8itihWvcF8sT+VVD5lq8V+ckMzu4SbOw==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8" } }, "Microsoft.Extensions.Logging.Configuration": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "eVZsaKNyK0g0C1qp0mmn4Q2PiX+bXdkz8+zVkXyVMk8IvoWfmTjLjEq1MQlwt1A22lToANPiUrxPJ7Tt3V5puw==", + "resolved": "9.0.8", + "contentHash": "Us4evDN3lbp1beVgrpxkSXKrbntVGAK+YbSo9P9driiU9PK05+ShhgesJ3aj7SuDfr3mqqcEgrMJ87Vu8t5dhw==", "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.3", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.3", - "Microsoft.Extensions.Configuration.Binder": "9.0.3", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3", - "Microsoft.Extensions.Logging": "9.0.3", - "Microsoft.Extensions.Logging.Abstractions": "9.0.3", - "Microsoft.Extensions.Options": "9.0.3", - "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.3" + "Microsoft.Extensions.Configuration": "9.0.8", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.8", + "Microsoft.Extensions.Configuration.Binder": "9.0.8", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8", + "Microsoft.Extensions.Logging": "9.0.8", + "Microsoft.Extensions.Logging.Abstractions": "9.0.8", + "Microsoft.Extensions.Options": "9.0.8", + "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.8" } }, "Microsoft.Extensions.Logging.Console": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "o9VXLOdpTAro1q7ZThIB3S8OHrRn5pr8cFUCiN85fiwlfAt2DhU4ZIfHy+jCNbf7y7S5Exbr3dlDE8mKNrs0Yg==", + "resolved": "9.0.8", + "contentHash": "mPp9xB9MjiPuodh9z/+6zEGNj2kSVeXQtdbIBHlhUYqxX22gzJkx0ycPY42q4/OT/SzFV/TJ989Pa3sA/8ZBeA==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3", - "Microsoft.Extensions.Logging": "9.0.3", - "Microsoft.Extensions.Logging.Abstractions": "9.0.3", - "Microsoft.Extensions.Logging.Configuration": "9.0.3", - "Microsoft.Extensions.Options": "9.0.3" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8", + "Microsoft.Extensions.Logging": "9.0.8", + "Microsoft.Extensions.Logging.Abstractions": "9.0.8", + "Microsoft.Extensions.Logging.Configuration": "9.0.8", + "Microsoft.Extensions.Options": "9.0.8" } }, "Microsoft.Extensions.Logging.Debug": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "BlKgvNYjD6mY5GXpMCf9zPAsrovMgW5mzCOT7SpoOSyI1478zldf+7PKvDIscC277z5zjSO3yi/OuIWpnTZmdA==", + "resolved": "9.0.8", + "contentHash": "OwHQFVITsONEoizShc1yNYTUvMq0kT9j/LhwAKMsA7OZqtrBXuqjosbSvzkJZ9o+KWAozDh5Y1Vtpe5p/8/1qA==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3", - "Microsoft.Extensions.Logging": "9.0.3", - "Microsoft.Extensions.Logging.Abstractions": "9.0.3" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8", + "Microsoft.Extensions.Logging": "9.0.8", + "Microsoft.Extensions.Logging.Abstractions": "9.0.8" } }, "Microsoft.Extensions.Logging.EventLog": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "/+elZUHGgB3oHKO9St/Ql/qfze9O+UbXj+9FOj1gIshLCFXcPlhpKoI11jE6eIV0kbs1P/EeffJl4KDFyvAiJQ==", + "resolved": "9.0.8", + "contentHash": "/gMwlll21UJcaXlitUqd+rs9jH36EJz5BpFVPshyOqz5u0qyV1pFnTWm5vhyx+g6gwVYENSLgpazR1urNv83xw==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3", - "Microsoft.Extensions.Logging": "9.0.3", - "Microsoft.Extensions.Logging.Abstractions": "9.0.3", - "Microsoft.Extensions.Options": "9.0.3", - "System.Diagnostics.EventLog": "9.0.3" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8", + "Microsoft.Extensions.Logging": "9.0.8", + "Microsoft.Extensions.Logging.Abstractions": "9.0.8", + "Microsoft.Extensions.Options": "9.0.8", + "System.Diagnostics.EventLog": "9.0.8" } }, "Microsoft.Extensions.Logging.EventSource": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "hgG0EGEHnngQFQNqJ5ungEykqaQ5Tik0Gpkb38pea2a5cR3pWlZR4vuYLDdtTgSiKEKByXz/3wNQ7qAqXamEEA==", + "resolved": "9.0.8", + "contentHash": "aGMFc/1P+315d07iyxSe6lEoZ0JjOPJ+Mfv9rrV2PvR2DFu1/pSi/SItHw1iChJOZgslNKJE97g1a9nLX3qQYA==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3", - "Microsoft.Extensions.Logging": "9.0.3", - "Microsoft.Extensions.Logging.Abstractions": "9.0.3", - "Microsoft.Extensions.Options": "9.0.3", - "Microsoft.Extensions.Primitives": "9.0.3" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8", + "Microsoft.Extensions.Logging": "9.0.8", + "Microsoft.Extensions.Logging.Abstractions": "9.0.8", + "Microsoft.Extensions.Options": "9.0.8", + "Microsoft.Extensions.Primitives": "9.0.8" } }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "xE7MpY70lkw1oiid5y6FbL9dVw8oLfkx8RhSNGN8sSzBlCqGn0SyT3Fqc8tZnDaPIq7Z8R9RTKlS564DS+MV3g==", + "resolved": "9.0.8", + "contentHash": "OmTaQ0v4gxGQkehpwWIqPoEiwsPuG/u4HUsbOFoWGx4DKET2AXzopnFe/fE608FIhzc/kcg2p8JdyMRCCUzitQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3", - "Microsoft.Extensions.Primitives": "9.0.3" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8", + "Microsoft.Extensions.Primitives": "9.0.8" } }, "Microsoft.Extensions.Options.ConfigurationExtensions": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "PcyYHQglKnWVZHSPaL6v2qnfsIuFw8tSq7cyXHg3OeuDVn/CqmdWUjRiZomCF/Gi+qCi+ksz0lFphg2cNvB8zQ==", + "resolved": "9.0.8", + "contentHash": "eW2s6n06x0w6w4nsX+SvpgsFYkl+Y0CttYAt6DKUXeqprX+hzNqjSfOh637fwNJBg7wRBrOIRHe49gKiTgJxzQ==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.3", - "Microsoft.Extensions.Configuration.Binder": "9.0.3", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3", - "Microsoft.Extensions.Options": "9.0.3", - "Microsoft.Extensions.Primitives": "9.0.3" + "Microsoft.Extensions.Configuration.Abstractions": "9.0.8", + "Microsoft.Extensions.Configuration.Binder": "9.0.8", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8", + "Microsoft.Extensions.Options": "9.0.8", + "Microsoft.Extensions.Primitives": "9.0.8" } }, "Microsoft.Extensions.Primitives": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "yCCJHvBcRyqapMSNzP+kTc57Eaavq2cr5Tmuil6/XVnipQf5xmskxakSQ1enU6S4+fNg3sJ27WcInV64q24JsA==" + "resolved": "9.0.8", + "contentHash": "tizSIOEsIgSNSSh+hKeUVPK7xmTIjR8s+mJWOu1KXV3htvNQiPMFRMO17OdI1y/4ZApdBVk49u/08QGC9yvLug==" }, "Microsoft.IdentityModel.Abstractions": { "type": "Transitive", - "resolved": "8.7.0", - "contentHash": "OQd5aVepYvh5evOmBMeAYjMIpEcTf1ZCBZaU7Nh/RlhhdXefjFDJeP1L2F2zeNT1unFr+wUu/h3Ac2Xb4BXU6w==" + "resolved": "8.14.0", + "contentHash": "iwbCpSjD3ehfTwBhtSNEtKPK0ICun6ov7Ibx6ISNA9bfwIyzI2Siwyi9eJFCJBwxowK9xcA1mj+jBWiigeqgcQ==" }, "Microsoft.IdentityModel.JsonWebTokens": { "type": "Transitive", - "resolved": "8.7.0", - "contentHash": "uzsSAWhNhbrkWbQKBTE8QhzviU6sr3bJ1Bkv7gERlhswfSKOp7HsxTRLTPBpx/whQ/GRRHEwMg8leRIPbMrOgw==", + "resolved": "8.14.0", + "contentHash": "4jOpiA4THdtpLyMdAb24dtj7+6GmvhOhxf5XHLYWmPKF8ApEnApal1UnJsKO4HxUWRXDA6C4WQVfYyqsRhpNpQ==", "dependencies": { - "Microsoft.IdentityModel.Tokens": "8.7.0" + "Microsoft.IdentityModel.Tokens": "8.14.0" } }, "Microsoft.IdentityModel.Logging": { "type": "Transitive", - "resolved": "8.7.0", - "contentHash": "Bs0TznPAu+nxa9rAVHJ+j3CYECHJkT3tG8AyBfhFYlT5ldsDhoxFT7J+PKxJHLf+ayqWfvDZHHc4639W2FQCxA==", + "resolved": "8.14.0", + "contentHash": "eqqnemdW38CKZEHS6diA50BV94QICozDZEvSrsvN3SJXUFwVB9gy+/oz76gldP7nZliA16IglXjXTCTdmU/Ejg==", "dependencies": { - "Microsoft.IdentityModel.Abstractions": "8.7.0" + "Microsoft.IdentityModel.Abstractions": "8.14.0" } }, "Microsoft.IdentityModel.Tokens": { "type": "Transitive", - "resolved": "8.7.0", - "contentHash": "5Z6voXjRXAnGklhmZd1mKz89UhcF5ZQQZaZc2iKrOuL4Li1UihG2vlJx8IbiFAOIxy/xdbsAm0A+WZEaH5fxng==", + "resolved": "8.14.0", + "contentHash": "lKIZiBiGd36k02TCdMHp1KlNWisyIvQxcYJvIkz7P4gSQ9zi8dgh6S5Grj8NNG7HWYIPfQymGyoZ6JB5d1Lo1g==", "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.IdentityModel.Logging": "8.7.0" + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.IdentityModel.Logging": "8.14.0" } }, "Microsoft.NET.StringTools": { @@ -498,8 +504,8 @@ }, "System.Diagnostics.EventLog": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "0nDJBZ06DVdTG2vvCZ4XjazLVaFawdT0pnji23ISX8I8fEOlRJyzH2I0kWiAbCtFwry2Zir4qE4l/GStLATfFw==" + "resolved": "9.0.8", + "contentHash": "gebRF3JLLJ76jz1CQpvwezNapZUjFq20JQsaGHzBH0DzlkHBLpdhwkOei9usiOkIGMwU/L0ALWpNe1JE+5/itw==" }, "System.IO.Pipelines": { "type": "Transitive", @@ -508,28 +514,19 @@ }, "System.Net.ServerSentEvents": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "Vs/C2V27bjtwLqYag9ATzHilcUn8VQTICre4jSBMGFUeSTxEZffTjb+xZwjcmPsVAjmSZmBI5N7Ezq8UFvqQQg==" + "resolved": "9.0.8", + "contentHash": "wrpra4YvKXL7VdsQMKPcPxyA8pXK22LcxaKGA8oEndgjLZ1ZSdKXTxEA2cPvvNpMEUBwZlgJ6oZYQ8aJcpapPg==" }, "System.Threading.Channels": { "type": "Transitive", - "resolved": "9.0.3", - "contentHash": "Ao0iegVONKYVw0eWxJv0ArtMVfkFjgyyYKtUXru6xX5H95flSZWW3QCavD4PAgwpc0ETP38kGHaYbPzSE7sw2w==" - }, - "chaos.nacl": { - "type": "Project" + "resolved": "9.0.8", + "contentHash": "kpvkzWJoHR9os3/4LL5feaTTLD92+XzTqPyYLU2tw2BoJ4MrWCfkjGXtL7MsdpV/20e1+SamCbrPj2L9ptwgBA==" }, "maresynchronos.api": { "type": "Project", "dependencies": { "MessagePack.Annotations": "[2.5.129, )" } - }, - "umbracrypt": { - "type": "Project", - "dependencies": { - "Chaos.NaCl": "[1.0.0, )" - } } } } diff --git a/Penumbra.Api/.editorconfig b/Penumbra.Api/.editorconfig new file mode 100644 index 0000000..c645b57 --- /dev/null +++ b/Penumbra.Api/.editorconfig @@ -0,0 +1,3625 @@ +# Standard properties +charset = utf-8 +end_of_line = lf +insert_final_newline = true +csharp_indent_labels = one_less_than_current +csharp_prefer_simple_using_statement = true:suggestion +csharp_prefer_braces = true:silent +csharp_style_prefer_method_group_conversion = true:silent +csharp_style_expression_bodied_methods = false:silent +csharp_style_expression_bodied_constructors = false:silent +csharp_style_expression_bodied_operators = false:silent +csharp_style_expression_bodied_properties = true:silent +csharp_style_expression_bodied_indexers = true:silent +csharp_style_expression_bodied_accessors = true:silent +csharp_style_expression_bodied_lambdas = true:silent +csharp_style_expression_bodied_local_functions = false:silent +csharp_style_throw_expression = true:suggestion +csharp_style_prefer_null_check_over_type_check = true:suggestion +csharp_prefer_simple_default_expression = true:suggestion +csharp_style_prefer_local_over_anonymous_function = true:suggestion +csharp_style_prefer_index_operator = true:suggestion +csharp_style_prefer_range_operator = true:suggestion +csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion +csharp_style_prefer_tuple_swap = true:suggestion +csharp_style_inlined_variable_declaration = true:suggestion +csharp_style_prefer_top_level_statements = true:silent + +[*] +# Microsoft .NET properties +csharp_indent_braces=false +csharp_indent_switch_labels=true +csharp_new_line_before_catch=true +csharp_new_line_before_else=true +csharp_new_line_before_finally=true +csharp_new_line_before_members_in_object_initializers=true +csharp_new_line_before_open_brace=all +csharp_new_line_between_query_expression_clauses=true +csharp_preferred_modifier_order=public, private, protected, internal, new, abstract, virtual, sealed, override, static, readonly, extern, unsafe, volatile, async:suggestion +csharp_preserve_single_line_blocks=true +csharp_space_after_cast=false +csharp_space_after_colon_in_inheritance_clause=true +csharp_space_after_comma=true +csharp_space_after_dot=false +csharp_space_after_keywords_in_control_flow_statements=true +csharp_space_after_semicolon_in_for_statement=true +csharp_space_around_binary_operators=before_and_after +csharp_space_before_colon_in_inheritance_clause=true +csharp_space_before_comma=false +csharp_space_before_dot=false +csharp_space_before_open_square_brackets=false +csharp_space_before_semicolon_in_for_statement=false +csharp_space_between_empty_square_brackets=false +csharp_space_between_method_call_empty_parameter_list_parentheses=false +csharp_space_between_method_call_name_and_opening_parenthesis=false +csharp_space_between_method_call_parameter_list_parentheses=false +csharp_space_between_method_declaration_empty_parameter_list_parentheses=false +csharp_space_between_method_declaration_name_and_open_parenthesis=false +csharp_space_between_method_declaration_parameter_list_parentheses=false +csharp_space_between_parentheses=false +csharp_space_between_square_brackets=false +csharp_style_namespace_declarations= file_scoped:suggestion +csharp_style_var_elsewhere=true:suggestion +csharp_style_var_for_built_in_types=true:suggestion +csharp_style_var_when_type_is_apparent=true:suggestion +csharp_using_directive_placement= outside_namespace:silent +dotnet_diagnostic.bc40000.severity=warning +dotnet_diagnostic.bc400005.severity=warning +dotnet_diagnostic.bc40008.severity=warning +dotnet_diagnostic.bc40056.severity=warning +dotnet_diagnostic.bc42016.severity=warning +dotnet_diagnostic.bc42024.severity=warning +dotnet_diagnostic.bc42025.severity=warning +dotnet_diagnostic.bc42104.severity=warning +dotnet_diagnostic.bc42105.severity=warning +dotnet_diagnostic.bc42106.severity=warning +dotnet_diagnostic.bc42107.severity=warning +dotnet_diagnostic.bc42304.severity=warning +dotnet_diagnostic.bc42309.severity=warning +dotnet_diagnostic.bc42322.severity=warning +dotnet_diagnostic.bc42349.severity=warning +dotnet_diagnostic.bc42353.severity=warning +dotnet_diagnostic.bc42354.severity=warning +dotnet_diagnostic.bc42355.severity=warning +dotnet_diagnostic.bc42356.severity=warning +dotnet_diagnostic.bc42358.severity=warning +dotnet_diagnostic.bc42504.severity=warning +dotnet_diagnostic.bc42505.severity=warning +dotnet_diagnostic.cs0067.severity=warning +dotnet_diagnostic.cs0078.severity=warning +dotnet_diagnostic.cs0108.severity=warning +dotnet_diagnostic.cs0109.severity=warning +dotnet_diagnostic.cs0114.severity=warning +dotnet_diagnostic.cs0162.severity=warning +dotnet_diagnostic.cs0164.severity=warning +dotnet_diagnostic.cs0168.severity=warning +dotnet_diagnostic.cs0169.severity=warning +dotnet_diagnostic.cs0183.severity=warning +dotnet_diagnostic.cs0184.severity=warning +dotnet_diagnostic.cs0197.severity=warning +dotnet_diagnostic.cs0219.severity=warning +dotnet_diagnostic.cs0252.severity=warning +dotnet_diagnostic.cs0253.severity=warning +dotnet_diagnostic.cs0414.severity=warning +dotnet_diagnostic.cs0420.severity=warning +dotnet_diagnostic.cs0465.severity=warning +dotnet_diagnostic.cs0469.severity=warning +dotnet_diagnostic.cs0612.severity=warning +dotnet_diagnostic.cs0618.severity=warning +dotnet_diagnostic.cs0628.severity=warning +dotnet_diagnostic.cs0642.severity=warning +dotnet_diagnostic.cs0649.severity=warning +dotnet_diagnostic.cs0652.severity=warning +dotnet_diagnostic.cs0657.severity=warning +dotnet_diagnostic.cs0658.severity=warning +dotnet_diagnostic.cs0659.severity=warning +dotnet_diagnostic.cs0660.severity=warning +dotnet_diagnostic.cs0661.severity=warning +dotnet_diagnostic.cs0665.severity=warning +dotnet_diagnostic.cs0672.severity=warning +dotnet_diagnostic.cs0675.severity=warning +dotnet_diagnostic.cs0693.severity=warning +dotnet_diagnostic.cs1030.severity=warning +dotnet_diagnostic.cs1058.severity=warning +dotnet_diagnostic.cs1066.severity=warning +dotnet_diagnostic.cs1522.severity=warning +dotnet_diagnostic.cs1570.severity=warning +dotnet_diagnostic.cs1571.severity=warning +dotnet_diagnostic.cs1572.severity=warning +dotnet_diagnostic.cs1573.severity=warning +dotnet_diagnostic.cs1574.severity=warning +dotnet_diagnostic.cs1580.severity=warning +dotnet_diagnostic.cs1581.severity=warning +dotnet_diagnostic.cs1584.severity=warning +dotnet_diagnostic.cs1587.severity=warning +dotnet_diagnostic.cs1589.severity=warning +dotnet_diagnostic.cs1590.severity=warning +dotnet_diagnostic.cs1591.severity=warning +dotnet_diagnostic.cs1592.severity=warning +dotnet_diagnostic.cs1710.severity=warning +dotnet_diagnostic.cs1711.severity=warning +dotnet_diagnostic.cs1712.severity=warning +dotnet_diagnostic.cs1717.severity=warning +dotnet_diagnostic.cs1723.severity=warning +dotnet_diagnostic.cs1911.severity=warning +dotnet_diagnostic.cs1957.severity=warning +dotnet_diagnostic.cs1981.severity=warning +dotnet_diagnostic.cs1998.severity=warning +dotnet_diagnostic.cs4014.severity=warning +dotnet_diagnostic.cs7022.severity=warning +dotnet_diagnostic.cs7023.severity=warning +dotnet_diagnostic.cs7095.severity=warning +dotnet_diagnostic.cs8094.severity=warning +dotnet_diagnostic.cs8123.severity=warning +dotnet_diagnostic.cs8321.severity=warning +dotnet_diagnostic.cs8383.severity=warning +dotnet_diagnostic.cs8416.severity=warning +dotnet_diagnostic.cs8417.severity=warning +dotnet_diagnostic.cs8424.severity=warning +dotnet_diagnostic.cs8425.severity=warning +dotnet_diagnostic.cs8509.severity=warning +dotnet_diagnostic.cs8524.severity=warning +dotnet_diagnostic.cs8597.severity=warning +dotnet_diagnostic.cs8600.severity=warning +dotnet_diagnostic.cs8601.severity=warning +dotnet_diagnostic.cs8602.severity=warning +dotnet_diagnostic.cs8603.severity=warning +dotnet_diagnostic.cs8604.severity=warning +dotnet_diagnostic.cs8605.severity=warning +dotnet_diagnostic.cs8607.severity=warning +dotnet_diagnostic.cs8608.severity=warning +dotnet_diagnostic.cs8609.severity=warning +dotnet_diagnostic.cs8610.severity=warning +dotnet_diagnostic.cs8611.severity=warning +dotnet_diagnostic.cs8612.severity=warning +dotnet_diagnostic.cs8613.severity=warning +dotnet_diagnostic.cs8614.severity=warning +dotnet_diagnostic.cs8615.severity=warning +dotnet_diagnostic.cs8616.severity=warning +dotnet_diagnostic.cs8617.severity=warning +dotnet_diagnostic.cs8618.severity=warning +dotnet_diagnostic.cs8619.severity=warning +dotnet_diagnostic.cs8620.severity=warning +dotnet_diagnostic.cs8621.severity=warning +dotnet_diagnostic.cs8622.severity=warning +dotnet_diagnostic.cs8624.severity=warning +dotnet_diagnostic.cs8625.severity=warning +dotnet_diagnostic.cs8629.severity=warning +dotnet_diagnostic.cs8631.severity=warning +dotnet_diagnostic.cs8632.severity=none +dotnet_diagnostic.cs8633.severity=warning +dotnet_diagnostic.cs8634.severity=warning +dotnet_diagnostic.cs8643.severity=warning +dotnet_diagnostic.cs8644.severity=warning +dotnet_diagnostic.cs8645.severity=warning +dotnet_diagnostic.cs8655.severity=warning +dotnet_diagnostic.cs8656.severity=warning +dotnet_diagnostic.cs8667.severity=warning +dotnet_diagnostic.cs8669.severity=none +dotnet_diagnostic.cs8670.severity=warning +dotnet_diagnostic.cs8714.severity=warning +dotnet_diagnostic.cs8762.severity=warning +dotnet_diagnostic.cs8763.severity=warning +dotnet_diagnostic.cs8764.severity=warning +dotnet_diagnostic.cs8765.severity=warning +dotnet_diagnostic.cs8766.severity=warning +dotnet_diagnostic.cs8767.severity=warning +dotnet_diagnostic.cs8768.severity=warning +dotnet_diagnostic.cs8769.severity=warning +dotnet_diagnostic.cs8770.severity=warning +dotnet_diagnostic.cs8774.severity=warning +dotnet_diagnostic.cs8775.severity=warning +dotnet_diagnostic.cs8776.severity=warning +dotnet_diagnostic.cs8777.severity=warning +dotnet_diagnostic.cs8794.severity=warning +dotnet_diagnostic.cs8819.severity=warning +dotnet_diagnostic.cs8824.severity=warning +dotnet_diagnostic.cs8825.severity=warning +dotnet_diagnostic.cs8846.severity=warning +dotnet_diagnostic.cs8847.severity=warning +dotnet_diagnostic.cs8851.severity=warning +dotnet_diagnostic.cs8860.severity=warning +dotnet_diagnostic.cs8892.severity=warning +dotnet_diagnostic.cs8907.severity=warning +dotnet_diagnostic.cs8947.severity=warning +dotnet_diagnostic.cs8960.severity=warning +dotnet_diagnostic.cs8961.severity=warning +dotnet_diagnostic.cs8962.severity=warning +dotnet_diagnostic.cs8963.severity=warning +dotnet_diagnostic.cs8965.severity=warning +dotnet_diagnostic.cs8966.severity=warning +dotnet_diagnostic.cs8971.severity=warning +dotnet_diagnostic.wme006.severity=warning +dotnet_naming_rule.constants_rule.import_to_resharper=as_predefined +dotnet_naming_rule.constants_rule.severity = warning +dotnet_naming_rule.constants_rule.style = upper_camel_case_style +dotnet_naming_rule.constants_rule.symbols=constants_symbols +dotnet_naming_rule.event_rule.import_to_resharper=as_predefined +dotnet_naming_rule.event_rule.severity = warning +dotnet_naming_rule.event_rule.style = upper_camel_case_style +dotnet_naming_rule.event_rule.symbols=event_symbols +dotnet_naming_rule.interfaces_rule.import_to_resharper=as_predefined +dotnet_naming_rule.interfaces_rule.severity = warning +dotnet_naming_rule.interfaces_rule.style = i_upper_camel_case_style +dotnet_naming_rule.interfaces_rule.symbols=interfaces_symbols +dotnet_naming_rule.locals_rule.import_to_resharper=as_predefined +dotnet_naming_rule.locals_rule.severity = warning +dotnet_naming_rule.locals_rule.style = lower_camel_case_style_1 +dotnet_naming_rule.locals_rule.symbols=locals_symbols +dotnet_naming_rule.local_constants_rule.import_to_resharper=as_predefined +dotnet_naming_rule.local_constants_rule.severity = warning +dotnet_naming_rule.local_constants_rule.style = lower_camel_case_style_1 +dotnet_naming_rule.local_constants_rule.symbols=local_constants_symbols +dotnet_naming_rule.local_functions_rule.import_to_resharper=as_predefined +dotnet_naming_rule.local_functions_rule.severity = warning +dotnet_naming_rule.local_functions_rule.style = upper_camel_case_style +dotnet_naming_rule.local_functions_rule.symbols=local_functions_symbols +dotnet_naming_rule.method_rule.import_to_resharper=as_predefined +dotnet_naming_rule.method_rule.severity = warning +dotnet_naming_rule.method_rule.style = upper_camel_case_style +dotnet_naming_rule.method_rule.symbols=method_symbols +dotnet_naming_rule.parameters_rule.import_to_resharper=as_predefined +dotnet_naming_rule.parameters_rule.severity = warning +dotnet_naming_rule.parameters_rule.style = lower_camel_case_style_1 +dotnet_naming_rule.parameters_rule.symbols=parameters_symbols +dotnet_naming_rule.private_constants_rule.import_to_resharper=as_predefined +dotnet_naming_rule.private_constants_rule.severity = warning +dotnet_naming_rule.private_constants_rule.style = upper_camel_case_style +dotnet_naming_rule.private_constants_rule.symbols=private_constants_symbols +dotnet_naming_rule.private_instance_fields_rule.import_to_resharper=as_predefined +dotnet_naming_rule.private_instance_fields_rule.severity = warning +dotnet_naming_rule.private_instance_fields_rule.style = lower_camel_case_style +dotnet_naming_rule.private_instance_fields_rule.symbols=private_instance_fields_symbols +dotnet_naming_rule.private_static_fields_rule.import_to_resharper=as_predefined +dotnet_naming_rule.private_static_fields_rule.severity = warning +dotnet_naming_rule.private_static_fields_rule.style = lower_camel_case_style +dotnet_naming_rule.private_static_fields_rule.symbols=private_static_fields_symbols +dotnet_naming_rule.private_static_readonly_rule.import_to_resharper=as_predefined +dotnet_naming_rule.private_static_readonly_rule.severity = warning +dotnet_naming_rule.private_static_readonly_rule.style = upper_camel_case_style +dotnet_naming_rule.private_static_readonly_rule.symbols=private_static_readonly_symbols +dotnet_naming_rule.property_rule.import_to_resharper=as_predefined +dotnet_naming_rule.property_rule.severity = warning +dotnet_naming_rule.property_rule.style = upper_camel_case_style +dotnet_naming_rule.property_rule.symbols=property_symbols +dotnet_naming_rule.public_fields_rule.import_to_resharper=as_predefined +dotnet_naming_rule.public_fields_rule.severity = warning +dotnet_naming_rule.public_fields_rule.style = upper_camel_case_style +dotnet_naming_rule.public_fields_rule.symbols=public_fields_symbols +dotnet_naming_rule.static_readonly_rule.import_to_resharper=as_predefined +dotnet_naming_rule.static_readonly_rule.severity = warning +dotnet_naming_rule.static_readonly_rule.style = upper_camel_case_style +dotnet_naming_rule.static_readonly_rule.symbols=static_readonly_symbols +dotnet_naming_rule.types_and_namespaces_rule.import_to_resharper=as_predefined +dotnet_naming_rule.types_and_namespaces_rule.severity = warning +dotnet_naming_rule.types_and_namespaces_rule.style = upper_camel_case_style +dotnet_naming_rule.types_and_namespaces_rule.symbols=types_and_namespaces_symbols +dotnet_naming_rule.type_parameters_rule.import_to_resharper=as_predefined +dotnet_naming_rule.type_parameters_rule.severity = warning +dotnet_naming_rule.type_parameters_rule.style = t_upper_camel_case_style +dotnet_naming_rule.type_parameters_rule.symbols=type_parameters_symbols +dotnet_naming_style.i_upper_camel_case_style.capitalization=pascal_case +dotnet_naming_style.i_upper_camel_case_style.required_prefix=I +dotnet_naming_style.lower_camel_case_style.capitalization=camel_case +dotnet_naming_style.lower_camel_case_style.required_prefix=_ +dotnet_naming_style.lower_camel_case_style_1.capitalization=camel_case +dotnet_naming_style.t_upper_camel_case_style.capitalization=pascal_case +dotnet_naming_style.t_upper_camel_case_style.required_prefix=T +dotnet_naming_style.upper_camel_case_style.capitalization=pascal_case +dotnet_naming_symbols.constants_symbols.applicable_accessibilities=public,internal,protected,protected_internal,private_protected +dotnet_naming_symbols.constants_symbols.applicable_kinds=field +dotnet_naming_symbols.constants_symbols.required_modifiers=const +dotnet_naming_symbols.event_symbols.applicable_accessibilities=* +dotnet_naming_symbols.event_symbols.applicable_kinds=event +dotnet_naming_symbols.interfaces_symbols.applicable_accessibilities=* +dotnet_naming_symbols.interfaces_symbols.applicable_kinds=interface +dotnet_naming_symbols.locals_symbols.applicable_accessibilities=* +dotnet_naming_symbols.locals_symbols.applicable_kinds=local +dotnet_naming_symbols.local_constants_symbols.applicable_accessibilities=* +dotnet_naming_symbols.local_constants_symbols.applicable_kinds=local +dotnet_naming_symbols.local_constants_symbols.required_modifiers=const +dotnet_naming_symbols.local_functions_symbols.applicable_accessibilities=* +dotnet_naming_symbols.local_functions_symbols.applicable_kinds=local_function +dotnet_naming_symbols.method_symbols.applicable_accessibilities=* +dotnet_naming_symbols.method_symbols.applicable_kinds=method +dotnet_naming_symbols.parameters_symbols.applicable_accessibilities=* +dotnet_naming_symbols.parameters_symbols.applicable_kinds=parameter +dotnet_naming_symbols.private_constants_symbols.applicable_accessibilities=private +dotnet_naming_symbols.private_constants_symbols.applicable_kinds=field +dotnet_naming_symbols.private_constants_symbols.required_modifiers=const +dotnet_naming_symbols.private_instance_fields_symbols.applicable_accessibilities=private +dotnet_naming_symbols.private_instance_fields_symbols.applicable_kinds=field +dotnet_naming_symbols.private_static_fields_symbols.applicable_accessibilities=private +dotnet_naming_symbols.private_static_fields_symbols.applicable_kinds=field +dotnet_naming_symbols.private_static_fields_symbols.required_modifiers=static +dotnet_naming_symbols.private_static_readonly_symbols.applicable_accessibilities=private +dotnet_naming_symbols.private_static_readonly_symbols.applicable_kinds=field +dotnet_naming_symbols.private_static_readonly_symbols.required_modifiers=static,readonly +dotnet_naming_symbols.property_symbols.applicable_accessibilities=* +dotnet_naming_symbols.property_symbols.applicable_kinds=property +dotnet_naming_symbols.public_fields_symbols.applicable_accessibilities=public,internal,protected,protected_internal,private_protected +dotnet_naming_symbols.public_fields_symbols.applicable_kinds=field +dotnet_naming_symbols.static_readonly_symbols.applicable_accessibilities=public,internal,protected,protected_internal,private_protected +dotnet_naming_symbols.static_readonly_symbols.applicable_kinds=field +dotnet_naming_symbols.static_readonly_symbols.required_modifiers=static,readonly +dotnet_naming_symbols.types_and_namespaces_symbols.applicable_accessibilities=* +dotnet_naming_symbols.types_and_namespaces_symbols.applicable_kinds=namespace,class,struct,enum,delegate +dotnet_naming_symbols.type_parameters_symbols.applicable_accessibilities=* +dotnet_naming_symbols.type_parameters_symbols.applicable_kinds=type_parameter +dotnet_separate_import_directive_groups=false +dotnet_sort_system_directives_first=true +dotnet_style_parentheses_in_arithmetic_binary_operators=never_if_unnecessary:suggestion +dotnet_style_parentheses_in_other_binary_operators=never_if_unnecessary:suggestion +dotnet_style_parentheses_in_relational_binary_operators=never_if_unnecessary:suggestion +dotnet_style_predefined_type_for_locals_parameters_members=true:suggestion +dotnet_style_predefined_type_for_member_access=true:suggestion +dotnet_style_qualification_for_event=false:suggestion +dotnet_style_qualification_for_field=false:suggestion +dotnet_style_qualification_for_method=false:suggestion +dotnet_style_qualification_for_property=false:suggestion +dotnet_style_require_accessibility_modifiers=for_non_interface_members:suggestion +file_header_template= + +# ReSharper properties +resharper_accessor_owner_body=expression_body +resharper_alignment_tab_fill_style=use_spaces +resharper_align_first_arg_by_paren=false +resharper_align_linq_query=false +resharper_align_multiline_argument=true +resharper_align_multiline_array_and_object_initializer=false +resharper_align_multiline_array_initializer=true +resharper_align_multiline_binary_expressions_chain=false +resharper_align_multiline_binary_patterns=false +resharper_align_multiline_ctor_init=true +resharper_align_multiline_expression_braces=false +resharper_align_multiline_implements_list=true +resharper_align_multiline_property_pattern=false +resharper_align_multiline_statement_conditions=true +resharper_align_multiline_switch_expression=false +resharper_align_multiline_type_argument=true +resharper_align_multiline_type_parameter=true +resharper_align_multline_type_parameter_constrains=true +resharper_align_multline_type_parameter_list=false +resharper_align_tuple_components=false +resharper_align_union_type_usage=true +resharper_allow_alias=true +resharper_allow_comment_after_lbrace=false +resharper_allow_far_alignment=false +resharper_always_use_end_of_line_brace_style=false +resharper_apply_auto_detected_rules=false +resharper_apply_on_completion=false +resharper_arguments_anonymous_function=positional +resharper_arguments_literal=positional +resharper_arguments_named=positional +resharper_arguments_other=positional +resharper_arguments_skip_single=false +resharper_arguments_string_literal=positional +resharper_attribute_style=do_not_touch +resharper_autodetect_indent_settings=false +resharper_blank_lines_after_block_statements=1 +resharper_blank_lines_after_case=0 +resharper_blank_lines_after_control_transfer_statements=1 +resharper_blank_lines_after_file_scoped_namespace_directive=1 +resharper_blank_lines_after_imports=1 +resharper_blank_lines_after_multiline_statements=0 +resharper_blank_lines_after_options=1 +resharper_blank_lines_after_start_comment=1 +resharper_blank_lines_after_using_list=1 +resharper_blank_lines_around_accessor=0 +resharper_blank_lines_around_auto_property=1 +resharper_blank_lines_around_block_case_section=0 +resharper_blank_lines_around_class_definition=1 +resharper_blank_lines_around_field=1 +resharper_blank_lines_around_function_declaration=0 +resharper_blank_lines_around_function_definition=1 +resharper_blank_lines_around_global_attribute=0 +resharper_blank_lines_around_invocable=1 +resharper_blank_lines_around_local_method=1 +resharper_blank_lines_around_multiline_case_section=0 +resharper_blank_lines_around_namespace=1 +resharper_blank_lines_around_other_declaration=0 +resharper_blank_lines_around_property=1 +resharper_blank_lines_around_razor_functions=1 +resharper_blank_lines_around_razor_helpers=1 +resharper_blank_lines_around_razor_sections=1 +resharper_blank_lines_around_region=1 +resharper_blank_lines_around_single_line_accessor=0 +resharper_blank_lines_around_single_line_auto_property=0 +resharper_blank_lines_around_single_line_field=0 +resharper_blank_lines_around_single_line_function_definition=0 +resharper_blank_lines_around_single_line_invocable=0 +resharper_blank_lines_around_single_line_local_method=0 +resharper_blank_lines_around_single_line_property=0 +resharper_blank_lines_around_single_line_type=0 +resharper_blank_lines_around_type=1 +resharper_blank_lines_before_block_statements=0 +resharper_blank_lines_before_case=0 +resharper_blank_lines_before_control_transfer_statements=0 +resharper_blank_lines_before_multiline_statements=0 +resharper_blank_lines_before_single_line_comment=0 +resharper_blank_lines_inside_namespace=0 +resharper_blank_lines_inside_region=1 +resharper_blank_lines_inside_type=0 +resharper_blank_line_after_pi=true +resharper_braces_for_dowhile=required +resharper_braces_for_fixed=required +resharper_braces_for_for=required_for_multiline +resharper_braces_for_foreach=required_for_multiline +resharper_braces_for_ifelse=not_required_for_both +resharper_braces_for_lock=required +resharper_braces_for_using=required +resharper_braces_for_while=required_for_multiline +resharper_braces_redundant=true +resharper_break_template_declaration=line_break +resharper_can_use_global_alias=true +resharper_configure_await_analysis_mode=disabled +resharper_constructor_or_destructor_body=expression_body +resharper_continuous_indent_multiplier=1 +resharper_continuous_line_indent=single +resharper_cpp_align_multiline_argument=true +resharper_cpp_align_multiline_calls_chain=true +resharper_cpp_align_multiline_extends_list=true +resharper_cpp_align_multiline_for_stmt=true +resharper_cpp_align_multiline_parameter=true +resharper_cpp_align_multiple_declaration=true +resharper_cpp_align_ternary=align_not_nested +resharper_cpp_anonymous_method_declaration_braces=next_line +resharper_cpp_case_block_braces=next_line_shifted_2 +resharper_cpp_empty_block_style=multiline +resharper_cpp_indent_switch_labels=false +resharper_cpp_insert_final_newline=false +resharper_cpp_int_align_comments=false +resharper_cpp_invocable_declaration_braces=next_line +resharper_cpp_max_line_length=120 +resharper_cpp_new_line_before_catch=true +resharper_cpp_new_line_before_else=true +resharper_cpp_new_line_before_while=true +resharper_cpp_other_braces=next_line +resharper_cpp_space_around_binary_operator=true +resharper_cpp_type_declaration_braces=next_line +resharper_cpp_wrap_arguments_style=wrap_if_long +resharper_cpp_wrap_lines=true +resharper_cpp_wrap_parameters_style=wrap_if_long +resharper_csharp_align_multiline_argument=false +resharper_csharp_align_multiline_calls_chain=false +resharper_csharp_align_multiline_expression=false +resharper_csharp_align_multiline_extends_list=false +resharper_csharp_align_multiline_for_stmt=false +resharper_csharp_align_multiline_parameter=false +resharper_csharp_align_multiple_declaration=true +resharper_csharp_empty_block_style=together +resharper_csharp_insert_final_newline=true +resharper_csharp_int_align_comments=true +resharper_csharp_max_line_length=144 +resharper_csharp_naming_rule.enum_member=AaBb +resharper_csharp_naming_rule.method_property_event=AaBb +resharper_csharp_naming_rule.other=AaBb +resharper_csharp_new_line_before_while=false +resharper_csharp_prefer_qualified_reference=false +resharper_csharp_space_after_unary_operator=false +resharper_csharp_wrap_arguments_style=wrap_if_long +resharper_csharp_wrap_before_binary_opsign=true +resharper_csharp_wrap_for_stmt_header_style=wrap_if_long +resharper_csharp_wrap_lines=true +resharper_csharp_wrap_parameters_style=wrap_if_long +resharper_css_brace_style=end_of_line +resharper_css_insert_final_newline=false +resharper_css_keep_blank_lines_between_declarations=1 +resharper_css_max_line_length=120 +resharper_css_wrap_lines=true +resharper_cxxcli_property_declaration_braces=next_line +resharper_declarations_style=separate_lines +resharper_default_exception_variable_name=e +resharper_default_value_when_type_evident=default_literal +resharper_default_value_when_type_not_evident=default_literal +resharper_delete_quotes_from_solid_values=false +resharper_disable_blank_line_changes=false +resharper_disable_formatter=false +resharper_disable_indenter=false +resharper_disable_int_align=false +resharper_disable_line_break_changes=false +resharper_disable_line_break_removal=false +resharper_disable_space_changes=false +resharper_disable_space_changes_before_trailing_comment=false +resharper_dont_remove_extra_blank_lines=false +resharper_enable_wrapping=false +resharper_enforce_line_ending_style=false +resharper_event_handler_pattern_long=$object$On$event$ +resharper_event_handler_pattern_short=On$event$ +resharper_expression_braces=inside +resharper_expression_pars=inside +resharper_extra_spaces=remove_all +resharper_force_attribute_style=separate +resharper_force_chop_compound_do_expression=false +resharper_force_chop_compound_if_expression=false +resharper_force_chop_compound_while_expression=false +resharper_force_control_statements_braces=do_not_change +resharper_force_linebreaks_inside_complex_literals=true +resharper_force_variable_declarations_on_new_line=false +resharper_format_leading_spaces_decl=false +resharper_free_block_braces=next_line +resharper_function_declaration_return_type_style=do_not_change +resharper_function_definition_return_type_style=do_not_change +resharper_generator_mode=false +resharper_html_attribute_indent=align_by_first_attribute +resharper_html_insert_final_newline=false +resharper_html_linebreak_before_elements=body,div,p,form,h1,h2,h3 +resharper_html_max_blank_lines_between_tags=2 +resharper_html_max_line_length=120 +resharper_html_pi_attribute_style=on_single_line +resharper_html_space_before_self_closing=false +resharper_html_wrap_lines=true +resharper_ignore_space_preservation=false +resharper_include_prefix_comment_in_indent=false +resharper_indent_access_specifiers_from_class=false +resharper_indent_aligned_ternary=true +resharper_indent_anonymous_method_block=false +resharper_indent_braces_inside_statement_conditions=true +resharper_indent_case_from_select=true +resharper_indent_child_elements=OneIndent +resharper_indent_class_members_from_access_specifiers=false +resharper_indent_comment=true +resharper_indent_inside_namespace=true +resharper_indent_invocation_pars=inside +resharper_indent_left_par_inside_expression=false +resharper_indent_method_decl_pars=inside +resharper_indent_nested_fixed_stmt=false +resharper_indent_nested_foreach_stmt=true +resharper_indent_nested_for_stmt=true +resharper_indent_nested_lock_stmt=false +resharper_indent_nested_usings_stmt=false +resharper_indent_nested_while_stmt=true +resharper_indent_pars=inside +resharper_indent_preprocessor_directives=none +resharper_indent_preprocessor_if=no_indent +resharper_indent_preprocessor_other=no_indent +resharper_indent_preprocessor_region=usual_indent +resharper_indent_statement_pars=inside +resharper_indent_text=OneIndent +resharper_indent_typearg_angles=inside +resharper_indent_typeparam_angles=inside +resharper_indent_type_constraints=true +resharper_indent_wrapped_function_names=false +resharper_instance_members_qualify_declared_in=this_class, base_class +resharper_int_align=true +resharper_int_align_assignments=true +resharper_int_align_binary_expressions=false +resharper_int_align_declaration_names=false +resharper_int_align_eq=false +resharper_int_align_fields=true +resharper_int_align_fix_in_adjacent=true +resharper_int_align_invocations=true +resharper_int_align_methods=true +resharper_int_align_nested_ternary=true +resharper_int_align_parameters=false +resharper_int_align_properties=true +resharper_int_align_property_patterns=true +resharper_int_align_switch_expressions=true +resharper_int_align_switch_sections=true +resharper_int_align_variables=true +resharper_js_align_multiline_parameter=false +resharper_js_align_multiple_declaration=false +resharper_js_align_ternary=none +resharper_js_brace_style=end_of_line +resharper_js_empty_block_style=multiline +resharper_js_indent_switch_labels=false +resharper_js_insert_final_newline=false +resharper_js_keep_blank_lines_between_declarations=2 +resharper_js_max_line_length=120 +resharper_js_new_line_before_catch=false +resharper_js_new_line_before_else=false +resharper_js_new_line_before_finally=false +resharper_js_new_line_before_while=false +resharper_js_space_around_binary_operator=true +resharper_js_wrap_arguments_style=chop_if_long +resharper_js_wrap_before_binary_opsign=false +resharper_js_wrap_for_stmt_header_style=chop_if_long +resharper_js_wrap_lines=true +resharper_js_wrap_parameters_style=chop_if_long +resharper_keep_blank_lines_in_code=2 +resharper_keep_blank_lines_in_declarations=2 +resharper_keep_existing_attribute_arrangement=false +resharper_keep_existing_declaration_block_arrangement=false +resharper_keep_existing_declaration_parens_arrangement=true +resharper_keep_existing_embedded_arrangement=false +resharper_keep_existing_embedded_block_arrangement=false +resharper_keep_existing_enum_arrangement=false +resharper_keep_existing_expr_member_arrangement=false +resharper_keep_existing_initializer_arrangement=false +resharper_keep_existing_invocation_parens_arrangement=true +resharper_keep_existing_property_patterns_arrangement=true +resharper_keep_existing_switch_expression_arrangement=false +resharper_keep_nontrivial_alias=true +resharper_keep_user_linebreaks=true +resharper_keep_user_wrapping=true +resharper_linebreaks_around_razor_statements=true +resharper_linebreaks_inside_tags_for_elements_longer_than=2147483647 +resharper_linebreaks_inside_tags_for_elements_with_child_elements=true +resharper_linebreaks_inside_tags_for_multiline_elements=true +resharper_linebreak_before_all_elements=false +resharper_linebreak_before_multiline_elements=true +resharper_linebreak_before_singleline_elements=false +resharper_line_break_after_colon_in_member_initializer_lists=do_not_change +resharper_line_break_after_comma_in_member_initializer_lists=false +resharper_line_break_before_comma_in_member_initializer_lists=false +resharper_line_break_before_requires_clause=do_not_change +resharper_linkage_specification_braces=end_of_line +resharper_linkage_specification_indentation=none +resharper_local_function_body=expression_body +resharper_macro_block_begin= +resharper_macro_block_end= +resharper_max_array_initializer_elements_on_line=10000 +resharper_max_attribute_length_for_same_line=38 +resharper_max_enum_members_on_line=1 +resharper_max_formal_parameters_on_line=10000 +resharper_max_initializer_elements_on_line=1 +resharper_max_invocation_arguments_on_line=10000 +resharper_media_query_style=same_line +resharper_member_initializer_list_style=do_not_change +resharper_method_or_operator_body=expression_body +resharper_min_blank_lines_after_imports=0 +resharper_min_blank_lines_around_fields=0 +resharper_min_blank_lines_around_functions=1 +resharper_min_blank_lines_around_types=1 +resharper_min_blank_lines_between_declarations=1 +resharper_namespace_declaration_braces=next_line +resharper_namespace_indentation=all +resharper_nested_ternary_style=autodetect +resharper_new_line_before_enumerators=true +resharper_normalize_tag_names=false +resharper_no_indent_inside_elements=html,body,thead,tbody,tfoot +resharper_no_indent_inside_if_element_longer_than=200 +resharper_object_creation_when_type_evident=target_typed +resharper_object_creation_when_type_not_evident=explicitly_typed +resharper_old_engine=false +resharper_options_braces_pointy=false +resharper_outdent_binary_ops=true +resharper_outdent_binary_pattern_ops=false +resharper_outdent_commas=false +resharper_outdent_dots=false +resharper_outdent_namespace_member=false +resharper_outdent_statement_labels=false +resharper_outdent_ternary_ops=false +resharper_parentheses_non_obvious_operations=none, bitwise, bitwise_inclusive_or, bitwise_exclusive_or, shift, bitwise_and +resharper_parentheses_redundancy_style=remove_if_not_clarifies_precedence +resharper_parentheses_same_type_operations=false +resharper_pi_attributes_indent=align_by_first_attribute +resharper_place_attribute_on_same_line=false +resharper_place_class_decorator_on_the_same_line=false +resharper_place_comments_at_first_column=false +resharper_place_constructor_initializer_on_same_line=false +resharper_place_each_decorator_on_new_line=false +resharper_place_event_attribute_on_same_line=false +resharper_place_expr_accessor_on_single_line=true +resharper_place_expr_method_on_single_line=false +resharper_place_expr_property_on_single_line=false +resharper_place_field_decorator_on_the_same_line=false +resharper_place_linq_into_on_new_line=true +resharper_place_method_decorator_on_the_same_line=false +resharper_place_namespace_definitions_on_same_line=false +resharper_place_property_attribute_on_same_line=false +resharper_place_property_decorator_on_the_same_line=false +resharper_place_simple_case_statement_on_same_line=if_owner_is_single_line +resharper_place_simple_embedded_statement_on_same_line=false +resharper_place_simple_enum_on_single_line=true +resharper_place_simple_initializer_on_single_line=true +resharper_place_simple_property_pattern_on_single_line=true +resharper_place_simple_switch_expression_on_single_line=true +resharper_place_template_args_on_new_line=false +resharper_place_type_constraints_on_same_line=true +resharper_prefer_explicit_discard_declaration=false +resharper_prefer_separate_deconstructed_variables_declaration=false +resharper_preserve_spaces_inside_tags=pre,textarea +resharper_properties_style=separate_lines_for_nonsingle +resharper_protobuf_brace_style=end_of_line +resharper_protobuf_empty_block_style=together_same_line +resharper_protobuf_insert_final_newline=false +resharper_protobuf_max_line_length=120 +resharper_protobuf_wrap_lines=true +resharper_qualified_using_at_nested_scope=false +resharper_quote_style=doublequoted +resharper_razor_prefer_qualified_reference=true +resharper_remove_blank_lines_near_braces=false +resharper_remove_blank_lines_near_braces_in_code=true +resharper_remove_blank_lines_near_braces_in_declarations=true +resharper_remove_this_qualifier=true +resharper_requires_expression_braces=next_line +resharper_resx_attribute_indent=single_indent +resharper_resx_insert_final_newline=false +resharper_resx_linebreak_before_elements= +resharper_resx_max_blank_lines_between_tags=0 +resharper_resx_max_line_length=2147483647 +resharper_resx_pi_attribute_style=do_not_touch +resharper_resx_space_before_self_closing=false +resharper_resx_wrap_lines=false +resharper_resx_wrap_tags_and_pi=false +resharper_resx_wrap_text=false +resharper_selector_style=same_line +resharper_show_autodetect_configure_formatting_tip=true +resharper_simple_blocks=do_not_change +resharper_simple_block_style=do_not_change +resharper_simple_case_statement_style=do_not_change +resharper_simple_embedded_statement_style=do_not_change +resharper_single_statement_function_style=do_not_change +resharper_sort_attributes=false +resharper_sort_class_selectors=false +resharper_sort_usings=true +resharper_sort_usings_lowercase_first=false +resharper_spaces_around_eq_in_attribute=false +resharper_spaces_around_eq_in_pi_attribute=false +resharper_spaces_inside_tags=false +resharper_space_after_arrow=true +resharper_space_after_attributes=true +resharper_space_after_attribute_target_colon=true +resharper_space_after_cast=false +resharper_space_after_colon=true +resharper_space_after_colon_in_case=true +resharper_space_after_colon_in_inheritance_clause=true +resharper_space_after_colon_in_type_annotation=true +resharper_space_after_comma=true +resharper_space_after_for_colon=true +resharper_space_after_function_comma=true +resharper_space_after_keywords_in_control_flow_statements=true +resharper_space_after_last_attribute=false +resharper_space_after_last_pi_attribute=false +resharper_space_after_media_colon=true +resharper_space_after_media_comma=true +resharper_space_after_operator_keyword=true +resharper_space_after_property_colon=true +resharper_space_after_property_semicolon=true +resharper_space_after_ptr_in_data_member=true +resharper_space_after_ptr_in_data_members=false +resharper_space_after_ptr_in_method=true +resharper_space_after_ref_in_data_member=true +resharper_space_after_ref_in_data_members=false +resharper_space_after_ref_in_method=true +resharper_space_after_selector_comma=true +resharper_space_after_semicolon_in_for_statement=true +resharper_space_after_separator=false +resharper_space_after_ternary_colon=true +resharper_space_after_ternary_quest=true +resharper_space_after_triple_slash=true +resharper_space_after_type_parameter_constraint_colon=true +resharper_space_around_additive_op=true +resharper_space_around_alias_eq=true +resharper_space_around_assignment_op=true +resharper_space_around_assignment_operator=true +resharper_space_around_attribute_match_operator=false +resharper_space_around_deref_in_trailing_return_type=true +resharper_space_around_lambda_arrow=true +resharper_space_around_member_access_operator=false +resharper_space_around_operator=true +resharper_space_around_pipe_or_amper_in_type_usage=true +resharper_space_around_relational_op=true +resharper_space_around_selector_operator=true +resharper_space_around_shift_op=true +resharper_space_around_stmt_colon=true +resharper_space_around_ternary_operator=true +resharper_space_before_array_rank_parentheses=false +resharper_space_before_arrow=true +resharper_space_before_attribute_target_colon=false +resharper_space_before_checked_parentheses=false +resharper_space_before_colon=false +resharper_space_before_colon_in_case=false +resharper_space_before_colon_in_inheritance_clause=true +resharper_space_before_colon_in_type_annotation=false +resharper_space_before_comma=false +resharper_space_before_default_parentheses=false +resharper_space_before_empty_invocation_parentheses=false +resharper_space_before_empty_method_parentheses=false +resharper_space_before_for_colon=true +resharper_space_before_function_comma=false +resharper_space_before_initializer_braces=false +resharper_space_before_invocation_parentheses=false +resharper_space_before_label_colon=false +resharper_space_before_lambda_parentheses=false +resharper_space_before_media_colon=false +resharper_space_before_media_comma=false +resharper_space_before_method_parentheses=false +resharper_space_before_nameof_parentheses=false +resharper_space_before_new_parentheses=false +resharper_space_before_nullable_mark=false +resharper_space_before_open_square_brackets=false +resharper_space_before_pointer_asterik_declaration=false +resharper_space_before_property_colon=false +resharper_space_before_property_semicolon=false +resharper_space_before_ptr_in_abstract_decl=false +resharper_space_before_ptr_in_data_member=false +resharper_space_before_ptr_in_data_members=true +resharper_space_before_ptr_in_method=false +resharper_space_before_ref_in_abstract_decl=false +resharper_space_before_ref_in_data_member=false +resharper_space_before_ref_in_data_members=true +resharper_space_before_ref_in_method=false +resharper_space_before_selector_comma=false +resharper_space_before_semicolon=false +resharper_space_before_semicolon_in_for_statement=false +resharper_space_before_separator=false +resharper_space_before_singleline_accessorholder=true +resharper_space_before_sizeof_parentheses=false +resharper_space_before_template_args=false +resharper_space_before_template_params=true +resharper_space_before_ternary_colon=true +resharper_space_before_ternary_quest=true +resharper_space_before_trailing_comment=true +resharper_space_before_typeof_parentheses=false +resharper_space_before_type_argument_angle=false +resharper_space_before_type_parameters_brackets=false +resharper_space_before_type_parameter_angle=false +resharper_space_before_type_parameter_constraint_colon=true +resharper_space_before_type_parameter_parentheses=true +resharper_space_between_accessors_in_singleline_property=true +resharper_space_between_attribute_sections=true +resharper_space_between_closing_angle_brackets_in_template_args=false +resharper_space_between_empty_square_brackets=false +resharper_space_between_keyword_and_expression=true +resharper_space_between_keyword_and_type=true +resharper_space_between_method_call_empty_parameter_list_parentheses=false +resharper_space_between_method_call_name_and_opening_parenthesis=false +resharper_space_between_method_call_parameter_list_parentheses=false +resharper_space_between_method_declaration_empty_parameter_list_parentheses=false +resharper_space_between_method_declaration_name_and_open_parenthesis=false +resharper_space_between_method_declaration_parameter_list_parentheses=false +resharper_space_between_parentheses_of_control_flow_statements=false +resharper_space_between_square_brackets=false +resharper_space_between_typecast_parentheses=false +resharper_space_colon_after=true +resharper_space_colon_before=false +resharper_space_comma=true +resharper_space_equals=true +resharper_space_inside_braces=true +resharper_space_in_singleline_accessorholder=true +resharper_space_in_singleline_anonymous_method=true +resharper_space_in_singleline_method=true +resharper_space_near_postfix_and_prefix_op=false +resharper_space_within_array_initialization_braces=false +resharper_space_within_array_rank_empty_parentheses=false +resharper_space_within_array_rank_parentheses=false +resharper_space_within_attribute_angles=false +resharper_space_within_attribute_match_brackets=false +resharper_space_within_checked_parentheses=false +resharper_space_within_default_parentheses=false +resharper_space_within_empty_braces=true +resharper_space_within_empty_initializer_braces=false +resharper_space_within_empty_invocation_parentheses=false +resharper_space_within_empty_method_parentheses=false +resharper_space_within_empty_object_literal_braces=false +resharper_space_within_empty_template_params=false +resharper_space_within_expression_parentheses=false +resharper_space_within_function_parentheses=false +resharper_space_within_import_braces=true +resharper_space_within_initializer_braces=false +resharper_space_within_invocation_parentheses=false +resharper_space_within_media_block=true +resharper_space_within_media_parentheses=false +resharper_space_within_method_parentheses=false +resharper_space_within_nameof_parentheses=false +resharper_space_within_new_parentheses=false +resharper_space_within_object_literal_braces=true +resharper_space_within_parentheses=false +resharper_space_within_property_block=true +resharper_space_within_single_line_array_initializer_braces=true +resharper_space_within_sizeof_parentheses=false +resharper_space_within_template_args=false +resharper_space_within_template_argument=false +resharper_space_within_template_params=false +resharper_space_within_tuple_parentheses=false +resharper_space_within_typeof_parentheses=false +resharper_space_within_type_argument_angles=false +resharper_space_within_type_parameters_brackets=false +resharper_space_within_type_parameter_angles=false +resharper_space_within_type_parameter_parentheses=false +resharper_special_else_if_treatment=true +resharper_static_members_qualify_members=none +resharper_static_members_qualify_with=declared_type +resharper_stick_comment=true +resharper_support_vs_event_naming_pattern=true +resharper_termination_style=ensure_semicolon +resharper_toplevel_function_declaration_return_type_style=do_not_change +resharper_toplevel_function_definition_return_type_style=do_not_change +resharper_trailing_comma_in_multiline_lists=true +resharper_trailing_comma_in_singleline_lists=false +resharper_types_braces=end_of_line +resharper_use_continuous_indent_inside_initializer_braces=true +resharper_use_continuous_indent_inside_parens=true +resharper_use_continuous_line_indent_in_expression_braces=false +resharper_use_continuous_line_indent_in_method_pars=false +resharper_use_heuristics_for_body_style=true +resharper_use_indents_from_main_language_in_file=true +resharper_use_indent_from_previous_element=true +resharper_use_indent_from_vs=false +resharper_use_roslyn_logic_for_evident_types=false +resharper_vb_align_multiline_argument=true +resharper_vb_align_multiline_expression=true +resharper_vb_align_multiline_parameter=true +resharper_vb_align_multiple_declaration=true +resharper_vb_insert_final_newline=false +resharper_vb_max_line_length=120 +resharper_vb_place_field_attribute_on_same_line=true +resharper_vb_place_method_attribute_on_same_line=false +resharper_vb_place_type_attribute_on_same_line=false +resharper_vb_prefer_qualified_reference=false +resharper_vb_space_after_unary_operator=true +resharper_vb_space_around_multiplicative_op=false +resharper_vb_wrap_arguments_style=wrap_if_long +resharper_vb_wrap_before_binary_opsign=false +resharper_vb_wrap_lines=true +resharper_vb_wrap_parameters_style=wrap_if_long +resharper_wrap_after_binary_opsign=true +resharper_wrap_after_declaration_lpar=false +resharper_wrap_after_dot=false +resharper_wrap_after_dot_in_method_calls=false +resharper_wrap_after_expression_lbrace=true +resharper_wrap_after_invocation_lpar=false +resharper_wrap_around_elements=true +resharper_wrap_array_initializer_style=chop_always +resharper_wrap_array_literals=chop_if_long +resharper_wrap_base_clause_style=wrap_if_long +resharper_wrap_before_arrow_with_expressions=true +resharper_wrap_before_binary_pattern_op=true +resharper_wrap_before_colon=false +resharper_wrap_before_comma=false +resharper_wrap_before_comma_in_base_clause=false +resharper_wrap_before_declaration_lpar=false +resharper_wrap_before_declaration_rpar=false +resharper_wrap_before_dot=true +resharper_wrap_before_eq=false +resharper_wrap_before_expression_rbrace=true +resharper_wrap_before_extends_colon=false +resharper_wrap_before_first_type_parameter_constraint=false +resharper_wrap_before_invocation_lpar=false +resharper_wrap_before_invocation_rpar=false +resharper_wrap_before_linq_expression=false +resharper_wrap_before_ternary_opsigns=true +resharper_wrap_before_type_parameter_langle=false +resharper_wrap_braced_init_list_style=wrap_if_long +resharper_wrap_chained_binary_expressions=chop_if_long +resharper_wrap_chained_binary_patterns=wrap_if_long +resharper_wrap_chained_method_calls=wrap_if_long +resharper_wrap_ctor_initializer_style=wrap_if_long +resharper_wrap_enumeration_style=chop_if_long +resharper_wrap_enum_declaration=chop_always +resharper_wrap_enum_style=do_not_change +resharper_wrap_extends_list_style=wrap_if_long +resharper_wrap_imports=chop_if_long +resharper_wrap_multiple_declaration_style=chop_if_long +resharper_wrap_multiple_type_parameter_constraints_style=chop_if_long +resharper_wrap_object_literals=chop_if_long +resharper_wrap_property_pattern=chop_if_long +resharper_wrap_switch_expression=chop_always +resharper_wrap_ternary_expr_style=chop_if_long +resharper_wrap_union_type_usage=chop_if_long +resharper_wrap_verbatim_interpolated_strings=no_wrap +resharper_xmldoc_attribute_indent=single_indent +resharper_xmldoc_insert_final_newline=false +resharper_xmldoc_linebreak_before_elements=summary,remarks,example,returns,param,typeparam,value,para +resharper_xmldoc_max_blank_lines_between_tags=0 +resharper_xmldoc_max_line_length=120 +resharper_xmldoc_pi_attribute_style=do_not_touch +resharper_xmldoc_space_before_self_closing=true +resharper_xmldoc_wrap_lines=true +resharper_xmldoc_wrap_tags_and_pi=true +resharper_xmldoc_wrap_text=true +resharper_xml_attribute_indent=align_by_first_attribute +resharper_xml_insert_final_newline=false +resharper_xml_linebreak_before_elements= +resharper_xml_max_blank_lines_between_tags=2 +resharper_xml_max_line_length=120 +resharper_xml_pi_attribute_style=do_not_touch +resharper_xml_space_before_self_closing=true +resharper_xml_wrap_lines=true +resharper_xml_wrap_tags_and_pi=true +resharper_xml_wrap_text=false + +# ReSharper inspection severities +resharper_abstract_class_constructor_can_be_made_protected_highlighting=hint +resharper_access_rights_in_text_highlighting=warning +resharper_access_to_disposed_closure_highlighting=warning +resharper_access_to_for_each_variable_in_closure_highlighting=warning +resharper_access_to_modified_closure_highlighting=warning +resharper_access_to_static_member_via_derived_type_highlighting=warning +resharper_address_of_marshal_by_ref_object_highlighting=warning +resharper_amd_dependency_path_problem_highlighting=none +resharper_amd_external_module_highlighting=suggestion +resharper_angular_html_banana_highlighting=warning +resharper_annotate_can_be_null_parameter_highlighting=none +resharper_annotate_can_be_null_type_member_highlighting=none +resharper_annotate_not_null_parameter_highlighting=none +resharper_annotate_not_null_type_member_highlighting=none +resharper_annotation_conflict_in_hierarchy_highlighting=warning +resharper_annotation_redundancy_at_value_type_highlighting=warning +resharper_annotation_redundancy_in_hierarchy_highlighting=warning +resharper_arguments_style_anonymous_function_highlighting=hint +resharper_arguments_style_literal_highlighting=hint +resharper_arguments_style_named_expression_highlighting=hint +resharper_arguments_style_other_highlighting=hint +resharper_arguments_style_string_literal_highlighting=hint +resharper_arrange_accessor_owner_body_highlighting=suggestion +resharper_arrange_attributes_highlighting=none +resharper_arrange_constructor_or_destructor_body_highlighting=hint +resharper_arrange_default_value_when_type_evident_highlighting=suggestion +resharper_arrange_default_value_when_type_not_evident_highlighting=hint +resharper_arrange_local_function_body_highlighting=hint +resharper_arrange_method_or_operator_body_highlighting=hint +resharper_arrange_missing_parentheses_highlighting=hint +resharper_arrange_namespace_body_highlighting=hint +resharper_arrange_object_creation_when_type_evident_highlighting=suggestion +resharper_arrange_object_creation_when_type_not_evident_highlighting=hint +resharper_arrange_redundant_parentheses_highlighting=hint +resharper_arrange_static_member_qualifier_highlighting=hint +resharper_arrange_this_qualifier_highlighting=hint +resharper_arrange_trailing_comma_in_multiline_lists_highlighting=hint +resharper_arrange_trailing_comma_in_singleline_lists_highlighting=hint +resharper_arrange_type_member_modifiers_highlighting=hint +resharper_arrange_type_modifiers_highlighting=hint +resharper_arrange_var_keywords_in_deconstructing_declaration_highlighting=suggestion +resharper_asp_content_placeholder_not_resolved_highlighting=error +resharper_asp_custom_page_parser_filter_type_highlighting=warning +resharper_asp_dead_code_highlighting=warning +resharper_asp_entity_highlighting=warning +resharper_asp_image_highlighting=warning +resharper_asp_invalid_control_type_highlighting=error +resharper_asp_not_resolved_highlighting=error +resharper_asp_ods_method_reference_resolve_error_highlighting=error +resharper_asp_resolve_warning_highlighting=warning +resharper_asp_skin_not_resolved_highlighting=error +resharper_asp_tag_attribute_with_optional_value_highlighting=warning +resharper_asp_theme_not_resolved_highlighting=error +resharper_asp_unused_register_directive_highlighting_highlighting=warning +resharper_asp_warning_highlighting=warning +resharper_assigned_value_is_never_used_highlighting=warning +resharper_assigned_value_wont_be_assigned_to_corresponding_field_highlighting=warning +resharper_assignment_in_conditional_expression_highlighting=warning +resharper_assignment_in_condition_expression_highlighting=warning +resharper_assignment_is_fully_discarded_highlighting=warning +resharper_assign_null_to_not_null_attribute_highlighting=warning +resharper_assign_to_constant_highlighting=error +resharper_assign_to_implicit_global_in_function_scope_highlighting=warning +resharper_asxx_path_error_highlighting=warning +resharper_async_iterator_invocation_without_await_foreach_highlighting=warning +resharper_async_void_lambda_highlighting=warning +resharper_async_void_method_highlighting=none +resharper_auto_property_can_be_made_get_only_global_highlighting=suggestion +resharper_auto_property_can_be_made_get_only_local_highlighting=suggestion +resharper_bad_attribute_brackets_spaces_highlighting=none +resharper_bad_braces_spaces_highlighting=none +resharper_bad_child_statement_indent_highlighting=warning +resharper_bad_colon_spaces_highlighting=none +resharper_bad_comma_spaces_highlighting=none +resharper_bad_control_braces_indent_highlighting=suggestion +resharper_bad_control_braces_line_breaks_highlighting=none +resharper_bad_declaration_braces_indent_highlighting=none +resharper_bad_declaration_braces_line_breaks_highlighting=none +resharper_bad_empty_braces_line_breaks_highlighting=none +resharper_bad_expression_braces_indent_highlighting=none +resharper_bad_expression_braces_line_breaks_highlighting=none +resharper_bad_generic_brackets_spaces_highlighting=none +resharper_bad_indent_highlighting=none +resharper_bad_linq_line_breaks_highlighting=none +resharper_bad_list_line_breaks_highlighting=none +resharper_bad_member_access_spaces_highlighting=none +resharper_bad_namespace_braces_indent_highlighting=none +resharper_bad_parens_line_breaks_highlighting=none +resharper_bad_parens_spaces_highlighting=none +resharper_bad_preprocessor_indent_highlighting=none +resharper_bad_semicolon_spaces_highlighting=none +resharper_bad_spaces_after_keyword_highlighting=none +resharper_bad_square_brackets_spaces_highlighting=none +resharper_bad_switch_braces_indent_highlighting=none +resharper_bad_symbol_spaces_highlighting=none +resharper_base_member_has_params_highlighting=warning +resharper_base_method_call_with_default_parameter_highlighting=warning +resharper_base_object_equals_is_object_equals_highlighting=warning +resharper_base_object_get_hash_code_call_in_get_hash_code_highlighting=warning +resharper_bitwise_operator_on_enum_without_flags_highlighting=warning +resharper_block_scope_redeclaration_highlighting=error +resharper_built_in_type_reference_style_for_member_access_highlighting=hint +resharper_built_in_type_reference_style_highlighting=hint +resharper_by_ref_argument_is_volatile_field_highlighting=warning +resharper_caller_callee_using_error_highlighting=error +resharper_caller_callee_using_highlighting=warning +resharper_cannot_apply_equality_operator_to_type_highlighting=warning +resharper_center_tag_is_obsolete_highlighting=warning +resharper_check_for_reference_equality_instead_1_highlighting=suggestion +resharper_check_for_reference_equality_instead_2_highlighting=suggestion +resharper_check_for_reference_equality_instead_3_highlighting=suggestion +resharper_check_for_reference_equality_instead_4_highlighting=suggestion +resharper_check_namespace_highlighting=warning +resharper_class_cannot_be_instantiated_highlighting=warning +resharper_class_can_be_sealed_global_highlighting=none +resharper_class_can_be_sealed_local_highlighting=none +resharper_class_highlighting=suggestion +resharper_class_never_instantiated_global_highlighting=suggestion +resharper_class_never_instantiated_local_highlighting=suggestion +resharper_class_with_virtual_members_never_inherited_global_highlighting=suggestion +resharper_class_with_virtual_members_never_inherited_local_highlighting=suggestion +resharper_clear_attribute_is_obsolete_all_highlighting=warning +resharper_clear_attribute_is_obsolete_highlighting=warning +resharper_closure_on_modified_variable_highlighting=warning +resharper_coerced_equals_using_highlighting=warning +resharper_coerced_equals_using_with_null_undefined_highlighting=none +resharper_collection_never_queried_global_highlighting=warning +resharper_collection_never_queried_local_highlighting=warning +resharper_collection_never_updated_global_highlighting=warning +resharper_collection_never_updated_local_highlighting=warning +resharper_comma_not_valid_here_highlighting=error +resharper_comment_typo_highlighting=suggestion +resharper_common_js_external_module_highlighting=suggestion +resharper_compare_non_constrained_generic_with_null_highlighting=none +resharper_compare_of_floats_by_equality_operator_highlighting=none +resharper_conditional_ternary_equal_branch_highlighting=warning +resharper_condition_is_always_const_highlighting=warning +resharper_condition_is_always_true_or_false_highlighting=warning +resharper_confusing_char_as_integer_in_constructor_highlighting=warning +resharper_constant_conditional_access_qualifier_highlighting=warning +resharper_constant_null_coalescing_condition_highlighting=warning +resharper_constructor_call_not_used_highlighting=warning +resharper_constructor_initializer_loop_highlighting=warning +resharper_container_annotation_redundancy_highlighting=warning +resharper_context_value_is_provided_highlighting=none +resharper_contract_annotation_not_parsed_highlighting=warning +resharper_convert_closure_to_method_group_highlighting=suggestion +resharper_convert_conditional_ternary_expression_to_switch_expression_highlighting=hint +resharper_convert_if_do_to_while_highlighting=suggestion +resharper_convert_if_statement_to_conditional_ternary_expression_highlighting=suggestion +resharper_convert_if_statement_to_null_coalescing_assignment_highlighting=suggestion +resharper_convert_if_statement_to_null_coalescing_expression_highlighting=suggestion +resharper_convert_if_statement_to_return_statement_highlighting=hint +resharper_convert_if_statement_to_switch_expression_highlighting=hint +resharper_convert_if_statement_to_switch_statement_highlighting=hint +resharper_convert_if_to_or_expression_highlighting=suggestion +resharper_convert_nullable_to_short_form_highlighting=suggestion +resharper_convert_switch_statement_to_switch_expression_highlighting=hint +resharper_convert_to_auto_property_highlighting=suggestion +resharper_convert_to_auto_property_when_possible_highlighting=hint +resharper_convert_to_auto_property_with_private_setter_highlighting=hint +resharper_convert_to_compound_assignment_highlighting=hint +resharper_convert_to_constant_global_highlighting=hint +resharper_convert_to_constant_local_highlighting=hint +resharper_convert_to_lambda_expression_highlighting=suggestion +resharper_convert_to_lambda_expression_when_possible_highlighting=none +resharper_convert_to_local_function_highlighting=suggestion +resharper_convert_to_null_coalescing_compound_assignment_highlighting=suggestion +resharper_convert_to_primary_constructor_highlighting=suggestion +resharper_convert_to_static_class_highlighting=suggestion +resharper_convert_to_using_declaration_highlighting=suggestion +resharper_convert_to_vb_auto_property_highlighting=suggestion +resharper_convert_to_vb_auto_property_when_possible_highlighting=hint +resharper_convert_to_vb_auto_property_with_private_setter_highlighting=hint +resharper_convert_type_check_pattern_to_null_check_highlighting=warning +resharper_convert_type_check_to_null_check_highlighting=warning +resharper_co_variant_array_conversion_highlighting=warning +resharper_cpp_abstract_class_without_specifier_highlighting=warning +resharper_cpp_abstract_final_class_highlighting=warning +resharper_cpp_abstract_virtual_function_call_in_ctor_highlighting=error +resharper_cpp_access_specifier_with_no_declarations_highlighting=suggestion +resharper_cpp_assigned_value_is_never_used_highlighting=warning +resharper_cpp_awaiter_type_is_not_class_highlighting=warning +resharper_cpp_bad_angle_brackets_spaces_highlighting=none +resharper_cpp_bad_braces_spaces_highlighting=none +resharper_cpp_bad_child_statement_indent_highlighting=none +resharper_cpp_bad_colon_spaces_highlighting=none +resharper_cpp_bad_comma_spaces_highlighting=none +resharper_cpp_bad_control_braces_indent_highlighting=none +resharper_cpp_bad_control_braces_line_breaks_highlighting=none +resharper_cpp_bad_declaration_braces_indent_highlighting=none +resharper_cpp_bad_declaration_braces_line_breaks_highlighting=none +resharper_cpp_bad_empty_braces_line_breaks_highlighting=none +resharper_cpp_bad_expression_braces_indent_highlighting=none +resharper_cpp_bad_expression_braces_line_breaks_highlighting=none +resharper_cpp_bad_indent_highlighting=none +resharper_cpp_bad_list_line_breaks_highlighting=none +resharper_cpp_bad_member_access_spaces_highlighting=none +resharper_cpp_bad_namespace_braces_indent_highlighting=none +resharper_cpp_bad_parens_line_breaks_highlighting=none +resharper_cpp_bad_parens_spaces_highlighting=none +resharper_cpp_bad_semicolon_spaces_highlighting=none +resharper_cpp_bad_spaces_after_keyword_highlighting=none +resharper_cpp_bad_square_brackets_spaces_highlighting=none +resharper_cpp_bad_switch_braces_indent_highlighting=none +resharper_cpp_bad_symbol_spaces_highlighting=none +resharper_cpp_boolean_increment_expression_highlighting=warning +resharper_cpp_boost_format_bad_code_highlighting=warning +resharper_cpp_boost_format_legacy_code_highlighting=suggestion +resharper_cpp_boost_format_mixed_args_highlighting=error +resharper_cpp_boost_format_too_few_args_highlighting=error +resharper_cpp_boost_format_too_many_args_highlighting=warning +resharper_cpp_clang_tidy_abseil_duration_addition_highlighting=none +resharper_cpp_clang_tidy_abseil_duration_comparison_highlighting=none +resharper_cpp_clang_tidy_abseil_duration_conversion_cast_highlighting=none +resharper_cpp_clang_tidy_abseil_duration_division_highlighting=none +resharper_cpp_clang_tidy_abseil_duration_factory_float_highlighting=none +resharper_cpp_clang_tidy_abseil_duration_factory_scale_highlighting=none +resharper_cpp_clang_tidy_abseil_duration_subtraction_highlighting=none +resharper_cpp_clang_tidy_abseil_duration_unnecessary_conversion_highlighting=none +resharper_cpp_clang_tidy_abseil_faster_strsplit_delimiter_highlighting=none +resharper_cpp_clang_tidy_abseil_no_internal_dependencies_highlighting=none +resharper_cpp_clang_tidy_abseil_no_namespace_highlighting=none +resharper_cpp_clang_tidy_abseil_redundant_strcat_calls_highlighting=none +resharper_cpp_clang_tidy_abseil_string_find_startswith_highlighting=none +resharper_cpp_clang_tidy_abseil_string_find_str_contains_highlighting=none +resharper_cpp_clang_tidy_abseil_str_cat_append_highlighting=none +resharper_cpp_clang_tidy_abseil_time_comparison_highlighting=none +resharper_cpp_clang_tidy_abseil_time_subtraction_highlighting=none +resharper_cpp_clang_tidy_abseil_upgrade_duration_conversions_highlighting=none +resharper_cpp_clang_tidy_altera_id_dependent_backward_branch_highlighting=none +resharper_cpp_clang_tidy_altera_kernel_name_restriction_highlighting=none +resharper_cpp_clang_tidy_altera_single_work_item_barrier_highlighting=none +resharper_cpp_clang_tidy_altera_struct_pack_align_highlighting=none +resharper_cpp_clang_tidy_altera_unroll_loops_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_accept4_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_accept_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_creat_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_dup_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_epoll_create1_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_epoll_create_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_fopen_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_inotify_init1_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_inotify_init_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_memfd_create_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_open_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_pipe2_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_pipe_highlighting=none +resharper_cpp_clang_tidy_android_cloexec_socket_highlighting=none +resharper_cpp_clang_tidy_android_comparison_in_temp_failure_retry_highlighting=none +resharper_cpp_clang_tidy_boost_use_to_string_highlighting=suggestion +resharper_cpp_clang_tidy_bugprone_argument_comment_highlighting=suggestion +resharper_cpp_clang_tidy_bugprone_assert_side_effect_highlighting=warning +resharper_cpp_clang_tidy_bugprone_bad_signal_to_kill_thread_highlighting=warning +resharper_cpp_clang_tidy_bugprone_bool_pointer_implicit_conversion_highlighting=none +resharper_cpp_clang_tidy_bugprone_branch_clone_highlighting=warning +resharper_cpp_clang_tidy_bugprone_copy_constructor_init_highlighting=warning +resharper_cpp_clang_tidy_bugprone_dangling_handle_highlighting=warning +resharper_cpp_clang_tidy_bugprone_dynamic_static_initializers_highlighting=warning +resharper_cpp_clang_tidy_bugprone_easily_swappable_parameters_highlighting=none +resharper_cpp_clang_tidy_bugprone_exception_escape_highlighting=none +resharper_cpp_clang_tidy_bugprone_fold_init_type_highlighting=warning +resharper_cpp_clang_tidy_bugprone_forwarding_reference_overload_highlighting=warning +resharper_cpp_clang_tidy_bugprone_forward_declaration_namespace_highlighting=warning +resharper_cpp_clang_tidy_bugprone_implicit_widening_of_multiplication_result_highlighting=warning +resharper_cpp_clang_tidy_bugprone_inaccurate_erase_highlighting=warning +resharper_cpp_clang_tidy_bugprone_incorrect_roundings_highlighting=warning +resharper_cpp_clang_tidy_bugprone_infinite_loop_highlighting=warning +resharper_cpp_clang_tidy_bugprone_integer_division_highlighting=warning +resharper_cpp_clang_tidy_bugprone_lambda_function_name_highlighting=warning +resharper_cpp_clang_tidy_bugprone_macro_parentheses_highlighting=warning +resharper_cpp_clang_tidy_bugprone_macro_repeated_side_effects_highlighting=warning +resharper_cpp_clang_tidy_bugprone_misplaced_operator_in_strlen_in_alloc_highlighting=warning +resharper_cpp_clang_tidy_bugprone_misplaced_pointer_arithmetic_in_alloc_highlighting=warning +resharper_cpp_clang_tidy_bugprone_misplaced_widening_cast_highlighting=warning +resharper_cpp_clang_tidy_bugprone_move_forwarding_reference_highlighting=warning +resharper_cpp_clang_tidy_bugprone_multiple_statement_macro_highlighting=warning +resharper_cpp_clang_tidy_bugprone_narrowing_conversions_highlighting=warning +resharper_cpp_clang_tidy_bugprone_not_null_terminated_result_highlighting=warning +resharper_cpp_clang_tidy_bugprone_no_escape_highlighting=warning +resharper_cpp_clang_tidy_bugprone_parent_virtual_call_highlighting=warning +resharper_cpp_clang_tidy_bugprone_posix_return_highlighting=warning +resharper_cpp_clang_tidy_bugprone_redundant_branch_condition_highlighting=warning +resharper_cpp_clang_tidy_bugprone_reserved_identifier_highlighting=warning +resharper_cpp_clang_tidy_bugprone_signal_handler_highlighting=warning +resharper_cpp_clang_tidy_bugprone_signed_char_misuse_highlighting=warning +resharper_cpp_clang_tidy_bugprone_sizeof_container_highlighting=warning +resharper_cpp_clang_tidy_bugprone_sizeof_expression_highlighting=warning +resharper_cpp_clang_tidy_bugprone_spuriously_wake_up_functions_highlighting=warning +resharper_cpp_clang_tidy_bugprone_string_constructor_highlighting=warning +resharper_cpp_clang_tidy_bugprone_string_integer_assignment_highlighting=warning +resharper_cpp_clang_tidy_bugprone_string_literal_with_embedded_nul_highlighting=warning +resharper_cpp_clang_tidy_bugprone_suspicious_enum_usage_highlighting=warning +resharper_cpp_clang_tidy_bugprone_suspicious_include_highlighting=warning +resharper_cpp_clang_tidy_bugprone_suspicious_memset_usage_highlighting=warning +resharper_cpp_clang_tidy_bugprone_suspicious_missing_comma_highlighting=warning +resharper_cpp_clang_tidy_bugprone_suspicious_semicolon_highlighting=warning +resharper_cpp_clang_tidy_bugprone_suspicious_string_compare_highlighting=warning +resharper_cpp_clang_tidy_bugprone_swapped_arguments_highlighting=warning +resharper_cpp_clang_tidy_bugprone_terminating_continue_highlighting=warning +resharper_cpp_clang_tidy_bugprone_throw_keyword_missing_highlighting=warning +resharper_cpp_clang_tidy_bugprone_too_small_loop_variable_highlighting=warning +resharper_cpp_clang_tidy_bugprone_undefined_memory_manipulation_highlighting=warning +resharper_cpp_clang_tidy_bugprone_undelegated_constructor_highlighting=warning +resharper_cpp_clang_tidy_bugprone_unhandled_exception_at_new_highlighting=none +resharper_cpp_clang_tidy_bugprone_unhandled_self_assignment_highlighting=warning +resharper_cpp_clang_tidy_bugprone_unused_raii_highlighting=warning +resharper_cpp_clang_tidy_bugprone_unused_return_value_highlighting=warning +resharper_cpp_clang_tidy_bugprone_use_after_move_highlighting=warning +resharper_cpp_clang_tidy_bugprone_virtual_near_miss_highlighting=suggestion +resharper_cpp_clang_tidy_cert_con36_c_highlighting=none +resharper_cpp_clang_tidy_cert_con54_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_dcl03_c_highlighting=none +resharper_cpp_clang_tidy_cert_dcl16_c_highlighting=none +resharper_cpp_clang_tidy_cert_dcl21_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_dcl37_c_highlighting=none +resharper_cpp_clang_tidy_cert_dcl50_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_dcl51_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_dcl54_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_dcl58_cpp_highlighting=warning +resharper_cpp_clang_tidy_cert_dcl59_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_env33_c_highlighting=none +resharper_cpp_clang_tidy_cert_err09_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_err34_c_highlighting=suggestion +resharper_cpp_clang_tidy_cert_err52_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_err58_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_err60_cpp_highlighting=warning +resharper_cpp_clang_tidy_cert_err61_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_fio38_c_highlighting=none +resharper_cpp_clang_tidy_cert_flp30_c_highlighting=warning +resharper_cpp_clang_tidy_cert_mem57_cpp_highlighting=warning +resharper_cpp_clang_tidy_cert_msc30_c_highlighting=none +resharper_cpp_clang_tidy_cert_msc32_c_highlighting=none +resharper_cpp_clang_tidy_cert_msc50_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_msc51_cpp_highlighting=warning +resharper_cpp_clang_tidy_cert_oop11_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_oop54_cpp_highlighting=none +resharper_cpp_clang_tidy_cert_oop57_cpp_highlighting=warning +resharper_cpp_clang_tidy_cert_oop58_cpp_highlighting=warning +resharper_cpp_clang_tidy_cert_pos44_c_highlighting=none +resharper_cpp_clang_tidy_cert_pos47_c_highlighting=none +resharper_cpp_clang_tidy_cert_sig30_c_highlighting=none +resharper_cpp_clang_tidy_cert_str34_c_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_api_modeling_google_g_test_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_api_modeling_llvm_cast_value_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_api_modeling_llvm_return_value_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_api_modeling_std_c_library_functions_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_api_modeling_trust_nonnull_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_builtin_builtin_functions_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_builtin_no_return_functions_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_call_and_message_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_call_and_message_modeling_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_divide_zero_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_dynamic_type_propagation_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_nonnil_string_constants_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_non_null_param_checker_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_null_dereference_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_stack_address_escape_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_stack_addr_escape_base_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_undefined_binary_operator_result_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_array_subscript_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_assign_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_branch_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_captured_block_variable_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_undef_return_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_core_vla_size_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_inner_pointer_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_move_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_new_delete_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_new_delete_leaks_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_placement_new_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_pure_virtual_call_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_self_assignment_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_smart_ptr_modeling_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_virtual_call_modeling_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_deadcode_dead_stores_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_fuchsia_handle_checker_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_nullability_nullability_base_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_nullability_nullable_dereferenced_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_nullability_nullable_passed_to_nonnull_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_nullability_nullable_returned_from_nonnull_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_nullability_null_passed_to_nonnull_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_nullability_null_returned_from_nonnull_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_optin_cplusplus_uninitialized_object_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_optin_cplusplus_virtual_call_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_optin_mpi_mpi_checker_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_optin_osx_cocoa_localizability_empty_localization_context_checker_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_optin_osx_cocoa_localizability_non_localized_string_checker_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_optin_osx_os_object_c_style_cast_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_optin_performance_gcd_antipattern_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_optin_performance_padding_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_optin_portability_unix_api_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_api_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_at_sync_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_autorelease_write_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_class_release_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_dealloc_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_incompatible_method_types_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_loops_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_missing_super_call_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_nil_arg_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_non_nil_return_value_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_ns_autorelease_pool_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_ns_error_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_obj_c_generics_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_retain_count_base_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_retain_count_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_run_loop_autorelease_leak_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_self_init_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_super_dealloc_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_unused_ivars_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_variadic_method_types_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_cf_error_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_cf_number_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_cf_retain_release_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_containers_out_of_bounds_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_containers_pointer_sized_values_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_mig_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_ns_or_cf_error_deref_checker_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_number_object_conversion_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_obj_c_property_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_os_object_retain_count_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_osx_sec_keychain_api_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_float_loop_counter_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_bcmp_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_bcopy_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_bzero_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_decode_value_of_obj_c_type_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_deprecated_or_unsafe_buffer_handling_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_getpw_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_gets_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_mkstemp_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_mktemp_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_rand_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_security_syntax_checker_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_strcpy_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_unchecked_return_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_vfork_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_unix_api_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_unix_cstring_bad_size_arg_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_unix_cstring_c_string_modeling_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_unix_cstring_null_arg_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_unix_dynamic_memory_modeling_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_unix_malloc_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_unix_malloc_sizeof_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_unix_mismatched_deallocator_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_unix_vfork_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_valist_copy_to_self_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_valist_uninitialized_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_valist_unterminated_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_valist_valist_base_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_webkit_no_uncounted_member_checker_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_webkit_ref_cntbl_base_virtual_dtor_highlighting=none +resharper_cpp_clang_tidy_clang_analyzer_webkit_uncounted_lambda_captures_checker_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_absolute_value_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_abstract_final_class_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_abstract_vbase_init_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_address_of_packed_member_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_address_of_temporary_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_aix_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_align_mismatch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_alloca_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_alloca_with_align_alignof_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_delete_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_ellipsis_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_macro_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_member_template_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_reversed_operator_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_analyzer_incompatible_plugin_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_anonymous_pack_parens_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_anon_enum_enum_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_arc_bridge_casts_disallowed_in_nonarc_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_arc_maybe_repeated_use_of_weak_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_arc_non_pod_memaccess_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_arc_perform_selector_leaks_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_arc_repeated_use_of_weak_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_arc_retain_cycles_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_arc_unsafe_retained_assign_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_argument_outside_range_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_array_bounds_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_array_bounds_pointer_arithmetic_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_asm_operand_widths_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_assign_enum_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_assume_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_atimport_in_framework_header_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_atomic_alignment_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_atomic_implicit_seq_cst_highlighting=suggestion +resharper_cpp_clang_tidy_clang_diagnostic_atomic_memory_ordering_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_atomic_property_with_user_defined_accessor_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_attribute_packed_for_bitfield_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_at_protocol_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_auto_disable_vptr_sanitizer_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_auto_import_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_auto_storage_class_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_auto_var_id_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_availability_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_avr_rtlib_linking_quirks_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_backslash_newline_escape_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_bad_function_cast_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_binding_in_condition_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_bind_to_temporary_copy_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_bitfield_constant_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_bitfield_enum_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_bitfield_width_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_bitwise_conditional_parentheses_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_bitwise_op_parentheses_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_block_capture_autoreleasing_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_bool_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_bool_operation_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_braced_scalar_init_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_bridge_cast_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_builtin_assume_aligned_alignment_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_builtin_macro_redefined_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_builtin_memcpy_chk_size_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_builtin_requires_header_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_c11_extensions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_c2x_extensions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_c99_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_c99_designator_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_c99_extensions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_called_once_parameter_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_call_to_pure_virtual_from_ctor_dtor_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cast_align_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cast_calling_convention_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cast_function_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cast_of_sel_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cast_qual_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cast_qual_unrelated_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cf_string_literal_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_char_subscripts_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_clang_cl_pch_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_class_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_class_varargs_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cmse_union_leak_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_comma_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_comment_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_compare_distinct_pointer_types_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_completion_handler_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_complex_component_init_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_compound_token_split_by_macro_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_compound_token_split_by_space_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_compound_token_split_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_concepts_ts_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_conditional_type_mismatch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_conditional_uninitialized_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_config_macros_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_constant_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_constant_evaluated_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_constant_logical_operand_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_constexpr_not_const_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_consumed_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_coroutine_missing_unhandled_exception_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_covered_switch_default_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_compat_deprecated_writable_strings_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_compat_reserved_user_defined_literal_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_extensions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_extra_semi_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_inline_namespace_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_long_long_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_narrowing_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp14_binary_literal_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp14_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp14_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp14_extensions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp17_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp17_compat_mangling_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp17_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp17_extensions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp20_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp20_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp20_designator_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp20_extensions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp2a_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp2a_extensions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp2b_extensions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_bind_to_temporary_copy_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_extra_semi_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_local_type_template_args_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_unnamed_type_template_args_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_compat_binary_literal_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_cpp14_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_cpp14_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_cpp14_cpp17_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_cpp14_cpp17_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cpp_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cstring_format_directive_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ctad_maybe_unsupported_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_ctu_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_cuda_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_custom_atomic_properties_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_cxx_attribute_extension_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dangling_else_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dangling_field_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dangling_gsl_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dangling_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dangling_initializer_list_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_darwin_sdk_settings_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_date_time_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dealloc_in_category_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_debug_compression_unavailable_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_declaration_after_statement_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_defaulted_function_deleted_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_delegating_ctor_cycles_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_delete_abstract_non_virtual_dtor_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_delete_incomplete_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_delete_non_abstract_non_virtual_dtor_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_delete_non_virtual_dtor_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_altivec_src_compat_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_anon_enum_enum_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_array_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_attributes_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_comma_subscript_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_copy_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_copy_with_dtor_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_copy_with_user_provided_copy_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_copy_with_user_provided_dtor_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_declarations_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_dynamic_exception_spec_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_enum_compare_conditional_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_enum_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_enum_enum_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_enum_float_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_implementations_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_increment_bool_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_objc_isa_usage_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_objc_pointer_introspection_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_objc_pointer_introspection_perform_selector_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_register_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_this_capture_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_volatile_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_direct_ivar_access_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_disabled_macro_expansion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_distributed_object_modifiers_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_division_by_zero_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dllexport_explicit_instantiation_decl_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dllimport_static_field_def_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dll_attribute_on_redeclaration_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_documentation_deprecated_sync_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_documentation_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_documentation_html_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_documentation_pedantic_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_documentation_unknown_command_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_dollar_in_identifier_extension_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_double_promotion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dtor_name_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dtor_typedef_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_duplicate_decl_specifier_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_duplicate_enum_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_duplicate_method_arg_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_duplicate_method_match_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_duplicate_protocol_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dynamic_class_memaccess_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_dynamic_exception_spec_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_embedded_directive_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_empty_body_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_empty_decomposition_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_empty_init_stmt_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_empty_translation_unit_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_encode_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_enum_compare_conditional_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_enum_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_enum_compare_switch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_enum_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_enum_enum_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_enum_float_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_enum_too_large_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_error_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_exceptions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_excess_initializers_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_exit_time_destructors_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_expansion_to_defined_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_explicit_initialize_call_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_explicit_ownership_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_export_unnamed_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_export_using_directive_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_extern_c_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_extern_initializer_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_extra_qualification_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_extra_semi_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_extra_semi_stmt_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_extra_tokens_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_final_dtor_non_final_class_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_fixed_enum_extension_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_fixed_point_overflow_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_flag_enum_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_flexible_array_extensions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_float_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_float_equal_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_float_overflow_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_float_zero_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_format_extra_args_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_format_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_format_insufficient_args_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_format_invalid_specifier_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_format_nonliteral_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_format_non_iso_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_format_pedantic_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_format_security_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_format_type_confusion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_format_zero_length_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_fortify_source_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_for_loop_analysis_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_four_char_constants_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_framework_include_private_from_public_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_frame_address_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_frame_larger_than_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_free_nonheap_object_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_function_def_in_objc_container_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_function_multiversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gcc_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_global_constructors_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_global_isel_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_alignof_expression_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_anonymous_struct_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_gnu_array_member_paren_init_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_auto_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_binary_literal_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_case_range_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_complex_integer_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_compound_literal_initializer_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_conditional_omitted_operand_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_designator_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_empty_initializer_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_empty_struct_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_flexible_array_initializer_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_flexible_array_union_member_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_folding_constant_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_imaginary_constant_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_include_next_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_inline_cpp_without_extern_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_label_as_value_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_redeclared_enum_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_statement_expression_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_static_float_init_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_string_literal_operator_template_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_union_cast_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_variable_sized_type_not_at_end_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_zero_variadic_macro_arguments_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_header_guard_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_header_hygiene_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_hip_only_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_idiomatic_parentheses_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ignored_attributes_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_ignored_availability_without_sdk_settings_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_ignored_optimization_argument_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ignored_pragmas_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ignored_pragma_intrinsic_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ignored_pragma_optimize_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_ignored_qualifiers_highlighting=suggestion +resharper_cpp_clang_tidy_clang_diagnostic_implicitly_unsigned_literal_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_atomic_properties_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_const_int_float_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_conversion_floating_point_to_bool_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_exception_spec_mismatch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_fallthrough_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_fallthrough_per_function_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_fixed_point_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_float_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_function_declaration_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_int_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_int_float_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_int_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_retain_self_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_import_preprocessor_directive_pedantic_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_inaccessible_base_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_include_next_absolute_path_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_include_next_outside_header_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_exception_spec_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_function_pointer_types_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_library_redeclaration_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_ms_struct_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_pointer_types_discards_qualifiers_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_pointer_types_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_property_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_sysroot_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incomplete_framework_module_declaration_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incomplete_implementation_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incomplete_module_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incomplete_setjmp_declaration_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_incomplete_umbrella_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_inconsistent_dllimport_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_inconsistent_missing_destructor_override_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_inconsistent_missing_override_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_increment_bool_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_independent_class_attribute_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_infinite_recursion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_initializer_overrides_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_injected_class_name_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_inline_asm_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_inline_namespace_reopened_noninline_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_inline_new_delete_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_instantiation_after_specialization_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_integer_overflow_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_interrupt_service_routine_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_int_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_int_in_bool_context_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_int_to_pointer_cast_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_int_to_void_pointer_cast_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_constexpr_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_iboutlet_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_initializer_from_system_header_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_ios_deployment_target_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_noreturn_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_no_builtin_names_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_offsetof_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_or_nonexistent_directory_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_partial_specialization_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_pp_token_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_source_encoding_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_token_paste_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_jump_seh_finally_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_keyword_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_keyword_macro_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_knr_promoted_parameter_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_language_extension_token_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_large_by_value_copy_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_literal_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_literal_range_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_local_type_template_args_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_logical_not_parentheses_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_logical_op_parentheses_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_long_long_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_macro_redefined_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_main_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_main_return_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_malformed_warning_check_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_many_braces_around_scalar_init_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_max_tokens_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_max_unsigned_zero_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_memset_transposed_args_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_memsize_comparison_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_method_signatures_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_abstract_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_anon_tag_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_cast_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_charize_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_comment_paste_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_const_init_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_cpp_macro_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_default_arg_redefinition_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_drectve_section_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_end_of_file_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_enum_forward_reference_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_enum_value_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_exception_spec_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_exists_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_explicit_constructor_call_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_extra_qualification_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_fixed_enum_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_flexible_array_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_goto_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_inaccessible_base_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_include_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_mutable_reference_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_pure_definition_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_redeclare_static_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_sealed_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_static_assert_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_template_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_template_shadow_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_union_member_reference_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_unqualified_friend_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_using_decl_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_void_pseudo_dtor_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_misleading_indentation_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_mismatched_new_delete_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_mismatched_parameter_types_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_mismatched_return_types_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_mismatched_tags_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_braces_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_constinit_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_declarations_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_exception_spec_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_field_initializers_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_method_return_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_noescape_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_noreturn_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_prototypes_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_missing_prototype_for_cc_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_selector_name_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_sysroot_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_variable_declarations_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_misspelled_assumption_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_modules_ambiguous_internal_linkage_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_modules_import_nested_redundant_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_module_conflict_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_module_file_config_mismatch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_module_file_extension_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_module_import_in_extern_c_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_msvc_not_found_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_multichar_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_multiple_move_vbase_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nested_anon_types_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_newline_eof_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_new_returns_null_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_noderef_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nonnull_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nonportable_include_path_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nonportable_system_include_path_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nonportable_vector_initialization_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nontrivial_memaccess_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_non_c_typedef_for_linkage_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_non_literal_null_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_non_modular_include_in_framework_module_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_non_modular_include_in_module_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_non_pod_varargs_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_non_power_of_two_alignment_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_non_virtual_dtor_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nsconsumed_mismatch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nsreturns_mismatch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ns_object_attribute_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nullability_completeness_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nullability_completeness_on_arrays_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nullability_declspec_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nullability_extension_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nullability_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nullability_inferred_on_nested_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_nullable_to_nonnull_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_null_arithmetic_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_null_character_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_null_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_null_dereference_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_null_pointer_arithmetic_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_null_pointer_subtraction_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_odr_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_old_style_cast_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_opencl_unsupported_rgba_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_openmp51_extensions_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_openmp_clauses_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_openmp_loop_form_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_openmp_mapping_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_openmp_target_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_option_ignored_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_ordered_compare_function_pointers_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_out_of_line_declaration_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_out_of_scope_function_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_overlength_strings_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_overloaded_shift_op_parentheses_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_overloaded_virtual_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_override_init_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_override_module_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_overriding_method_mismatch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_overriding_t_option_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_over_aligned_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_packed_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_padded_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_parentheses_equality_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_parentheses_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pass_failed_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pch_date_time_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pedantic_core_features_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pedantic_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pessimizing_move_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_arith_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_bool_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_integer_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_sign_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_to_enum_cast_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_to_int_cast_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_type_mismatch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_poison_system_directories_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_potentially_evaluated_expression_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pragmas_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pragma_clang_attribute_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pragma_messages_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pragma_once_outside_header_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pragma_pack_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pragma_pack_suspicious_include_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pragma_system_header_outside_header_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_predefined_identifier_outside_function_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_pre_c2x_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_pre_c2x_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp14_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp14_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp17_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp17_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp20_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp20_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp2b_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp2b_compat_pedantic_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_pre_openmp51_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_private_extern_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_private_header_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_private_module_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_profile_instr_missing_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_profile_instr_out_of_date_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_profile_instr_unprofiled_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_property_access_dot_syntax_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_property_attribute_mismatch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_protocol_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_protocol_property_synthesis_ambiguity_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_psabi_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_qualified_void_return_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_quoted_include_in_framework_header_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_range_loop_analysis_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_range_loop_bind_reference_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_range_loop_construct_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_readonly_iboutlet_property_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_receiver_expr_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_receiver_forward_class_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_redeclared_class_member_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_redundant_move_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_redundant_parens_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_register_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_reinterpret_base_class_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_reorder_ctor_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_reorder_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_reorder_init_list_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_requires_expression_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_requires_super_attribute_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_reserved_identifier_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_reserved_id_macro_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_reserved_macro_identifier_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_reserved_user_defined_literal_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_retained_language_linkage_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_return_stack_address_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_return_std_move_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_return_type_c_linkage_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_return_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_rewrite_not_bool_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_section_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_selector_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_selector_type_mismatch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_self_assign_field_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_self_assign_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_self_assign_overloaded_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_self_move_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_semicolon_before_method_body_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_sentinel_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_serialized_diagnostics_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_shadow_field_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_shadow_field_in_constructor_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_shadow_field_in_constructor_modified_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_shadow_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_shadow_ivar_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_shadow_uncaptured_local_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_shift_count_negative_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_shift_count_overflow_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_shift_negative_value_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_shift_op_parentheses_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_shift_overflow_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_shift_sign_overflow_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_shorten64_to32_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_signed_enum_bitfield_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_signed_unsigned_wchar_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_sign_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_sign_conversion_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_sizeof_array_argument_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_sizeof_array_decay_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_sizeof_array_div_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_sizeof_pointer_div_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_sizeof_pointer_memaccess_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_slash_u_filename_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_slh_asm_goto_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_sometimes_uninitialized_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_source_uses_openmp_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_spir_compat_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_static_float_init_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_static_inline_explicit_instantiation_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_static_in_inline_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_static_local_in_inline_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_static_self_init_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_stdlibcxx_not_found_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_strict_prototypes_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_strict_selector_match_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_string_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_string_concatenation_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_string_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_string_plus_char_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_string_plus_int_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_strlcpy_strlcat_size_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_strncat_size_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_suggest_destructor_override_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_suggest_override_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_super_class_method_mismatch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_suspicious_bzero_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_switch_bool_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_switch_enum_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_switch_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_sync_fetch_and_nand_semantics_changed_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_bitwise_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_constant_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_constant_in_range_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_constant_out_of_range_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_objc_bool_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_overlap_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_pointer_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_type_limit_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_undefined_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_unsigned_char_zero_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_unsigned_enum_zero_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_unsigned_zero_compare_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_tautological_value_range_compare_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_tentative_definition_incomplete_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_analysis_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_attributes_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_beta_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_negative_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_precise_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_reference_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_verbose_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_trigraphs_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_typedef_redefinition_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_typename_missing_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_type_safety_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unable_to_open_stats_file_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unavailable_declarations_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_undeclared_selector_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_undefined_bool_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_undefined_func_template_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_undefined_inline_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_undefined_internal_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_undefined_internal_type_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_undefined_reinterpret_cast_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_undefined_var_template_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_undef_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_undef_prefix_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_underaligned_exception_object_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unevaluated_expression_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unguarded_availability_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unguarded_availability_new_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unicode_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unicode_homoglyph_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unicode_whitespace_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unicode_zero_width_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_uninitialized_const_reference_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_uninitialized_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unknown_argument_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unknown_attributes_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_unknown_cuda_version_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_unknown_escape_sequence_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unknown_pragmas_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_unknown_sanitizers_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unknown_warning_option_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unnamed_type_template_args_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unneeded_internal_declaration_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unneeded_member_function_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_break_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_loop_increment_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_return_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unsequenced_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_abs_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_availability_guard_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_cb_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_dll_base_class_template_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_friend_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_gpopt_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_nan_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_target_opt_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_visibility_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unusable_partial_specialization_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_but_set_parameter_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_unused_but_set_variable_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_unused_comparison_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_const_variable_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_exception_parameter_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_function_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_getter_return_value_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_label_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_lambda_capture_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_unused_local_typedef_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_macros_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_member_function_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_parameter_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_unused_private_field_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_property_ivar_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_result_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_template_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_value_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_variable_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_unused_volatile_lvalue_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_used_but_marked_unused_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_user_defined_literals_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_user_defined_warnings_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_varargs_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_variadic_macros_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_vector_conversion_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_vec_elem_size_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_vexing_parse_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_visibility_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_vla_extension_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_vla_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_void_pointer_to_enum_cast_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_void_pointer_to_int_cast_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_void_ptr_dereference_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_warnings_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_wasm_exception_spec_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_weak_template_vtables_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_weak_vtables_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_writable_strings_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_xor_used_as_pow_highlighting=warning +resharper_cpp_clang_tidy_clang_diagnostic_zero_as_null_pointer_constant_highlighting=none +resharper_cpp_clang_tidy_clang_diagnostic_zero_length_array_highlighting=warning +resharper_cpp_clang_tidy_concurrency_mt_unsafe_highlighting=warning +resharper_cpp_clang_tidy_concurrency_thread_canceltype_asynchronous_highlighting=warning +resharper_cpp_clang_tidy_cppcoreguidelines_avoid_c_arrays_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_avoid_goto_highlighting=warning +resharper_cpp_clang_tidy_cppcoreguidelines_avoid_magic_numbers_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_avoid_non_const_global_variables_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_c_copy_assignment_signature_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_explicit_virtual_functions_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_init_variables_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_interfaces_global_init_highlighting=warning +resharper_cpp_clang_tidy_cppcoreguidelines_macro_usage_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_narrowing_conversions_highlighting=warning +resharper_cpp_clang_tidy_cppcoreguidelines_non_private_member_variables_in_classes_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_no_malloc_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_owning_memory_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_prefer_member_initializer_highlighting=suggestion +resharper_cpp_clang_tidy_cppcoreguidelines_pro_bounds_array_to_pointer_decay_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_bounds_constant_array_index_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_bounds_pointer_arithmetic_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_const_cast_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_cstyle_cast_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_member_init_highlighting=warning +resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_reinterpret_cast_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_static_cast_downcast_highlighting=suggestion +resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_union_access_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_vararg_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_slicing_highlighting=none +resharper_cpp_clang_tidy_cppcoreguidelines_special_member_functions_highlighting=suggestion +resharper_cpp_clang_tidy_darwin_avoid_spinlock_highlighting=none +resharper_cpp_clang_tidy_darwin_dispatch_once_nonstatic_highlighting=none +resharper_cpp_clang_tidy_fuchsia_default_arguments_calls_highlighting=none +resharper_cpp_clang_tidy_fuchsia_default_arguments_declarations_highlighting=none +resharper_cpp_clang_tidy_fuchsia_header_anon_namespaces_highlighting=none +resharper_cpp_clang_tidy_fuchsia_multiple_inheritance_highlighting=none +resharper_cpp_clang_tidy_fuchsia_overloaded_operator_highlighting=none +resharper_cpp_clang_tidy_fuchsia_statically_constructed_objects_highlighting=none +resharper_cpp_clang_tidy_fuchsia_trailing_return_highlighting=none +resharper_cpp_clang_tidy_fuchsia_virtual_inheritance_highlighting=none +resharper_cpp_clang_tidy_google_build_explicit_make_pair_highlighting=none +resharper_cpp_clang_tidy_google_build_namespaces_highlighting=none +resharper_cpp_clang_tidy_google_build_using_namespace_highlighting=none +resharper_cpp_clang_tidy_google_default_arguments_highlighting=none +resharper_cpp_clang_tidy_google_explicit_constructor_highlighting=none +resharper_cpp_clang_tidy_google_global_names_in_headers_highlighting=none +resharper_cpp_clang_tidy_google_objc_avoid_nsobject_new_highlighting=none +resharper_cpp_clang_tidy_google_objc_avoid_throwing_exception_highlighting=none +resharper_cpp_clang_tidy_google_objc_function_naming_highlighting=none +resharper_cpp_clang_tidy_google_objc_global_variable_declaration_highlighting=none +resharper_cpp_clang_tidy_google_readability_avoid_underscore_in_googletest_name_highlighting=none +resharper_cpp_clang_tidy_google_readability_braces_around_statements_highlighting=none +resharper_cpp_clang_tidy_google_readability_casting_highlighting=none +resharper_cpp_clang_tidy_google_readability_function_size_highlighting=none +resharper_cpp_clang_tidy_google_readability_namespace_comments_highlighting=none +resharper_cpp_clang_tidy_google_readability_todo_highlighting=none +resharper_cpp_clang_tidy_google_runtime_int_highlighting=none +resharper_cpp_clang_tidy_google_runtime_operator_highlighting=warning +resharper_cpp_clang_tidy_google_upgrade_googletest_case_highlighting=suggestion +resharper_cpp_clang_tidy_hicpp_avoid_c_arrays_highlighting=none +resharper_cpp_clang_tidy_hicpp_avoid_goto_highlighting=warning +resharper_cpp_clang_tidy_hicpp_braces_around_statements_highlighting=none +resharper_cpp_clang_tidy_hicpp_deprecated_headers_highlighting=none +resharper_cpp_clang_tidy_hicpp_exception_baseclass_highlighting=suggestion +resharper_cpp_clang_tidy_hicpp_explicit_conversions_highlighting=none +resharper_cpp_clang_tidy_hicpp_function_size_highlighting=none +resharper_cpp_clang_tidy_hicpp_invalid_access_moved_highlighting=none +resharper_cpp_clang_tidy_hicpp_member_init_highlighting=none +resharper_cpp_clang_tidy_hicpp_move_const_arg_highlighting=none +resharper_cpp_clang_tidy_hicpp_multiway_paths_covered_highlighting=warning +resharper_cpp_clang_tidy_hicpp_named_parameter_highlighting=none +resharper_cpp_clang_tidy_hicpp_new_delete_operators_highlighting=none +resharper_cpp_clang_tidy_hicpp_noexcept_move_highlighting=none +resharper_cpp_clang_tidy_hicpp_no_array_decay_highlighting=none +resharper_cpp_clang_tidy_hicpp_no_assembler_highlighting=none +resharper_cpp_clang_tidy_hicpp_no_malloc_highlighting=none +resharper_cpp_clang_tidy_hicpp_signed_bitwise_highlighting=none +resharper_cpp_clang_tidy_hicpp_special_member_functions_highlighting=none +resharper_cpp_clang_tidy_hicpp_static_assert_highlighting=none +resharper_cpp_clang_tidy_hicpp_undelegated_constructor_highlighting=none +resharper_cpp_clang_tidy_hicpp_uppercase_literal_suffix_highlighting=none +resharper_cpp_clang_tidy_hicpp_use_auto_highlighting=none +resharper_cpp_clang_tidy_hicpp_use_emplace_highlighting=none +resharper_cpp_clang_tidy_hicpp_use_equals_default_highlighting=none +resharper_cpp_clang_tidy_hicpp_use_equals_delete_highlighting=none +resharper_cpp_clang_tidy_hicpp_use_noexcept_highlighting=none +resharper_cpp_clang_tidy_hicpp_use_nullptr_highlighting=none +resharper_cpp_clang_tidy_hicpp_use_override_highlighting=none +resharper_cpp_clang_tidy_hicpp_vararg_highlighting=none +resharper_cpp_clang_tidy_highlighting_highlighting=suggestion +resharper_cpp_clang_tidy_linuxkernel_must_check_errs_highlighting=warning +resharper_cpp_clang_tidy_llvmlibc_callee_namespace_highlighting=none +resharper_cpp_clang_tidy_llvmlibc_implementation_in_namespace_highlighting=none +resharper_cpp_clang_tidy_llvmlibc_restrict_system_libc_headers_highlighting=none +resharper_cpp_clang_tidy_llvm_else_after_return_highlighting=none +resharper_cpp_clang_tidy_llvm_header_guard_highlighting=none +resharper_cpp_clang_tidy_llvm_include_order_highlighting=none +resharper_cpp_clang_tidy_llvm_namespace_comment_highlighting=none +resharper_cpp_clang_tidy_llvm_prefer_isa_or_dyn_cast_in_conditionals_highlighting=none +resharper_cpp_clang_tidy_llvm_prefer_register_over_unsigned_highlighting=suggestion +resharper_cpp_clang_tidy_llvm_qualified_auto_highlighting=none +resharper_cpp_clang_tidy_llvm_twine_local_highlighting=none +resharper_cpp_clang_tidy_misc_definitions_in_headers_highlighting=none +resharper_cpp_clang_tidy_misc_misplaced_const_highlighting=warning +resharper_cpp_clang_tidy_misc_new_delete_overloads_highlighting=warning +resharper_cpp_clang_tidy_misc_non_copyable_objects_highlighting=warning +resharper_cpp_clang_tidy_misc_non_private_member_variables_in_classes_highlighting=none +resharper_cpp_clang_tidy_misc_no_recursion_highlighting=none +resharper_cpp_clang_tidy_misc_redundant_expression_highlighting=warning +resharper_cpp_clang_tidy_misc_static_assert_highlighting=suggestion +resharper_cpp_clang_tidy_misc_throw_by_value_catch_by_reference_highlighting=warning +resharper_cpp_clang_tidy_misc_unconventional_assign_operator_highlighting=warning +resharper_cpp_clang_tidy_misc_uniqueptr_reset_release_highlighting=suggestion +resharper_cpp_clang_tidy_misc_unused_alias_decls_highlighting=suggestion +resharper_cpp_clang_tidy_misc_unused_parameters_highlighting=none +resharper_cpp_clang_tidy_misc_unused_using_decls_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_avoid_bind_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_avoid_c_arrays_highlighting=none +resharper_cpp_clang_tidy_modernize_concat_nested_namespaces_highlighting=none +resharper_cpp_clang_tidy_modernize_deprecated_headers_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_deprecated_ios_base_aliases_highlighting=warning +resharper_cpp_clang_tidy_modernize_loop_convert_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_make_shared_highlighting=none +resharper_cpp_clang_tidy_modernize_make_unique_highlighting=none +resharper_cpp_clang_tidy_modernize_pass_by_value_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_raw_string_literal_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_redundant_void_arg_highlighting=none +resharper_cpp_clang_tidy_modernize_replace_auto_ptr_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_replace_disallow_copy_and_assign_macro_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_replace_random_shuffle_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_return_braced_init_list_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_shrink_to_fit_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_unary_static_assert_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_use_auto_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_use_bool_literals_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_use_default_member_init_highlighting=none +resharper_cpp_clang_tidy_modernize_use_emplace_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_use_equals_default_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_use_equals_delete_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_use_nodiscard_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_use_noexcept_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_use_nullptr_highlighting=none +resharper_cpp_clang_tidy_modernize_use_override_highlighting=none +resharper_cpp_clang_tidy_modernize_use_trailing_return_type_highlighting=none +resharper_cpp_clang_tidy_modernize_use_transparent_functors_highlighting=suggestion +resharper_cpp_clang_tidy_modernize_use_uncaught_exceptions_highlighting=warning +resharper_cpp_clang_tidy_modernize_use_using_highlighting=none +resharper_cpp_clang_tidy_mpi_buffer_deref_highlighting=warning +resharper_cpp_clang_tidy_mpi_type_mismatch_highlighting=warning +resharper_cpp_clang_tidy_objc_avoid_nserror_init_highlighting=warning +resharper_cpp_clang_tidy_objc_dealloc_in_category_highlighting=warning +resharper_cpp_clang_tidy_objc_forbidden_subclassing_highlighting=warning +resharper_cpp_clang_tidy_objc_missing_hash_highlighting=warning +resharper_cpp_clang_tidy_objc_nsinvocation_argument_lifetime_highlighting=warning +resharper_cpp_clang_tidy_objc_property_declaration_highlighting=warning +resharper_cpp_clang_tidy_objc_super_self_highlighting=warning +resharper_cpp_clang_tidy_openmp_exception_escape_highlighting=warning +resharper_cpp_clang_tidy_openmp_use_default_none_highlighting=warning +resharper_cpp_clang_tidy_performance_faster_string_find_highlighting=suggestion +resharper_cpp_clang_tidy_performance_for_range_copy_highlighting=suggestion +resharper_cpp_clang_tidy_performance_implicit_conversion_in_loop_highlighting=suggestion +resharper_cpp_clang_tidy_performance_inefficient_algorithm_highlighting=suggestion +resharper_cpp_clang_tidy_performance_inefficient_string_concatenation_highlighting=suggestion +resharper_cpp_clang_tidy_performance_inefficient_vector_operation_highlighting=suggestion +resharper_cpp_clang_tidy_performance_move_constructor_init_highlighting=warning +resharper_cpp_clang_tidy_performance_move_const_arg_highlighting=suggestion +resharper_cpp_clang_tidy_performance_noexcept_move_constructor_highlighting=none +resharper_cpp_clang_tidy_performance_no_automatic_move_highlighting=warning +resharper_cpp_clang_tidy_performance_no_int_to_ptr_highlighting=warning +resharper_cpp_clang_tidy_performance_trivially_destructible_highlighting=suggestion +resharper_cpp_clang_tidy_performance_type_promotion_in_math_fn_highlighting=suggestion +resharper_cpp_clang_tidy_performance_unnecessary_copy_initialization_highlighting=suggestion +resharper_cpp_clang_tidy_performance_unnecessary_value_param_highlighting=suggestion +resharper_cpp_clang_tidy_portability_restrict_system_includes_highlighting=none +resharper_cpp_clang_tidy_portability_simd_intrinsics_highlighting=none +resharper_cpp_clang_tidy_readability_avoid_const_params_in_decls_highlighting=none +resharper_cpp_clang_tidy_readability_braces_around_statements_highlighting=none +resharper_cpp_clang_tidy_readability_const_return_type_highlighting=none +resharper_cpp_clang_tidy_readability_container_size_empty_highlighting=suggestion +resharper_cpp_clang_tidy_readability_convert_member_functions_to_static_highlighting=none +resharper_cpp_clang_tidy_readability_delete_null_pointer_highlighting=suggestion +resharper_cpp_clang_tidy_readability_else_after_return_highlighting=none +resharper_cpp_clang_tidy_readability_function_cognitive_complexity_highlighting=none +resharper_cpp_clang_tidy_readability_function_size_highlighting=none +resharper_cpp_clang_tidy_readability_identifier_naming_highlighting=none +resharper_cpp_clang_tidy_readability_implicit_bool_conversion_highlighting=none +resharper_cpp_clang_tidy_readability_inconsistent_declaration_parameter_name_highlighting=suggestion +resharper_cpp_clang_tidy_readability_isolate_declaration_highlighting=none +resharper_cpp_clang_tidy_readability_magic_numbers_highlighting=none +resharper_cpp_clang_tidy_readability_make_member_function_const_highlighting=none +resharper_cpp_clang_tidy_readability_misleading_indentation_highlighting=none +resharper_cpp_clang_tidy_readability_misplaced_array_index_highlighting=suggestion +resharper_cpp_clang_tidy_readability_named_parameter_highlighting=none +resharper_cpp_clang_tidy_readability_non_const_parameter_highlighting=none +resharper_cpp_clang_tidy_readability_qualified_auto_highlighting=none +resharper_cpp_clang_tidy_readability_redundant_access_specifiers_highlighting=none +resharper_cpp_clang_tidy_readability_redundant_control_flow_highlighting=none +resharper_cpp_clang_tidy_readability_redundant_declaration_highlighting=suggestion +resharper_cpp_clang_tidy_readability_redundant_function_ptr_dereference_highlighting=suggestion +resharper_cpp_clang_tidy_readability_redundant_member_init_highlighting=none +resharper_cpp_clang_tidy_readability_redundant_preprocessor_highlighting=warning +resharper_cpp_clang_tidy_readability_redundant_smartptr_get_highlighting=suggestion +resharper_cpp_clang_tidy_readability_redundant_string_cstr_highlighting=suggestion +resharper_cpp_clang_tidy_readability_redundant_string_init_highlighting=suggestion +resharper_cpp_clang_tidy_readability_simplify_boolean_expr_highlighting=none +resharper_cpp_clang_tidy_readability_simplify_subscript_expr_highlighting=warning +resharper_cpp_clang_tidy_readability_static_accessed_through_instance_highlighting=suggestion +resharper_cpp_clang_tidy_readability_static_definition_in_anonymous_namespace_highlighting=none +resharper_cpp_clang_tidy_readability_string_compare_highlighting=warning +resharper_cpp_clang_tidy_readability_suspicious_call_argument_highlighting=warning +resharper_cpp_clang_tidy_readability_uniqueptr_delete_release_highlighting=suggestion +resharper_cpp_clang_tidy_readability_uppercase_literal_suffix_highlighting=none +resharper_cpp_clang_tidy_readability_use_anyofallof_highlighting=suggestion +resharper_cpp_clang_tidy_zircon_temporary_objects_highlighting=none +resharper_cpp_class_can_be_final_highlighting=hint +resharper_cpp_class_disallow_lazy_merging_highlighting=warning +resharper_cpp_class_is_incomplete_highlighting=warning +resharper_cpp_class_needs_constructor_because_of_uninitialized_member_highlighting=warning +resharper_cpp_class_never_used_highlighting=warning +resharper_cpp_compile_time_constant_can_be_replaced_with_boolean_constant_highlighting=suggestion +resharper_cpp_const_parameter_in_declaration_highlighting=suggestion +resharper_cpp_const_value_function_return_type_highlighting=suggestion +resharper_cpp_coroutine_call_resolve_error_highlighting=warning +resharper_cpp_cv_qualifier_can_not_be_applied_to_reference_highlighting=warning +resharper_cpp_c_style_cast_highlighting=suggestion +resharper_cpp_declaration_hides_local_highlighting=warning +resharper_cpp_declaration_hides_uncaptured_local_highlighting=hint +resharper_cpp_declaration_specifier_without_declarators_highlighting=warning +resharper_cpp_declarator_disambiguated_as_function_highlighting=warning +resharper_cpp_declarator_never_used_highlighting=warning +resharper_cpp_declarator_used_before_initialization_highlighting=error +resharper_cpp_defaulted_special_member_function_is_implicitly_deleted_highlighting=warning +resharper_cpp_default_case_not_handled_in_switch_statement_highlighting=warning +resharper_cpp_default_initialization_with_no_user_constructor_highlighting=warning +resharper_cpp_default_is_used_as_identifier_highlighting=warning +resharper_cpp_deleting_void_pointer_highlighting=warning +resharper_cpp_dependent_template_without_template_keyword_highlighting=warning +resharper_cpp_dependent_type_without_typename_keyword_highlighting=warning +resharper_cpp_deprecated_entity_highlighting=warning +resharper_cpp_deprecated_register_storage_class_specifier_highlighting=warning +resharper_cpp_dereference_operator_limit_exceeded_highlighting=warning +resharper_cpp_discarded_postfix_operator_result_highlighting=suggestion +resharper_cpp_doxygen_syntax_error_highlighting=warning +resharper_cpp_doxygen_undocumented_parameter_highlighting=suggestion +resharper_cpp_doxygen_unresolved_reference_highlighting=warning +resharper_cpp_empty_declaration_highlighting=warning +resharper_cpp_enforce_cv_qualifiers_order_highlighting=none +resharper_cpp_enforce_cv_qualifiers_placement_highlighting=none +resharper_cpp_enforce_do_statement_braces_highlighting=none +resharper_cpp_enforce_for_statement_braces_highlighting=none +resharper_cpp_enforce_function_declaration_style_highlighting=none +resharper_cpp_enforce_if_statement_braces_highlighting=none +resharper_cpp_enforce_nested_namespaces_style_highlighting=hint +resharper_cpp_enforce_overriding_destructor_style_highlighting=suggestion +resharper_cpp_enforce_overriding_function_style_highlighting=suggestion +resharper_cpp_enforce_type_alias_code_style_highlighting=none +resharper_cpp_enforce_while_statement_braces_highlighting=none +resharper_cpp_entity_assigned_but_no_read_highlighting=warning +resharper_cpp_entity_used_only_in_unevaluated_context_highlighting=warning +resharper_cpp_enumerator_never_used_highlighting=warning +resharper_cpp_equal_operands_in_binary_expression_highlighting=warning +resharper_cpp_explicit_specialization_in_non_namespace_scope_highlighting=warning +resharper_cpp_expression_without_side_effects_highlighting=warning +resharper_cpp_final_function_in_final_class_highlighting=suggestion +resharper_cpp_final_non_overriding_virtual_function_highlighting=suggestion +resharper_cpp_for_loop_can_be_replaced_with_while_highlighting=suggestion +resharper_cpp_functional_style_cast_highlighting=suggestion +resharper_cpp_function_doesnt_return_value_highlighting=warning +resharper_cpp_function_is_not_implemented_highlighting=warning +resharper_cpp_header_has_been_already_included_highlighting=hint +resharper_cpp_hidden_function_highlighting=warning +resharper_cpp_hiding_function_highlighting=warning +resharper_cpp_identical_operands_in_binary_expression_highlighting=warning +resharper_cpp_if_can_be_replaced_by_constexpr_if_highlighting=suggestion +resharper_cpp_implicit_default_constructor_not_available_highlighting=warning +resharper_cpp_incompatible_pointer_conversion_highlighting=warning +resharper_cpp_incomplete_switch_statement_highlighting=warning +resharper_cpp_inconsistent_naming_highlighting=hint +resharper_cpp_incorrect_blank_lines_near_braces_highlighting=none +resharper_cpp_initialized_value_is_always_rewritten_highlighting=warning +resharper_cpp_integral_to_pointer_conversion_highlighting=warning +resharper_cpp_invalid_line_continuation_highlighting=warning +resharper_cpp_join_declaration_and_assignment_highlighting=suggestion +resharper_cpp_lambda_capture_never_used_highlighting=warning +resharper_cpp_local_variable_may_be_const_highlighting=suggestion +resharper_cpp_local_variable_might_not_be_initialized_highlighting=warning +resharper_cpp_local_variable_with_non_trivial_dtor_is_never_used_highlighting=none +resharper_cpp_long_float_highlighting=warning +resharper_cpp_member_function_may_be_const_highlighting=suggestion +resharper_cpp_member_function_may_be_static_highlighting=suggestion +resharper_cpp_member_initializers_order_highlighting=suggestion +resharper_cpp_mismatched_class_tags_highlighting=warning +resharper_cpp_missing_blank_lines_highlighting=none +resharper_cpp_missing_include_guard_highlighting=warning +resharper_cpp_missing_indent_highlighting=none +resharper_cpp_missing_keyword_throw_highlighting=warning +resharper_cpp_missing_linebreak_highlighting=none +resharper_cpp_missing_space_highlighting=none +resharper_cpp_ms_ext_address_of_class_r_value_highlighting=warning +resharper_cpp_ms_ext_binding_r_value_to_lvalue_reference_highlighting=warning +resharper_cpp_ms_ext_copy_elision_in_copy_init_declarator_highlighting=warning +resharper_cpp_ms_ext_double_user_conversion_in_copy_init_highlighting=warning +resharper_cpp_ms_ext_not_initialized_static_const_local_var_highlighting=warning +resharper_cpp_ms_ext_reinterpret_cast_from_nullptr_highlighting=warning +resharper_cpp_multiple_spaces_highlighting=none +resharper_cpp_must_be_public_virtual_to_implement_interface_highlighting=warning +resharper_cpp_mutable_specifier_on_reference_member_highlighting=warning +resharper_cpp_nodiscard_function_without_return_value_highlighting=warning +resharper_cpp_non_exception_safe_resource_acquisition_highlighting=hint +resharper_cpp_non_explicit_conversion_operator_highlighting=hint +resharper_cpp_non_explicit_converting_constructor_highlighting=hint +resharper_cpp_non_inline_function_definition_in_header_file_highlighting=warning +resharper_cpp_non_inline_variable_definition_in_header_file_highlighting=warning +resharper_cpp_not_all_paths_return_value_highlighting=warning +resharper_cpp_no_discard_expression_highlighting=warning +resharper_cpp_object_member_might_not_be_initialized_highlighting=warning +resharper_cpp_outdent_is_off_prev_level_highlighting=none +resharper_cpp_out_parameter_must_be_written_highlighting=warning +resharper_cpp_parameter_may_be_const_highlighting=hint +resharper_cpp_parameter_may_be_const_ptr_or_ref_highlighting=suggestion +resharper_cpp_parameter_names_mismatch_highlighting=hint +resharper_cpp_parameter_never_used_highlighting=hint +resharper_cpp_parameter_value_is_reassigned_highlighting=warning +resharper_cpp_pointer_conversion_drops_qualifiers_highlighting=warning +resharper_cpp_pointer_to_integral_conversion_highlighting=warning +resharper_cpp_polymorphic_class_with_non_virtual_public_destructor_highlighting=warning +resharper_cpp_possibly_erroneous_empty_statements_highlighting=warning +resharper_cpp_possibly_uninitialized_member_highlighting=warning +resharper_cpp_possibly_unintended_object_slicing_highlighting=warning +resharper_cpp_precompiled_header_is_not_included_highlighting=error +resharper_cpp_precompiled_header_not_found_highlighting=error +resharper_cpp_printf_bad_format_highlighting=warning +resharper_cpp_printf_extra_arg_highlighting=warning +resharper_cpp_printf_missed_arg_highlighting=error +resharper_cpp_printf_risky_format_highlighting=warning +resharper_cpp_private_special_member_function_is_not_implemented_highlighting=warning +resharper_cpp_range_based_for_incompatible_reference_highlighting=warning +resharper_cpp_redefinition_of_default_argument_in_override_function_highlighting=warning +resharper_cpp_redundant_access_specifier_highlighting=hint +resharper_cpp_redundant_base_class_access_specifier_highlighting=hint +resharper_cpp_redundant_blank_lines_highlighting=none +resharper_cpp_redundant_boolean_expression_argument_highlighting=warning +resharper_cpp_redundant_cast_expression_highlighting=hint +resharper_cpp_redundant_const_specifier_highlighting=hint +resharper_cpp_redundant_control_flow_jump_highlighting=hint +resharper_cpp_redundant_elaborated_type_specifier_highlighting=hint +resharper_cpp_redundant_else_keyword_highlighting=hint +resharper_cpp_redundant_else_keyword_inside_compound_statement_highlighting=hint +resharper_cpp_redundant_empty_declaration_highlighting=hint +resharper_cpp_redundant_empty_statement_highlighting=hint +resharper_cpp_redundant_explicit_template_arguments_highlighting=hint +resharper_cpp_redundant_inline_specifier_highlighting=hint +resharper_cpp_redundant_lambda_parameter_list_highlighting=hint +resharper_cpp_redundant_linebreak_highlighting=none +resharper_cpp_redundant_member_initializer_highlighting=suggestion +resharper_cpp_redundant_namespace_definition_highlighting=suggestion +resharper_cpp_redundant_parentheses_highlighting=hint +resharper_cpp_redundant_qualifier_highlighting=hint +resharper_cpp_redundant_space_highlighting=none +resharper_cpp_redundant_static_specifier_on_member_allocation_function_highlighting=hint +resharper_cpp_redundant_template_keyword_highlighting=warning +resharper_cpp_redundant_typename_keyword_highlighting=warning +resharper_cpp_redundant_void_argument_list_highlighting=suggestion +resharper_cpp_reinterpret_cast_from_void_ptr_highlighting=suggestion +resharper_cpp_remove_redundant_braces_highlighting=none +resharper_cpp_replace_memset_with_zero_initialization_highlighting=suggestion +resharper_cpp_replace_tie_with_structured_binding_highlighting=suggestion +resharper_cpp_return_no_value_in_non_void_function_highlighting=warning +resharper_cpp_smart_pointer_vs_make_function_highlighting=suggestion +resharper_cpp_some_object_members_might_not_be_initialized_highlighting=warning +resharper_cpp_special_function_without_noexcept_specification_highlighting=warning +resharper_cpp_static_data_member_in_unnamed_struct_highlighting=warning +resharper_cpp_static_specifier_on_anonymous_namespace_member_highlighting=suggestion +resharper_cpp_string_literal_to_char_pointer_conversion_highlighting=warning +resharper_cpp_syntax_warning_highlighting=warning +resharper_cpp_tabs_and_spaces_mismatch_highlighting=none +resharper_cpp_tabs_are_disallowed_highlighting=none +resharper_cpp_tabs_outside_indent_highlighting=none +resharper_cpp_template_parameter_shadowing_highlighting=warning +resharper_cpp_this_arg_member_func_delegate_ctor_is_unsuported_by_dot_net_core_highlighting=none +resharper_cpp_throw_expression_can_be_replaced_with_rethrow_highlighting=warning +resharper_cpp_too_wide_scope_highlighting=suggestion +resharper_cpp_too_wide_scope_init_statement_highlighting=hint +resharper_cpp_type_alias_never_used_highlighting=warning +resharper_cpp_ue4_blueprint_callable_function_may_be_const_highlighting=hint +resharper_cpp_ue4_blueprint_callable_function_may_be_static_highlighting=hint +resharper_cpp_ue4_coding_standard_naming_violation_warning_highlighting=hint +resharper_cpp_ue4_coding_standard_u_class_naming_violation_error_highlighting=error +resharper_cpp_ue4_probable_memory_issues_with_u_objects_in_container_highlighting=warning +resharper_cpp_ue4_probable_memory_issues_with_u_object_highlighting=warning +resharper_cpp_ue_blueprint_callable_function_unused_highlighting=warning +resharper_cpp_ue_blueprint_implementable_event_not_implemented_highlighting=warning +resharper_cpp_ue_incorrect_engine_directory_highlighting=error +resharper_cpp_ue_non_existent_input_action_highlighting=warning +resharper_cpp_ue_non_existent_input_axis_highlighting=warning +resharper_cpp_ue_source_file_without_predefined_macros_highlighting=warning +resharper_cpp_ue_source_file_without_standard_library_highlighting=error +resharper_cpp_ue_version_file_doesnt_exist_highlighting=error +resharper_cpp_uninitialized_dependent_base_class_highlighting=warning +resharper_cpp_uninitialized_non_static_data_member_highlighting=warning +resharper_cpp_union_member_of_reference_type_highlighting=warning +resharper_cpp_unnamed_namespace_in_header_file_highlighting=warning +resharper_cpp_unnecessary_whitespace_highlighting=none +resharper_cpp_unreachable_code_highlighting=warning +resharper_cpp_unsigned_zero_comparison_highlighting=warning +resharper_cpp_unused_include_directive_highlighting=warning +resharper_cpp_user_defined_literal_suffix_does_not_start_with_underscore_highlighting=warning +resharper_cpp_use_algorithm_with_count_highlighting=suggestion +resharper_cpp_use_associative_contains_highlighting=suggestion +resharper_cpp_use_auto_for_numeric_highlighting=hint +resharper_cpp_use_auto_highlighting=hint +resharper_cpp_use_elements_view_highlighting=suggestion +resharper_cpp_use_erase_algorithm_highlighting=suggestion +resharper_cpp_use_familiar_template_syntax_for_generic_lambdas_highlighting=suggestion +resharper_cpp_use_range_algorithm_highlighting=suggestion +resharper_cpp_use_std_size_highlighting=suggestion +resharper_cpp_use_structured_binding_highlighting=hint +resharper_cpp_use_type_trait_alias_highlighting=suggestion +resharper_cpp_using_result_of_assignment_as_condition_highlighting=warning +resharper_cpp_u_function_macro_call_has_no_effect_highlighting=warning +resharper_cpp_u_property_macro_call_has_no_effect_highlighting=warning +resharper_cpp_variable_can_be_made_constexpr_highlighting=suggestion +resharper_cpp_virtual_function_call_inside_ctor_highlighting=warning +resharper_cpp_virtual_function_in_final_class_highlighting=warning +resharper_cpp_volatile_parameter_in_declaration_highlighting=suggestion +resharper_cpp_wrong_includes_order_highlighting=hint +resharper_cpp_wrong_indent_size_highlighting=none +resharper_cpp_wrong_slashes_in_include_directive_highlighting=hint +resharper_cpp_zero_constant_can_be_replaced_with_nullptr_highlighting=suggestion +resharper_cpp_zero_valued_expression_used_as_null_pointer_highlighting=warning +resharper_create_specialized_overload_highlighting=hint +resharper_css_browser_compatibility_highlighting=warning +resharper_css_caniuse_feature_requires_prefix_highlighting=hint +resharper_css_caniuse_unsupported_feature_highlighting=hint +resharper_css_not_resolved_highlighting=error +resharper_css_obsolete_highlighting=hint +resharper_css_property_does_not_override_vendor_property_highlighting=warning +resharper_cyclic_reference_comment_highlighting=none +resharper_c_declaration_with_implicit_int_type_highlighting=warning +resharper_c_sharp_build_cs_invalid_module_name_highlighting=warning +resharper_c_sharp_missing_plugin_dependency_highlighting=warning +resharper_declaration_hides_highlighting=hint +resharper_declaration_is_empty_highlighting=warning +resharper_declaration_visibility_error_highlighting=error +resharper_default_value_attribute_for_optional_parameter_highlighting=warning +resharper_deleting_non_qualified_reference_highlighting=error +resharper_dl_tag_contains_non_dt_or_dd_elements_highlighting=hint +resharper_double_colons_expected_highlighting=error +resharper_double_colons_preferred_highlighting=suggestion +resharper_double_negation_in_pattern_highlighting=suggestion +resharper_double_negation_of_boolean_highlighting=warning +resharper_double_negation_operator_highlighting=suggestion +resharper_duplicate_identifier_error_highlighting=error +resharper_duplicate_reference_comment_highlighting=warning +resharper_duplicate_resource_highlighting=warning +resharper_duplicating_local_declaration_highlighting=warning +resharper_duplicating_parameter_declaration_error_highlighting=error +resharper_duplicating_property_declaration_error_highlighting=error +resharper_duplicating_property_declaration_highlighting=warning +resharper_duplicating_switch_label_highlighting=warning +resharper_dynamic_shift_right_op_is_not_int_highlighting=warning +resharper_elided_trailing_element_highlighting=warning +resharper_empty_constructor_highlighting=warning +resharper_empty_destructor_highlighting=warning +resharper_empty_embedded_statement_highlighting=warning +resharper_empty_for_statement_highlighting=warning +resharper_empty_general_catch_clause_highlighting=warning +resharper_empty_namespace_highlighting=warning +resharper_empty_object_property_declaration_highlighting=error +resharper_empty_return_value_for_type_annotated_function_highlighting=warning +resharper_empty_statement_highlighting=warning +resharper_empty_title_tag_highlighting=hint +resharper_enforce_do_while_statement_braces_highlighting=none +resharper_enforce_fixed_statement_braces_highlighting=none +resharper_enforce_foreach_statement_braces_highlighting=none +resharper_enforce_for_statement_braces_highlighting=none +resharper_enforce_if_statement_braces_highlighting=none +resharper_enforce_lock_statement_braces_highlighting=none +resharper_enforce_using_statement_braces_highlighting=none +resharper_enforce_while_statement_braces_highlighting=none +resharper_entity_name_captured_only_global_highlighting=warning +resharper_entity_name_captured_only_local_highlighting=warning +resharper_enumerable_sum_in_explicit_unchecked_context_highlighting=warning +resharper_enum_underlying_type_is_int_highlighting=warning +resharper_equal_expression_comparison_highlighting=warning +resharper_error_in_xml_doc_reference_highlighting=error +resharper_es6_feature_highlighting=error +resharper_es7_feature_highlighting=error +resharper_eval_arguments_name_error_highlighting=error +resharper_event_never_invoked_global_highlighting=suggestion +resharper_event_never_subscribed_to_global_highlighting=suggestion +resharper_event_never_subscribed_to_local_highlighting=suggestion +resharper_event_unsubscription_via_anonymous_delegate_highlighting=warning +resharper_experimental_feature_highlighting=error +resharper_explicit_caller_info_argument_highlighting=warning +resharper_expression_is_always_const_highlighting=warning +resharper_expression_is_always_null_highlighting=warning +resharper_field_can_be_made_read_only_global_highlighting=suggestion +resharper_field_can_be_made_read_only_local_highlighting=suggestion +resharper_field_hides_interface_property_with_default_implementation_highlighting=warning +resharper_foreach_can_be_converted_to_query_using_another_get_enumerator_highlighting=hint +resharper_foreach_can_be_partly_converted_to_query_using_another_get_enumerator_highlighting=hint +resharper_format_string_placeholders_mismatch_highlighting=warning +resharper_format_string_problem_highlighting=warning +resharper_for_can_be_converted_to_foreach_highlighting=suggestion +resharper_for_statement_condition_is_true_highlighting=warning +resharper_functions_used_before_declared_highlighting=none +resharper_function_complexity_overflow_highlighting=none +resharper_function_never_returns_highlighting=warning +resharper_function_parameter_named_arguments_highlighting=warning +resharper_function_recursive_on_all_paths_highlighting=warning +resharper_function_used_out_of_scope_highlighting=warning +resharper_gc_suppress_finalize_for_type_without_destructor_highlighting=warning +resharper_generic_enumerator_not_disposed_highlighting=warning +resharper_heuristically_unreachable_code_highlighting=warning +resharper_heuristic_unreachable_code_highlighting=warning +resharper_hex_color_value_with_alpha_highlighting=error +resharper_html_attributes_quotes_highlighting=hint +resharper_html_attribute_not_resolved_highlighting=warning +resharper_html_attribute_value_not_resolved_highlighting=warning +resharper_html_dead_code_highlighting=warning +resharper_html_event_not_resolved_highlighting=warning +resharper_html_id_duplication_highlighting=warning +resharper_html_id_not_resolved_highlighting=warning +resharper_html_obsolete_highlighting=warning +resharper_html_path_error_highlighting=warning +resharper_html_tag_not_closed_highlighting=error +resharper_html_tag_not_resolved_highlighting=warning +resharper_html_tag_should_be_self_closed_highlighting=warning +resharper_html_tag_should_not_be_self_closed_highlighting=warning +resharper_html_warning_highlighting=warning +resharper_identifier_typo_highlighting=suggestion +resharper_implicit_any_error_highlighting=error +resharper_implicit_any_type_warning_highlighting=warning +resharper_import_keyword_not_with_invocation_highlighting=error +resharper_inactive_preprocessor_branch_highlighting=warning +resharper_inconsistently_synchronized_field_highlighting=warning +resharper_inconsistent_function_returns_highlighting=warning +resharper_inconsistent_naming_highlighting=warning +resharper_inconsistent_order_of_locks_highlighting=warning +resharper_incorrect_blank_lines_near_braces_highlighting=none +resharper_incorrect_operand_in_type_of_comparison_highlighting=warning +resharper_incorrect_triple_slash_location_highlighting=warning +resharper_indexing_by_invalid_range_highlighting=warning +resharper_inheritdoc_consider_usage_highlighting=none +resharper_inheritdoc_invalid_usage_highlighting=warning +resharper_inline_out_variable_declaration_highlighting=suggestion +resharper_inline_temporary_variable_highlighting=hint +resharper_internal_module_highlighting=suggestion +resharper_internal_or_private_member_not_documented_highlighting=none +resharper_interpolated_string_expression_is_not_i_formattable_highlighting=warning +resharper_introduce_optional_parameters_global_highlighting=suggestion +resharper_introduce_optional_parameters_local_highlighting=suggestion +resharper_introduce_variable_to_apply_guard_highlighting=hint +resharper_int_division_by_zero_highlighting=warning +resharper_int_variable_overflow_highlighting=warning +resharper_int_variable_overflow_in_checked_context_highlighting=warning +resharper_int_variable_overflow_in_unchecked_context_highlighting=warning +resharper_invalid_attribute_value_highlighting=warning +resharper_invalid_json_syntax_highlighting=error +resharper_invalid_task_element_highlighting=none +resharper_invalid_value_highlighting=error +resharper_invalid_value_type_highlighting=warning +resharper_invalid_xml_doc_comment_highlighting=warning +resharper_invert_condition_1_highlighting=hint +resharper_invert_if_highlighting=hint +resharper_invocation_is_skipped_highlighting=hint +resharper_invocation_of_non_function_highlighting=warning +resharper_invoked_expression_maybe_non_function_highlighting=warning +resharper_invoke_as_extension_method_highlighting=suggestion +resharper_is_expression_always_false_highlighting=warning +resharper_is_expression_always_true_highlighting=warning +resharper_iterator_method_result_is_ignored_highlighting=warning +resharper_iterator_never_returns_highlighting=warning +resharper_join_declaration_and_initializer_highlighting=suggestion +resharper_join_declaration_and_initializer_js_highlighting=suggestion +resharper_join_null_check_with_usage_highlighting=suggestion +resharper_join_null_check_with_usage_when_possible_highlighting=none +resharper_json_validation_failed_highlighting=error +resharper_js_path_not_found_highlighting=error +resharper_js_unreachable_code_highlighting=warning +resharper_jump_must_be_in_loop_highlighting=warning +resharper_label_or_semicolon_expected_highlighting=error +resharper_lambda_expression_can_be_made_static_highlighting=none +resharper_lambda_expression_must_be_static_highlighting=suggestion +resharper_lambda_highlighting=suggestion +resharper_lambda_should_not_capture_context_highlighting=warning +resharper_less_specific_overload_than_main_signature_highlighting=warning +resharper_lexical_declaration_needs_block_highlighting=error +resharper_localizable_element_highlighting=warning +resharper_local_function_can_be_made_static_highlighting=none +resharper_local_function_hides_method_highlighting=warning +resharper_local_function_redefined_later_highlighting=warning +resharper_local_variable_hides_member_highlighting=warning +resharper_long_literal_ending_lower_l_highlighting=warning +resharper_loop_can_be_converted_to_query_highlighting=hint +resharper_loop_can_be_partly_converted_to_query_highlighting=none +resharper_loop_variable_is_never_changed_inside_loop_highlighting=warning +resharper_l_value_is_expected_highlighting=error +resharper_markup_attribute_typo_highlighting=suggestion +resharper_markup_text_typo_highlighting=suggestion +resharper_math_abs_method_is_redundant_highlighting=warning +resharper_math_clamp_min_greater_than_max_highlighting=warning +resharper_meaningless_default_parameter_value_highlighting=warning +resharper_member_can_be_internal_highlighting=none +resharper_member_can_be_made_static_global_highlighting=hint +resharper_member_can_be_made_static_local_highlighting=hint +resharper_member_can_be_private_global_highlighting=suggestion +resharper_member_can_be_private_local_highlighting=suggestion +resharper_member_can_be_protected_global_highlighting=suggestion +resharper_member_can_be_protected_local_highlighting=suggestion +resharper_member_hides_interface_member_with_default_implementation_highlighting=warning +resharper_member_hides_static_from_outer_class_highlighting=warning +resharper_member_initializer_value_ignored_highlighting=warning +resharper_merge_and_pattern_highlighting=suggestion +resharper_merge_cast_with_type_check_highlighting=suggestion +resharper_merge_conditional_expression_highlighting=suggestion +resharper_merge_conditional_expression_when_possible_highlighting=none +resharper_merge_into_logical_pattern_highlighting=hint +resharper_merge_into_negated_pattern_highlighting=hint +resharper_merge_into_pattern_highlighting=suggestion +resharper_merge_nested_property_patterns_highlighting=suggestion +resharper_merge_sequential_checks_highlighting=hint +resharper_merge_sequential_checks_when_possible_highlighting=none +resharper_method_has_async_overload_highlighting=suggestion +resharper_method_has_async_overload_with_cancellation_highlighting=suggestion +resharper_method_overload_with_optional_parameter_highlighting=warning +resharper_method_safe_this_highlighting=suggestion +resharper_method_supports_cancellation_highlighting=suggestion +resharper_missing_alt_attribute_in_img_tag_highlighting=hint +resharper_missing_attribute_highlighting=warning +resharper_missing_blank_lines_highlighting=none +resharper_missing_body_tag_highlighting=warning +resharper_missing_has_own_property_in_foreach_highlighting=warning +resharper_missing_head_and_body_tags_highlighting=warning +resharper_missing_head_tag_highlighting=warning +resharper_missing_indent_highlighting=none +resharper_missing_linebreak_highlighting=none +resharper_missing_space_highlighting=none +resharper_missing_title_tag_highlighting=hint +resharper_misuse_of_owner_function_this_highlighting=warning +resharper_more_specific_foreach_variable_type_available_highlighting=suggestion +resharper_more_specific_signature_after_less_specific_highlighting=warning +resharper_move_to_existing_positional_deconstruction_pattern_highlighting=hint +resharper_multiple_declarations_in_foreach_highlighting=error +resharper_multiple_nullable_attributes_usage_highlighting=warning +resharper_multiple_order_by_highlighting=warning +resharper_multiple_output_tags_highlighting=warning +resharper_multiple_resolve_candidates_in_text_highlighting=warning +resharper_multiple_spaces_highlighting=none +resharper_multiple_statements_on_one_line_highlighting=none +resharper_multiple_type_members_on_one_line_highlighting=none +resharper_must_use_return_value_highlighting=warning +resharper_mvc_action_not_resolved_highlighting=error +resharper_mvc_area_not_resolved_highlighting=error +resharper_mvc_controller_not_resolved_highlighting=error +resharper_mvc_invalid_model_type_highlighting=error +resharper_mvc_masterpage_not_resolved_highlighting=error +resharper_mvc_partial_view_not_resolved_highlighting=error +resharper_mvc_template_not_resolved_highlighting=error +resharper_mvc_view_component_not_resolved_highlighting=error +resharper_mvc_view_component_view_not_resolved_highlighting=error +resharper_mvc_view_not_resolved_highlighting=error +resharper_native_type_prototype_extending_highlighting=warning +resharper_native_type_prototype_overwriting_highlighting=warning +resharper_negation_of_relational_pattern_highlighting=suggestion +resharper_negative_equality_expression_highlighting=suggestion +resharper_negative_index_highlighting=warning +resharper_nested_string_interpolation_highlighting=suggestion +resharper_non_assigned_constant_highlighting=error +resharper_non_atomic_compound_operator_highlighting=warning +resharper_non_constant_equality_expression_has_constant_result_highlighting=warning +resharper_non_parsable_element_highlighting=warning +resharper_non_readonly_member_in_get_hash_code_highlighting=warning +resharper_non_volatile_field_in_double_check_locking_highlighting=warning +resharper_not_accessed_field_global_highlighting=suggestion +resharper_not_accessed_field_local_highlighting=warning +resharper_not_accessed_positional_property_global_highlighting=warning +resharper_not_accessed_positional_property_local_highlighting=warning +resharper_not_accessed_variable_highlighting=warning +resharper_not_all_paths_return_value_highlighting=warning +resharper_not_assigned_out_parameter_highlighting=warning +resharper_not_declared_in_parent_culture_highlighting=warning +resharper_not_null_member_is_not_initialized_highlighting=warning +resharper_not_observable_annotation_redundancy_highlighting=warning +resharper_not_overridden_in_specific_culture_highlighting=warning +resharper_not_resolved_highlighting=warning +resharper_not_resolved_in_text_highlighting=warning +resharper_nullable_warning_suppression_is_used_highlighting=none +resharper_n_unit_async_method_must_be_task_highlighting=warning +resharper_n_unit_attribute_produces_too_many_tests_highlighting=none +resharper_n_unit_auto_fixture_incorrect_argument_type_highlighting=warning +resharper_n_unit_auto_fixture_missed_test_attribute_highlighting=warning +resharper_n_unit_auto_fixture_missed_test_or_test_fixture_attribute_highlighting=warning +resharper_n_unit_auto_fixture_redundant_argument_in_inline_auto_data_attribute_highlighting=warning +resharper_n_unit_duplicate_values_highlighting=warning +resharper_n_unit_ignored_parameter_attribute_highlighting=warning +resharper_n_unit_implicit_unspecified_null_values_highlighting=warning +resharper_n_unit_incorrect_argument_type_highlighting=warning +resharper_n_unit_incorrect_expected_result_type_highlighting=warning +resharper_n_unit_incorrect_range_bounds_highlighting=warning +resharper_n_unit_method_with_parameters_and_test_attribute_highlighting=warning +resharper_n_unit_missing_arguments_in_test_case_attribute_highlighting=warning +resharper_n_unit_non_public_method_with_test_attribute_highlighting=warning +resharper_n_unit_no_values_provided_highlighting=warning +resharper_n_unit_parameter_type_is_not_compatible_with_attribute_highlighting=warning +resharper_n_unit_range_attribute_bounds_are_out_of_range_highlighting=warning +resharper_n_unit_range_step_sign_mismatch_highlighting=warning +resharper_n_unit_range_step_value_must_not_be_zero_highlighting=warning +resharper_n_unit_range_to_value_is_not_reachable_highlighting=warning +resharper_n_unit_redundant_argument_instead_of_expected_result_highlighting=warning +resharper_n_unit_redundant_argument_in_test_case_attribute_highlighting=warning +resharper_n_unit_redundant_expected_result_in_test_case_attribute_highlighting=warning +resharper_n_unit_test_case_attribute_requires_expected_result_highlighting=warning +resharper_n_unit_test_case_result_property_duplicates_expected_result_highlighting=warning +resharper_n_unit_test_case_result_property_is_obsolete_highlighting=warning +resharper_n_unit_test_case_source_cannot_be_resolved_highlighting=warning +resharper_n_unit_test_case_source_must_be_field_property_method_highlighting=warning +resharper_n_unit_test_case_source_must_be_static_highlighting=warning +resharper_n_unit_test_case_source_should_implement_i_enumerable_highlighting=warning +resharper_object_creation_as_statement_highlighting=warning +resharper_object_destructuring_without_parentheses_highlighting=error +resharper_object_literals_are_not_comma_free_highlighting=error +resharper_obsolete_element_error_highlighting=error +resharper_obsolete_element_highlighting=warning +resharper_octal_literals_not_allowed_error_highlighting=error +resharper_ol_tag_contains_non_li_elements_highlighting=hint +resharper_one_way_operation_contract_with_return_type_highlighting=warning +resharper_operation_contract_without_service_contract_highlighting=warning +resharper_operator_is_can_be_used_highlighting=warning +resharper_optional_parameter_hierarchy_mismatch_highlighting=warning +resharper_optional_parameter_ref_out_highlighting=warning +resharper_other_tags_inside_script1_highlighting=error +resharper_other_tags_inside_script2_highlighting=error +resharper_other_tags_inside_unclosed_script_highlighting=error +resharper_outdent_is_off_prev_level_highlighting=none +resharper_output_tag_required_highlighting=warning +resharper_out_parameter_value_is_always_discarded_global_highlighting=suggestion +resharper_out_parameter_value_is_always_discarded_local_highlighting=warning +resharper_overload_signature_inferring_highlighting=hint +resharper_overridden_with_empty_value_highlighting=warning +resharper_overridden_with_same_value_highlighting=suggestion +resharper_parameter_doesnt_make_any_sense_highlighting=warning +resharper_parameter_hides_member_highlighting=warning +resharper_parameter_only_used_for_precondition_check_global_highlighting=suggestion +resharper_parameter_only_used_for_precondition_check_local_highlighting=warning +resharper_parameter_type_can_be_enumerable_global_highlighting=hint +resharper_parameter_type_can_be_enumerable_local_highlighting=hint +resharper_parameter_value_is_not_used_highlighting=warning +resharper_partial_method_parameter_name_mismatch_highlighting=warning +resharper_partial_method_with_single_part_highlighting=warning +resharper_partial_type_with_single_part_highlighting=warning +resharper_pass_string_interpolation_highlighting=hint +resharper_path_not_resolved_highlighting=error +resharper_pattern_always_matches_highlighting=warning +resharper_pattern_is_always_true_or_false_highlighting=warning +resharper_pattern_never_matches_highlighting=warning +resharper_polymorphic_field_like_event_invocation_highlighting=warning +resharper_possible_infinite_inheritance_highlighting=warning +resharper_possible_intended_rethrow_highlighting=warning +resharper_possible_interface_member_ambiguity_highlighting=warning +resharper_possible_invalid_cast_exception_highlighting=warning +resharper_possible_invalid_cast_exception_in_foreach_loop_highlighting=warning +resharper_possible_invalid_operation_exception_highlighting=warning +resharper_possible_loss_of_fraction_highlighting=warning +resharper_possible_mistaken_argument_highlighting=warning +resharper_possible_mistaken_call_to_get_type_1_highlighting=warning +resharper_possible_mistaken_call_to_get_type_2_highlighting=warning +resharper_possible_multiple_enumeration_highlighting=warning +resharper_possible_multiple_write_access_in_double_check_locking_highlighting=warning +resharper_possible_null_reference_exception_highlighting=warning +resharper_possible_struct_member_modification_of_non_variable_struct_highlighting=warning +resharper_possible_unintended_linear_search_in_set_highlighting=warning +resharper_possible_unintended_queryable_as_enumerable_highlighting=suggestion +resharper_possible_unintended_reference_comparison_highlighting=warning +resharper_possible_write_to_me_highlighting=warning +resharper_possibly_impure_method_call_on_readonly_variable_highlighting=warning +resharper_possibly_incorrectly_broken_statement_highlighting=warning +resharper_possibly_missing_indexer_initializer_comma_highlighting=warning +resharper_possibly_mistaken_use_of_interpolated_string_insert_highlighting=warning +resharper_possibly_mistaken_use_of_params_method_highlighting=warning +resharper_possibly_unassigned_property_highlighting=hint +resharper_private_field_can_be_converted_to_local_variable_highlighting=warning +resharper_private_variable_can_be_made_readonly_highlighting=hint +resharper_property_can_be_made_init_only_global_highlighting=suggestion +resharper_property_can_be_made_init_only_local_highlighting=suggestion +resharper_property_getter_cannot_have_parameters_highlighting=error +resharper_property_not_resolved_highlighting=error +resharper_property_setter_must_have_single_parameter_highlighting=error +resharper_public_constructor_in_abstract_class_highlighting=suggestion +resharper_pure_attribute_on_void_method_highlighting=warning +resharper_qualified_expression_is_null_highlighting=warning +resharper_qualified_expression_maybe_null_highlighting=warning +resharper_razor_layout_not_resolved_highlighting=error +resharper_razor_section_not_resolved_highlighting=error +resharper_read_access_in_double_check_locking_highlighting=warning +resharper_redundant_abstract_modifier_highlighting=warning +resharper_redundant_always_match_subpattern_highlighting=suggestion +resharper_redundant_anonymous_type_property_name_highlighting=warning +resharper_redundant_argument_default_value_highlighting=warning +resharper_redundant_array_creation_expression_highlighting=hint +resharper_redundant_array_lower_bound_specification_highlighting=warning +resharper_redundant_assignment_highlighting=warning +resharper_redundant_attribute_parentheses_highlighting=hint +resharper_redundant_attribute_usage_property_highlighting=suggestion +resharper_redundant_base_constructor_call_highlighting=warning +resharper_redundant_base_qualifier_highlighting=warning +resharper_redundant_blank_lines_highlighting=none +resharper_redundant_block_highlighting=warning +resharper_redundant_bool_compare_highlighting=warning +resharper_redundant_case_label_highlighting=warning +resharper_redundant_cast_highlighting=warning +resharper_redundant_catch_clause_highlighting=warning +resharper_redundant_check_before_assignment_highlighting=warning +resharper_redundant_collection_initializer_element_braces_highlighting=hint +resharper_redundant_comparison_with_boolean_highlighting=warning +resharper_redundant_configure_await_highlighting=suggestion +resharper_redundant_css_hack_highlighting=warning +resharper_redundant_declaration_semicolon_highlighting=hint +resharper_redundant_default_member_initializer_highlighting=warning +resharper_redundant_delegate_creation_highlighting=warning +resharper_redundant_disable_warning_comment_highlighting=warning +resharper_redundant_discard_designation_highlighting=suggestion +resharper_redundant_else_block_highlighting=warning +resharper_redundant_empty_case_else_highlighting=warning +resharper_redundant_empty_constructor_highlighting=warning +resharper_redundant_empty_finally_block_highlighting=warning +resharper_redundant_empty_object_creation_argument_list_highlighting=hint +resharper_redundant_empty_object_or_collection_initializer_highlighting=warning +resharper_redundant_empty_switch_section_highlighting=warning +resharper_redundant_enumerable_cast_call_highlighting=warning +resharper_redundant_enum_case_label_for_default_section_highlighting=none +resharper_redundant_explicit_array_creation_highlighting=warning +resharper_redundant_explicit_array_size_highlighting=warning +resharper_redundant_explicit_nullable_creation_highlighting=warning +resharper_redundant_explicit_params_array_creation_highlighting=suggestion +resharper_redundant_explicit_positional_property_declaration_highlighting=warning +resharper_redundant_explicit_tuple_component_name_highlighting=warning +resharper_redundant_extends_list_entry_highlighting=warning +resharper_redundant_fixed_pointer_declaration_highlighting=suggestion +resharper_redundant_highlighting=warning +resharper_redundant_if_else_block_highlighting=hint +resharper_redundant_if_statement_then_keyword_highlighting=none +resharper_redundant_immediate_delegate_invocation_highlighting=suggestion +resharper_redundant_intermediate_variable_highlighting=hint +resharper_redundant_is_before_relational_pattern_highlighting=suggestion +resharper_redundant_iterator_keyword_highlighting=warning +resharper_redundant_jump_statement_highlighting=warning +resharper_redundant_lambda_parameter_type_highlighting=warning +resharper_redundant_lambda_signature_parentheses_highlighting=hint +resharper_redundant_linebreak_highlighting=none +resharper_redundant_local_class_name_highlighting=hint +resharper_redundant_local_function_name_highlighting=hint +resharper_redundant_logical_conditional_expression_operand_highlighting=warning +resharper_redundant_me_qualifier_highlighting=warning +resharper_redundant_my_base_qualifier_highlighting=warning +resharper_redundant_my_class_qualifier_highlighting=warning +resharper_redundant_name_qualifier_highlighting=warning +resharper_redundant_not_null_constraint_highlighting=warning +resharper_redundant_nullable_annotation_on_reference_type_constraint_highlighting=warning +resharper_redundant_nullable_annotation_on_type_constraint_has_non_nullable_base_type_highlighting=warning +resharper_redundant_nullable_annotation_on_type_constraint_has_non_nullable_type_kind_highlighting=warning +resharper_redundant_nullable_flow_attribute_highlighting=warning +resharper_redundant_nullable_type_mark_highlighting=warning +resharper_redundant_nullness_attribute_with_nullable_reference_types_highlighting=warning +resharper_redundant_overflow_checking_context_highlighting=warning +resharper_redundant_overload_global_highlighting=suggestion +resharper_redundant_overload_local_highlighting=suggestion +resharper_redundant_overridden_member_highlighting=warning +resharper_redundant_params_highlighting=warning +resharper_redundant_parentheses_highlighting=none +resharper_redundant_parent_type_declaration_highlighting=warning +resharper_redundant_pattern_parentheses_highlighting=hint +resharper_redundant_property_parentheses_highlighting=hint +resharper_redundant_property_pattern_clause_highlighting=suggestion +resharper_redundant_qualifier_highlighting=warning +resharper_redundant_query_order_by_ascending_keyword_highlighting=hint +resharper_redundant_range_bound_highlighting=suggestion +resharper_redundant_readonly_modifier_highlighting=suggestion +resharper_redundant_record_body_highlighting=warning +resharper_redundant_record_class_keyword_highlighting=warning +resharper_redundant_setter_value_parameter_declaration_highlighting=hint +resharper_redundant_space_highlighting=none +resharper_redundant_string_format_call_highlighting=warning +resharper_redundant_string_interpolation_highlighting=suggestion +resharper_redundant_string_to_char_array_call_highlighting=warning +resharper_redundant_string_type_highlighting=suggestion +resharper_redundant_suppress_nullable_warning_expression_highlighting=warning +resharper_redundant_ternary_expression_highlighting=warning +resharper_redundant_to_string_call_for_value_type_highlighting=hint +resharper_redundant_to_string_call_highlighting=warning +resharper_redundant_type_arguments_of_method_highlighting=warning +resharper_redundant_type_cast_highlighting=warning +resharper_redundant_type_cast_structural_highlighting=warning +resharper_redundant_type_check_in_pattern_highlighting=warning +resharper_redundant_units_highlighting=warning +resharper_redundant_unsafe_context_highlighting=warning +resharper_redundant_using_directive_global_highlighting=warning +resharper_redundant_using_directive_highlighting=warning +resharper_redundant_variable_type_specification_highlighting=hint +resharper_redundant_verbatim_prefix_highlighting=suggestion +resharper_redundant_verbatim_string_prefix_highlighting=suggestion +resharper_redundant_with_expression_highlighting=suggestion +resharper_reference_equals_with_value_type_highlighting=warning +resharper_reg_exp_inspections_highlighting=warning +resharper_remove_constructor_invocation_highlighting=none +resharper_remove_redundant_braces_highlighting=none +resharper_remove_redundant_or_statement_false_highlighting=suggestion +resharper_remove_redundant_or_statement_true_highlighting=suggestion +resharper_remove_to_list_1_highlighting=suggestion +resharper_remove_to_list_2_highlighting=suggestion +resharper_replace_auto_property_with_computed_property_highlighting=hint +resharper_replace_indicing_with_array_destructuring_highlighting=hint +resharper_replace_indicing_with_short_hand_properties_after_destructuring_highlighting=hint +resharper_replace_object_pattern_with_var_pattern_highlighting=suggestion +resharper_replace_slice_with_range_indexer_highlighting=hint +resharper_replace_substring_with_range_indexer_highlighting=hint +resharper_replace_undefined_checking_series_with_object_destructuring_highlighting=hint +resharper_replace_with_destructuring_swap_highlighting=hint +resharper_replace_with_first_or_default_1_highlighting=suggestion +resharper_replace_with_first_or_default_2_highlighting=suggestion +resharper_replace_with_first_or_default_3_highlighting=suggestion +resharper_replace_with_first_or_default_4_highlighting=suggestion +resharper_replace_with_last_or_default_1_highlighting=suggestion +resharper_replace_with_last_or_default_2_highlighting=suggestion +resharper_replace_with_last_or_default_3_highlighting=suggestion +resharper_replace_with_last_or_default_4_highlighting=suggestion +resharper_replace_with_of_type_1_highlighting=suggestion +resharper_replace_with_of_type_2_highlighting=suggestion +resharper_replace_with_of_type_3_highlighting=suggestion +resharper_replace_with_of_type_any_1_highlighting=suggestion +resharper_replace_with_of_type_any_2_highlighting=suggestion +resharper_replace_with_of_type_count_1_highlighting=suggestion +resharper_replace_with_of_type_count_2_highlighting=suggestion +resharper_replace_with_of_type_first_1_highlighting=suggestion +resharper_replace_with_of_type_first_2_highlighting=suggestion +resharper_replace_with_of_type_first_or_default_1_highlighting=suggestion +resharper_replace_with_of_type_first_or_default_2_highlighting=suggestion +resharper_replace_with_of_type_last_1_highlighting=suggestion +resharper_replace_with_of_type_last_2_highlighting=suggestion +resharper_replace_with_of_type_last_or_default_1_highlighting=suggestion +resharper_replace_with_of_type_last_or_default_2_highlighting=suggestion +resharper_replace_with_of_type_long_count_highlighting=suggestion +resharper_replace_with_of_type_single_1_highlighting=suggestion +resharper_replace_with_of_type_single_2_highlighting=suggestion +resharper_replace_with_of_type_single_or_default_1_highlighting=suggestion +resharper_replace_with_of_type_single_or_default_2_highlighting=suggestion +resharper_replace_with_of_type_where_highlighting=suggestion +resharper_replace_with_simple_assignment_false_highlighting=suggestion +resharper_replace_with_simple_assignment_true_highlighting=suggestion +resharper_replace_with_single_assignment_false_highlighting=suggestion +resharper_replace_with_single_assignment_true_highlighting=suggestion +resharper_replace_with_single_call_to_any_highlighting=suggestion +resharper_replace_with_single_call_to_count_highlighting=suggestion +resharper_replace_with_single_call_to_first_highlighting=suggestion +resharper_replace_with_single_call_to_first_or_default_highlighting=suggestion +resharper_replace_with_single_call_to_last_highlighting=suggestion +resharper_replace_with_single_call_to_last_or_default_highlighting=suggestion +resharper_replace_with_single_call_to_single_highlighting=suggestion +resharper_replace_with_single_call_to_single_or_default_highlighting=suggestion +resharper_replace_with_single_or_default_1_highlighting=suggestion +resharper_replace_with_single_or_default_2_highlighting=suggestion +resharper_replace_with_single_or_default_3_highlighting=suggestion +resharper_replace_with_single_or_default_4_highlighting=suggestion +resharper_replace_with_string_is_null_or_empty_highlighting=suggestion +resharper_required_base_types_conflict_highlighting=warning +resharper_required_base_types_direct_conflict_highlighting=warning +resharper_required_base_types_is_not_inherited_highlighting=warning +resharper_requires_fallback_color_highlighting=warning +resharper_resource_item_not_resolved_highlighting=error +resharper_resource_not_resolved_highlighting=error +resharper_resx_not_resolved_highlighting=warning +resharper_return_from_global_scopet_with_value_highlighting=warning +resharper_return_type_can_be_enumerable_global_highlighting=hint +resharper_return_type_can_be_enumerable_local_highlighting=hint +resharper_return_type_can_be_not_nullable_highlighting=warning +resharper_return_value_of_pure_method_is_not_used_highlighting=warning +resharper_route_templates_action_route_prefix_can_be_extracted_to_controller_route_highlighting=hint +resharper_route_templates_ambiguous_matching_constraint_constructor_highlighting=warning +resharper_route_templates_ambiguous_route_match_highlighting=warning +resharper_route_templates_constraint_argument_cannot_be_converted_highlighting=warning +resharper_route_templates_controller_route_parameter_is_not_passed_to_methods_highlighting=hint +resharper_route_templates_duplicated_parameter_highlighting=warning +resharper_route_templates_matching_constraint_constructor_not_resolved_highlighting=warning +resharper_route_templates_method_missing_route_parameters_highlighting=hint +resharper_route_templates_optional_parameter_can_be_preceded_only_by_single_period_highlighting=warning +resharper_route_templates_optional_parameter_must_be_at_the_end_of_segment_highlighting=warning +resharper_route_templates_parameter_constraint_can_be_specified_highlighting=hint +resharper_route_templates_parameter_type_and_constraints_mismatch_highlighting=warning +resharper_route_templates_parameter_type_can_be_made_stricter_highlighting=suggestion +resharper_route_templates_route_parameter_constraint_not_resolved_highlighting=warning +resharper_route_templates_route_parameter_is_not_passed_to_method_highlighting=hint +resharper_route_templates_route_token_not_resolved_highlighting=warning +resharper_route_templates_symbol_not_resolved_highlighting=warning +resharper_route_templates_syntax_error_highlighting=warning +resharper_safe_cast_is_used_as_type_check_highlighting=suggestion +resharper_same_imports_with_different_name_highlighting=warning +resharper_same_variable_assignment_highlighting=warning +resharper_script_tag_has_both_src_and_content_attributes_highlighting=error +resharper_script_tag_with_content_before_includes_highlighting=hint +resharper_sealed_member_in_sealed_class_highlighting=warning +resharper_separate_control_transfer_statement_highlighting=none +resharper_service_contract_without_operations_highlighting=warning +resharper_shift_expression_real_shift_count_is_zero_highlighting=warning +resharper_shift_expression_result_equals_zero_highlighting=warning +resharper_shift_expression_right_operand_not_equal_real_count_highlighting=warning +resharper_shift_expression_zero_left_operand_highlighting=warning +resharper_similar_anonymous_type_nearby_highlighting=hint +resharper_similar_expressions_comparison_highlighting=warning +resharper_simplify_conditional_operator_highlighting=suggestion +resharper_simplify_conditional_ternary_expression_highlighting=suggestion +resharper_simplify_i_if_highlighting=suggestion +resharper_simplify_linq_expression_use_all_highlighting=suggestion +resharper_simplify_linq_expression_use_any_highlighting=suggestion +resharper_simplify_string_interpolation_highlighting=suggestion +resharper_specify_a_culture_in_string_conversion_explicitly_highlighting=warning +resharper_specify_string_comparison_highlighting=hint +resharper_specify_variable_type_explicitly_highlighting=hint +resharper_spin_lock_in_readonly_field_highlighting=warning +resharper_stack_alloc_inside_loop_highlighting=warning +resharper_statement_termination_highlighting=warning +resharper_static_member_initializer_referes_to_member_below_highlighting=warning +resharper_static_member_in_generic_type_highlighting=none +resharper_static_problem_in_text_highlighting=warning +resharper_string_compare_is_culture_specific_1_highlighting=warning +resharper_string_compare_is_culture_specific_2_highlighting=warning +resharper_string_compare_is_culture_specific_3_highlighting=warning +resharper_string_compare_is_culture_specific_4_highlighting=warning +resharper_string_compare_is_culture_specific_5_highlighting=warning +resharper_string_compare_is_culture_specific_6_highlighting=warning +resharper_string_compare_to_is_culture_specific_highlighting=warning +resharper_string_concatenation_to_template_string_highlighting=hint +resharper_string_ends_with_is_culture_specific_highlighting=none +resharper_string_index_of_is_culture_specific_1_highlighting=warning +resharper_string_index_of_is_culture_specific_2_highlighting=warning +resharper_string_index_of_is_culture_specific_3_highlighting=warning +resharper_string_last_index_of_is_culture_specific_1_highlighting=warning +resharper_string_last_index_of_is_culture_specific_2_highlighting=warning +resharper_string_last_index_of_is_culture_specific_3_highlighting=warning +resharper_string_literal_as_interpolation_argument_highlighting=suggestion +resharper_string_literal_typo_highlighting=suggestion +resharper_string_literal_wrong_quotes_highlighting=hint +resharper_string_starts_with_is_culture_specific_highlighting=none +resharper_structured_message_template_problem_highlighting=warning +resharper_struct_can_be_made_read_only_highlighting=suggestion +resharper_struct_member_can_be_made_read_only_highlighting=none +resharper_suggest_base_type_for_parameter_highlighting=hint +resharper_suggest_base_type_for_parameter_in_constructor_highlighting=hint +resharper_suggest_discard_declaration_var_style_highlighting=hint +resharper_suggest_var_or_type_built_in_types_highlighting=hint +resharper_suggest_var_or_type_deconstruction_declarations_highlighting=hint +resharper_suggest_var_or_type_elsewhere_highlighting=hint +resharper_suggest_var_or_type_simple_types_highlighting=hint +resharper_super_call_highlighting=suggestion +resharper_super_call_prohibits_this_highlighting=error +resharper_suppress_nullable_warning_expression_as_inverted_is_expression_highlighting=warning +resharper_suspicious_instanceof_check_highlighting=warning +resharper_suspicious_lambda_block_highlighting=warning +resharper_suspicious_lock_over_synchronization_primitive_highlighting=warning +resharper_suspicious_math_sign_method_highlighting=warning +resharper_suspicious_parameter_name_in_argument_null_exception_highlighting=warning +resharper_suspicious_this_usage_highlighting=warning +resharper_suspicious_typeof_check_highlighting=warning +resharper_suspicious_type_conversion_global_highlighting=warning +resharper_swap_via_deconstruction_highlighting=suggestion +resharper_switch_expression_handles_some_known_enum_values_with_exception_in_default_highlighting=hint +resharper_switch_statement_for_enum_misses_default_section_highlighting=hint +resharper_switch_statement_handles_some_known_enum_values_with_default_highlighting=hint +resharper_switch_statement_missing_some_enum_cases_no_default_highlighting=none +resharper_symbol_from_not_copied_locally_reference_used_warning_highlighting=warning +resharper_syntax_is_not_allowed_highlighting=warning +resharper_tabs_and_spaces_mismatch_highlighting=none +resharper_tabs_are_disallowed_highlighting=none +resharper_tabs_outside_indent_highlighting=none +resharper_tail_recursive_call_highlighting=hint +resharper_tasks_not_loaded_highlighting=warning +resharper_ternary_can_be_replaced_by_its_condition_highlighting=warning +resharper_this_in_global_context_highlighting=warning +resharper_thread_static_at_instance_field_highlighting=warning +resharper_thread_static_field_has_initializer_highlighting=warning +resharper_throw_must_be_followed_by_expression_highlighting=error +resharper_too_wide_local_variable_scope_highlighting=suggestion +resharper_try_cast_always_succeeds_highlighting=suggestion +resharper_try_statements_can_be_merged_highlighting=hint +resharper_ts_not_resolved_highlighting=error +resharper_ts_resolved_from_inaccessible_module_highlighting=error +resharper_type_guard_doesnt_affect_anything_highlighting=warning +resharper_type_guard_produces_never_type_highlighting=warning +resharper_type_parameter_can_be_variant_highlighting=suggestion +resharper_type_parameter_hides_type_param_from_outer_scope_highlighting=warning +resharper_ul_tag_contains_non_li_elements_highlighting=hint +resharper_unassigned_field_global_highlighting=suggestion +resharper_unassigned_field_local_highlighting=warning +resharper_unassigned_get_only_auto_property_highlighting=warning +resharper_unassigned_readonly_field_highlighting=warning +resharper_unclosed_script_highlighting=error +resharper_undeclared_global_variable_using_highlighting=warning +resharper_unexpected_value_highlighting=error +resharper_unknown_css_class_highlighting=warning +resharper_unknown_css_variable_highlighting=warning +resharper_unknown_css_vendor_extension_highlighting=hint +resharper_unknown_item_group_highlighting=warning +resharper_unknown_metadata_highlighting=warning +resharper_unknown_output_parameter_highlighting=warning +resharper_unknown_property_highlighting=warning +resharper_unknown_target_highlighting=warning +resharper_unknown_task_attribute_highlighting=warning +resharper_unknown_task_highlighting=warning +resharper_unnecessary_whitespace_highlighting=none +resharper_unreachable_switch_arm_due_to_integer_analysis_highlighting=warning +resharper_unreachable_switch_case_due_to_integer_analysis_highlighting=warning +resharper_unreal_header_tool_error_highlighting=error +resharper_unreal_header_tool_parser_error_highlighting=error +resharper_unreal_header_tool_warning_highlighting=warning +resharper_unsafe_comma_in_object_properties_list_highlighting=warning +resharper_unsupported_required_base_type_highlighting=warning +resharper_unused_anonymous_method_signature_highlighting=warning +resharper_unused_auto_property_accessor_global_highlighting=warning +resharper_unused_auto_property_accessor_local_highlighting=warning +resharper_unused_import_clause_highlighting=warning +resharper_unused_inherited_parameter_highlighting=hint +resharper_unused_locals_highlighting=warning +resharper_unused_local_function_highlighting=warning +resharper_unused_local_function_parameter_highlighting=warning +resharper_unused_local_function_return_value_highlighting=warning +resharper_unused_local_import_highlighting=warning +resharper_unused_member_global_highlighting=suggestion +resharper_unused_member_hierarchy_global_highlighting=suggestion +resharper_unused_member_hierarchy_local_highlighting=warning +resharper_unused_member_in_super_global_highlighting=suggestion +resharper_unused_member_in_super_local_highlighting=warning +resharper_unused_member_local_highlighting=warning +resharper_unused_method_return_value_global_highlighting=suggestion +resharper_unused_method_return_value_local_highlighting=warning +resharper_unused_parameter_global_highlighting=suggestion +resharper_unused_parameter_highlighting=warning +resharper_unused_parameter_in_partial_method_highlighting=warning +resharper_unused_parameter_local_highlighting=warning +resharper_unused_property_highlighting=warning +resharper_unused_tuple_component_in_return_value_highlighting=warning +resharper_unused_type_global_highlighting=suggestion +resharper_unused_type_local_highlighting=warning +resharper_unused_type_parameter_highlighting=warning +resharper_unused_variable_highlighting=warning +resharper_usage_of_definitely_unassigned_value_highlighting=warning +resharper_usage_of_possibly_unassigned_value_highlighting=warning +resharper_useless_binary_operation_highlighting=warning +resharper_useless_comparison_to_integral_constant_highlighting=warning +resharper_use_array_creation_expression_1_highlighting=suggestion +resharper_use_array_creation_expression_2_highlighting=suggestion +resharper_use_array_empty_method_highlighting=suggestion +resharper_use_as_instead_of_type_cast_highlighting=hint +resharper_use_await_using_highlighting=suggestion +resharper_use_cancellation_token_for_i_async_enumerable_highlighting=suggestion +resharper_use_collection_count_property_highlighting=suggestion +resharper_use_configure_await_false_for_async_disposable_highlighting=none +resharper_use_configure_await_false_highlighting=suggestion +resharper_use_deconstruction_highlighting=hint +resharper_use_deconstruction_on_parameter_highlighting=hint +resharper_use_empty_types_field_highlighting=suggestion +resharper_use_event_args_empty_field_highlighting=suggestion +resharper_use_format_specifier_in_format_string_highlighting=suggestion +resharper_use_implicitly_typed_variable_evident_highlighting=hint +resharper_use_implicitly_typed_variable_highlighting=none +resharper_use_implicit_by_val_modifier_highlighting=hint +resharper_use_indexed_property_highlighting=suggestion +resharper_use_index_from_end_expression_highlighting=suggestion +resharper_use_is_operator_1_highlighting=suggestion +resharper_use_is_operator_2_highlighting=suggestion +resharper_use_method_any_0_highlighting=suggestion +resharper_use_method_any_1_highlighting=suggestion +resharper_use_method_any_2_highlighting=suggestion +resharper_use_method_any_3_highlighting=suggestion +resharper_use_method_any_4_highlighting=suggestion +resharper_use_method_is_instance_of_type_highlighting=suggestion +resharper_use_nameof_expression_for_part_of_the_string_highlighting=none +resharper_use_nameof_expression_highlighting=suggestion +resharper_use_name_of_instead_of_type_of_highlighting=suggestion +resharper_use_negated_pattern_in_is_expression_highlighting=hint +resharper_use_negated_pattern_matching_highlighting=hint +resharper_use_nullable_annotation_instead_of_attribute_highlighting=suggestion +resharper_use_nullable_attributes_supported_by_compiler_highlighting=suggestion +resharper_use_nullable_reference_types_annotation_syntax_highlighting=warning +resharper_use_null_propagation_highlighting=hint +resharper_use_null_propagation_when_possible_highlighting=none +resharper_use_object_or_collection_initializer_highlighting=suggestion +resharper_use_of_implicit_global_in_function_scope_highlighting=warning +resharper_use_of_possibly_unassigned_property_highlighting=warning +resharper_use_pattern_matching_highlighting=suggestion +resharper_use_positional_deconstruction_pattern_highlighting=none +resharper_use_string_interpolation_highlighting=suggestion +resharper_use_switch_case_pattern_variable_highlighting=suggestion +resharper_use_throw_if_null_method_highlighting=none +resharper_use_verbatim_string_highlighting=hint +resharper_using_of_reserved_word_error_highlighting=error +resharper_using_of_reserved_word_highlighting=warning +resharper_value_parameter_not_used_highlighting=warning +resharper_value_range_attribute_violation_highlighting=warning +resharper_value_should_have_units_highlighting=error +resharper_variable_can_be_made_const_highlighting=hint +resharper_variable_can_be_made_let_highlighting=hint +resharper_variable_can_be_moved_to_inner_block_highlighting=hint +resharper_variable_can_be_not_nullable_highlighting=warning +resharper_variable_hides_outer_variable_highlighting=warning +resharper_variable_used_before_declared_highlighting=warning +resharper_variable_used_in_inner_scope_before_declared_highlighting=warning +resharper_variable_used_out_of_scope_highlighting=warning +resharper_vb_check_for_reference_equality_instead_1_highlighting=suggestion +resharper_vb_check_for_reference_equality_instead_2_highlighting=suggestion +resharper_vb_possible_mistaken_argument_highlighting=warning +resharper_vb_possible_mistaken_call_to_get_type_1_highlighting=warning +resharper_vb_possible_mistaken_call_to_get_type_2_highlighting=warning +resharper_vb_remove_to_list_1_highlighting=suggestion +resharper_vb_remove_to_list_2_highlighting=suggestion +resharper_vb_replace_with_first_or_default_highlighting=suggestion +resharper_vb_replace_with_last_or_default_highlighting=suggestion +resharper_vb_replace_with_of_type_1_highlighting=suggestion +resharper_vb_replace_with_of_type_2_highlighting=suggestion +resharper_vb_replace_with_of_type_any_1_highlighting=suggestion +resharper_vb_replace_with_of_type_any_2_highlighting=suggestion +resharper_vb_replace_with_of_type_count_1_highlighting=suggestion +resharper_vb_replace_with_of_type_count_2_highlighting=suggestion +resharper_vb_replace_with_of_type_first_1_highlighting=suggestion +resharper_vb_replace_with_of_type_first_2_highlighting=suggestion +resharper_vb_replace_with_of_type_first_or_default_1_highlighting=suggestion +resharper_vb_replace_with_of_type_first_or_default_2_highlighting=suggestion +resharper_vb_replace_with_of_type_last_1_highlighting=suggestion +resharper_vb_replace_with_of_type_last_2_highlighting=suggestion +resharper_vb_replace_with_of_type_last_or_default_1_highlighting=suggestion +resharper_vb_replace_with_of_type_last_or_default_2_highlighting=suggestion +resharper_vb_replace_with_of_type_single_1_highlighting=suggestion +resharper_vb_replace_with_of_type_single_2_highlighting=suggestion +resharper_vb_replace_with_of_type_single_or_default_1_highlighting=suggestion +resharper_vb_replace_with_of_type_single_or_default_2_highlighting=suggestion +resharper_vb_replace_with_of_type_where_highlighting=suggestion +resharper_vb_replace_with_single_assignment_1_highlighting=suggestion +resharper_vb_replace_with_single_assignment_2_highlighting=suggestion +resharper_vb_replace_with_single_call_to_any_highlighting=suggestion +resharper_vb_replace_with_single_call_to_count_highlighting=suggestion +resharper_vb_replace_with_single_call_to_first_highlighting=suggestion +resharper_vb_replace_with_single_call_to_first_or_default_highlighting=suggestion +resharper_vb_replace_with_single_call_to_last_highlighting=suggestion +resharper_vb_replace_with_single_call_to_last_or_default_highlighting=suggestion +resharper_vb_replace_with_single_call_to_single_highlighting=suggestion +resharper_vb_replace_with_single_call_to_single_or_default_highlighting=suggestion +resharper_vb_replace_with_single_or_default_highlighting=suggestion +resharper_vb_simplify_linq_expression_10_highlighting=hint +resharper_vb_simplify_linq_expression_1_highlighting=suggestion +resharper_vb_simplify_linq_expression_2_highlighting=suggestion +resharper_vb_simplify_linq_expression_3_highlighting=suggestion +resharper_vb_simplify_linq_expression_4_highlighting=suggestion +resharper_vb_simplify_linq_expression_5_highlighting=suggestion +resharper_vb_simplify_linq_expression_6_highlighting=suggestion +resharper_vb_simplify_linq_expression_7_highlighting=hint +resharper_vb_simplify_linq_expression_8_highlighting=hint +resharper_vb_simplify_linq_expression_9_highlighting=hint +resharper_vb_string_compare_is_culture_specific_1_highlighting=warning +resharper_vb_string_compare_is_culture_specific_2_highlighting=warning +resharper_vb_string_compare_is_culture_specific_3_highlighting=warning +resharper_vb_string_compare_is_culture_specific_4_highlighting=warning +resharper_vb_string_compare_is_culture_specific_5_highlighting=warning +resharper_vb_string_compare_is_culture_specific_6_highlighting=warning +resharper_vb_string_compare_to_is_culture_specific_highlighting=warning +resharper_vb_string_ends_with_is_culture_specific_highlighting=none +resharper_vb_string_index_of_is_culture_specific_1_highlighting=warning +resharper_vb_string_index_of_is_culture_specific_2_highlighting=warning +resharper_vb_string_index_of_is_culture_specific_3_highlighting=warning +resharper_vb_string_last_index_of_is_culture_specific_1_highlighting=warning +resharper_vb_string_last_index_of_is_culture_specific_2_highlighting=warning +resharper_vb_string_last_index_of_is_culture_specific_3_highlighting=warning +resharper_vb_string_starts_with_is_culture_specific_highlighting=none +resharper_vb_unreachable_code_highlighting=warning +resharper_vb_use_array_creation_expression_1_highlighting=suggestion +resharper_vb_use_array_creation_expression_2_highlighting=suggestion +resharper_vb_use_first_instead_highlighting=warning +resharper_vb_use_method_any_1_highlighting=suggestion +resharper_vb_use_method_any_2_highlighting=suggestion +resharper_vb_use_method_any_3_highlighting=suggestion +resharper_vb_use_method_any_4_highlighting=suggestion +resharper_vb_use_method_any_5_highlighting=suggestion +resharper_vb_use_method_is_instance_of_type_highlighting=suggestion +resharper_vb_use_type_of_is_operator_1_highlighting=suggestion +resharper_vb_use_type_of_is_operator_2_highlighting=suggestion +resharper_virtual_member_call_in_constructor_highlighting=warning +resharper_virtual_member_never_overridden_global_highlighting=suggestion +resharper_virtual_member_never_overridden_local_highlighting=suggestion +resharper_void_method_with_must_use_return_value_attribute_highlighting=warning +resharper_web_config_module_not_resolved_highlighting=error +resharper_web_config_module_qualification_resolve_highlighting=warning +resharper_web_config_redundant_add_namespace_tag_highlighting=warning +resharper_web_config_redundant_location_tag_highlighting=warning +resharper_web_config_tag_prefix_redundand_highlighting=warning +resharper_web_config_type_not_resolved_highlighting=error +resharper_web_config_unused_add_tag_highlighting=warning +resharper_web_config_unused_element_due_to_config_source_attribute_highlighting=warning +resharper_web_config_unused_remove_or_clear_tag_highlighting=warning +resharper_web_config_web_config_path_warning_highlighting=warning +resharper_web_config_wrong_module_highlighting=error +resharper_web_ignored_path_highlighting=none +resharper_web_mapped_path_highlighting=hint +resharper_with_expression_instead_of_initializer_highlighting=suggestion +resharper_with_statement_using_error_highlighting=error +resharper_wrong_expression_statement_highlighting=warning +resharper_wrong_indent_size_highlighting=none +resharper_wrong_metadata_use_highlighting=none +resharper_wrong_public_modifier_specification_highlighting=hint +resharper_wrong_require_relative_path_highlighting=hint +resharper_xaml_assign_null_to_not_null_attribute_highlighting=warning +resharper_xaml_avalonia_wrong_binding_mode_for_stream_binding_operator_highlighting=warning +resharper_xaml_binding_without_context_not_resolved_highlighting=hint +resharper_xaml_binding_with_context_not_resolved_highlighting=warning +resharper_xaml_compiled_binding_missing_data_type_error_highlighting_highlighting=error +resharper_xaml_constructor_warning_highlighting=warning +resharper_xaml_decimal_parsing_is_culture_dependent_highlighting=warning +resharper_xaml_dependency_property_resolve_error_highlighting=warning +resharper_xaml_duplicate_style_setter_highlighting=warning +resharper_xaml_dynamic_resource_error_highlighting=error +resharper_xaml_element_name_reference_not_resolved_highlighting=error +resharper_xaml_empty_grid_length_definition_highlighting=error +resharper_xaml_grid_definitions_can_be_converted_to_attribute_highlighting=hint +resharper_xaml_ignored_path_highlighting_highlighting=none +resharper_xaml_index_out_of_grid_definition_highlighting=warning +resharper_xaml_invalid_member_type_highlighting=error +resharper_xaml_invalid_resource_target_type_highlighting=error +resharper_xaml_invalid_resource_type_highlighting=error +resharper_xaml_invalid_type_highlighting=error +resharper_xaml_language_level_highlighting=error +resharper_xaml_mapped_path_highlighting_highlighting=hint +resharper_xaml_method_arguments_will_be_ignored_highlighting=warning +resharper_xaml_missing_grid_index_highlighting=warning +resharper_xaml_overloads_collision_highlighting=warning +resharper_xaml_parent_is_out_of_current_component_tree_highlighting=warning +resharper_xaml_path_error_highlighting=warning +resharper_xaml_possible_null_reference_exception_highlighting=suggestion +resharper_xaml_redundant_attached_property_highlighting=warning +resharper_xaml_redundant_binding_mode_attribute_highlighting=warning +resharper_xaml_redundant_collection_property_highlighting=warning +resharper_xaml_redundant_freeze_attribute_highlighting=warning +resharper_xaml_redundant_grid_definitions_highlighting=warning +resharper_xaml_redundant_grid_span_highlighting=warning +resharper_xaml_redundant_modifiers_attribute_highlighting=warning +resharper_xaml_redundant_namespace_alias_highlighting=warning +resharper_xaml_redundant_name_attribute_highlighting=warning +resharper_xaml_redundant_property_type_qualifier_highlighting=warning +resharper_xaml_redundant_resource_highlighting=warning +resharper_xaml_redundant_styled_value_highlighting=warning +resharper_xaml_redundant_update_source_trigger_attribute_highlighting=warning +resharper_xaml_redundant_xamarin_forms_class_declaration_highlighting=warning +resharper_xaml_resource_file_path_case_mismatch_highlighting=warning +resharper_xaml_routed_event_resolve_error_highlighting=warning +resharper_xaml_static_resource_not_resolved_highlighting=warning +resharper_xaml_style_class_not_found_highlighting=warning +resharper_xaml_style_invalid_target_type_highlighting=error +resharper_xaml_unexpected_text_token_highlighting=error +resharper_xaml_xaml_duplicate_device_family_type_view_highlighting_highlighting=error +resharper_xaml_xaml_mismatched_device_family_view_clr_name_highlighting_highlighting=warning +resharper_xaml_xaml_relative_source_default_mode_warning_highlighting_highlighting=warning +resharper_xaml_xaml_unknown_device_family_type_highlighting_highlighting=warning +resharper_xaml_xaml_xamarin_forms_data_type_and_binding_context_type_mismatched_highlighting_highlighting=warning +resharper_xaml_x_key_attribute_disallowed_highlighting=error +resharper_xml_doc_comment_syntax_problem_highlighting=warning +resharper_xunit_xunit_test_with_console_output_highlighting=warning + +[*.{cshtml,htm,html,proto,razor}] +indent_style=tab +indent_size=tab +tab_width=4 + +[*.{asax,ascx,aspx,axaml,c,c++,cc,cginc,compute,cp,cpp,cs,css,cu,cuh,cxx,h,hh,hlsl,hlsli,hlslinc,hpp,hxx,inc,inl,ino,ipp,js,jsx,master,mpp,mq4,mq5,mqh,paml,skin,tpp,ts,tsx,usf,ush,vb,xaml,xamlx,xoml}] +indent_style=space +indent_size=4 +tab_width=4 + +[ "*.proto" ] +indent_style=tab +indent_size=tab +tab_width=4 + +[*.{asax,ascx,aspx,axaml,cs,cshtml,css,htm,html,js,jsx,master,paml,razor,skin,ts,tsx,vb,xaml,xamlx,xoml}] +indent_style=space +indent_size=4 +tab_width=4 + +[*.{appxmanifest,axml,build,config,csproj,dbml,discomap,dtd,json,jsproj,lsproj,njsproj,nuspec,proj,props,resjson,resw,resx,StyleCop,targets,tasks,vbproj,xml,xsd}] +indent_style=space +indent_size=2 +tab_width=2 + +[*.{appxmanifest,asax,ascx,aspx,axaml,axml,build,c,c++,cc,cginc,compute,config,cp,cpp,cs,cshtml,csproj,css,cu,cuh,cxx,dbml,discomap,dtd,h,hh,hlsl,hlsli,hlslinc,hpp,htm,html,hxx,inc,inl,ino,ipp,js,json,jsproj,jsx,lsproj,master,mpp,mq4,mq5,mqh,njsproj,nuspec,paml,proj,props,proto,razor,resjson,resw,resx,skin,StyleCop,targets,tasks,tpp,ts,tsx,usf,ush,vb,vbproj,xaml,xamlx,xml,xoml,xsd}] +indent_style=space +indent_size= 4 +tab_width= 4 +dotnet_style_operator_placement_when_wrapping = beginning_of_line +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_null_propagation = true:suggestion +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion +dotnet_style_prefer_auto_properties = true:silent +dotnet_style_object_initializer = true:suggestion +dotnet_style_collection_initializer = true:suggestion +dotnet_style_prefer_simplified_boolean_expressions = true:suggestion +dotnet_style_prefer_conditional_expression_over_assignment = true:silent +dotnet_style_prefer_conditional_expression_over_return = true:silent +dotnet_style_explicit_tuple_names = true:suggestion +dotnet_style_prefer_inferred_tuple_names = true:suggestion +dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion +dotnet_style_prefer_compound_assignment = true:suggestion +dotnet_style_prefer_simplified_interpolation = true:suggestion +dotnet_style_namespace_match_folder = true:suggestion +insert_final_newline = true diff --git a/Penumbra.Api/.gitignore b/Penumbra.Api/.gitignore new file mode 100644 index 0000000..3e16852 --- /dev/null +++ b/Penumbra.Api/.gitignore @@ -0,0 +1,3 @@ +bin/ +obj/ +.vs/ \ No newline at end of file diff --git a/Penumbra.Api/Api/Collection.cs b/Penumbra.Api/Api/Collection.cs new file mode 100644 index 0000000..537ca4c --- /dev/null +++ b/Penumbra.Api/Api/Collection.cs @@ -0,0 +1,66 @@ +using Penumbra.Api.Enums; + +namespace Penumbra.Api.Api; + +/// API methods pertaining to collection management. +public interface IPenumbraApiCollection +{ + /// A list of the GUIDs of all currently installed collections together with their display names, excluding the empty collection. + public Dictionary GetCollections(); + + /// Returns all collections for which either + /// + /// the name is equal to the given identifier up to case, + /// the identifier is parsable to a GUID and the GUID corresponds to an existing collection, + /// or the identifier is at least 8 characters long and the GUID as a hex-string starts with the identifier. + /// + /// + public List<(Guid Id, string Name)> GetCollectionsByIdentifier(string identifier); + + /// A dictionary of affected items in via GUID and known objects or null. + public Dictionary GetChangedItemsForCollection(Guid collectionId); + + /// The GUID and name of the collection assigned to the given , the empty GUID for the empty collection, or null if nothing is assigned. + public (Guid Id, string Name)? GetCollection(ApiCollectionType type); + + /// Return whether the object at produces a valid identifier, if the identifier has a collection assigned, and the collection that affects the object. + public (bool ObjectValid, bool IndividualSet, (Guid Id, string Name) EffectiveCollection) GetCollectionForObject(int gameObjectIdx); + + /// + /// Set a collection by GUID for a specific type. + /// + /// The collection type to set. + /// The GUID of the collection to set it to, null to remove the association if allowed. + /// Allow only setting existing types or also creating an unset type. + /// Allow deleting existing collections if is empty. + /// InvalidArgument if type is invalid, + /// NothingChanged if the new collection is the same as the old,
+ /// AssignmentDeletionDisallowed if is null and is false, and the assignment exists,
+ /// or if Default, Current or Interface would be deleted.
+ /// CollectionMissing if the new collection can not be found,
+ /// AssignmentCreationDisallowed if is false and the assignment does not exist,
+ /// or Success, as well as the GUID of the previous collection (empty if no assignment existed). + ///
+ public (PenumbraApiEc, (Guid Id, string Name)? OldCollection) SetCollection(ApiCollectionType type, Guid? collectionId, bool allowCreateNew, + bool allowDelete); + + /// + /// Set a collection by GUID for a specific game object. + /// + /// The index of the desired game object in the object table. + /// The GUID of the collection to set it to, null to remove the association if allowed. + /// Allow only setting existing individuals or also creating a new individual assignment. + /// Allow deleting existing individual assignments if is null. + /// InvalidIdentifier if does not produce an existing game object or the object is not identifiable, + /// NothingChanged if the new collection is the same as the old,
+ /// AssignmentDeletionDisallowed if is null and is false, and the assignment exists,
+ /// CollectionMissing if the new collection can not be found,
+ /// AssignmentCreationDisallowed if is false and the assignment does not exist,
+ /// or Success, as well as the name of the previous collection (empty if no assignment existed).
+ public (PenumbraApiEc, (Guid Id, string Name)? OldCollection) SetCollectionForObject(int gameObjectIdx, Guid? collectionId, bool allowCreateNew, + bool allowDelete); + + /// Obtain a function object that can check if the current collection contains a given changed item by listing the mods changing it. + /// Throws an on invocation if the collection storage is not valid anymore, so clear this on . + public Func CheckCurrentChangedItemFunc(); +} diff --git a/Penumbra.Api/Api/Editing.cs b/Penumbra.Api/Api/Editing.cs new file mode 100644 index 0000000..ab0f67d --- /dev/null +++ b/Penumbra.Api/Api/Editing.cs @@ -0,0 +1,28 @@ +using Penumbra.Api.Enums; + +namespace Penumbra.Api.Api; + +/// API methods pertaining to the editing of mods or game files. +public interface IPenumbraApiEditing +{ + /// + /// Convert the given texture file into a different type or format and potentially add mip maps. + /// + /// The path to the input file, which may be of .dds, .tex or .png format. + /// The desired output path. Can be the same as input. + /// The file type and format to convert the data to. + /// Whether to add mip maps or not. Ignored for .png. + /// A task for when the conversion is finished or has failed. + public Task ConvertTextureFile(string inputFile, string outputFile, TextureType textureType, bool mipMaps); + + /// + /// Convert the given RGBA32 texture data into a different type or format and potentially add mip maps. + /// + /// The input byte data for a picture given in RGBA32 format. + /// The width of the input picture. The height is computed from the size of and this. + /// The desired output path. Can be the same as input. + /// The file type and format to convert the data to. + /// Whether to add mip maps or not. Ignored for .png. + /// A task for when the conversion is finished or has failed. + public Task ConvertTextureData(byte[] rgbaData, int width, string outputFile, TextureType textureType, bool mipMaps); +} diff --git a/Penumbra.Api/Api/GameState.cs b/Penumbra.Api/Api/GameState.cs new file mode 100644 index 0000000..e45cd62 --- /dev/null +++ b/Penumbra.Api/Api/GameState.cs @@ -0,0 +1,52 @@ +using Penumbra.Api.Enums; + +namespace Penumbra.Api.Api; + +/// API methods pertaining to the currently tracked game state. +public interface IPenumbraApiGameState +{ + /// + /// The game object associated with the given draw object + /// and the GUID and name of the collection associated with this game object. + public (nint GameObject, (Guid Id, string Name) Collection) GetDrawObjectInfo(nint drawObject); + + /// + /// Obtain the parent game object index for an unnamed cutscene actor by its index. + /// + /// + /// The parent game object index. + public int GetCutsceneParentIndex(int actorIdx); + + /// + /// Set the cutscene parent of in Penumbras internal state to a new value. + /// + /// The index of the cutscene actor to be changed. + /// The new index of the cutscene actors parent or -1 for no parent. + /// Success when the new parent could be set, or InvalidArgument if either index is out of its respective range. + /// + /// Checks that the new parent exists as a game object if the value is not -1 before assigning. If it does not, InvalidArgument is given, too. + /// Please only use this for good reason and if you know what you are doing, probably only for actor copies you actually create yourself. + /// + public PenumbraApiEc SetCutsceneParentIndex(int copyIdx, int newParentIdx); + + /// + /// Triggered when a character base is created and a corresponding gameObject could be found, + /// before the Draw Object is actually created, so customize and equipdata can be manipulated beforehand. + /// + /// + public event CreatingCharacterBaseDelegate? CreatingCharacterBase; + + /// + /// Triggered after a character base was created if a corresponding gameObject could be found, + /// so you can apply flag changes after finishing. + /// + /// + public event CreatedCharacterBaseDelegate? CreatedCharacterBase; + + /// + /// Triggered whenever a resource is redirected by Penumbra for a specific, identified game object. + /// Does not trigger if the resource is not requested for a known game object. + /// + /// + public event GameObjectResourceResolvedDelegate? GameObjectResourceResolved; +} diff --git a/Penumbra.Api/Api/IPenumbraApi.cs b/Penumbra.Api/Api/IPenumbraApi.cs new file mode 100644 index 0000000..1cd5407 --- /dev/null +++ b/Penumbra.Api/Api/IPenumbraApi.cs @@ -0,0 +1,41 @@ +namespace Penumbra.Api.Api; + +/// The entire API. +public interface IPenumbraApi : IPenumbraApiBase +{ + /// + public IPenumbraApiCollection Collection { get; } + + /// + public IPenumbraApiEditing Editing { get; } + + /// + public IPenumbraApiGameState GameState { get; } + + /// + public IPenumbraApiMeta Meta { get; } + + /// + public IPenumbraApiMods Mods { get; } + + /// + public IPenumbraApiModSettings ModSettings { get; } + + /// + public IPenumbraApiPluginState PluginState { get; } + + /// + public IPenumbraApiRedraw Redraw { get; } + + /// + public IPenumbraApiResolve Resolve { get; } + + /// + public IPenumbraApiResourceTree ResourceTree { get; } + + /// + public IPenumbraApiTemporary Temporary { get; } + + /// + public IPenumbraApiUi Ui { get; } +} diff --git a/Penumbra.Api/Api/IPenumbraApiBase.cs b/Penumbra.Api/Api/IPenumbraApiBase.cs new file mode 100644 index 0000000..0a32ea5 --- /dev/null +++ b/Penumbra.Api/Api/IPenumbraApiBase.cs @@ -0,0 +1,16 @@ +namespace Penumbra.Api.Api; + +/// Base interface for the API that is always available, regardless of version. +public interface IPenumbraApiBase +{ + /// + /// The API version is staggered in two parts. + /// The major/Breaking version only increments if there are changes breaking backwards compatibility. + /// The minor/Feature version increments any time there is something added + /// and resets when Breaking is incremented. + /// + public (int Breaking, int Feature) ApiVersion { get; } + + /// Whether the API is still usable. + public bool Valid { get; } +} diff --git a/Penumbra.Api/Api/Meta.cs b/Penumbra.Api/Api/Meta.cs new file mode 100644 index 0000000..3eda995 --- /dev/null +++ b/Penumbra.Api/Api/Meta.cs @@ -0,0 +1,13 @@ +namespace Penumbra.Api.Api; + +/// API methods pertaining to current metadata manipulations. +public interface IPenumbraApiMeta +{ + /// A base64 encoded, zipped json-string with a prepended version-byte of the current manipulations + /// in the collection currently associated with the player. + public string GetPlayerMetaManipulations(); + + /// A base64 encoded, zipped json-string with a prepended version-byte of the current manipulations + /// in the given collection applying to the given game object or the default collection if it does not exist. + public string GetMetaManipulations(int gameObjectIdx); +} diff --git a/Penumbra.Api/Api/ModSettings.cs b/Penumbra.Api/Api/ModSettings.cs new file mode 100644 index 0000000..fc76c18 --- /dev/null +++ b/Penumbra.Api/Api/ModSettings.cs @@ -0,0 +1,77 @@ +using Penumbra.Api.Enums; +using Penumbra.Api.Helpers; + +namespace Penumbra.Api.Api; + +/// API methods pertaining to the management of mod settings. +public interface IPenumbraApiModSettings +{ + /// + /// Obtain the potential settings of a mod given by its name or . + /// + /// A dictionary of group names to lists of option names and the group type. Null if the mod could not be found. + public AvailableModSettings? GetAvailableModSettings(string modDirectory, string modName); + + /// + /// Obtain the enabled state, the priority, the settings of a mod given by its name or in the specified collection. + /// + /// Specify the collection. + /// Specify the mod via its directory name. + /// Specify the mod via its (non-unique) display name. + /// Whether the settings need to be from the given collection or can be inherited from any other by it. (True: given collection only) + /// Whether the settings need to be actual settings or can be temporary. + /// The key for the settings lock. If is false, settings with a key greater than 0 that is different from this will be ignored. + /// ModMissing, CollectionMissing or Success. + /// On Success, a tuple of Enabled State, Priority, a dictionary of option group names and lists of enabled option names and a bool whether the settings are inherited (true) or not. + public (PenumbraApiEc, (bool, int, Dictionary>, bool, bool)?) GetCurrentModSettingsWithTemp(Guid collectionId, + string modDirectory, string modName, bool ignoreInheritance, bool ignoreTemporary, int key); + + /// + public (PenumbraApiEc, (bool, int, Dictionary>, bool)?) GetCurrentModSettings(Guid collectionId, + string modDirectory, string modName, bool ignoreInheritance); + + /// Obtain the enabled state, the priority, the settings of all mods in the specified collection. + /// Specify the collection. + /// Whether the settings need to be from the given collection or can be inherited from any other by it. (True: given collection only) + /// Whether the settings need to be actual settings or can be temporary. + /// The key for the settings lock. If is false, settings with a key greater than 0 that is different from this will be ignored. + /// CollectionMissing or Success, on Success, a dictionary of mod directory names to a tuple of (Enabled, Priority, Settings, Inherited, Temporary). Mods that have no settings at all are left out. + public (PenumbraApiEc, Dictionary>, bool, bool)>?) GetAllModSettings(Guid collectionId, + bool ignoreInheritance, bool ignoreTemporary, int key); + + /// Try to set the inheritance state of a mod in a collection. + /// ModMissing, CollectionMissing, InvalidArgument (GUID is nil), NothingChanged or Success. + public PenumbraApiEc TryInheritMod(Guid collectionId, string modDirectory, string modName, bool inherit); + + /// Try to set the enabled state of a mod in a collection. + /// ModMissing, CollectionMissing, InvalidArgument (GUID is nil), NothingChanged or Success. + public PenumbraApiEc TrySetMod(Guid collectionId, string modDirectory, string modName, bool enabled); + + /// Try to set the priority of a mod in a collection. + /// ModMissing, CollectionMissing, InvalidArgument (GUID is nil), NothingChanged or Success. + public PenumbraApiEc TrySetModPriority(Guid collectionId, string modDirectory, string modName, int priority); + + /// Try to set a specific option group of a mod in the given collection to a specific value. + /// Removes inheritance. Single Selection groups should provide a single option, Multi Selection can provide multiple. + /// If any setting can not be found, it will not change anything. + /// ModMissing, CollectionMissing, OptionGroupMissing, SettingMissing, InvalidArgument (GUID is nil), NothingChanged or Success. + public PenumbraApiEc TrySetModSetting(Guid collectionId, string modDirectory, string modName, string optionGroupName, string optionName); + + /// + public PenumbraApiEc TrySetModSettings(Guid collectionId, string modDirectory, string modName, string optionGroupName, + IReadOnlyList optionNames); + + /// This event gets fired when any setting in any collection changes. + /// + public event ModSettingChangedDelegate? ModSettingChanged; + + /// + /// Copy all current settings for a mod to another mod. + /// + /// Specify the collection to work in, leave null to do it in all collections. + /// Specify the mod to take the settings from via its directory name. + /// Specify the mod to put the settings on via its directory name. If the mod does not exist, it will be added as unused settings. + /// CollectionMissing if collectionName is not empty but does not exist or Success. + /// If the target mod exists, the settings will be fixed before being applied. If the source mod does not exist, it will use unused settings if available and remove existing settings otherwise. + public PenumbraApiEc CopyModSettings(Guid? collectionId, string modDirectoryFrom, string modDirectoryTo); +} diff --git a/Penumbra.Api/Api/Mods.cs b/Penumbra.Api/Api/Mods.cs new file mode 100644 index 0000000..a2164d8 --- /dev/null +++ b/Penumbra.Api/Api/Mods.cs @@ -0,0 +1,78 @@ +using Penumbra.Api.Enums; + +namespace Penumbra.Api.Api; + +/// API methods pertaining to management of mods. +public interface IPenumbraApiMods +{ + /// A list of all installed mods. The first string is their directory name, the second string is their mod name. + public Dictionary GetModList(); + + /// Try to unpack and install a valid mod file (.pmp, .ttmp, .ttmp2) as if installed manually. + /// The file that should be unpacked. + /// Success, MissingFile. Success does not indicate successful installing, just successful queueing for install. + public PenumbraApiEc InstallMod(string modFilePackagePath); + + /// Try to reload an existing mod given by its name or . + /// Reload is the same as if triggered by button press and might delete the mod if it is not valid anymore. + /// ModMissing if the mod can not be found or Success + public PenumbraApiEc ReloadMod(string modDirectory, string modName); + + /// Try to add a new mod inside the mod root directory. + /// Note that success does only imply a successful call, not a successful mod load. + /// The name (not full name) of the mod directory. + /// FileMissing if does not exist, InvalidArgument if the path leads outside the root directory, Success otherwise. + public PenumbraApiEc AddMod(string modDirectory); + + /// Try to delete a mod given by its name or . + /// Note that success does only imply a successful call, not successful deletion. + /// NothingDone if the mod can not be found, Success otherwise. + public PenumbraApiEc DeleteMod(string modDirectory, string modName); + + /// Triggers whenever a mod is deleted. + /// The base directory name of the deleted mod. + public event Action? ModDeleted; + + /// Triggers whenever a mod is deleted. + /// The base directory name of the new mod. + public event Action? ModAdded; + + /// Triggers whenever a mods base name is changed from inside Penumbra. + /// The previous base directory name of the mod and the new base directory name of the mod. + public event Action? ModMoved; + + /// + /// Get the internal full filesystem path including search order for the specified mod + /// given by its name or . + /// + /// On Success, the full path, a bool indicating whether the entire path is default (true) or manually set (false), + /// and a bool indicating whether the sort order name ignoring the folder path is default (true) or manually set (false). + /// Otherwise, returns ModMissing if the mod can not be found. + public (PenumbraApiEc, string, bool, bool) GetModPath(string modDirectory, string modName); + + /// + /// Set the internal search order and filesystem path of the specified mod + /// given by its name or + /// to the . + /// + /// InvalidArgument if is empty, ModMissing if the mod can not be found, + /// PathRenameFailed if could not be set or Success. + public PenumbraApiEc SetModPath(string modDirectory, string modName, string newPath); + + /// Get the overall changed items of a single mod given by its name or , regardless of settings. + /// A possibly empty dictionary of affected items and known objects or null. + public Dictionary GetChangedItems(string modDirectory, string modName); + + /// Get a dictionary of dictionaries to check all mods changed items. + /// A dictionary of mod identifier to changed item dictionary. + /// Throws an on access if the mod storage is not valid anymore, so clear this on . + public IReadOnlyDictionary> GetChangedItemAdapterDictionary(); + + /// Get a list of dictionaries to check all mods changed items. + /// A list all mods changed item dictionaries. + /// + /// The order of mods is unspecified, but the same as in GetModList (assuming no changes in mods have taken place between calls).
+ /// Throws an on access if the mod storage is not valid anymore, so clear this on . + ///
+ public IReadOnlyList<(string ModDirectory, IReadOnlyDictionary ChangedItems)> GetChangedItemAdapterList(); +} diff --git a/Penumbra.Api/Api/PluginState.cs b/Penumbra.Api/Api/PluginState.cs new file mode 100644 index 0000000..09a3f36 --- /dev/null +++ b/Penumbra.Api/Api/PluginState.cs @@ -0,0 +1,26 @@ +namespace Penumbra.Api.Api; + +/// API methods pertaining to Penumbras own state. +public interface IPenumbraApiPluginState +{ + /// The full path of the current penumbra root directory. + public string GetModDirectory(); + + /// The entire current penumbra configuration as a json encoded string. + public string GetConfiguration(); + + /// + /// Fired whenever a mod directory change is finished. + /// + /// The full path of the mod directory and whether Penumbra treats it as valid. + public event Action? ModDirectoryChanged; + + /// True if Penumbra is enabled, false otherwise. + public bool GetEnabledState(); + + /// + /// Fired whenever the enabled state of Penumbra changes. + /// + /// True if the new state is enabled, false if the new state is disabled + public event Action? EnabledChange; +} diff --git a/Penumbra.Api/Api/Redraw.cs b/Penumbra.Api/Api/Redraw.cs new file mode 100644 index 0000000..3c4854d --- /dev/null +++ b/Penumbra.Api/Api/Redraw.cs @@ -0,0 +1,23 @@ +using Penumbra.Api.Enums; + +namespace Penumbra.Api.Api; + +/// API methods pertaining to the redrawing of actors. +public interface IPenumbraApiRedraw +{ + /// + /// Queue redrawing of the actor with the given object , if it exists, with the given RedrawType . + /// + public void RedrawObject(int gameObjectIndex, RedrawType setting); + + /// + /// Queue redrawing of all currently available actors with the given RedrawType . + /// + public void RedrawAll(RedrawType setting); + + /// + /// Triggered whenever a game object is redrawn via Penumbra. + /// + /// / + public event GameObjectRedrawnDelegate? GameObjectRedrawn; +} diff --git a/Penumbra.Api/Api/Resolve.cs b/Penumbra.Api/Api/Resolve.cs new file mode 100644 index 0000000..49af419 --- /dev/null +++ b/Penumbra.Api/Api/Resolve.cs @@ -0,0 +1,64 @@ +using Lumina.Data; + +namespace Penumbra.Api.Api; + +/// API methods pertaining to the resolving of paths. +public interface IPenumbraApiResolve +{ + /// + /// Resolve a given via Penumbra using the Base collection. + /// + /// The resolved path, or the given path if Penumbra would not manipulate it. + public string ResolveDefaultPath(string gamePath); + + /// + /// Resolve a given via Penumbra using the Interface collection. + /// + /// The resolved path, or the given path if Penumbra would not manipulate it. + public string ResolveInterfacePath(string gamePath); + + /// + /// Resolve a given via Penumbra using collection applying to the + /// given by its index in the game object table. + /// + /// If the object does not exist in the table, the default collection is used. + /// The resolved path, or the given path if Penumbra would not manipulate it. + public string ResolveGameObjectPath(string gamePath, int gameObjectIdx); + + /// + /// Resolve a given via Penumbra using the collection currently applying to the player character. + /// + /// The resolved path, or the given path if Penumbra would not manipulate it. + public string ResolvePlayerPath(string gamePath); + + /// + /// Reverse resolves a given local into its replacement in form of all applicable game paths + /// for the collection applying to the th game object in the game object table. + /// + /// If the object does not exist in the table, the default collection is used. + /// A list of game paths resolving to the modded path. + public string[] ReverseResolveGameObjectPath(string moddedPath, int gameObjectIdx); + + /// + /// Reverse resolves a given local into its replacement in form of all applicable game paths + /// for the collection currently applying to the player character. + /// + /// A list of game paths resolving to the modded path. + public string[] ReverseResolvePlayerPath(string moddedPath); + + /// + /// Resolve all game paths in and reserve all paths in at once. + /// + /// Paths to forward-resolve. + /// Paths to reverse-resolve. + /// A pair of an array of forward-resolved single paths of the same length as and an array of arrays of reverse-resolved paths. + /// The outer array has the same length as while each inner array can have arbitrary length. + public (string[], string[][]) ResolvePlayerPaths(string[] forward, string[] reverse); + + /// + /// Resolve all game paths in and reserve all paths in at once asynchronously. + /// + /// + /// Can be called from outside of framework. Can theoretically produce incoherent state when collections change during evaluation. + public Task<(string[], string[][])> ResolvePlayerPathsAsync(string[] forward, string[] reverse); +} diff --git a/Penumbra.Api/Api/ResourceTree.cs b/Penumbra.Api/Api/ResourceTree.cs new file mode 100644 index 0000000..18ef173 --- /dev/null +++ b/Penumbra.Api/Api/ResourceTree.cs @@ -0,0 +1,73 @@ +using Newtonsoft.Json.Linq; +using Penumbra.Api.Enums; +using Penumbra.Api.Helpers; + +namespace Penumbra.Api.Api; + +/// API methods pertaining to the tracking of resources in use by actors. +public interface IPenumbraApiResourceTree +{ + /// + /// Get the given game objects' resources, as dictionaries of actual paths (that may be FS paths for redirected resources, or game paths for swapped or vanilla resources) to game paths. + /// + /// The game object indices for which to get the resources. + /// An array of resource path dictionaries, of the same length and in the same order as the given game object index array. + /// This function is best called right after the game objects are redrawn, as it may fail to resolve paths if relevant mod settings have changed since then. + public Dictionary>?[] GetGameObjectResourcePaths(params ushort[] gameObjects); + + /// + /// Get the player and player-owned game objects' resources, as dictionaries of actual paths (that may be FS paths for redirected resources, or game paths for swapped or vanilla resources) to game paths. + /// + /// A dictionary of game object indices to resource path dictionaries. + /// This function is best called right after the game objects are redrawn, as it may fail to resolve paths if relevant mod settings have changed since then. + public Dictionary>> GetPlayerResourcePaths(); + + /// + /// Get the given game objects' resources of a given type, as dictionaries of resource handles to actual paths and, optionally, names and icons. + /// + /// Type of the resources to get, for example for materials. + /// Whether to get names and icons along with the paths. + /// The game object indices for which to get the resources. + /// An array of resource information dictionaries, of the same length and in the same order as the given game object index array. + /// + /// It is the caller's responsibility to make sure the returned resource handles are still in use on the game object's draw object before using them. + /// Also, callers should not use UI data for non-UI purposes. + /// + public GameResourceDict?[] GetGameObjectResourcesOfType(ResourceType type, bool withUiData, + params ushort[] gameObjects); + + /// + /// Get the player and player-owned game objects' resources of a given type, as dictionaries of resource handles to actual paths and, optionally, names and icons. + /// + /// Type of the resources to get, for example for materials. + /// Whether to get names and icons along with the paths. + /// A dictionary of game object indices to resource information dictionaries. + /// + /// It is the caller's responsibility to make sure the returned resource handles are still in use on the game object's draw object before using them. + /// Also, callers should not use UI data for non-UI purposes. + /// + public Dictionary GetPlayerResourcesOfType(ResourceType type, bool withUiData); + + /// + /// Get the given game objects' resource tree. + /// + /// Whether to get names and icons along with the paths. + /// The game object indices for which to get the resources. + /// An array of resource tree JObjects, of the same length and in the same order as the given game object index array. + /// + /// It is the caller's responsibility to make sure the returned resource handles are still in use on the game object's draw object before using them. + /// Also, callers should not use UI data for non-UI purposes. + /// + public JObject?[] GetGameObjectResourceTrees(bool withUiData, params ushort[] gameObjects); + + /// + /// Get the player and player-owned game objects' resource trees. + /// + /// Whether to get names and icons along with the paths. + /// A dictionary of game object indices to resource trees. + /// + /// It is the caller's responsibility to make sure the returned resource handles are still in use on the game object's draw object before using them. + /// Also, callers should not use UI data for non-UI purposes. + /// + public Dictionary GetPlayerResourceTrees(bool withUiData); +} diff --git a/Penumbra.Api/Api/Temporary.cs b/Penumbra.Api/Api/Temporary.cs new file mode 100644 index 0000000..54363e0 --- /dev/null +++ b/Penumbra.Api/Api/Temporary.cs @@ -0,0 +1,147 @@ +using Penumbra.Api.Enums; + +namespace Penumbra.Api.Api; + +/// API methods pertaining to the management of temporary collections and mods. +public interface IPenumbraApiTemporary +{ + /// Temporarily set the settings of a mod in a collection to given values. + /// The collection to manipulate. + /// Specify the mod via its directory name. + /// Specify the mod via its (non-unique) display name. + /// Whether the mod should be forced to inherit from parent collections (if this is true, the other settings do not matter). + /// Whether the mod should be enabled or disabled. + /// The desired priority for the mod. + /// The new settings for the mod, as a map of Group Name -> All enabled Options (should be only one for single select groups). + /// A string to describe the source of those temporary settings. This is displayed to the user. + /// An optional lock to prevent other plugins and the user from changing these settings. Changes in mod structure will still remove the settings. Use 0 for no lock, or negative numbers for an identification lock that does not prevent the user from editing the temporary settings, but allows you to use with the same key to only remove your settings. + /// Success, CollectionMissing if the collection does not exist, TemporarySettingImpossible if the collection can not have settings, ModMissing if the mod can not be identified, TemporarySettingDisallowed if there is already a temporary setting with a different key, OptionGroupMissing if a group can not be found, OptionMissing if an option can not be found. + /// If not all groups are set in , they will be set to their default settings. + public PenumbraApiEc SetTemporaryModSettings(Guid collectionId, string modDirectory, string modName, bool inherit, bool enabled, int priority, + IReadOnlyDictionary> options, string source, int key); + + /// Temporarily set the settings of a mod in a collection to given values. + /// The game object index of the object whose collection you want to change. + /// Specify the mod via its directory name. + /// Specify the mod via its (non-unique) display name. + /// Whether the mod should be forced to inherit from parent collections (if this is true, the other settings do not matter). + /// Whether the mod should be enabled or disabled. + /// The desired priority for the mod. + /// The new settings for the mod, as a map of Group Name -> All enabled Options (should be only one for single select groups). + /// A string to describe the source of those temporary settings. This is displayed to the user. + /// An optional lock to prevent other plugins and the user from changing these settings. Changes in mod structure will still remove the settings. Use 0 for no lock. + /// Success, InvalidArgument if the game object does not exist, TemporarySettingImpossible if the collection can not have settings, ModMissing if the mod can not be identified, TemporarySettingDisallowed if there is already a temporary setting with a different key, OptionGroupMissing if a group can not be found, OptionMissing if an option can not be found. + /// If not all groups are set in , they will be set to their default settings. + public PenumbraApiEc SetTemporaryModSettingsPlayer(int objectIndex, string modDirectory, string modName, bool inherit, bool enabled, int priority, + IReadOnlyDictionary> options, string source, int key); + + /// Temporarily set the settings of a mod in a collection to given values. + /// The collection to manipulate. + /// Specify the mod via its directory name. + /// Specify the mod via its (non-unique) display name. + /// An optional key to a potential lock applied to those settings. + /// Success, NothingDone if no temporary settings could be removed with this key, CollectionMissing if the collection does not exist, TemporarySettingDisallowed if the key did not correspond to the lock. + public PenumbraApiEc RemoveTemporaryModSettings(Guid collectionId, string modDirectory, string modName, int key); + + /// Temporarily set the settings of a mod in a collection to given values. + /// The game object index of the object whose collection you want to change. + /// Specify the mod via its directory name. + /// Specify the mod via its (non-unique) display name. + /// An optional key to a potential lock applied to those settings. + /// Success, NothingDone if the mod did not have temporary settings in this collection, InvalidArgument if the game object does not exist, TemporarySettingDisallowed if the key did not correspond to the lock. + public PenumbraApiEc RemoveTemporaryModSettingsPlayer(int objectIndex, string modDirectory, string modName, int key); + + /// Temporarily set the settings of a mod in a collection to given values. + /// The collection to manipulate. + /// An optional key to a lock applied to those settings. All settings that use this key will be removed, all others ignored. + /// Success, NothingDone if no temporary settings could be removed with this key, CollectionMissing if the collection does not exist. + public PenumbraApiEc RemoveAllTemporaryModSettings(Guid collectionId, int key); + + /// Temporarily set the settings of a mod in a collection to given values. + /// The game object index of the object whose collection you want to change. + /// An optional key to a lock applied to those settings. All settings that can be removed with this key will be removed, all others ignored. + /// Success, NothingDone if no temporary settings could be removed with this key, InvalidArgument if the game object does not exist. + public PenumbraApiEc RemoveAllTemporaryModSettingsPlayer(int objectIndex, int key); + + /// Create a temporary collection. + /// The name for the collection. Arbitrary and only used internally for debugging. + /// The GUID of the created temporary collection. + public Guid CreateTemporaryCollection(string name); + + /// Remove the temporary collection of the given name. + /// The chosen temporary collection to remove. + /// NothingChanged or Success. + public PenumbraApiEc DeleteTemporaryCollection(Guid collectionId); + + /// + /// Assign an existing temporary collection to an actor that currently occupies a specific slot. + /// + /// The chosen collection assigned to the actor. + /// The current object table index of the actor. + /// Whether to assign even if the actor is already assigned either a temporary or a permanent collection. + /// Success, InvalidArgument if the actor can not be identified, CollectionMissing if the collection does not exist, CharacterCollectionExists if is false and the actor is already assigned a collection, and AssignmentDeletionFailed if is true and the existing temporary assignment could not be deleted. + public PenumbraApiEc AssignTemporaryCollection(Guid collectionId, int actorIndex, bool forceAssignment); + + /// + /// Set a temporary mod with the given paths, manipulations and priority and the name tag to all regular and temporary collections. + /// + /// Custom name for the temporary mod. + /// List of redirections (can be swaps or redirections). + /// Zipped Base64 string of meta manipulations. + /// Desired priority. + /// InvalidGamePath, InvalidManipulation or Success. + public PenumbraApiEc AddTemporaryModAll(string tag, Dictionary paths, string manipString, int priority); + + /// Set a temporary mod with the given paths, manipulations and priority and the name tag to a specific collection. + /// + /// Custom name for the temporary mod. + /// GUID of the collection the mod should apply to. Can be a temporary collection. + /// List of redirections (can be swaps or redirections). + /// Zipped Base64 string of meta manipulations. + /// Desired priority. + /// CollectionMissing, InvalidGamePath, InvalidManipulation, InvalidArgument (GUID is nil) or Success. + public PenumbraApiEc AddTemporaryMod(string tag, Guid collectionId, Dictionary paths, string manipString, + int priority); + + /// + /// Remove the temporary mod with the given tag and priority from the temporary mods applying to all collections, if it exists. + /// + /// The tag to look for. + /// The initially provided priority. + /// NothingDone or Success. + public PenumbraApiEc RemoveTemporaryModAll(string tag, int priority); + + /// + /// Remove the temporary mod with the given tag and priority from the temporary mods applying to a specific collection, if it exists. + /// + /// The tag to look for. + /// GUID of the collection the mod should apply to. Can be a temporary collection. + /// The initially provided priority. + /// CollectionMissing, NothingDone or Success. + public PenumbraApiEc RemoveTemporaryMod(string tag, Guid collectionId, int priority); + + /// Get the current temporary settings of a mod in the given collection. + /// The collection to query. + /// Specify the mod via its directory name. + /// Specify the mod via its (non-unique) display name. + /// The key for the settings lock. + /// + /// The settings as (ForceInherit, Enabled, Priority, Settings) or null if none are registered, + /// the registered source for the temporary settings or empty, + /// and Success, CollectionMissing, ModMissing or TemporarySettingDisallowed if the used key was > 0 and different from the provided key. + /// + public (PenumbraApiEc ErrorCode, (bool, bool, int, Dictionary>)?, string) QueryTemporaryModSettings(Guid collectionId, string modDirectory, + string modName, int key); + + /// Get the current temporary settings of a mod in the collection assigned to a given game object. + /// The game object index of the object whose collection you want to change. + /// Specify the mod via its directory name. + /// Specify the mod via its (non-unique) display name. + /// The key for the settings lock. + /// + /// The settings as (ForceInherit, Enabled, Priority, Settings) or null if none are registered, + /// the registered source for the temporary settings or empty, + /// and Success, InvalidArgument if the game object does not exist, ModMissing, or TemporarySettingDisallowed if the used key was > 0 and different from the provided key. + /// + public (PenumbraApiEc ErrorCode, (bool, bool, int, Dictionary>)? Settings, string Source) QueryTemporaryModSettingsPlayer(int objectIndex, string modDirectory, string modName, int key); +} diff --git a/Penumbra.Api/Api/Ui.cs b/Penumbra.Api/Api/Ui.cs new file mode 100644 index 0000000..d5d4539 --- /dev/null +++ b/Penumbra.Api/Api/Ui.cs @@ -0,0 +1,59 @@ +using Penumbra.Api.Enums; + +namespace Penumbra.Api.Api; + +/// API methods pertaining to Penumbras UI. +public interface IPenumbraApiUi +{ + /// + /// Triggered when the user hovers over a listed changed object in a mod tab. + /// Can be used to append tooltips. + /// + /// The type of the changed item and its ID if known. + public event Action? ChangedItemTooltip; + + /// + /// Triggered when the user clicks a listed changed object in a mod tab. + /// + /// The mouse button clicked, the type of the changed item and its ID if known. + public event Action? ChangedItemClicked; + + /// + /// Triggered before the settings tab bar for a mod is drawn, after the title group is drawn. + /// + /// The directory name of the currently selected mod, the total used width of the title bar and the width of the title box. + public event Action? PreSettingsTabBarDraw; + + /// + /// Triggered before the content of a mod settings panel is drawn. + /// + /// The directory name of the currently selected mod. + public event Action? PreSettingsPanelDraw; + + /// + /// Triggered after the Enabled Checkbox line in settings is drawn, but before options are drawn. + /// + /// The directory name of the currently selected mod. + public event Action? PostEnabledDraw; + + /// + /// Triggered after the content of a mod settings panel is drawn, but still in the child window. + /// + /// The directory name of the currently selected mod. + public event Action? PostSettingsPanelDraw; + + /// + /// Open the Penumbra main config window. + /// + /// Open the window at a specific tab. Use TabType.None to not change the tab. + /// Select a mod specified via its directory name in the mod tab, empty if none. + /// Select a mod specified via its mod name in the mod tab, empty if none. + /// InvalidArgument if is invalid, + /// ModMissing if or are set non-empty and the mod does not exist, + /// Success otherwise. + /// If is not TabType.Mods, the mod will not be selected regardless of other parameters and ModMissing will not be returned. + public PenumbraApiEc OpenMainWindow(TabType tab, string modDirectory, string modName); + + /// Close the Penumbra main config window. + public void CloseMainWindow(); +} diff --git a/Penumbra.Api/Delegates.cs b/Penumbra.Api/Delegates.cs new file mode 100644 index 0000000..b382cec --- /dev/null +++ b/Penumbra.Api/Delegates.cs @@ -0,0 +1,42 @@ +using Penumbra.Api.Enums; + +namespace Penumbra.Api; + +/// Used when a game object is redrawn by Penumbra. +/// The to the redrawn object and its . +public delegate void GameObjectRedrawnDelegate(nint objectPtr, int objectTableIndex); + +/// +/// Used when the setting of a mod is changed in any way. +/// +/// The of change, +/// the in which the setting is changed, +/// the name of the mod, +/// and whether the change was or not. +public delegate void ModSettingChangedDelegate(ModSettingChange type, Guid collectionId, string modDirectory, bool inherited); + +/// +/// Used before a new character base draw object is created from a . +/// +/// A pointer to the source , +/// the used for the object, +/// a pointer to the used (of type ushort*), +/// a pointer to the array, +/// and a pointer to the array. +public delegate void CreatingCharacterBaseDelegate(nint gameObject, Guid collectionId, nint modelId, nint customize, nint equipData); + +/// +/// Used after a character base has been created from a . +/// +/// A pointer to the source , +/// the used for the object, +/// a pointer to newly created . +public delegate void CreatedCharacterBaseDelegate(nint gameObject, Guid collectionId, nint drawObject); + +/// +/// Used when a specific game object has resolved a path to a non-default path. +/// +/// A pointer to the source , +/// the original that was resolved by Penumbra, +/// the resulting returned by Penumbra. +public delegate void GameObjectResourceResolvedDelegate(nint gameObject, string gamePath, string localPath); diff --git a/Penumbra.Api/Enums/ApiCollectionType.cs b/Penumbra.Api/Enums/ApiCollectionType.cs new file mode 100644 index 0000000..2a2198a --- /dev/null +++ b/Penumbra.Api/Enums/ApiCollectionType.cs @@ -0,0 +1,97 @@ +namespace Penumbra.Api.Enums; + +public enum ApiCollectionType : byte +{ + Yourself = 0, + + MalePlayerCharacter, + FemalePlayerCharacter, + MaleNonPlayerCharacter, + FemaleNonPlayerCharacter, + NonPlayerChild, + NonPlayerElderly, + + MaleMidlander, + FemaleMidlander, + MaleHighlander, + FemaleHighlander, + + MaleWildwood, + FemaleWildwood, + MaleDuskwight, + FemaleDuskwight, + + MalePlainsfolk, + FemalePlainsfolk, + MaleDunesfolk, + FemaleDunesfolk, + + MaleSeekerOfTheSun, + FemaleSeekerOfTheSun, + MaleKeeperOfTheMoon, + FemaleKeeperOfTheMoon, + + MaleSeawolf, + FemaleSeawolf, + MaleHellsguard, + FemaleHellsguard, + + MaleRaen, + FemaleRaen, + MaleXaela, + FemaleXaela, + + MaleHelion, + FemaleHelion, + MaleLost, + FemaleLost, + + MaleRava, + FemaleRava, + MaleVeena, + FemaleVeena, + + MaleMidlanderNpc, + FemaleMidlanderNpc, + MaleHighlanderNpc, + FemaleHighlanderNpc, + + MaleWildwoodNpc, + FemaleWildwoodNpc, + MaleDuskwightNpc, + FemaleDuskwightNpc, + + MalePlainsfolkNpc, + FemalePlainsfolkNpc, + MaleDunesfolkNpc, + FemaleDunesfolkNpc, + + MaleSeekerOfTheSunNpc, + FemaleSeekerOfTheSunNpc, + MaleKeeperOfTheMoonNpc, + FemaleKeeperOfTheMoonNpc, + + MaleSeawolfNpc, + FemaleSeawolfNpc, + MaleHellsguardNpc, + FemaleHellsguardNpc, + + MaleRaenNpc, + FemaleRaenNpc, + MaleXaelaNpc, + FemaleXaelaNpc, + + MaleHelionNpc, + FemaleHelionNpc, + MaleLostNpc, + FemaleLostNpc, + + MaleRavaNpc, + FemaleRavaNpc, + MaleVeenaNpc, + FemaleVeenaNpc, + + Default = 0xE0, + Interface = 0xE1, + Current = 0xE2, +} diff --git a/Penumbra.Api/Enums/ChangedItemIcon.cs b/Penumbra.Api/Enums/ChangedItemIcon.cs new file mode 100644 index 0000000..b47cd8d --- /dev/null +++ b/Penumbra.Api/Enums/ChangedItemIcon.cs @@ -0,0 +1,23 @@ +namespace Penumbra.Api.Enums; + +public enum ChangedItemIcon : uint +{ + None = 0, + Unknown = 1, + Head = 2, + Body = 3, + Hands = 4, + Legs = 5, + Feet = 6, + Ears = 7, + Neck = 8, + Wrists = 9, + Finger = 10, + Mainhand = 11, + Offhand = 12, + Customization = 13, + Monster = 14, + Demihuman = 15, + Action = 16, + Emote = 17, +} diff --git a/Penumbra.Api/Enums/ChangedItemType.cs b/Penumbra.Api/Enums/ChangedItemType.cs new file mode 100644 index 0000000..1e3bac5 --- /dev/null +++ b/Penumbra.Api/Enums/ChangedItemType.cs @@ -0,0 +1,17 @@ +namespace Penumbra.Api.Enums; + +/// +/// Describes known types of changed items that could provide special care. +/// +public enum ChangedItemType +{ + None = 0, + Item = 1, + Action = 2, + Customization = 3, + ItemOffhand = 4, + Unknown = 5, + Emote = 6, + Model = 7, + CustomArmor = 8, +} diff --git a/Penumbra.Api/Enums/GroupType.cs b/Penumbra.Api/Enums/GroupType.cs new file mode 100644 index 0000000..93917ce --- /dev/null +++ b/Penumbra.Api/Enums/GroupType.cs @@ -0,0 +1,39 @@ +namespace Penumbra.Api.Enums; + +/// +/// The selection type for mod option groups. +/// +public enum GroupType +{ + /// + /// Exactly one option of this group has to be selected (if any exist). + /// + Single, + + /// + /// Any number of options in this group can be toggled on or off at the same time. + /// Limits the number of options in a single group to 32 at the most. + /// Each option is its own data container, which are independent of each other. + /// + Multi, + + /// + /// Any number of options in this group can be toggled on or off at the same time. + /// Affects a single IMC entry, to manipulate different parts of a model in a user-facing way. + /// + Imc, + + /// + /// Any number of options in this group can be toggled on or off at the same time. + /// Limits the number of options in a single group to 8 at the most. + /// Each combination of options is its own data container, resulting in 2^N separate data containers. + /// + Combining, + + /// + /// A group consisting of multiple separate subgroups where the options can depend on each other. + /// Each subgroup behaves the same way as its regular group type, just with optional dependencies on the other options. + /// The total number of options is still limited by the settings bit size. + /// + Complex, +} diff --git a/Penumbra.Api/Enums/ModSettingChange.cs b/Penumbra.Api/Enums/ModSettingChange.cs new file mode 100644 index 0000000..4edf8bd --- /dev/null +++ b/Penumbra.Api/Enums/ModSettingChange.cs @@ -0,0 +1,34 @@ +namespace Penumbra.Api.Enums; + +/// +/// Describes the way a mod can change its settings. +/// +public enum ModSettingChange +{ + /// It was set to inherit from other collections or not to inherit anymore. + Inheritance, + + /// It was enabled or disabled. + EnableState, + + /// Its priority was changed. + Priority, + + /// A specific setting for an option group was changed. + Setting, + + /// Multiple mods were set to inherit from other collections or not inherit anymore at once. + MultiInheritance, + + /// Multiple mods were enabled or disabled at once. + MultiEnableState, + + /// A temporary mod was enabled or disabled. + TemporaryMod, + + /// A mod was edited. Only invoked on edits affecting the current players collection and for that for now. + Edited, + + /// A temporary setting was added, removed or changed. + TemporarySetting, +} diff --git a/Penumbra.Api/Enums/MouseButton.cs b/Penumbra.Api/Enums/MouseButton.cs new file mode 100644 index 0000000..e5339e9 --- /dev/null +++ b/Penumbra.Api/Enums/MouseButton.cs @@ -0,0 +1,12 @@ +namespace Penumbra.Api.Enums; + +/// +/// Describes which mouse button was used to click an element. +/// +public enum MouseButton +{ + None, + Left, + Right, + Middle, +} diff --git a/Penumbra.Api/Enums/PenumbraApiEc.cs b/Penumbra.Api/Enums/PenumbraApiEc.cs new file mode 100644 index 0000000..27c00d6 --- /dev/null +++ b/Penumbra.Api/Enums/PenumbraApiEc.cs @@ -0,0 +1,33 @@ +namespace Penumbra.Api.Enums; + +/// +/// Error codes returned by some Penumbra.Api calls. +/// +public enum PenumbraApiEc +{ + Success = 0, + NothingChanged = 1, + CollectionMissing = 2, + ModMissing = 3, + OptionGroupMissing = 4, + OptionMissing = 5, + + CharacterCollectionExists = 6, + LowerPriority = 7, + InvalidGamePath = 8, + FileMissing = 9, + InvalidManipulation = 10, + InvalidArgument = 11, + PathRenameFailed = 12, + CollectionExists = 13, + AssignmentCreationDisallowed = 14, + AssignmentDeletionDisallowed = 15, + InvalidIdentifier = 16, + SystemDisposed = 17, + AssignmentDeletionFailed = 18, + + TemporarySettingDisallowed = 19, + TemporarySettingImpossible = 20, + + UnknownError = 255, +} diff --git a/Penumbra.Api/Enums/RedrawType.cs b/Penumbra.Api/Enums/RedrawType.cs new file mode 100644 index 0000000..07faacf --- /dev/null +++ b/Penumbra.Api/Enums/RedrawType.cs @@ -0,0 +1,11 @@ +namespace Penumbra.Api.Enums; + +/// +/// The way a specific game object shall be redrawn. +/// Actors can be redrawn immediately or after GPose. +/// +public enum RedrawType +{ + Redraw, + AfterGPose, +} diff --git a/Penumbra.Api/Enums/ResourceType.cs b/Penumbra.Api/Enums/ResourceType.cs new file mode 100644 index 0000000..c08c966 --- /dev/null +++ b/Penumbra.Api/Enums/ResourceType.cs @@ -0,0 +1,79 @@ +namespace Penumbra.Api.Enums; + +public enum ResourceType : uint +{ + Unknown = 0, + Aet = 0x00616574, + Amb = 0x00616D62, + Atch = 0x61746368, + Atex = 0x61746578, + Avfx = 0x61766678, + Awt = 0x00617774, + Bklb = 0x626B6C62, + Cmp = 0x00636D70, + Cutb = 0x63757462, + Dic = 0x00646963, + Eanb = 0x65616E62, + Eid = 0x00656964, + Envb = 0x656E7662, + Eqdp = 0x65716470, + Eqp = 0x00657170, + Eslb = 0x65736C63, + Essb = 0x65737362, + Est = 0x00657374, + Evp = 0x00657670, + Exd = 0x00657864, + Exh = 0x00657868, + Exl = 0x0065786C, + Fdt = 0x00666474, + Fpeb = 0x66706562, + Gfd = 0x00676664, + Ggd = 0x00676764, + Gmp = 0x00676D70, + Gzd = 0x00677A64, + Imc = 0x00696D63, + Kdb = 0x006B6462, + Kdlb = 0x6B646C62, + Lcb = 0x006C6362, + Lgb = 0x006C6762, + Luab = 0x6C756162, + Lvb = 0x006C7662, + Mdl = 0x006D646C, + Mlt = 0x006D6C74, + Mtrl = 0x6D74726C, + Obsb = 0x6F627362, + Pap = 0x00706170, + Pbd = 0x00706264, + Pcb = 0x00706362, + Phyb = 0x70687962, + Plt = 0x00706C74, + Scd = 0x00736364, + Sgb = 0x00736762, + Shcd = 0x73686364, + Shpk = 0x7368706B, + Sklb = 0x736B6C62, + Skp = 0x00736B70, + Stm = 0x0073746D, + Svb = 0x00737662, + Tera = 0x74657261, + Tex = 0x00746578, + Tmb = 0x00746D62, + Ugd = 0x00756764, + Uld = 0x00756C64, + Waoe = 0x77616F65, + Wtd = 0x00777464, +} + +public static class ResourceTypeExtensions +{ + public static ResourceType FromExtension(ReadOnlySpan ext) + => ext.Length switch + { + 0 => ResourceType.Unknown, + 1 => (ResourceType)(ext[0] | 32), + 2 => (ResourceType)(ext[0] | 32 | ((ext[1] | 32) << 8)), + 3 => (ResourceType)(ext[0] | 32 | ((ext[1] | 32) << 8) | ((ext[2] | 32) << 16)), + 4 => (ResourceType)(ext[0] | 32 | ((ext[1] | 32) << 8) | ((ext[2] | 32) << 16) | ((ext[2] | 32) << 24)), + _ => ResourceType.Unknown, + }; +} diff --git a/Penumbra.Api/Enums/TabType.cs b/Penumbra.Api/Enums/TabType.cs new file mode 100644 index 0000000..91c4789 --- /dev/null +++ b/Penumbra.Api/Enums/TabType.cs @@ -0,0 +1,19 @@ +namespace Penumbra.Api.Enums; + +/// +/// The different tabs of the main window that are available. +/// +public enum TabType +{ + None = -1, + Settings = 0, + Mods = 1, + Collections = 2, + ChangedItems = 3, + EffectiveChanges = 4, + ResourceWatcher = 5, + Debug = 6, + ResourceManager = 7, + OnScreen = 8, + Messages = 9, +} diff --git a/Penumbra.Api/Enums/TextureType.cs b/Penumbra.Api/Enums/TextureType.cs new file mode 100644 index 0000000..71382b6 --- /dev/null +++ b/Penumbra.Api/Enums/TextureType.cs @@ -0,0 +1,37 @@ +namespace Penumbra.Api.Enums; + +/// +/// The different types of textures a given texture can be converted to. +/// +public enum TextureType +{ + /// Convert the texture to .png. + Png = 0, + + /// Keep the texture format as it is but save as .tex. + AsIsTex = 1, + + /// Keep the texture format as it is but save as .dds. + AsIsDds = 2, + + /// Convert the texture to RGBA32 and save as .tex. + RgbaTex = 3, + + /// Convert the texture to RGBA32 and save as .dds. + RgbaDds = 4, + + /// Convert the texture to BC3 and save as .tex. + Bc3Tex = 5, + + /// Convert the texture to BC3 and save as .dds. + Bc3Dds = 6, + + /// Convert the texture to BC3 and save as .tex. + Bc7Tex = 7, + + /// Convert the texture to BC3 and save as .dds. + Bc7Dds = 8, + + /// Convert the texture to .tga. + Targa = 9, +} diff --git a/Penumbra.Api/GlobalUsings.cs b/Penumbra.Api/GlobalUsings.cs new file mode 100644 index 0000000..1472899 --- /dev/null +++ b/Penumbra.Api/GlobalUsings.cs @@ -0,0 +1,5 @@ +// Global using directives + +global using System; +global using System.Collections.Generic; +global using System.Threading.Tasks; diff --git a/Penumbra.Api/Helpers/ActionProvider.cs b/Penumbra.Api/Helpers/ActionProvider.cs new file mode 100644 index 0000000..f8343fa --- /dev/null +++ b/Penumbra.Api/Helpers/ActionProvider.cs @@ -0,0 +1,136 @@ +using Dalamud.Plugin; +using Dalamud.Plugin.Ipc; + +namespace Penumbra.Api.Helpers; + +/// +/// Specialized disposable Provider for Actions. +/// +public sealed class ActionProvider : IDisposable +{ + private ICallGateProvider? _provider; + + public ActionProvider(IDalamudPluginInterface pi, string label, Action action) + { + try + { + _provider = pi.GetIpcProvider(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + + _provider?.RegisterAction(action); + } + + public void Dispose() + { + _provider?.UnregisterAction(); + _provider = null; + GC.SuppressFinalize(this); + } + + ~ActionProvider() + => Dispose(); +} + +/// +/// Specialized disposable Provider for Actions. +/// +public sealed class ActionProvider : IDisposable +{ + private ICallGateProvider? _provider; + + public ActionProvider(IDalamudPluginInterface pi, string label, Action action) + { + try + { + _provider = pi.GetIpcProvider(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + + _provider?.RegisterAction(action); + } + + public void Dispose() + { + _provider?.UnregisterAction(); + _provider = null; + GC.SuppressFinalize(this); + } + + ~ActionProvider() + => Dispose(); +} + +/// +/// +/// +public sealed class ActionProvider : IDisposable +{ + private ICallGateProvider? _provider; + + public ActionProvider(IDalamudPluginInterface pi, string label, Action action) + { + try + { + _provider = pi.GetIpcProvider(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + + _provider?.RegisterAction(action); + } + + public void Dispose() + { + _provider?.UnregisterAction(); + _provider = null; + GC.SuppressFinalize(this); + } + + ~ActionProvider() + => Dispose(); +} + +/// +/// +/// +public sealed class ActionProvider : IDisposable +{ + private ICallGateProvider? _provider; + + public ActionProvider(IDalamudPluginInterface pi, string label, Action action) + { + try + { + _provider = pi.GetIpcProvider(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + + _provider?.RegisterAction(action); + } + + public void Dispose() + { + _provider?.UnregisterAction(); + _provider = null; + GC.SuppressFinalize(this); + } + + ~ActionProvider() + => Dispose(); +} diff --git a/Penumbra.Api/Helpers/ActionSubscriber.cs b/Penumbra.Api/Helpers/ActionSubscriber.cs new file mode 100644 index 0000000..604b765 --- /dev/null +++ b/Penumbra.Api/Helpers/ActionSubscriber.cs @@ -0,0 +1,114 @@ +using Dalamud.Plugin; +using Dalamud.Plugin.Ipc; + +namespace Penumbra.Api.Helpers; + +/// +/// Specialized subscriber only allowing to invoke actions. +/// +public class ActionSubscriber +{ + private readonly ICallGateSubscriber? _subscriber; + + /// Whether the subscriber could successfully be created. + public bool Valid + => _subscriber != null; + + protected ActionSubscriber(IDalamudPluginInterface pi, string label) + { + try + { + _subscriber = pi.GetIpcSubscriber(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// Invoke the action. See the source of the subscriber for details. + protected void Invoke() + => _subscriber?.InvokeAction(); +} + +/// +public class ActionSubscriber +{ + private readonly ICallGateSubscriber? _subscriber; + + /// Whether the subscriber could successfully be created. + public bool Valid + => _subscriber != null; + + protected ActionSubscriber(IDalamudPluginInterface pi, string label) + { + try + { + _subscriber = pi.GetIpcSubscriber(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// Invoke the action. See the source of the subscriber for details. + protected void Invoke(T1 a) + => _subscriber?.InvokeAction(a); +} + +/// +public class ActionSubscriber +{ + private readonly ICallGateSubscriber? _subscriber; + + /// + public bool Valid + => _subscriber != null; + + protected ActionSubscriber(IDalamudPluginInterface pi, string label) + { + try + { + _subscriber = pi.GetIpcSubscriber(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + protected void Invoke(T1 a, T2 b) + => _subscriber?.InvokeAction(a, b); +} + +/// +public class ActionSubscriber +{ + private readonly ICallGateSubscriber? _subscriber; + + /// + public bool Valid + => _subscriber != null; + + protected ActionSubscriber(IDalamudPluginInterface pi, string label) + { + try + { + _subscriber = pi.GetIpcSubscriber(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + protected void Invoke(T1 a, T2 b, T3 c) + => _subscriber?.InvokeAction(a, b, c); +} diff --git a/Penumbra.Api/Helpers/ConvertingDict.cs b/Penumbra.Api/Helpers/ConvertingDict.cs new file mode 100644 index 0000000..9c1fef5 --- /dev/null +++ b/Penumbra.Api/Helpers/ConvertingDict.cs @@ -0,0 +1,152 @@ +using System.Collections; +using System.Runtime.CompilerServices; + +namespace Penumbra.Api.Helpers; + +/// A dictionary that implicitly can be converted to a read-only dictionary with different value type. +/// The type of the keys. +/// The actual type of the values. +/// The read-only type of the values. +public abstract class ConvertingDict(IReadOnlyDictionary dict) + : IReadOnlyDictionary + where TKey : notnull +{ + /// Obtain the original dictionary. + public IReadOnlyDictionary Original + => dict; + + /// Conversion between values. + [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] + protected abstract TValueTo ConvertValue(in TValueFrom from); + + /// + public bool ContainsKey(TKey key) + => dict.ContainsKey(key); + + /// + public bool TryGetValue(TKey key, out TValueTo value) + { + if (dict.TryGetValue(key, out var v)) + { + value = ConvertValue(v); + return true; + } + + value = default!; + return false; + } + + /// + public TValueTo this[TKey key] + => ConvertValue(dict[key]); + + public IEnumerable Keys + => dict.Keys; + + /// + public IEnumerable Values + { + get + { + foreach (var value in dict.Values) + yield return ConvertValue(value); + } + } + + /// + public int Count + => dict.Count; + + /// + public IEnumerator> GetEnumerator() + { + foreach (var kvp in dict) + yield return new KeyValuePair(kvp.Key, ConvertValue(kvp.Value)); + } + + IEnumerator IEnumerable.GetEnumerator() + => GetEnumerator(); +} + +/// A dictionary that implicitly can be converted to a read-only dictionary with different value type. +/// The actual type of the keys. +/// The read-only type of the keys. +/// The actual type of the values. +/// The read-only type of the values. +public abstract class ConvertingDict(IReadOnlyDictionary dict) + : IReadOnlyDictionary + where TKeyFrom : notnull + where TKeyTo : notnull +{ + /// Obtain the original dictionary. + public IReadOnlyDictionary Original + => dict; + + /// Conversion between keys. + [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] + protected abstract TKeyTo ConvertKey(in TKeyFrom from); + + /// Conversion between keys. + [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] + protected abstract TKeyFrom ConvertKeyBack(in TKeyTo from); + + /// Conversion between values. + [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] + protected abstract TValueTo ConvertValue(in TValueFrom from); + + /// + public bool ContainsKey(TKeyTo key) + => dict.ContainsKey(ConvertKeyBack(key)); + + /// + public bool TryGetValue(TKeyTo key, out TValueTo value) + { + if (dict.TryGetValue(ConvertKeyBack(key), out var v)) + { + value = ConvertValue(v); + return true; + } + + value = default!; + return false; + } + + /// + public TValueTo this[TKeyTo key] + => ConvertValue(dict[ConvertKeyBack(key)]); + + /// + public IEnumerable Keys + { + get + { + foreach (var key in dict.Keys) + yield return ConvertKey(key); + } + } + + /// + public IEnumerable Values + { + get + { + foreach (var value in dict.Values) + yield return ConvertValue(value); + } + } + + /// + public IEnumerator> GetEnumerator() + { + foreach (var kvp in dict) + yield return new KeyValuePair(ConvertKey(kvp.Key), ConvertValue(kvp.Value)); + } + + /// + IEnumerator IEnumerable.GetEnumerator() + => GetEnumerator(); + + /// + public int Count + => dict.Count; +} diff --git a/Penumbra.Api/Helpers/DtoClasses.cs b/Penumbra.Api/Helpers/DtoClasses.cs new file mode 100644 index 0000000..ac72e1b --- /dev/null +++ b/Penumbra.Api/Helpers/DtoClasses.cs @@ -0,0 +1,53 @@ +using System.Runtime.CompilerServices; +using Penumbra.Api.Enums; + +namespace Penumbra.Api.Helpers; + +/// Wrapper dictionary. +public sealed class GameResourceDict(IReadOnlyDictionary dict) + : ConvertingDict(dict) +{ + /// + [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] + protected override (string, string, ChangedItemIcon) ConvertValue(in (string, string, uint) from) + => (from.Item1, from.Item2, (ChangedItemIcon)from.Item3); + + /// Create dictionary or null. + [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] + public static GameResourceDict? Create(IReadOnlyDictionary? dict) + => dict == null ? null : new GameResourceDict(dict); +} + +/// Wrapper dictionary. +public sealed class AvailableModSettings(IReadOnlyDictionary dict) + : ConvertingDict(dict) +{ + /// + [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] + protected override (string[], GroupType) ConvertValue(in (string[], int) from) + => (from.Item1, (GroupType)from.Item2); + + /// Create dictionary or null. + [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] + public static AvailableModSettings? Create(IReadOnlyDictionary? dict) + => dict == null ? null : new AvailableModSettings(dict); +} + +public record ResourceNodeDto +{ + public required ResourceType Type { get; init; } + public required ChangedItemIcon Icon { get; init; } + public required string? Name { get; init; } + public required string? GamePath { get; init; } + public required string ActualPath { get; init; } + public required nint ObjectAddress { get; init; } + public required nint ResourceHandle { get; init; } + public required List Children { get; init; } +} + +public record ResourceTreeDto +{ + public required string Name { get; init; } + public required ushort RaceCode { get; init; } + public required List Nodes { get; init; } +} diff --git a/Penumbra.Api/Helpers/EventProvider.cs b/Penumbra.Api/Helpers/EventProvider.cs new file mode 100644 index 0000000..d5e0351 --- /dev/null +++ b/Penumbra.Api/Helpers/EventProvider.cs @@ -0,0 +1,465 @@ +using Dalamud.Plugin; +using Dalamud.Plugin.Ipc; +using Dalamud.Plugin.Services; + +namespace Penumbra.Api.Helpers; + +/// +/// Specialized disposable Provider for Events. +/// Will execute the unsubscriber action on dispose if any is provided. +/// Can only be invoked and disposed. +/// +public sealed class EventProvider : IDisposable +{ + private readonly IPluginLog _log; + private ICallGateProvider? _provider; + private Delegate? _unsubscriber; + + public EventProvider(IDalamudPluginInterface pi, string label, (Action Add, Action Del)? subscribe = null) + { + _unsubscriber = null; + _log = PluginLogHelper.GetLog(pi); + try + { + _provider = pi.GetIpcProvider(label); + subscribe?.Add(Invoke); + _unsubscriber = subscribe?.Del; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + } + + public EventProvider(IDalamudPluginInterface pi, string label, Action add, Action del) + { + _unsubscriber = null; + _log = PluginLogHelper.GetLog(pi); + try + { + _provider = pi.GetIpcProvider(label); + add(this); + _unsubscriber = del; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + } + + /// Invoke the event. + public void Invoke() + { + try + { + _provider?.SendMessage(); + } + catch (Exception e) + { + _log.Error($"Exception thrown on IPC event:\n{e}"); + } + } + + public void Dispose() + { + switch (_unsubscriber) + { + case Action a: + a(Invoke); + break; + case Action b: + b(this); + break; + } + + _unsubscriber = null; + _provider = null; + GC.SuppressFinalize(this); + } + + ~EventProvider() + => Dispose(); +} + +/// +public sealed class EventProvider : IDisposable +{ + private readonly IPluginLog _log; + private ICallGateProvider? _provider; + private Delegate? _unsubscriber; + + public EventProvider(IDalamudPluginInterface pi, string label, (Action> Add, Action> Del)? subscribe = null) + { + _unsubscriber = null; + _log = PluginLogHelper.GetLog(pi); + try + { + _provider = pi.GetIpcProvider(label); + subscribe?.Add(Invoke); + _unsubscriber = subscribe?.Del; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + } + + public EventProvider(IDalamudPluginInterface pi, string label, Action> add, Action> del) + { + _unsubscriber = null; + _log = PluginLogHelper.GetLog(pi); + try + { + _provider = pi.GetIpcProvider(label); + add(this); + _unsubscriber = del; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + } + + /// + public void Invoke(T1 a) + { + try + { + _provider?.SendMessage(a); + } + catch (Exception e) + { + _log.Error($"Exception thrown on IPC event:\n{e}"); + } + } + + public void Dispose() + { + switch (_unsubscriber) + { + case Action> a: + a(Invoke); + break; + case Action> b: + b(this); + break; + } + + _unsubscriber = null; + _provider = null; + GC.SuppressFinalize(this); + } + + ~EventProvider() + => Dispose(); +} + +/// +public sealed class EventProvider : IDisposable +{ + private readonly IPluginLog _log; + private ICallGateProvider? _provider; + private Delegate? _unsubscriber; + + public EventProvider(IDalamudPluginInterface pi, string label, + (Action> Add, Action> Del)? subscribe = null) + { + _unsubscriber = null; + _log = PluginLogHelper.GetLog(pi); + try + { + _provider = pi.GetIpcProvider(label); + subscribe?.Add(Invoke); + _unsubscriber = subscribe?.Del; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + } + + public EventProvider(IDalamudPluginInterface pi, string label, Action> add, Action> del) + { + _unsubscriber = null; + _log = PluginLogHelper.GetLog(pi); + try + { + _provider = pi.GetIpcProvider(label); + add(this); + _unsubscriber = del; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + } + + /// + public void Invoke(T1 a, T2 b) + { + try + { + _provider?.SendMessage(a, b); + } + catch (Exception e) + { + _log.Error($"Exception thrown on IPC event:\n{e}"); + } + } + + public void Dispose() + { + switch (_unsubscriber) + { + case Action> a: + a(Invoke); + break; + case Action> b: + b(this); + break; + } + + _unsubscriber = null; + _provider = null; + GC.SuppressFinalize(this); + } + + ~EventProvider() + => Dispose(); +} + +/// +public sealed class EventProvider : IDisposable +{ + private readonly IPluginLog _log; + private ICallGateProvider? _provider; + private Delegate? _unsubscriber; + + public EventProvider(IDalamudPluginInterface pi, string label, + (Action> Add, Action> Del)? subscribe = null) + { + _unsubscriber = null; + _log = PluginLogHelper.GetLog(pi); + try + { + _provider = pi.GetIpcProvider(label); + subscribe?.Add(Invoke); + _unsubscriber = subscribe?.Del; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + } + + public EventProvider(IDalamudPluginInterface pi, string label, Action> add, Action> del) + { + _unsubscriber = null; + _log = PluginLogHelper.GetLog(pi); + try + { + _provider = pi.GetIpcProvider(label); + add(this); + _unsubscriber = del; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + } + + /// + public void Invoke(T1 a, T2 b, T3 c) + { + try + { + _provider?.SendMessage(a, b, c); + } + catch (Exception e) + { + _log.Error($"Exception thrown on IPC event:\n{e}"); + } + } + + public void Dispose() + { + switch (_unsubscriber) + { + case Action> a: + a(Invoke); + break; + case Action> b: + b(this); + break; + } + + _unsubscriber = null; + _provider = null; + GC.SuppressFinalize(this); + } + + ~EventProvider() + => Dispose(); +} + +/// +public sealed class EventProvider : IDisposable +{ + private readonly IPluginLog _log; + private ICallGateProvider? _provider; + private Delegate? _unsubscriber; + + public EventProvider(IDalamudPluginInterface pi, string label, + (Action> Add, Action> Del)? subscribe = null) + { + _unsubscriber = null; + _log = PluginLogHelper.GetLog(pi); + try + { + _provider = pi.GetIpcProvider(label); + subscribe?.Add(Invoke); + _unsubscriber = subscribe?.Del; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + } + + public EventProvider(IDalamudPluginInterface pi, string label, Action> add, + Action> del) + { + _unsubscriber = null; + _log = PluginLogHelper.GetLog(pi); + try + { + _provider = pi.GetIpcProvider(label); + add(this); + _unsubscriber = del; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + } + + /// + public void Invoke(T1 a, T2 b, T3 c, T4 d) + { + try + { + _provider?.SendMessage(a, b, c, d); + } + catch (Exception e) + { + _log.Error($"Exception thrown on IPC event:\n{e}"); + } + } + + public void Dispose() + { + switch (_unsubscriber) + { + case Action> a: + a(Invoke); + break; + case Action> b: + b(this); + break; + } + + _unsubscriber = null; + _provider = null; + GC.SuppressFinalize(this); + } + + ~EventProvider() + => Dispose(); +} + +/// +public sealed class EventProvider : IDisposable +{ + private readonly IPluginLog _log; + private ICallGateProvider? _provider; + private Delegate? _unsubscriber; + + public EventProvider(IDalamudPluginInterface pi, string label, + (Action> Add, Action> Del)? subscribe = null) + { + _unsubscriber = null; + _log = PluginLogHelper.GetLog(pi); + try + { + _provider = pi.GetIpcProvider(label); + subscribe?.Add(Invoke); + _unsubscriber = subscribe?.Del; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + } + + public EventProvider(IDalamudPluginInterface pi, string label, Action> add, + Action> del) + { + _unsubscriber = null; + _log = PluginLogHelper.GetLog(pi); + try + { + _provider = pi.GetIpcProvider(label); + add(this); + _unsubscriber = del; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + } + + /// + public void Invoke(T1 a, T2 b, T3 c, T4 d, T5 e) + { + try + { + _provider?.SendMessage(a, b, c, d, e); + } + catch (Exception ex) + { + _log.Error($"Exception thrown on IPC event:\n{ex}"); + } + } + + public void Dispose() + { + switch (_unsubscriber) + { + case Action> a: + a(Invoke); + break; + case Action> b: + b(this); + break; + } + + _unsubscriber = null; + _provider = null; + GC.SuppressFinalize(this); + } + + ~EventProvider() + => Dispose(); +} diff --git a/Penumbra.Api/Helpers/EventSubscriber.cs b/Penumbra.Api/Helpers/EventSubscriber.cs new file mode 100644 index 0000000..c8da3ca --- /dev/null +++ b/Penumbra.Api/Helpers/EventSubscriber.cs @@ -0,0 +1,582 @@ +using Dalamud.Plugin; +using Dalamud.Plugin.Ipc; +using Dalamud.Plugin.Services; + +namespace Penumbra.Api.Helpers; + +/// +/// Specialized disposable Subscriber for Events. +/// Subscriptions are wrapped to be individually exception-safe. +/// Can be enabled and disabled. +/// +public sealed class EventSubscriber : IDisposable +{ + private readonly string _label; + private readonly IPluginLog _log; + private readonly Dictionary _delegates = new(); + private ICallGateSubscriber? _subscriber; + private bool _disabled; + + public EventSubscriber(IDalamudPluginInterface pi, string label, params Action[] actions) + { + _label = label; + _log = PluginLogHelper.GetLog(pi); + try + { + _subscriber = pi.GetIpcSubscriber(label); + foreach (var action in actions) + Event += action; + + _disabled = false; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + /// Enable all currently subscribed actions registered with this EventSubscriber. + /// Does nothing if it is already enabled. + /// + public void Enable() + { + if (_disabled && _subscriber != null) + { + foreach (var action in _delegates.Values) + _subscriber.Subscribe(action); + + _disabled = false; + } + } + + /// + /// Disable all subscribed actions registered with this EventSubscriber. + /// Does nothing if it is already disabled. + /// Does not forget the actions, only disables them. + /// + public void Disable() + { + if (!_disabled) + { + if (_subscriber != null) + foreach (var action in _delegates.Values) + _subscriber.Unsubscribe(action); + + _disabled = true; + } + } + + /// + /// Add or remove an action to the IPC event, if it is valid. + /// + public event Action Event + { + add + { + if (_subscriber != null && !_delegates.ContainsKey(value)) + { + void Action() + { + try + { + value(); + } + catch (Exception e) + { + _log.Error($"Exception invoking IPC event {_label}:\n{e}"); + } + } + + if (_delegates.TryAdd(value, Action) && !_disabled) + _subscriber.Subscribe(Action); + } + } + remove + { + if (_subscriber != null && _delegates.Remove(value, out var action)) + _subscriber.Unsubscribe(action); + } + } + + public void Dispose() + { + Disable(); + _subscriber = null; + _delegates.Clear(); + } + + ~EventSubscriber() + => Dispose(); +} + +/// +public sealed class EventSubscriber : IDisposable +{ + private readonly string _label; + private readonly IPluginLog _log; + private readonly Dictionary, Action> _delegates = new(); + private ICallGateSubscriber? _subscriber; + private bool _disabled; + + public EventSubscriber(IDalamudPluginInterface pi, string label, params Action[] actions) + { + _label = label; + _log = PluginLogHelper.GetLog(pi); + try + { + _subscriber = pi.GetIpcSubscriber(label); + foreach (var action in actions) + Event += action; + + _disabled = false; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + public void Enable() + { + if (_disabled && _subscriber != null) + { + foreach (var action in _delegates.Values) + _subscriber.Subscribe(action); + + _disabled = false; + } + } + + /// + public void Disable() + { + if (!_disabled) + { + if (_subscriber != null) + foreach (var action in _delegates.Values) + _subscriber.Unsubscribe(action); + + _disabled = true; + } + } + + /// + public event Action Event + { + add + { + if (_subscriber != null && !_delegates.ContainsKey(value)) + { + void Action(T1 a) + { + try + { + value(a); + } + catch (Exception e) + { + _log.Error($"Exception invoking IPC event {_label}:\n{e}"); + } + } + + if (_delegates.TryAdd(value, Action) && !_disabled) + _subscriber.Subscribe(Action); + } + } + remove + { + if (_subscriber != null && _delegates.Remove(value, out var action)) + _subscriber.Unsubscribe(action); + } + } + + public void Dispose() + { + Disable(); + _subscriber = null; + _delegates.Clear(); + } + + ~EventSubscriber() + => Dispose(); +} + +/// +public sealed class EventSubscriber : IDisposable +{ + private readonly string _label; + private readonly IPluginLog _log; + private readonly Dictionary, Action> _delegates = new(); + private ICallGateSubscriber? _subscriber; + private bool _disabled; + + public EventSubscriber(IDalamudPluginInterface pi, string label, params Action[] actions) + { + _label = label; + _log = PluginLogHelper.GetLog(pi); + try + { + _subscriber = pi.GetIpcSubscriber(label); + foreach (var action in actions) + Event += action; + + _disabled = false; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + public void Enable() + { + if (_disabled && _subscriber != null) + { + foreach (var action in _delegates.Values) + _subscriber.Subscribe(action); + + _disabled = false; + } + } + + /// + public void Disable() + { + if (!_disabled) + { + if (_subscriber != null) + foreach (var action in _delegates.Values) + _subscriber.Unsubscribe(action); + + _disabled = true; + } + } + + /// + public event Action Event + { + add + { + if (_subscriber != null && !_delegates.ContainsKey(value)) + { + void Action(T1 a, T2 b) + { + try + { + value(a, b); + } + catch (Exception e) + { + _log.Error($"Exception invoking IPC event {_label}:\n{e}"); + } + } + + if (_delegates.TryAdd(value, Action) && !_disabled) + _subscriber.Subscribe(Action); + } + } + remove + { + if (_subscriber != null && _delegates.Remove(value, out var action)) + _subscriber.Unsubscribe(action); + } + } + + public void Dispose() + { + Disable(); + _subscriber = null; + _delegates.Clear(); + } + + ~EventSubscriber() + => Dispose(); +} + +/// +public sealed class EventSubscriber : IDisposable +{ + private readonly string _label; + private readonly IPluginLog _log; + private readonly Dictionary, Action> _delegates = []; + private ICallGateSubscriber? _subscriber; + private bool _disabled; + + public EventSubscriber(IDalamudPluginInterface pi, string label, params Action[] actions) + { + _label = label; + _log = PluginLogHelper.GetLog(pi); + try + { + _subscriber = pi.GetIpcSubscriber(label); + foreach (var action in actions) + Event += action; + + _disabled = false; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + public void Enable() + { + if (_disabled && _subscriber != null) + { + foreach (var action in _delegates.Values) + _subscriber.Subscribe(action); + + _disabled = false; + } + } + + /// + public void Disable() + { + if (!_disabled) + { + if (_subscriber != null) + foreach (var action in _delegates.Values) + _subscriber.Unsubscribe(action); + + _disabled = true; + } + } + + /// + public event Action Event + { + add + { + if (_subscriber != null && !_delegates.ContainsKey(value)) + { + void Action(T1 a, T2 b, T3 c) + { + try + { + value(a, b, c); + } + catch (Exception e) + { + _log.Error($"Exception invoking IPC event {_label}:\n{e}"); + } + } + + if (_delegates.TryAdd(value, Action) && !_disabled) + _subscriber.Subscribe(Action); + } + } + remove + { + if (_subscriber != null && _delegates.Remove(value, out var action)) + _subscriber.Unsubscribe(action); + } + } + + public void Dispose() + { + Disable(); + _subscriber = null; + _delegates.Clear(); + } + + ~EventSubscriber() + => Dispose(); +} + +/// +public sealed class EventSubscriber : IDisposable +{ + private readonly string _label; + private readonly IPluginLog _log; + private readonly Dictionary, Action> _delegates = new(); + private ICallGateSubscriber? _subscriber; + private bool _disabled; + + public EventSubscriber(IDalamudPluginInterface pi, string label, params Action[] actions) + { + _label = label; + _log = PluginLogHelper.GetLog(pi); + try + { + _subscriber = pi.GetIpcSubscriber(label); + foreach (var action in actions) + Event += action; + + _disabled = false; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + public void Enable() + { + if (_disabled && _subscriber != null) + { + foreach (var action in _delegates.Values) + _subscriber.Subscribe(action); + + _disabled = false; + } + } + + /// + public void Disable() + { + if (!_disabled) + { + if (_subscriber != null) + foreach (var action in _delegates.Values) + _subscriber.Unsubscribe(action); + + _disabled = true; + } + } + + /// + public event Action Event + { + add + { + if (_subscriber != null && !_delegates.ContainsKey(value)) + { + void Action(T1 a, T2 b, T3 c, T4 d) + { + try + { + value(a, b, c, d); + } + catch (Exception e) + { + _log.Error($"Exception invoking IPC event {_label}:\n{e}"); + } + } + + if (_delegates.TryAdd(value, Action) && !_disabled) + _subscriber.Subscribe(Action); + } + } + remove + { + if (_subscriber != null && _delegates.Remove(value, out var action)) + _subscriber.Unsubscribe(action); + } + } + + public void Dispose() + { + Disable(); + _subscriber = null; + _delegates.Clear(); + } + + ~EventSubscriber() + => Dispose(); +} + +/// +public sealed class EventSubscriber : IDisposable +{ + private readonly string _label; + private readonly IPluginLog _log; + private readonly Dictionary, Action> _delegates = new(); + private ICallGateSubscriber? _subscriber; + private bool _disabled; + + public EventSubscriber(IDalamudPluginInterface pi, string label, params Action[] actions) + { + _label = label; + _log = PluginLogHelper.GetLog(pi); + try + { + _subscriber = pi.GetIpcSubscriber(label); + foreach (var action in actions) + Event += action; + + _disabled = false; + } + catch (Exception e) + { + _log.Error($"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + public void Enable() + { + if (_disabled && _subscriber != null) + { + foreach (var action in _delegates.Values) + _subscriber.Subscribe(action); + + _disabled = false; + } + } + + /// + public void Disable() + { + if (!_disabled) + { + if (_subscriber != null) + foreach (var action in _delegates.Values) + _subscriber.Unsubscribe(action); + + _disabled = true; + } + } + + /// + public event Action Event + { + add + { + if (_subscriber != null && !_delegates.ContainsKey(value)) + { + void Action(T1 a, T2 b, T3 c, T4 d, T5 e) + { + try + { + value(a, b, c, d, e); + } + catch (Exception ex) + { + _log.Error($"Exception invoking IPC event {_label}:\n{ex}"); + } + } + + if (_delegates.TryAdd(value, Action) && !_disabled) + _subscriber.Subscribe(Action); + } + } + remove + { + if (_subscriber != null && _delegates.Remove(value, out var action)) + _subscriber.Unsubscribe(action); + } + } + + public void Dispose() + { + Disable(); + _subscriber = null; + _delegates.Clear(); + } + + ~EventSubscriber() + => Dispose(); +} diff --git a/Penumbra.Api/Helpers/FuncProvider.cs b/Penumbra.Api/Helpers/FuncProvider.cs new file mode 100644 index 0000000..b70bd15 --- /dev/null +++ b/Penumbra.Api/Helpers/FuncProvider.cs @@ -0,0 +1,223 @@ +using Dalamud.Plugin; +using Dalamud.Plugin.Ipc; + +namespace Penumbra.Api.Helpers; + +/// +/// Specialized disposable Provider for Funcs. +/// +public sealed class FuncProvider : IDisposable +{ + private ICallGateProvider? _provider; + + public FuncProvider(IDalamudPluginInterface pi, string label, Func func) + { + try + { + _provider = pi.GetIpcProvider(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + + _provider?.RegisterFunc(func); + } + + public void Dispose() + { + _provider?.UnregisterFunc(); + _provider = null; + GC.SuppressFinalize(this); + } + + ~FuncProvider() + => Dispose(); +} + +/// +public sealed class FuncProvider : IDisposable +{ + private ICallGateProvider? _provider; + + public FuncProvider(IDalamudPluginInterface pi, string label, Func func) + { + try + { + _provider = pi.GetIpcProvider(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + + _provider?.RegisterFunc(func); + } + + public void Dispose() + { + _provider?.UnregisterFunc(); + _provider = null; + GC.SuppressFinalize(this); + } + + ~FuncProvider() + => Dispose(); +} + +/// +public sealed class FuncProvider : IDisposable +{ + private ICallGateProvider? _provider; + + public FuncProvider(IDalamudPluginInterface pi, string label, Func func) + { + try + { + _provider = pi.GetIpcProvider(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + + _provider?.RegisterFunc(func); + } + + public void Dispose() + { + _provider?.UnregisterFunc(); + _provider = null; + GC.SuppressFinalize(this); + } + + ~FuncProvider() + => Dispose(); +} + +/// +public sealed class FuncProvider : IDisposable +{ + private ICallGateProvider? _provider; + + public FuncProvider(IDalamudPluginInterface pi, string label, Func func) + { + try + { + _provider = pi.GetIpcProvider(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + + _provider?.RegisterFunc(func); + } + + public void Dispose() + { + _provider?.UnregisterFunc(); + _provider = null; + GC.SuppressFinalize(this); + } + + ~FuncProvider() + => Dispose(); +} + +/// +public sealed class FuncProvider : IDisposable +{ + private ICallGateProvider? _provider; + + public FuncProvider(IDalamudPluginInterface pi, string label, Func func) + { + try + { + _provider = pi.GetIpcProvider(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + + _provider?.RegisterFunc(func); + } + + public void Dispose() + { + _provider?.UnregisterFunc(); + _provider = null; + GC.SuppressFinalize(this); + } + + ~FuncProvider() + => Dispose(); +} + +/// +public sealed class FuncProvider : IDisposable +{ + private ICallGateProvider? _provider; + + public FuncProvider(IDalamudPluginInterface pi, string label, Func func) + { + try + { + _provider = pi.GetIpcProvider(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + + _provider?.RegisterFunc(func); + } + + public void Dispose() + { + _provider?.UnregisterFunc(); + _provider = null; + GC.SuppressFinalize(this); + } + + ~FuncProvider() + => Dispose(); +} + +/// +public sealed class FuncProvider : IDisposable +{ + private ICallGateProvider? _provider; + + public FuncProvider(IDalamudPluginInterface pi, string label, Func func) + { + try + { + _provider = pi.GetIpcProvider(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Provider for {label}\n{e}"); + _provider = null; + } + + _provider?.RegisterFunc(func); + } + + public void Dispose() + { + _provider?.UnregisterFunc(); + _provider = null; + GC.SuppressFinalize(this); + } + + ~FuncProvider() + => Dispose(); +} diff --git a/Penumbra.Api/Helpers/FuncSubscriber.cs b/Penumbra.Api/Helpers/FuncSubscriber.cs new file mode 100644 index 0000000..6bddf3e --- /dev/null +++ b/Penumbra.Api/Helpers/FuncSubscriber.cs @@ -0,0 +1,217 @@ +using Dalamud.Plugin; +using Dalamud.Plugin.Ipc; +using Dalamud.Plugin.Ipc.Exceptions; + +namespace Penumbra.Api.Helpers; + +/// +/// Specialized subscriber only allowing to invoke functions with a return. +/// +public class FuncSubscriber +{ + private readonly string _label; + private readonly ICallGateSubscriber? _subscriber; + + /// Whether the subscriber could successfully be created. + public bool Valid + => _subscriber != null; + + /// + protected FuncSubscriber(IDalamudPluginInterface pi, string label) + { + _label = label; + try + { + _subscriber = pi.GetIpcSubscriber(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// Invoke the function. See the source of the subscriber for details. + protected TRet Invoke() + => _subscriber != null ? _subscriber.InvokeFunc() : throw new IpcNotReadyError(_label); +} + +/// +public class FuncSubscriber +{ + private readonly string _label; + private readonly ICallGateSubscriber? _subscriber; + + /// + public bool Valid + => _subscriber != null; + + /// + protected FuncSubscriber(IDalamudPluginInterface pi, string label) + { + _label = label; + try + { + _subscriber = pi.GetIpcSubscriber(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + protected TRet Invoke(T1 a) + => _subscriber != null ? _subscriber.InvokeFunc(a) : throw new IpcNotReadyError(_label); +} + +/// +public class FuncSubscriber +{ + private readonly string _label; + private readonly ICallGateSubscriber? _subscriber; + + /// + public bool Valid + => _subscriber != null; + + /// + protected FuncSubscriber(IDalamudPluginInterface pi, string label) + { + _label = label; + try + { + _subscriber = pi.GetIpcSubscriber(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + protected TRet Invoke(T1 a, T2 b) + => _subscriber != null ? _subscriber.InvokeFunc(a, b) : throw new IpcNotReadyError(_label); +} + +/// +public class FuncSubscriber +{ + private readonly string _label; + private readonly ICallGateSubscriber? _subscriber; + + /// + public bool Valid + => _subscriber != null; + + /// + protected FuncSubscriber(IDalamudPluginInterface pi, string label) + { + _label = label; + try + { + _subscriber = pi.GetIpcSubscriber(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + protected TRet Invoke(T1 a, T2 b, T3 c) + => _subscriber != null ? _subscriber.InvokeFunc(a, b, c) : throw new IpcNotReadyError(_label); +} + +/// +public class FuncSubscriber +{ + private readonly string _label; + private readonly ICallGateSubscriber? _subscriber; + + /// + public bool Valid + => _subscriber != null; + + /// + protected FuncSubscriber(IDalamudPluginInterface pi, string label) + { + _label = label; + try + { + _subscriber = pi.GetIpcSubscriber(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + protected TRet Invoke(T1 a, T2 b, T3 c, T4 d) + => _subscriber != null ? _subscriber.InvokeFunc(a, b, c, d) : throw new IpcNotReadyError(_label); +} + +/// +public class FuncSubscriber +{ + private readonly string _label; + private readonly ICallGateSubscriber? _subscriber; + + /// + public bool Valid + => _subscriber != null; + + /// + protected FuncSubscriber(IDalamudPluginInterface pi, string label) + { + _label = label; + try + { + _subscriber = pi.GetIpcSubscriber(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + protected TRet Invoke(T1 a, T2 b, T3 c, T4 d, T5 e) + => _subscriber != null ? _subscriber.InvokeFunc(a, b, c, d, e) : throw new IpcNotReadyError(_label); +} + +/// +public class FuncSubscriber +{ + private readonly string _label; + private readonly ICallGateSubscriber? _subscriber; + + /// + public bool Valid + => _subscriber != null; + + /// + protected FuncSubscriber(IDalamudPluginInterface pi, string label) + { + _label = label; + try + { + _subscriber = pi.GetIpcSubscriber(label); + } + catch (Exception e) + { + PluginLogHelper.WriteError(pi, $"Error registering IPC Subscriber for {label}\n{e}"); + _subscriber = null; + } + } + + /// + protected TRet Invoke(T1 a, T2 b, T3 c, T4 d, T5 e, T6 f) + => _subscriber != null ? _subscriber.InvokeFunc(a, b, c, d, e, f) : throw new IpcNotReadyError(_label); +} diff --git a/Penumbra.Api/Helpers/PluginLogHelper.cs b/Penumbra.Api/Helpers/PluginLogHelper.cs new file mode 100644 index 0000000..7ea8283 --- /dev/null +++ b/Penumbra.Api/Helpers/PluginLogHelper.cs @@ -0,0 +1,26 @@ +using Dalamud.IoC; +using Dalamud.Plugin; +using Dalamud.Plugin.Services; + +namespace Penumbra.Api.Helpers; + +internal class PluginLogHelper +{ + [PluginService] + private static IPluginLog? _log { get; set; } + + private PluginLogHelper(IDalamudPluginInterface pi) + => pi.Inject(this); + + public static void WriteError(IDalamudPluginInterface pi, string errorMessage) + => GetLog(pi).Error(errorMessage); + + public static IPluginLog GetLog(IDalamudPluginInterface pi) + { + if (_log != null) + return _log; + + _ = new PluginLogHelper(pi); + return _log!; + } +} diff --git a/Penumbra.Api/IpcSubscribers/Collection.cs b/Penumbra.Api/IpcSubscribers/Collection.cs new file mode 100644 index 0000000..12358af --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/Collection.cs @@ -0,0 +1,154 @@ +using Dalamud.Plugin; +using Penumbra.Api.Api; +using Penumbra.Api.Enums; +using Penumbra.Api.Helpers; + +namespace Penumbra.Api.IpcSubscribers; + +/// +public sealed class GetCollections(IDalamudPluginInterface pi) + : FuncSubscriber>(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetCollections)}.V5"; + + /// + public new Dictionary Invoke() + => base.Invoke(); + + /// Create a provider. + public static FuncProvider> Provider(IDalamudPluginInterface pi, IPenumbraApiCollection api) + => new(pi, Label, api.GetCollections); +} + +/// +public sealed class GetCollectionsByIdentifier(IDalamudPluginInterface pi) + : FuncSubscriber>(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetCollectionsByIdentifier)}"; + + /// + public new List<(Guid Id, string Name)> Invoke(string name) + => base.Invoke(name); + + /// Create a provider. + public static FuncProvider> Provider(IDalamudPluginInterface pi, IPenumbraApiCollection api) + => new(pi, Label, api.GetCollectionsByIdentifier); +} + +/// +public sealed class GetChangedItemsForCollection(IDalamudPluginInterface pi) + : FuncSubscriber>(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetChangedItemsForCollection)}"; + + /// + public new Dictionary Invoke(Guid collectionId) + => base.Invoke(collectionId); + + /// Create a provider. + public static FuncProvider> Provider(IDalamudPluginInterface pi, IPenumbraApiCollection api) + => new(pi, Label, api.GetChangedItemsForCollection); +} + +/// +public sealed class GetCollection(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetCollection)}"; + + /// + public (Guid Id, string Name)? Invoke(ApiCollectionType type) + => Invoke((byte)type); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiCollection api) + => new(pi, Label, b => api.GetCollection((ApiCollectionType)b)); +} + +/// +public sealed class GetCollectionForObject(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetCollectionForObject)}.V5"; + + /// + public new (bool ObjectValid, bool IndividualSet, (Guid Id, string Name) EffectiveCollection) Invoke(int gameObjectIdx) + => base.Invoke(gameObjectIdx); + + /// Create a provider. + public static FuncProvider + Provider(IDalamudPluginInterface pi, IPenumbraApiCollection api) + => new(pi, Label, api.GetCollectionForObject); +} + +/// +public sealed class SetCollection(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(SetCollection)}"; + + /// + public (PenumbraApiEc, (Guid Id, string Name)? OldCollection) Invoke(ApiCollectionType type, Guid? collectionId, + bool allowCreateNew = true, bool allowDelete = true) + { + var (ec, pair) = Invoke((byte)type, collectionId, allowCreateNew, allowDelete); + return ((PenumbraApiEc)ec, pair); + } + + /// Create a provider. + public static FuncProvider + Provider(IDalamudPluginInterface pi, IPenumbraApiCollection api) + => new(pi, Label, (t, g, a, b) => + { + var (ret, collection) = api.SetCollection((ApiCollectionType)t, g, a, b); + return ((int)ret, collection); + }); +} + +/// +public sealed class SetCollectionForObject(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(SetCollectionForObject)}.V5"; + + /// + public new (PenumbraApiEc, (Guid Id, string Name)? OldCollection) Invoke(int gameObjectIdx, Guid? collectionId, bool allowCreateNew = true, + bool allowDelete = true) + { + var (ec, pair) = base.Invoke(gameObjectIdx, collectionId, allowCreateNew, allowDelete); + return ((PenumbraApiEc)ec, pair); + } + + /// Create a provider. + public static FuncProvider + Provider(IDalamudPluginInterface pi, IPenumbraApiCollection api) + => new(pi, Label, (i, g, a, b) => + { + var (ret, collection) = api.SetCollectionForObject(i, g, a, b); + return ((int)ret, collection); + }); +} + +/// +public sealed class CheckCurrentChangedItemFunc(IDalamudPluginInterface pi) + : FuncSubscriber>(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(CheckCurrentChangedItemFunc)}"; + + /// + public new Func Invoke() + => base.Invoke(); + + /// Create a provider. + public static FuncProvider> + Provider(IDalamudPluginInterface pi, IPenumbraApiCollection api) + => new(pi, Label, api.CheckCurrentChangedItemFunc); +} diff --git a/Penumbra.Api/IpcSubscribers/Editing.cs b/Penumbra.Api/IpcSubscribers/Editing.cs new file mode 100644 index 0000000..753f342 --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/Editing.cs @@ -0,0 +1,38 @@ +using Dalamud.Plugin; +using Penumbra.Api.Api; +using Penumbra.Api.Enums; +using Penumbra.Api.Helpers; + +namespace Penumbra.Api.IpcSubscribers; + +/// +public sealed class ConvertTextureFile(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(ConvertTextureFile)}"; + + /// + public Task Invoke(string inputFile, string outputFile, TextureType textureType, bool mipMaps = true) + => Invoke(inputFile, outputFile, (int)textureType, mipMaps); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiEditing api) + => new(pi, Label, (a, b, c, d) => api.ConvertTextureFile(a, b, (TextureType)c, d)); +} + +/// +public sealed class ConvertTextureData(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(ConvertTextureData)}"; + + /// + public Task Invoke(byte[] rgbaData, int width, string outputFile, TextureType textureType, bool mipMaps = true) + => Invoke(rgbaData, width, outputFile, (int)textureType, mipMaps); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiEditing api) + => new(pi, Label, (a, b, c, d, e) => api.ConvertTextureData(a, b, c, (TextureType)d, e)); +} diff --git a/Penumbra.Api/IpcSubscribers/GameState.cs b/Penumbra.Api/IpcSubscribers/GameState.cs new file mode 100644 index 0000000..7f14489 --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/GameState.cs @@ -0,0 +1,100 @@ +using Dalamud.Plugin; +using Penumbra.Api.Api; +using Penumbra.Api.Enums; +using Penumbra.Api.Helpers; + +namespace Penumbra.Api.IpcSubscribers; + +/// +public sealed class GetDrawObjectInfo(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetDrawObjectInfo)}.V5"; + + /// + public new (nint GameObject, (Guid Id, string Name) AssociatedCollection) Invoke(nint drawObjectAddress) + => base.Invoke(drawObjectAddress); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiGameState api) + => new(pi, Label, api.GetDrawObjectInfo); +} + +/// +public sealed class GetCutsceneParentIndex(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetCutsceneParentIndex)}"; + + /// + public new int Invoke(int actorIndex) + => base.Invoke(actorIndex); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiGameState api) + => new(pi, Label, api.GetCutsceneParentIndex); +} + +/// +public sealed class SetCutsceneParentIndex(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(SetCutsceneParentIndex)}.V5"; + + /// + public new PenumbraApiEc Invoke(int copyIdx, int newParentIdx) + => (PenumbraApiEc)base.Invoke(copyIdx, newParentIdx); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiGameState api) + => new(pi, Label, (a, b) => (int) api.SetCutsceneParentIndex(a, b)); +} + +/// +public static class CreatingCharacterBase +{ + /// The label. + public const string Label = $"Penumbra.{nameof(CreatingCharacterBase)}.V5"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, + params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi, IPenumbraApiGameState api) + => new(pi, Label, t => api.CreatingCharacterBase += t.Invoke, t => api.CreatingCharacterBase -= t.Invoke); +} + +/// +public static class CreatedCharacterBase +{ + /// The label. + public const string Label = $"Penumbra.{nameof(CreatedCharacterBase)}.V5"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi, IPenumbraApiGameState api) + => new(pi, Label, t => api.CreatedCharacterBase += t.Invoke, t => api.CreatedCharacterBase -= t.Invoke); +} + +/// +public static class GameObjectResourcePathResolved +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GameObjectResourcePathResolved)}"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi, IPenumbraApiGameState api) + => new(pi, Label, t => api.GameObjectResourceResolved += t.Invoke, t => api.GameObjectResourceResolved -= t.Invoke); +} diff --git a/Penumbra.Api/IpcSubscribers/Legacy/Collection.cs b/Penumbra.Api/IpcSubscribers/Legacy/Collection.cs new file mode 100644 index 0000000..824abd0 --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/Legacy/Collection.cs @@ -0,0 +1,99 @@ +using Dalamud.Plugin; +using Penumbra.Api.Enums; +using Penumbra.Api.Helpers; + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + +namespace Penumbra.Api.IpcSubscribers.Legacy; + +public sealed class GetCollections(IDalamudPluginInterface pi) + : FuncSubscriber>(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(GetCollections)}"; + + public new IList Invoke() + => base.Invoke(); +} + +public sealed class GetCurrentCollectionName(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(GetCurrentCollectionName)}"; + + public new string Invoke() + => base.Invoke(); +} + +public sealed class GetDefaultCollectionName(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(GetDefaultCollectionName)}"; + + public new string Invoke() + => base.Invoke(); +} + +public sealed class GetInterfaceCollectionName(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(GetInterfaceCollectionName)}"; + + public new string Invoke() + => base.Invoke(); +} + +public sealed class GetCharacterCollectionName(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(GetCharacterCollectionName)}"; + + public new (string, bool) Invoke(string characterName) + => base.Invoke(characterName); +} + +public sealed class GetChangedItems(IDalamudPluginInterface pi) + : FuncSubscriber>(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(GetChangedItems)}"; + + public new IReadOnlyDictionary Invoke(string collectionName) + => base.Invoke(collectionName); +} + +public sealed class GetCollectionForType(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(GetCollectionForType)}"; + + public new string Invoke(ApiCollectionType collectionType) + => base.Invoke(collectionType); +} + +public sealed class SetCollectionForType(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(SetCollectionForType)}"; + + public new (PenumbraApiEc ErrorCode, string OldCollectionName) Invoke(ApiCollectionType collectionType, string collectionName, + bool allowCreateNew = true, bool allowDelete = true) + => base.Invoke(collectionType, collectionName, allowCreateNew, allowDelete); +} + +public sealed class GetCollectionForObject(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(GetCollectionForObject)}"; + + public new (bool ObjectValid, bool IndividualSet, string CollectionName) Invoke(int objectIndex) + => base.Invoke(objectIndex); +} + +public sealed class SetCollectionForObject(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(SetCollectionForObject)}"; + + public new (PenumbraApiEc ErrorCode, string OldCollectionName) Invoke(int objectIndex, string collectionName, bool allowCreateNew = true, + bool allowDelete = true) + => base.Invoke(objectIndex, collectionName, allowCreateNew, allowDelete); +} diff --git a/Penumbra.Api/IpcSubscribers/Legacy/GameState.cs b/Penumbra.Api/IpcSubscribers/Legacy/GameState.cs new file mode 100644 index 0000000..7e36389 --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/Legacy/GameState.cs @@ -0,0 +1,43 @@ +using Dalamud.Plugin; +using Penumbra.Api.Enums; +using Penumbra.Api.Helpers; + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + +namespace Penumbra.Api.IpcSubscribers.Legacy; + +public sealed class GetDrawObjectInfo(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(GetDrawObjectInfo)}"; + + public new (nint GameObjectAddress, string CollectionName) Invoke(nint drawObjectAddress) + => base.Invoke(drawObjectAddress); +} + +public sealed class SetCutsceneParentIndex(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(SetCutsceneParentIndex)}"; + + public new PenumbraApiEc Invoke(int cutsceneObjectIndex, int newParentIndex) + => base.Invoke(cutsceneObjectIndex, newParentIndex); +} + +public static class CreatingCharacterBase +{ + public const string Label = $"Penumbra.{nameof(CreatingCharacterBase)}"; + + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, + params Action[] actions) + => new(pi, Label, actions); +} + +public static class CreatedCharacterBase +{ + public const string Label = $"Penumbra.{nameof(CreatedCharacterBase)}"; + + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, + params Action[] actions) + => new(pi, Label, actions); +} diff --git a/Penumbra.Api/IpcSubscribers/Legacy/Meta.cs b/Penumbra.Api/IpcSubscribers/Legacy/Meta.cs new file mode 100644 index 0000000..bed77d3 --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/Legacy/Meta.cs @@ -0,0 +1,24 @@ +using Dalamud.Plugin; +using Penumbra.Api.Helpers; + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + +namespace Penumbra.Api.IpcSubscribers.Legacy; + +public sealed class GetMetaManipulations(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(GetMetaManipulations)}"; + + public new string Invoke(string objectName) + => base.Invoke(objectName); +} + +public sealed class GetGameObjectMetaManipulations(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(GetGameObjectMetaManipulations)}"; + + public new string Invoke(int objectIndex) + => base.Invoke(objectIndex); +} diff --git a/Penumbra.Api/IpcSubscribers/Legacy/ModSettings.cs b/Penumbra.Api/IpcSubscribers/Legacy/ModSettings.cs new file mode 100644 index 0000000..a36092e --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/Legacy/ModSettings.cs @@ -0,0 +1,92 @@ +using Dalamud.Plugin; +using Penumbra.Api.Api; +using Penumbra.Api.Enums; +using Penumbra.Api.Helpers; + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + +namespace Penumbra.Api.IpcSubscribers.Legacy; + +using CurrentSettings = ValueTuple>, bool)?>; + +public sealed class GetAvailableModSettings(IDalamudPluginInterface pi) + : FuncSubscriber, GroupType)>?>(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(GetAvailableModSettings)}"; + + public new IDictionary, GroupType)>? Invoke(string modDirectory, string modName = "") + => base.Invoke(modDirectory, modName); +} + +public sealed class GetCurrentModSettings(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(GetCurrentModSettings)}"; + + public new CurrentSettings Invoke(string collectionName, string modDirectory, string modName = "", bool ignoreInheritance = false) + => base.Invoke(collectionName, modDirectory, modName, ignoreInheritance); +} + +public sealed class TryInheritMod(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(TryInheritMod)}"; + + public PenumbraApiEc Invoke(string collectionName, string modDirectory, bool inherit, string modName = "") + => Invoke(collectionName, modDirectory, modName, inherit); +} + +public sealed class TrySetMod(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(TrySetMod)}"; + + public PenumbraApiEc Invoke(string collectionName, string modDirectory, bool enabled, string modName = "") + => Invoke(collectionName, modDirectory, modName, enabled); +} + +public sealed class TrySetModPriority(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(TrySetModPriority)}"; + + public PenumbraApiEc Invoke(string collectionName, string modDirectory, int priority, string modName = "") + => Invoke(collectionName, modDirectory, modName, priority); +} + +public sealed class TrySetModSetting(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(TrySetModSetting)}"; + + public new PenumbraApiEc Invoke(string collectionName, string modDirectory, string groupName, string setting, string modName = "") + => base.Invoke(collectionName, modDirectory, modName, groupName, setting); +} + +public sealed class TrySetModSettings(IDalamudPluginInterface pi) + : FuncSubscriber, PenumbraApiEc>(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(TrySetModSettings)}"; + + public PenumbraApiEc Invoke(string collectionName, string modDirectory, string groupName, IReadOnlyList settings, + string modName = "") + => Invoke(collectionName, modDirectory, modName, groupName, settings); +} + +public static class ModSettingChanged +{ + public const string Label = $"Penumbra.{nameof(ModSettingChanged)}.V5"; + + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, + params Action[] actions) + => new(pi, Label, actions); +} + +public sealed class CopyModSettings(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(CopyModSettings)}"; + + public new PenumbraApiEc Invoke(string collectionName, string modDirectoryFrom, string modDirectoryTo) + => base.Invoke(collectionName, modDirectoryFrom, modDirectoryTo); +} diff --git a/Penumbra.Api/IpcSubscribers/Legacy/Mods.cs b/Penumbra.Api/IpcSubscribers/Legacy/Mods.cs new file mode 100644 index 0000000..e94e032 --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/Legacy/Mods.cs @@ -0,0 +1,70 @@ +using Dalamud.Plugin; +using Penumbra.Api.Enums; +using Penumbra.Api.Helpers; + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + +namespace Penumbra.Api.IpcSubscribers.Legacy; + +public sealed class GetMods(IDalamudPluginInterface pi) + : FuncSubscriber>(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(GetMods)}"; + + public new IList<(string, string)> Invoke() + => base.Invoke(); +} + +public sealed class ReloadMod(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(ReloadMod)}"; + + public new PenumbraApiEc Invoke(string modDirectory, string modName = "") + => base.Invoke(modDirectory, modName); +} + +public sealed class InstallMod(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(InstallMod)}"; + + public new PenumbraApiEc Invoke(string modDirectory) + => base.Invoke(modDirectory); +} + +public sealed class AddMod(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(AddMod)}"; + + public new PenumbraApiEc Invoke(string modDirectory) + => base.Invoke(modDirectory); +} + +public sealed class DeleteMod(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(DeleteMod)}"; + + public new PenumbraApiEc Invoke(string modDirectory, string modName = "") + => base.Invoke(modDirectory, modName); +} + +public sealed class GetModPath(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(GetModPath)}"; + + public new (PenumbraApiEc ErrorCode, string Path, bool IsDefault) Invoke(string modDirectory, string modName = "") + => base.Invoke(modDirectory, modName); +} + +public sealed class SetModPath(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(SetModPath)}"; + + public new PenumbraApiEc Invoke(string modDirectory, string newPath, string modName = "") + => base.Invoke(modDirectory, modName, newPath); +} diff --git a/Penumbra.Api/IpcSubscribers/Legacy/PluginState.cs b/Penumbra.Api/IpcSubscribers/Legacy/PluginState.cs new file mode 100644 index 0000000..5107ddd --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/Legacy/PluginState.cs @@ -0,0 +1,15 @@ +using Dalamud.Plugin; +using Penumbra.Api.Helpers; + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + +namespace Penumbra.Api.IpcSubscribers.Legacy; + +public class ApiVersions(IDalamudPluginInterface pi) + : FuncSubscriber<(int Breaking, int Features)>(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(ApiVersions)}"; + + public new (int Breaking, int Features) Invoke() + => base.Invoke(); +} diff --git a/Penumbra.Api/IpcSubscribers/Legacy/Redraw.cs b/Penumbra.Api/IpcSubscribers/Legacy/Redraw.cs new file mode 100644 index 0000000..ba42cbf --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/Legacy/Redraw.cs @@ -0,0 +1,44 @@ +using Dalamud.Game.ClientState.Objects.Types; +using Dalamud.Plugin; +using Penumbra.Api.Enums; +using Penumbra.Api.Helpers; + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + +namespace Penumbra.Api.IpcSubscribers.Legacy; + +public sealed class RedrawAll(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(RedrawAll)}"; + + public new void Invoke(RedrawType type) + => base.Invoke(type); +} + +public sealed class RedrawObject(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(RedrawObject)}"; + + public new void Invoke(IGameObject gameObject, RedrawType type = RedrawType.Redraw) + => base.Invoke(gameObject, type); +} + +public sealed class RedrawObjectByIndex(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(RedrawObjectByIndex)}"; + + public new void Invoke(int gameObjectIndex, RedrawType type = RedrawType.Redraw) + => base.Invoke(gameObjectIndex, type); +} + +public sealed class RedrawObjectByName(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(RedrawObjectByName)}"; + + public new void Invoke(string gameObjectName, RedrawType type = RedrawType.Redraw) + => base.Invoke(gameObjectName, type); +} diff --git a/Penumbra.Api/IpcSubscribers/Legacy/Resolve.cs b/Penumbra.Api/IpcSubscribers/Legacy/Resolve.cs new file mode 100644 index 0000000..598bbf7 --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/Legacy/Resolve.cs @@ -0,0 +1,24 @@ +using Dalamud.Plugin; +using Penumbra.Api.Helpers; + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + +namespace Penumbra.Api.IpcSubscribers.Legacy; + +public sealed class ResolveCharacterPath(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(ResolveCharacterPath)}"; + + public new string Invoke(string gamePath, string characterName) + => base.Invoke(gamePath, characterName); +} + +public sealed class ReverseResolvePath(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(ReverseResolvePath)}"; + + public new string Invoke(string gamePath, string characterName) + => base.Invoke(gamePath, characterName); +} diff --git a/Penumbra.Api/IpcSubscribers/Legacy/ResourceTree.cs b/Penumbra.Api/IpcSubscribers/Legacy/ResourceTree.cs new file mode 100644 index 0000000..255d58c --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/Legacy/ResourceTree.cs @@ -0,0 +1,83 @@ +using Dalamud.Plugin; +using Penumbra.Api.Enums; +using Penumbra.Api.Helpers; +using ResourceType = Penumbra.Api.Enums.ResourceType; + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + +namespace Penumbra.Api.IpcSubscribers.Legacy; + +public sealed class GetGameObjectResourcePaths(IDalamudPluginInterface pi) + : FuncSubscriber?[]>(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(GetGameObjectResourcePaths)}"; + + public new IReadOnlyDictionary?[] Invoke(params ushort[] objectIndices) + => base.Invoke(objectIndices); +} + +public sealed class GetPlayerResourcePaths(IDalamudPluginInterface pi) + : FuncSubscriber>>(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(GetPlayerResourcePaths)}"; + + public new IReadOnlyDictionary> Invoke() + => base.Invoke(); +} + +public sealed class GetGameObjectResourcesOfType(IDalamudPluginInterface pi) + : FuncSubscriber?[]>(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(GetGameObjectResourcesOfType)}"; + + public new IReadOnlyDictionary?[] Invoke(ResourceType type, bool withUiData = false, + params ushort[] indices) + => base.Invoke(type, withUiData, indices); +} + +public sealed class GetPlayerResourcesOfType(IDalamudPluginInterface pi) + : FuncSubscriber>>(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(GetPlayerResourcesOfType)}"; + + public new IReadOnlyDictionary> Invoke(ResourceType type, + bool withUiData = false) + => base.Invoke(type, withUiData); +} + +public sealed class GetGameObjectResourceTrees(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(GetGameObjectResourceTrees)}"; + + public new ResourceTree?[] Invoke(bool withUiData = false, params ushort[] indices) + => base.Invoke(withUiData, indices); +} + +public sealed class GetPlayerResourceTrees(IDalamudPluginInterface pi) + : FuncSubscriber>(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(GetPlayerResourceTrees)}"; + + public new IReadOnlyDictionary Invoke(bool withUiData = false) + => base.Invoke(withUiData); +} + +public record ResourceTree +{ + public required string Name { get; init; } + public required ushort RaceCode { get; init; } + public required List Nodes { get; init; } +} + +public record ResourceNode +{ + public required ResourceType Type { get; init; } + public required ChangedItemIcon Icon { get; init; } + public required string? Name { get; init; } + public required string? GamePath { get; init; } + public required string ActualPath { get; init; } + public required nint ObjectAddress { get; init; } + public required nint ResourceHandle { get; init; } + public required List Children { get; init; } +} diff --git a/Penumbra.Api/IpcSubscribers/Legacy/Temporary.cs b/Penumbra.Api/IpcSubscribers/Legacy/Temporary.cs new file mode 100644 index 0000000..4bc27e7 --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/Legacy/Temporary.cs @@ -0,0 +1,88 @@ +using Dalamud.Plugin; +using Penumbra.Api.Enums; +using Penumbra.Api.Helpers; + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + +namespace Penumbra.Api.IpcSubscribers.Legacy; + +public sealed class CreateTemporaryCollection(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(CreateTemporaryCollection)}"; + + public new (PenumbraApiEc ErrorCode, string CollectionName) Invoke(string tag, string character, bool forceOverwrite) + => base.Invoke(tag, character, forceOverwrite); +} + +public sealed class RemoveTemporaryCollection(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(RemoveTemporaryCollection)}"; + + public new PenumbraApiEc Invoke(string collectionName) + => base.Invoke(collectionName); +} + +public sealed class CreateNamedTemporaryCollection(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(CreateNamedTemporaryCollection)}"; + + public new PenumbraApiEc Invoke(string collectionName) + => base.Invoke(collectionName); +} + +public sealed class RemoveTemporaryCollectionByName(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(RemoveTemporaryCollectionByName)}"; + + public new PenumbraApiEc Invoke(string collectionName) + => base.Invoke(collectionName); +} + +public sealed class AssignTemporaryCollection(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(AssignTemporaryCollection)}"; + + public new PenumbraApiEc Invoke(string collectionName, int gameObjectIndex, bool force) + => base.Invoke(collectionName, gameObjectIndex, force); +} + +public sealed class AddTemporaryModAll(IDalamudPluginInterface pi) + : FuncSubscriber, string, int, PenumbraApiEc>(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(AddTemporaryModAll)}"; + + public new PenumbraApiEc Invoke(string tag, Dictionary files, string meta, int priority = 0) + => base.Invoke(tag, files, meta, priority); +} + +public sealed class AddTemporaryMod(IDalamudPluginInterface pi) + : FuncSubscriber, string, int, PenumbraApiEc>(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(AddTemporaryMod)}"; + + public new PenumbraApiEc Invoke(string tag, string collectionName, Dictionary files, string meta, int priority = 0) + => base.Invoke(tag, collectionName, files, meta, priority); +} + +public sealed class RemoveTemporaryModAll(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(RemoveTemporaryModAll)}"; + + public new PenumbraApiEc Invoke(string tag, int priority = 0) + => base.Invoke(tag, priority); +} + +public sealed class RemoveTemporaryMod(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(RemoveTemporaryMod)}"; + + public new PenumbraApiEc Invoke(string tag, string collectionName, int priority = 0) + => base.Invoke(tag, collectionName, priority); +} diff --git a/Penumbra.Api/IpcSubscribers/Legacy/Ui.cs b/Penumbra.Api/IpcSubscribers/Legacy/Ui.cs new file mode 100644 index 0000000..34ee7b4 --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/Legacy/Ui.cs @@ -0,0 +1,16 @@ +using Dalamud.Plugin; +using Penumbra.Api.Enums; +using Penumbra.Api.Helpers; + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + +namespace Penumbra.Api.IpcSubscribers.Legacy; + +public sealed class OpenMainWindow(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(OpenMainWindow)}"; + + public new PenumbraApiEc Invoke(TabType tab, string modName, string modDirectory = "") + => base.Invoke(tab, modName, modDirectory); +} diff --git a/Penumbra.Api/IpcSubscribers/Meta.cs b/Penumbra.Api/IpcSubscribers/Meta.cs new file mode 100644 index 0000000..7cdea16 --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/Meta.cs @@ -0,0 +1,37 @@ +using Dalamud.Plugin; +using Penumbra.Api.Api; +using Penumbra.Api.Helpers; + +namespace Penumbra.Api.IpcSubscribers; + +/// +public sealed class GetPlayerMetaManipulations(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetPlayerMetaManipulations)}"; + + /// + public new string Invoke() + => base.Invoke(); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiMeta api) + => new(pi, Label, api.GetPlayerMetaManipulations); +} + +/// +public sealed class GetMetaManipulations(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetMetaManipulations)}.V5"; + + /// + public new string Invoke(int gameObjectIdx) + => base.Invoke(gameObjectIdx); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiMeta api) + => new(pi, Label, api.GetMetaManipulations); +} diff --git a/Penumbra.Api/IpcSubscribers/ModSettings.cs b/Penumbra.Api/IpcSubscribers/ModSettings.cs new file mode 100644 index 0000000..16422cb --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/ModSettings.cs @@ -0,0 +1,218 @@ +using Dalamud.Plugin; +using Penumbra.Api.Api; +using Penumbra.Api.Enums; +using Penumbra.Api.Helpers; + +namespace Penumbra.Api.IpcSubscribers; + +using CurrentSettingsBase = ValueTuple>, bool)?>; +using CurrentSettings = ValueTuple>, bool)?>; +using CurrentSettingsTempBase = ValueTuple>, bool, bool)?>; +using CurrentSettingsTemp = ValueTuple>, bool, bool)?>; + +/// +public sealed class GetAvailableModSettings(IDalamudPluginInterface pi) + : FuncSubscriber?>(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetAvailableModSettings)}.V5"; + + /// + public new IReadOnlyDictionary? Invoke(string modDirectory, string modName = "") + => AvailableModSettings.Create(base.Invoke(modDirectory, modName)); + + /// Create a provider. + public static FuncProvider?> Provider(IDalamudPluginInterface pi, + IPenumbraApiModSettings api) + => new(pi, Label, (a, b) => api.GetAvailableModSettings(a, b)?.Original); +} + +/// +public sealed class GetCurrentModSettings(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetCurrentModSettings)}.V5"; + + /// + public new CurrentSettings Invoke(Guid collectionId, string modDirectory, string modName = "", bool ignoreInheritance = false) + { + var (ret, t) = base.Invoke(collectionId, modDirectory, modName, ignoreInheritance); + return ((PenumbraApiEc)ret, t); + } + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, + IPenumbraApiModSettings api) + => new(pi, Label, (a, b, c, d) => + { + var (ret, t) = api.GetCurrentModSettings(a, b, c, d); + return ((int)ret, t); + }); +} + +/// +public sealed class GetCurrentModSettingsWithTemp(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetCurrentModSettingsWithTemp)}"; + + /// + public new CurrentSettingsTemp Invoke(Guid collectionId, string modDirectory, string modName = "", bool ignoreInheritance = false, + bool ignoreTemporary = false, int key = 0) + { + var (ret, t) = base.Invoke(collectionId, modDirectory, modName, ignoreInheritance, ignoreTemporary, key); + return ((PenumbraApiEc)ret, t); + } + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, + IPenumbraApiModSettings api) + => new(pi, Label, (a, b, c, d, e, f) => + { + var (ret, t) = api.GetCurrentModSettingsWithTemp(a, b, c, d, e, f); + return ((int)ret, t); + }); +} + +/// +public sealed class GetAllModSettings(IDalamudPluginInterface pi) + : FuncSubscriber>, bool, bool)>?)>(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetAllModSettings)}"; + + /// + public new (PenumbraApiEc, Dictionary>, bool, bool)>?) Invoke(Guid collectionId, + bool ignoreInheritance = false, bool ignoreTemporary = false, int key = 0) + { + var (ret, t) = base.Invoke(collectionId, ignoreInheritance, ignoreTemporary, key); + return ((PenumbraApiEc)ret, t); + } + + /// Create a provider. + public static FuncProvider>, bool, bool)>?)> + Provider(IDalamudPluginInterface pi, + IPenumbraApiModSettings api) + => new(pi, Label, (a, b, c, d) => + { + var (ret, t) = api.GetAllModSettings(a, b, c, d); + return ((int)ret, t); + }); +} + +/// +public sealed class TryInheritMod(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(TryInheritMod)}.V5"; + + /// + public PenumbraApiEc Invoke(Guid collectionId, string modDirectory, bool inherit, string modName = "") + => (PenumbraApiEc)Invoke(collectionId, modDirectory, modName, inherit); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiModSettings api) + => new(pi, Label, (a, b, c, d) => (int)api.TryInheritMod(a, b, c, d)); +} + +/// +public sealed class TrySetMod(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(TrySetMod)}.V5"; + + /// + public PenumbraApiEc Invoke(Guid collectionId, string modDirectory, bool inherit, string modName = "") + => (PenumbraApiEc)Invoke(collectionId, modDirectory, modName, inherit); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiModSettings api) + => new(pi, Label, (a, b, c, d) => (int)api.TrySetMod(a, b, c, d)); +} + +/// +public sealed class TrySetModPriority(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(TrySetModPriority)}.V5"; + + /// + public PenumbraApiEc Invoke(Guid collectionId, string modDirectory, int priority, string modName = "") + => (PenumbraApiEc)Invoke(collectionId, modDirectory, modName, priority); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiModSettings api) + => new(pi, Label, (a, b, c, d) => (int)api.TrySetModPriority(a, b, c, d)); +} + +/// +public sealed class TrySetModSetting(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(TrySetModSetting)}.V5"; + + /// + public new PenumbraApiEc Invoke(Guid collectionId, string modDirectory, string optionGroupName, string optionName, string modName = "") + => (PenumbraApiEc)base.Invoke(collectionId, modDirectory, modName, optionGroupName, optionName); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiModSettings api) + => new(pi, Label, (a, b, c, d, e) => (int)api.TrySetModSetting(a, b, c, d, e)); +} + +/// +public sealed class TrySetModSettings(IDalamudPluginInterface pi) + : FuncSubscriber, int>(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(TrySetModSettings)}.V5"; + + /// + public PenumbraApiEc Invoke(Guid collectionId, string modDirectory, string optionGroupName, + IReadOnlyList optionNames, string modName = "") + => (PenumbraApiEc)Invoke(collectionId, modDirectory, modName, optionGroupName, optionNames); + + /// Create a provider. + public static FuncProvider, int> Provider(IDalamudPluginInterface pi, + IPenumbraApiModSettings api) + => new(pi, Label, (a, b, c, d, e) => (int)api.TrySetModSettings(a, b, c, d, e)); +} + +/// +public static class ModSettingChanged +{ + /// The label. + public const string Label = $"Penumbra.{nameof(ModSettingChanged)}.V5"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, + params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi, IPenumbraApiModSettings api) + => new(pi, Label, t => api.ModSettingChanged += t.Invoke, t => api.ModSettingChanged -= t.Invoke); +} + +/// +public sealed class CopyModSettings(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(CopyModSettings)}.V5"; + + /// + public new PenumbraApiEc Invoke(Guid? collectionId, string modDirectoryFrom, string modDirectoryTo) + => (PenumbraApiEc)base.Invoke(collectionId, modDirectoryFrom, modDirectoryTo); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, + IPenumbraApiModSettings api) + => new(pi, Label, (a, b, c) => (int)api.CopyModSettings(a, b, c)); +} diff --git a/Penumbra.Api/IpcSubscribers/Mods.cs b/Penumbra.Api/IpcSubscribers/Mods.cs new file mode 100644 index 0000000..5d1c953 --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/Mods.cs @@ -0,0 +1,218 @@ +using Dalamud.Plugin; +using Penumbra.Api.Api; +using Penumbra.Api.Enums; +using Penumbra.Api.Helpers; + +namespace Penumbra.Api.IpcSubscribers; + +/// +public sealed class GetModList(IDalamudPluginInterface pi) + : FuncSubscriber>(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetModList)}"; + + /// + public new Dictionary Invoke() + => base.Invoke(); + + /// Create a provider. + public static FuncProvider> Provider(IDalamudPluginInterface pi, IPenumbraApiMods api) + => new(pi, Label, api.GetModList); +} + +/// +public sealed class InstallMod(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(InstallMod)}.V5"; + + /// + public new PenumbraApiEc Invoke(string modFilePackagePath) + => (PenumbraApiEc)base.Invoke(modFilePackagePath); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiMods api) + => new(pi, Label, a => (int)api.InstallMod(a)); +} + +/// +public sealed class ReloadMod(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(ReloadMod)}.V5"; + + /// + public new PenumbraApiEc Invoke(string modDirectory, string modName = "") + => (PenumbraApiEc)base.Invoke(modDirectory, modName); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiMods api) + => new(pi, Label, (a, b) => (int)api.ReloadMod(a, b)); +} + +/// +public sealed class AddMod(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(AddMod)}.V5"; + + /// + public new PenumbraApiEc Invoke(string modDirectory) + => (PenumbraApiEc)base.Invoke(modDirectory); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiMods api) + => new(pi, Label, a => (int)api.AddMod(a)); +} + +/// +public sealed class DeleteMod(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(DeleteMod)}.V5"; + + /// + public new PenumbraApiEc Invoke(string modDirectory, string modName = "") + => (PenumbraApiEc)base.Invoke(modDirectory, modName); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiMods api) + => new(pi, Label, (a, b) => (int)api.DeleteMod(a, b)); +} + +/// +public static class ModDeleted +{ + /// The label. + public const string Label = $"Penumbra.{nameof(ModDeleted)}"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi, IPenumbraApiMods api) + => new(pi, Label, (t => api.ModDeleted += t, t => api.ModDeleted -= t)); +} + +/// +public static class ModAdded +{ + /// The label. + public const string Label = $"Penumbra.{nameof(ModAdded)}"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi, IPenumbraApiMods api) + => new(pi, Label, (t => api.ModAdded += t, t => api.ModAdded -= t)); +} + +/// +public static class ModMoved +{ + /// The label. + public const string Label = $"Penumbra.{nameof(ModMoved)}"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi, IPenumbraApiMods api) + => new(pi, Label, (t => api.ModMoved += t, t => api.ModMoved -= t)); +} + +/// +public sealed class GetModPath(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetModPath)}.V5"; + + /// + public new (PenumbraApiEc, string FullPath, bool FullDefault, bool NameDefault) Invoke(string modDirectory, string modName = "") + { + var (ret, fullPath, fullDefault, nameDefault) = base.Invoke(modDirectory, modName); + return ((PenumbraApiEc)ret, fullPath, fullDefault, nameDefault); + } + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiMods api) + => new(pi, Label, (a, b) => + { + var (ret, fullPath, fullDefault, nameDefault) = api.GetModPath(a, b); + return ((int)ret, fullPath, fullDefault, nameDefault); + }); +} + +/// +public sealed class SetModPath(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(SetModPath)}.V5"; + + /// + public new PenumbraApiEc Invoke(string modDirectory, string newPath, string modName = "") + => (PenumbraApiEc)base.Invoke(modDirectory, modName, newPath); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiMods api) + => new(pi, Label, (a, b, c) => (int)api.SetModPath(a, b, c)); +} + +/// +public sealed class GetChangedItems(IDalamudPluginInterface pi) + : FuncSubscriber>(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetChangedItems)}.V5"; + + /// + public new Dictionary Invoke(string modDirectory, string modName) + => base.Invoke(modDirectory, modName); + + /// Create a provider. + public static FuncProvider> Provider(IDalamudPluginInterface pi, IPenumbraApiMods api) + => new(pi, Label, api.GetChangedItems); +} + +/// +public sealed class GetChangedItemAdapterDictionary(IDalamudPluginInterface pi) + : FuncSubscriber>>(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetChangedItemAdapterDictionary)}"; + + /// + public new IReadOnlyDictionary> Invoke() + => base.Invoke(); + + /// Create a provider. + public static FuncProvider>> Provider(IDalamudPluginInterface pi, IPenumbraApiMods api) + => new(pi, Label, api.GetChangedItemAdapterDictionary); +} + +/// +public sealed class GetChangedItemAdapterList(IDalamudPluginInterface pi) + : FuncSubscriber ChangedItems)>>(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetChangedItemAdapterList)}"; + + /// + public new IReadOnlyList<(string ModDirectory, IReadOnlyDictionary ChangedItems)> Invoke() + => base.Invoke(); + + /// Create a provider. + public static FuncProvider ChangedItems)>> Provider(IDalamudPluginInterface pi, IPenumbraApiMods api) + => new(pi, Label, api.GetChangedItemAdapterList); +} diff --git a/Penumbra.Api/IpcSubscribers/PluginState.cs b/Penumbra.Api/IpcSubscribers/PluginState.cs new file mode 100644 index 0000000..f7198b0 --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/PluginState.cs @@ -0,0 +1,128 @@ +using Dalamud.Plugin; +using Penumbra.Api.Api; +using Penumbra.Api.Helpers; + +namespace Penumbra.Api.IpcSubscribers; + +/// Triggered when the Penumbra API is initialized and ready. +public static class Initialized +{ + /// The label. + public const string Label = $"Penumbra.{nameof(Initialized)}"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi) + => new(pi, Label); +} + +/// Triggered when the Penumbra API is fully disposed and unavailable. +public static class Disposed +{ + /// The label. + public const string Label = $"Penumbra.{nameof(Disposed)}"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi) + => new(pi, Label); +} + +/// +public class ApiVersion(IDalamudPluginInterface pi) + : FuncSubscriber<(int Breaking, int Features)>(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(ApiVersion)}.V5"; + + /// + public new (int Breaking, int Features) Invoke() + => base.Invoke(); + + /// Create a provider. + public static FuncProvider<(int Breaking, int Features)> Provider(IDalamudPluginInterface pi, IPenumbraApiBase api) + => new(pi, Label, () => api.ApiVersion); +} + +/// +public class GetModDirectory(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetModDirectory)}"; + + /// + public new string Invoke() + => base.Invoke(); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiPluginState api) + => new(pi, Label, api.GetModDirectory); +} + +/// +public class GetConfiguration(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetConfiguration)}"; + + /// + public new string Invoke() + => base.Invoke(); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiPluginState api) + => new(pi, Label, api.GetConfiguration); +} + +/// +public static class ModDirectoryChanged +{ + /// The label. + public const string Label = $"Penumbra.{nameof(ModDirectoryChanged)}"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi, IPenumbraApiPluginState api) + => new(pi, Label, (t => api.ModDirectoryChanged += t, t => api.ModDirectoryChanged -= t)); +} + +/// +public class GetEnabledState(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + public const string Label = $"Penumbra.{nameof(GetEnabledState)}"; + + /// + public new bool Invoke() + => base.Invoke(); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiPluginState api) + => new(pi, Label, api.GetEnabledState); +} + +/// +public static class EnabledChange +{ + /// The label. + public const string Label = $"Penumbra.{nameof(EnabledChange)}"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi, IPenumbraApiPluginState api) + => new(pi, Label, (t => api.EnabledChange += t, t => api.EnabledChange -= t)); +} diff --git a/Penumbra.Api/IpcSubscribers/Redraw.cs b/Penumbra.Api/IpcSubscribers/Redraw.cs new file mode 100644 index 0000000..2a18760 --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/Redraw.cs @@ -0,0 +1,53 @@ +using Dalamud.Plugin; +using Penumbra.Api.Api; +using Penumbra.Api.Enums; +using Penumbra.Api.Helpers; + +namespace Penumbra.Api.IpcSubscribers; + +/// +public sealed class RedrawObject(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(RedrawObject)}.V5"; + + /// + public void Invoke(int gameObjectIndex, RedrawType setting = RedrawType.Redraw) + => base.Invoke(gameObjectIndex, (int)setting); + + /// Create a provider. + public static ActionProvider Provider(IDalamudPluginInterface pi, IPenumbraApiRedraw api) + => new(pi, Label, (a, b) => api.RedrawObject(a, (RedrawType)b)); +} + +/// +public sealed class RedrawAll(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(RedrawAll)}.V5"; + + /// + public void Invoke(RedrawType setting = RedrawType.Redraw) + => base.Invoke((int)setting); + + /// Create a provider. + public static ActionProvider Provider(IDalamudPluginInterface pi, IPenumbraApiRedraw api) + => new(pi, Label, a => api.RedrawAll((RedrawType)a)); +} + +/// +public static class GameObjectRedrawn +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GameObjectRedrawn)}"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi, IPenumbraApiRedraw api) + => new(pi, Label, t => api.GameObjectRedrawn += t.Invoke, t => api.GameObjectRedrawn -= t.Invoke); +} diff --git a/Penumbra.Api/IpcSubscribers/Resolve.cs b/Penumbra.Api/IpcSubscribers/Resolve.cs new file mode 100644 index 0000000..20a2ff9 --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/Resolve.cs @@ -0,0 +1,133 @@ +using Dalamud.Plugin; +using Penumbra.Api.Api; +using Penumbra.Api.Helpers; + +namespace Penumbra.Api.IpcSubscribers; + +/// +public sealed class ResolveDefaultPath(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(ResolveDefaultPath)}"; + + /// + public new string Invoke(string gamePath) + => base.Invoke(gamePath); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiResolve api) + => new(pi, Label, api.ResolveDefaultPath); +} + +/// +public sealed class ResolveInterfacePath(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(ResolveInterfacePath)}"; + + /// + public new string Invoke(string gamePath) + => base.Invoke(gamePath); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiResolve api) + => new(pi, Label, api.ResolveInterfacePath); +} + +/// +public sealed class ResolveGameObjectPath(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(ResolveGameObjectPath)}"; + + /// + public new string Invoke(string gamePath, int gameObjectIdx) + => base.Invoke(gamePath, gameObjectIdx); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiResolve api) + => new(pi, Label, api.ResolveGameObjectPath); +} + +/// +public sealed class ResolvePlayerPath(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(ResolvePlayerPath)}"; + + /// + public new string Invoke(string gamePath) + => base.Invoke(gamePath); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiResolve api) + => new(pi, Label, api.ResolvePlayerPath); +} + +/// +public sealed class ReverseResolveGameObjectPath(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(ReverseResolveGameObjectPath)}"; + + /// + public new string[] Invoke(string gamePath, int gameObjectIdx) + => base.Invoke(gamePath, gameObjectIdx); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiResolve api) + => new(pi, Label, api.ReverseResolveGameObjectPath); +} + +/// +public sealed class ReverseResolvePlayerPath(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(ReverseResolvePlayerPath)}"; + + /// + public new string[] Invoke(string gamePath) + => base.Invoke(gamePath); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiResolve api) + => new(pi, Label, api.ReverseResolvePlayerPath); +} + +/// +public sealed class ResolvePlayerPaths(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(ResolvePlayerPaths)}"; + + /// + public new (string[], string[][]) Invoke(string[] forward, string[] reverse) + => base.Invoke(forward, reverse); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiResolve api) + => new(pi, Label, api.ResolvePlayerPaths); +} + +/// +public sealed class ResolvePlayerPathsAsync(IDalamudPluginInterface pi) + : FuncSubscriber>(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(ResolvePlayerPathsAsync)}"; + + /// + public new Task<(string[], string[][])> Invoke(string[] forward, string[] reverse) + => base.Invoke(forward, reverse); + + /// Create a provider. + public static FuncProvider> Provider(IDalamudPluginInterface pi, IPenumbraApiResolve api) + => new(pi, Label, api.ResolvePlayerPathsAsync); +} diff --git a/Penumbra.Api/IpcSubscribers/ResourceTree.cs b/Penumbra.Api/IpcSubscribers/ResourceTree.cs new file mode 100644 index 0000000..28263b3 --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/ResourceTree.cs @@ -0,0 +1,116 @@ +using System.Linq; +using Dalamud.Plugin; +using Newtonsoft.Json.Linq; +using Penumbra.Api.Api; +using Penumbra.Api.Enums; +using Penumbra.Api.Helpers; + +namespace Penumbra.Api.IpcSubscribers; + +/// +public sealed class GetGameObjectResourcePaths(IDalamudPluginInterface pi) + : FuncSubscriber>?[]>(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetGameObjectResourcePaths)}.V5"; + + /// + public new Dictionary>?[] Invoke(params ushort[] gameObjectIndices) + => base.Invoke(gameObjectIndices); + + /// Create a provider. + public static FuncProvider>?[]> Provider(IDalamudPluginInterface pi, + IPenumbraApiResourceTree api) + => new(pi, Label, api.GetGameObjectResourcePaths); +} + +/// +public sealed class GetPlayerResourcePaths(IDalamudPluginInterface pi) + : FuncSubscriber>>>(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetPlayerResourcePaths)}.V5"; + + /// + public new Dictionary>> Invoke() + => base.Invoke(); + + /// Create a provider. + public static FuncProvider>>> Provider(IDalamudPluginInterface pi, + IPenumbraApiResourceTree api) + => new(pi, Label, api.GetPlayerResourcePaths); +} + +/// +public sealed class GetGameObjectResourcesOfType(IDalamudPluginInterface pi) + : FuncSubscriber?[]>(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetGameObjectResourcesOfType)}.V5"; + + /// + public IReadOnlyDictionary?[] Invoke(ResourceType type, bool withUiData = false, + params ushort[] gameObjectIndices) + => Array.ConvertAll(Invoke((uint)type, withUiData, gameObjectIndices), + d => (IReadOnlyDictionary?)GameResourceDict.Create(d)); + + /// Create a provider. + public static FuncProvider?[]> Provider(IDalamudPluginInterface pi, + IPenumbraApiResourceTree api) + => new(pi, Label, + (a, b, c) => Array.ConvertAll(api.GetGameObjectResourcesOfType((ResourceType)a, b, c), d => d?.Original)); +} + +/// +public sealed class GetPlayerResourcesOfType(IDalamudPluginInterface pi) + : FuncSubscriber>>(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetPlayerResourcesOfType)}.V5"; + + /// + public Dictionary> Invoke(ResourceType type, bool withUiData = false) + => Invoke((uint)type, withUiData) + .ToDictionary(kvp => kvp.Key, kvp => (IReadOnlyDictionary)new GameResourceDict(kvp.Value)); + + /// Create a provider. + public static FuncProvider>> Provider( + IDalamudPluginInterface pi, + IPenumbraApiResourceTree api) + => new(pi, Label, + (a, b) => api.GetPlayerResourcesOfType((ResourceType)a, b) + .ToDictionary(kvp => kvp.Key, kvp => kvp.Value.Original)); +} + +/// +public sealed class GetGameObjectResourceTrees(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetGameObjectResourceTrees)}.V5"; + + /// + public new ResourceTreeDto?[] Invoke(bool withUiData = false, params ushort[] gameObjectIndices) + => Array.ConvertAll(base.Invoke(withUiData, gameObjectIndices), o => o?.ToObject()); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, + IPenumbraApiResourceTree api) + => new(pi, Label, api.GetGameObjectResourceTrees); +} + +/// +public sealed class GetPlayerResourceTrees(IDalamudPluginInterface pi) + : FuncSubscriber>(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(GetPlayerResourceTrees)}.V5"; + + /// + public new Dictionary Invoke(bool withUiData = false) + => base.Invoke(withUiData).ToDictionary(kvp => kvp.Key, kvp => kvp.Value.ToObject()!); + + /// Create a provider. + public static FuncProvider> Provider(IDalamudPluginInterface pi, IPenumbraApiResourceTree api) + => new(pi, Label, api.GetPlayerResourceTrees); +} diff --git a/Penumbra.Api/IpcSubscribers/Temporary.cs b/Penumbra.Api/IpcSubscribers/Temporary.cs new file mode 100644 index 0000000..24aab87 --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/Temporary.cs @@ -0,0 +1,276 @@ +using Dalamud.Plugin; +using Penumbra.Api.Api; +using Penumbra.Api.Enums; +using Penumbra.Api.Helpers; +using PseudoModSetting = + System.ValueTuple>>; + +namespace Penumbra.Api.IpcSubscribers; + +/// +public sealed class CreateTemporaryCollection(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(CreateTemporaryCollection)}.V5"; + + /// + public new Guid Invoke(string name = "") + => base.Invoke(name); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiTemporary api) + => new(pi, Label, api.CreateTemporaryCollection); +} + +/// +public sealed class DeleteTemporaryCollection(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(DeleteTemporaryCollection)}.V5"; + + /// + public new PenumbraApiEc Invoke(Guid collectionId) + => (PenumbraApiEc)base.Invoke(collectionId); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiTemporary api) + => new(pi, Label, g => (int)api.DeleteTemporaryCollection(g)); +} + +/// +public sealed class AssignTemporaryCollection(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(AssignTemporaryCollection)}.V5"; + + /// + public new PenumbraApiEc Invoke(Guid collectionId, int actorIndex, bool forceAssignment = true) + => (PenumbraApiEc)base.Invoke(collectionId, actorIndex, forceAssignment); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiTemporary api) + => new(pi, Label, (a, b, c) => (int)api.AssignTemporaryCollection(a, b, c)); +} + +/// +public sealed class AddTemporaryModAll(IDalamudPluginInterface pi) + : FuncSubscriber, string, int, int>(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(AddTemporaryModAll)}.V5"; + + /// + public new PenumbraApiEc Invoke(string tag, Dictionary paths, string manipString, int priority) + => (PenumbraApiEc)base.Invoke(tag, paths, manipString, priority); + + /// Create a provider. + public static FuncProvider, string, int, int> Provider(IDalamudPluginInterface pi, + IPenumbraApiTemporary api) + => new(pi, Label, (a, b, c, d) => (int)api.AddTemporaryModAll(a, b, c, d)); +} + +/// +public sealed class AddTemporaryMod(IDalamudPluginInterface pi) + : FuncSubscriber, string, int, int>(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(AddTemporaryMod)}.V5"; + + /// + public new PenumbraApiEc Invoke(string tag, Guid collectionId, Dictionary paths, string manipString, int priority) + => (PenumbraApiEc)base.Invoke(tag, collectionId, paths, manipString, priority); + + /// Create a provider. + public static FuncProvider, string, int, int> Provider(IDalamudPluginInterface pi, + IPenumbraApiTemporary api) + => new(pi, Label, (a, b, c, d, e) => (int)api.AddTemporaryMod(a, b, c, d, e)); +} + +/// +public sealed class RemoveTemporaryModAll(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(RemoveTemporaryModAll)}.V5"; + + /// + public new PenumbraApiEc Invoke(string tag, int priority) + => (PenumbraApiEc)base.Invoke(tag, priority); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, + IPenumbraApiTemporary api) + => new(pi, Label, (a, b) => (int)api.RemoveTemporaryModAll(a, b)); +} + +/// +public sealed class RemoveTemporaryMod(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(RemoveTemporaryMod)}.V5"; + + /// + public new PenumbraApiEc Invoke(string tag, Guid collectionId, int priority) + => (PenumbraApiEc)base.Invoke(tag, collectionId, priority); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiTemporary api) + => new(pi, Label, (a, b, c) => (int)api.RemoveTemporaryMod(a, b, c)); +} + +/// +public sealed class SetTemporaryModSettings(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(SetTemporaryModSettings)}.V5"; + + /// + public PenumbraApiEc Invoke(Guid collectionId, string modDirectory, bool inherit, bool enabled, int priority, + IReadOnlyDictionary> settings, string source, int key = 0, string modName = "") + => (PenumbraApiEc)Invoke(collectionId, modDirectory, modName, (inherit, enabled, priority, settings), source, key); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, + IPenumbraApiTemporary api) + => new(pi, Label, (a, b, c, d, e, f) => (int)api.SetTemporaryModSettings(a, b, c, d.Item1, d.Item2, d.Item3, d.Item4, e, f)); +} + +/// +public sealed class SetTemporaryModSettingsPlayer(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(SetTemporaryModSettingsPlayer)}.V5"; + + /// + public PenumbraApiEc Invoke(int objectIndex, string modDirectory, bool inherit, bool enabled, int priority, + IReadOnlyDictionary> settings, string source, int key = 0, string modName = "") + => (PenumbraApiEc)Invoke(objectIndex, modDirectory, modName, (inherit, enabled, priority, settings), source, key); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, + IPenumbraApiTemporary api) + => new(pi, Label, (a, b, c, d, e, f) => (int)api.SetTemporaryModSettingsPlayer(a, b, c, d.Item1, d.Item2, d.Item3, d.Item4, e, f)); +} + +/// +public sealed class RemoveTemporaryModSettings(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(RemoveTemporaryModSettings)}.V5"; + + /// + public PenumbraApiEc Invoke(Guid collectionId, string modDirectory, int key = 0, string modName = "") + => (PenumbraApiEc)base.Invoke(collectionId, modDirectory, modName, key); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiTemporary api) + => new(pi, Label, (a, b, c, d) => (int)api.RemoveTemporaryModSettings(a, b, c, d)); +} + +/// +public sealed class RemoveTemporaryModSettingsPlayer(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(RemoveTemporaryModSettingsPlayer)}.V5"; + + /// + public PenumbraApiEc Invoke(int objectIndex, string modDirectory, int key = 0, string modName = "") + => (PenumbraApiEc)base.Invoke(objectIndex, modDirectory, modName, key); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiTemporary api) + => new(pi, Label, (a, b, c, d) => (int)api.RemoveTemporaryModSettingsPlayer(a, b, c, d)); +} + +/// +public sealed class RemoveAllTemporaryModSettings(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(RemoveAllTemporaryModSettings)}.V5"; + + /// + public new PenumbraApiEc Invoke(Guid collectionId, int key = 0) + => (PenumbraApiEc)base.Invoke(collectionId, key); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiTemporary api) + => new(pi, Label, (a, b) => (int)api.RemoveAllTemporaryModSettings(a, b)); +} + +/// +public sealed class RemoveAllTemporaryModSettingsPlayer(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(RemoveAllTemporaryModSettingsPlayer)}.V5"; + + /// + public new PenumbraApiEc Invoke(int objectIndex, int key = 0) + => (PenumbraApiEc)base.Invoke(objectIndex, key); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiTemporary api) + => new(pi, Label, (a, b) => (int)api.RemoveAllTemporaryModSettingsPlayer(a, b)); +} + +/// +public sealed class QueryTemporaryModSettings(IDalamudPluginInterface pi) + : FuncSubscriber>)?, string)>(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(QueryTemporaryModSettings)}.V5"; + + /// + public PenumbraApiEc Invoke(Guid collectionId, string modDirectory, + out (bool ForceInherit, bool Enabled, int Priority, Dictionary> Settings)? settings, out string source, + int key = 0, string modName = "") + { + (var ec, settings, source) = Invoke(collectionId, modDirectory, modName, key); + return (PenumbraApiEc)ec; + } + + /// Create a provider. + public static FuncProvider>)?, string)> Provider( + IDalamudPluginInterface pi, IPenumbraApiTemporary api) + => new(pi, Label, (a, b, c, d) => + { + var (ex, settings, source) = api.QueryTemporaryModSettings(a, b, c, d); + return ((int)ex, settings, source); + }); +} + +/// +public sealed class QueryTemporaryModSettingsPlayer(IDalamudPluginInterface pi) + : FuncSubscriber>)?, string)>(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(QueryTemporaryModSettingsPlayer)}.V5"; + + /// + public PenumbraApiEc Invoke(int objectIndex, string modDirectory, + out (bool ForceInherit, bool Enabled, int Priority, Dictionary> Settings)? settings, out string source, + int key = 0, string modName = "") + { + (var ec, settings, source) = Invoke(objectIndex, modDirectory, modName, key); + return (PenumbraApiEc)ec; + } + + /// Create a provider. + public static FuncProvider>)?, string)> Provider( + IDalamudPluginInterface pi, IPenumbraApiTemporary api) + => new(pi, Label, (a, b, c, d) => + { + var (ex, settings, source) = api.QueryTemporaryModSettingsPlayer(a, b, c, d); + return ((int)ex, settings, source); + }); +} diff --git a/Penumbra.Api/IpcSubscribers/Ui.cs b/Penumbra.Api/IpcSubscribers/Ui.cs new file mode 100644 index 0000000..c20ebae --- /dev/null +++ b/Penumbra.Api/IpcSubscribers/Ui.cs @@ -0,0 +1,130 @@ +using Dalamud.Plugin; +using Penumbra.Api.Api; +using Penumbra.Api.Enums; +using Penumbra.Api.Helpers; + +namespace Penumbra.Api.IpcSubscribers; + +/// +public static class ChangedItemTooltip +{ + /// The label. + public const string Label = $"Penumbra.{nameof(ChangedItemTooltip)}"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, + params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi, IPenumbraApiUi api) + => new(pi, Label, (d => api.ChangedItemTooltip += d, d => api.ChangedItemTooltip -= d)); +} + +/// +public static class ChangedItemClicked +{ + /// The label. + public const string Label = $"Penumbra.{nameof(ChangedItemClicked)}"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, + params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi, IPenumbraApiUi api) + => new(pi, Label, (d => api.ChangedItemClicked += d, d => api.ChangedItemClicked -= d)); +} + +/// +public static class PreSettingsTabBarDraw +{ + /// The label. + public const string Label = $"Penumbra.{nameof(PreSettingsTabBarDraw)}"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi, IPenumbraApiUi api) + => new(pi, Label, (d => api.PreSettingsTabBarDraw += d, d => api.PreSettingsTabBarDraw -= d)); +} + +/// +public static class PreSettingsDraw +{ + /// The label. + public const string Label = $"Penumbra.{nameof(PreSettingsDraw)}"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi, IPenumbraApiUi api) + => new(pi, Label, (d => api.PreSettingsPanelDraw += d, d => api.PreSettingsPanelDraw -= d)); +} + +/// +public static class PostEnabledDraw +{ + /// The label. + public const string Label = $"Penumbra.{nameof(PostEnabledDraw)}"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi, IPenumbraApiUi api) + => new(pi, Label, (d => api.PostEnabledDraw += d, d => api.PostEnabledDraw -= d)); +} + +/// +public static class PostSettingsDraw +{ + /// The label. + public const string Label = $"Penumbra.{nameof(PostSettingsDraw)}"; + + /// Create a new event subscriber. + public static EventSubscriber Subscriber(IDalamudPluginInterface pi, params Action[] actions) + => new(pi, Label, actions); + + /// Create a provider. + public static EventProvider Provider(IDalamudPluginInterface pi, IPenumbraApiUi api) + => new(pi, Label, (d => api.PostSettingsPanelDraw += d, d => api.PostSettingsPanelDraw -= d)); +} + +/// +public sealed class OpenMainWindow(IDalamudPluginInterface pi) + : FuncSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra.{nameof(OpenMainWindow)}.V5"; + + /// + public PenumbraApiEc Invoke(TabType tab, string modDirectory = "", string modName = "") + => (PenumbraApiEc)Invoke((int)tab, modDirectory, modName); + + /// Create a provider. + public static FuncProvider Provider(IDalamudPluginInterface pi, IPenumbraApiUi api) + => new(pi, Label, (a, b, c) => (int)api.OpenMainWindow((TabType)a, b, c)); +} + +/// +public sealed class CloseMainWindow(IDalamudPluginInterface pi) + : ActionSubscriber(pi, Label) +{ + /// The label. + public const string Label = $"Penumbra{nameof(CloseMainWindow)}"; + + /// + public new void Invoke() + => base.Invoke(); + + /// Create a provider. + public static ActionProvider Provider(IDalamudPluginInterface pi, IPenumbraApiUi api) + => new(pi, Label, api.CloseMainWindow); +} diff --git a/Penumbra.Api/Penumbra.Api.csproj b/Penumbra.Api/Penumbra.Api.csproj new file mode 100644 index 0000000..aaab768 --- /dev/null +++ b/Penumbra.Api/Penumbra.Api.csproj @@ -0,0 +1,34 @@ + + + Penumbra.Api + Penumbra + Copyright © 2025 + 5.6.1.0 + 5.6.1.0 + 5.6.1 + README.md + bin\$(Configuration)\ + + + + true + true + Penumbra.Api + Ottermandias + https://github.com/Ottermandias/Penumbra.Api + Auxiliary functions for Penumbras external API. + MIT + + + + false + + + + 1591 + + + + + + diff --git a/Penumbra.Api/Penumbra.Api.csproj.DotSettings b/Penumbra.Api/Penumbra.Api.csproj.DotSettings new file mode 100644 index 0000000..7d7508c --- /dev/null +++ b/Penumbra.Api/Penumbra.Api.csproj.DotSettings @@ -0,0 +1,2 @@ + + True \ No newline at end of file diff --git a/Penumbra.Api/README.md b/Penumbra.Api/README.md new file mode 100644 index 0000000..1e9bdf1 --- /dev/null +++ b/Penumbra.Api/README.md @@ -0,0 +1,4 @@ +# Penumbra + +This is an auxiliary repository for Penumbras external API. +For more information, see the [main repo](https://github.com/xivdev/Penumbra). \ No newline at end of file diff --git a/Penumbra.Api/packages.lock.json b/Penumbra.Api/packages.lock.json new file mode 100644 index 0000000..1d39508 --- /dev/null +++ b/Penumbra.Api/packages.lock.json @@ -0,0 +1,13 @@ +{ + "version": 1, + "dependencies": { + "net9.0-windows7.0": { + "DotNet.ReproducibleBuilds": { + "type": "Direct", + "requested": "[1.2.25, )", + "resolved": "1.2.25", + "contentHash": "xCXiw7BCxHJ8pF6wPepRUddlh2dlQlbr81gXA72hdk4FLHkKXas7EH/n+fk5UCA/YfMqG1Z6XaPiUjDbUNBUzg==" + } + } + } +} \ No newline at end of file diff --git a/UmbraAPI/.gitignore b/UmbraAPI/.gitignore index 3bebd41..dfcfd56 100644 --- a/UmbraAPI/.gitignore +++ b/UmbraAPI/.gitignore @@ -9,7 +9,6 @@ *.user *.userosscache *.sln.docstates -.DS_Store # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs