diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..0a4a3f24 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,4139 @@ + +[*] +charset = utf-8 +end_of_line = lf +trim_trailing_whitespace = false +insert_final_newline = false +indent_style = space +indent_size = 4 + +# Microsoft .NET properties +csharp_indent_braces = false +csharp_indent_switch_labels = true +csharp_new_line_before_catch = false +csharp_new_line_before_else = false +csharp_new_line_before_finally = false +csharp_new_line_before_members_in_object_initializers = false +csharp_new_line_before_open_brace = none +csharp_new_line_between_query_expression_clauses = true +csharp_preferred_modifier_order = public, private, protected, internal, file, new, static, abstract, virtual, sealed, readonly, override, extern, unsafe, volatile, async, required:suggestion +csharp_prefer_braces = true:none +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_prefer_utf8_string_literals = true:suggestion +csharp_style_var_elsewhere = false:suggestion +csharp_style_var_for_built_in_types = false:suggestion +csharp_style_var_when_type_is_apparent = false:suggestion +csharp_using_directive_placement = inside_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.bc42380.severity = warning +dotnet_diagnostic.bc42504.severity = warning +dotnet_diagnostic.bc42505.severity = warning +dotnet_diagnostic.ca2252.severity = error +dotnet_diagnostic.ca2254.severity = suggestion +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.cs0282.severity = warning +dotnet_diagnostic.cs0414.severity = warning +dotnet_diagnostic.cs0420.severity = warning +dotnet_diagnostic.cs0458.severity = warning +dotnet_diagnostic.cs0464.severity = warning +dotnet_diagnostic.cs0465.severity = warning +dotnet_diagnostic.cs0469.severity = warning +dotnet_diagnostic.cs0472.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.cs0728.severity = warning +dotnet_diagnostic.cs0809.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.cs1687.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.cs4024.severity = warning +dotnet_diagnostic.cs4025.severity = warning +dotnet_diagnostic.cs4026.severity = warning +dotnet_diagnostic.cs7022.severity = warning +dotnet_diagnostic.cs7023.severity = warning +dotnet_diagnostic.cs7080.severity = warning +dotnet_diagnostic.cs7081.severity = warning +dotnet_diagnostic.cs7082.severity = warning +dotnet_diagnostic.cs7095.severity = warning +dotnet_diagnostic.cs8073.severity = warning +dotnet_diagnostic.cs8094.severity = warning +dotnet_diagnostic.cs8123.severity = warning +dotnet_diagnostic.cs8305.severity = warning +dotnet_diagnostic.cs8321.severity = warning +dotnet_diagnostic.cs8383.severity = warning +dotnet_diagnostic.cs8424.severity = warning +dotnet_diagnostic.cs8425.severity = warning +dotnet_diagnostic.cs8500.severity = warning +dotnet_diagnostic.cs8509.severity = warning +dotnet_diagnostic.cs8519.severity = warning +dotnet_diagnostic.cs8520.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 = warning +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 = warning +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.cs8974.severity = warning +dotnet_diagnostic.cs8981.severity = warning +dotnet_diagnostic.cs9042.severity = warning +dotnet_diagnostic.cs9073.severity = warning +dotnet_diagnostic.cs9074.severity = warning +dotnet_diagnostic.cs9080.severity = warning +dotnet_diagnostic.cs9081.severity = warning +dotnet_diagnostic.cs9082.severity = warning +dotnet_diagnostic.cs9083.severity = warning +dotnet_diagnostic.cs9084.severity = warning +dotnet_diagnostic.cs9085.severity = warning +dotnet_diagnostic.cs9086.severity = warning +dotnet_diagnostic.cs9087.severity = warning +dotnet_diagnostic.cs9088.severity = warning +dotnet_diagnostic.cs9089.severity = warning +dotnet_diagnostic.cs9090.severity = warning +dotnet_diagnostic.cs9091.severity = warning +dotnet_diagnostic.cs9092.severity = warning +dotnet_diagnostic.cs9093.severity = warning +dotnet_diagnostic.cs9094.severity = warning +dotnet_diagnostic.cs9095.severity = warning +dotnet_diagnostic.cs9097.severity = warning +dotnet_diagnostic.cs9099.severity = warning +dotnet_diagnostic.cs9100.severity = warning +dotnet_diagnostic.cs9107.severity = warning +dotnet_diagnostic.cs9113.severity = warning +dotnet_diagnostic.cs9123.severity = warning +dotnet_diagnostic.cs9124.severity = warning +dotnet_diagnostic.cs9154.severity = warning +dotnet_diagnostic.cs9158.severity = warning +dotnet_diagnostic.cs9159.severity = warning +dotnet_diagnostic.cs9179.severity = warning +dotnet_diagnostic.cs9181.severity = warning +dotnet_diagnostic.cs9182.severity = warning +dotnet_diagnostic.cs9183.severity = warning +dotnet_diagnostic.cs9184.severity = warning +dotnet_diagnostic.cs9191.severity = warning +dotnet_diagnostic.cs9192.severity = warning +dotnet_diagnostic.cs9193.severity = warning +dotnet_diagnostic.cs9195.severity = warning +dotnet_diagnostic.cs9196.severity = warning +dotnet_diagnostic.cs9197.severity = warning +dotnet_diagnostic.cs9198.severity = warning +dotnet_diagnostic.cs9200.severity = warning +dotnet_diagnostic.cs9204.severity = warning +dotnet_diagnostic.cs9208.severity = warning +dotnet_diagnostic.cs9209.severity = warning +dotnet_diagnostic.cs9216.severity = warning +dotnet_diagnostic.cs9256.severity = warning +dotnet_diagnostic.cs9258.severity = warning +dotnet_diagnostic.cs9264.severity = warning +dotnet_diagnostic.cs9266.severity = warning +dotnet_diagnostic.fs0020.severity = warning +dotnet_diagnostic.fs0025.severity = warning +dotnet_diagnostic.fs0026.severity = warning +dotnet_diagnostic.fs0066.severity = warning +dotnet_diagnostic.fs0067.severity = warning +dotnet_diagnostic.fs0104.severity = warning +dotnet_diagnostic.fs0193.severity = warning +dotnet_diagnostic.fs0524.severity = warning +dotnet_diagnostic.fs1182.severity = warning +dotnet_diagnostic.fs1183.severity = warning +dotnet_diagnostic.fs3218.severity = warning +dotnet_diagnostic.fs3390.severity = warning +dotnet_diagnostic.fs3520.severity = warning +dotnet_diagnostic.syslib1014.severity = warning +dotnet_diagnostic.wme006.severity = warning +dotnet_naming_rule.constants_rule.import_to_resharper = True +dotnet_naming_rule.constants_rule.resharper_description = Constant fields (not private) +dotnet_naming_rule.constants_rule.resharper_guid = 669e5282-fb4b-4e90-91e7-07d269d04b60 +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.enum_member_rule.import_to_resharper = True +dotnet_naming_rule.enum_member_rule.resharper_description = Enum members +dotnet_naming_rule.enum_member_rule.resharper_guid = 8b8504e3-f0be-4c14-9103-c732f2bddc15 +dotnet_naming_rule.enum_member_rule.severity = warning +dotnet_naming_rule.enum_member_rule.style = upper_camel_case_style +dotnet_naming_rule.enum_member_rule.symbols = enum_member_symbols +dotnet_naming_rule.event_rule.import_to_resharper = True +dotnet_naming_rule.event_rule.resharper_description = Events +dotnet_naming_rule.event_rule.resharper_guid = 0c4c6401-2a1f-4db1-a21f-562f51542cf8 +dotnet_naming_rule.event_rule.resharper_style = aaBb, AaBb +dotnet_naming_rule.event_rule.severity = warning +dotnet_naming_rule.event_rule.style = lower_camel_case_style_1 +dotnet_naming_rule.event_rule.symbols = event_symbols +dotnet_naming_rule.interfaces_rule.import_to_resharper = True +dotnet_naming_rule.interfaces_rule.resharper_description = Interfaces +dotnet_naming_rule.interfaces_rule.resharper_guid = a7a3339e-4e89-4319-9735-a9dc4cb74cc7 +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 = True +dotnet_naming_rule.locals_rule.resharper_description = Local variables +dotnet_naming_rule.locals_rule.resharper_guid = 61a991a4-d0a3-4d19-90a5-f8f4d75c30c1 +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 = True +dotnet_naming_rule.local_constants_rule.resharper_description = Local constants +dotnet_naming_rule.local_constants_rule.resharper_guid = a4f433b8-abcd-4e55-a08f-82e78cef0f0c +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 = True +dotnet_naming_rule.local_functions_rule.resharper_description = Local functions +dotnet_naming_rule.local_functions_rule.resharper_guid = 76f79b1e-ece7-4df2-a322-1bd7fea25eb7 +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 = True +dotnet_naming_rule.method_rule.resharper_description = Methods +dotnet_naming_rule.method_rule.resharper_guid = 8284009d-e743-4d89-9402-a5bf9a89b657 +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 = True +dotnet_naming_rule.parameters_rule.resharper_description = Parameters +dotnet_naming_rule.parameters_rule.resharper_guid = 8a85b61a-1024-4f87-b9ef-1fdae19930a1 +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 = True +dotnet_naming_rule.private_constants_rule.resharper_description = Constant fields (private) +dotnet_naming_rule.private_constants_rule.resharper_guid = 236f7aa5-7b06-43ca-bf2a-9b31bfcff09a +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 = True +dotnet_naming_rule.private_instance_fields_rule.resharper_description = Instance fields (private) +dotnet_naming_rule.private_instance_fields_rule.resharper_guid = 4a98fdf6-7d98-4f5a-afeb-ea44ad98c70c +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 = True +dotnet_naming_rule.private_static_fields_rule.resharper_description = Static fields (private) +dotnet_naming_rule.private_static_fields_rule.resharper_exclusive_prefixes_suffixes = true +dotnet_naming_rule.private_static_fields_rule.resharper_guid = f9fce829-e6f4-4cb2-80f1-5497c44f51df +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_readonly_rule.import_to_resharper = True +dotnet_naming_rule.private_static_readonly_rule.resharper_description = Static readonly fields (private) +dotnet_naming_rule.private_static_readonly_rule.resharper_guid = 15b5b1f1-457c-4ca6-b278-5615aedc07d3 +dotnet_naming_rule.private_static_readonly_rule.severity = warning +dotnet_naming_rule.private_static_readonly_rule.style = upper_camel_case_style +dotnet_naming_rule.property_rule.import_to_resharper = True +dotnet_naming_rule.property_rule.resharper_description = Properties +dotnet_naming_rule.property_rule.resharper_guid = c85a0503-4de2-40f1-9cd6-a4054c05d384 +dotnet_naming_rule.property_rule.resharper_style = aaBb, AaBb +dotnet_naming_rule.property_rule.severity = warning +dotnet_naming_rule.property_rule.style = lower_camel_case_style_1 +dotnet_naming_rule.property_rule.symbols = property_symbols +dotnet_naming_rule.public_fields_rule.import_to_resharper = True +dotnet_naming_rule.public_fields_rule.resharper_description = Instance fields (not private) +dotnet_naming_rule.public_fields_rule.resharper_guid = 53eecf85-d821-40e8-ac97-fdb734542b84 +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.public_static_fields_rule.import_to_resharper = True +dotnet_naming_rule.public_static_fields_rule.resharper_description = Static fields (not private) +dotnet_naming_rule.public_static_fields_rule.resharper_guid = 70345118-4b40-4ece-937c-bbeb7a0b2e70 +dotnet_naming_rule.public_static_fields_rule.severity = warning +dotnet_naming_rule.public_static_fields_rule.style = upper_camel_case_style +dotnet_naming_rule.public_static_fields_rule.symbols = public_static_fields_symbols +dotnet_naming_rule.static_readonly_rule.import_to_resharper = True +dotnet_naming_rule.static_readonly_rule.resharper_description = Static readonly fields (not private) +dotnet_naming_rule.static_readonly_rule.resharper_guid = c873eafb-d57f-481d-8c93-77f6863c2f88 +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 = True +dotnet_naming_rule.types_and_namespaces_rule.resharper_description = Types and namespaces +dotnet_naming_rule.types_and_namespaces_rule.resharper_guid = a0b4bc4d-d13b-4a37-b37e-c9c6864e4302 +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 = True +dotnet_naming_rule.type_parameters_rule.resharper_description = Type parameters +dotnet_naming_rule.type_parameters_rule.resharper_exclusive_prefixes_suffixes = true +dotnet_naming_rule.type_parameters_rule.resharper_guid = 2c62818f-621b-4425-adc9-78611099bfcb +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_rule.unity_serialized_field_rule.import_to_resharper = True +dotnet_naming_rule.unity_serialized_field_rule.resharper_description = Unity serialized field +dotnet_naming_rule.unity_serialized_field_rule.resharper_guid = 5f0fdb63-c892-4d2c-9324-15c80b22a7ef +dotnet_naming_rule.unity_serialized_field_rule.severity = warning +dotnet_naming_rule.unity_serialized_field_rule.style = lower_camel_case_style_1 +dotnet_naming_rule.unity_serialized_field_rule.symbols = unity_serialized_field_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.constants_symbols.resharper_applicable_kinds = constant_field +dotnet_naming_symbols.constants_symbols.resharper_required_modifiers = any +dotnet_naming_symbols.enum_member_symbols.applicable_accessibilities = * +dotnet_naming_symbols.enum_member_symbols.applicable_kinds = +dotnet_naming_symbols.enum_member_symbols.resharper_applicable_kinds = enum_member +dotnet_naming_symbols.enum_member_symbols.resharper_required_modifiers = any +dotnet_naming_symbols.event_symbols.applicable_accessibilities = * +dotnet_naming_symbols.event_symbols.applicable_kinds = event +dotnet_naming_symbols.event_symbols.resharper_applicable_kinds = event +dotnet_naming_symbols.event_symbols.resharper_required_modifiers = any +dotnet_naming_symbols.interfaces_symbols.applicable_accessibilities = * +dotnet_naming_symbols.interfaces_symbols.applicable_kinds = interface +dotnet_naming_symbols.interfaces_symbols.resharper_applicable_kinds = interface +dotnet_naming_symbols.interfaces_symbols.resharper_required_modifiers = any +dotnet_naming_symbols.locals_symbols.applicable_accessibilities = * +dotnet_naming_symbols.locals_symbols.applicable_kinds = local +dotnet_naming_symbols.locals_symbols.resharper_applicable_kinds = local_variable +dotnet_naming_symbols.locals_symbols.resharper_required_modifiers = any +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_constants_symbols.resharper_applicable_kinds = local_constant +dotnet_naming_symbols.local_constants_symbols.resharper_required_modifiers = any +dotnet_naming_symbols.local_functions_symbols.applicable_accessibilities = * +dotnet_naming_symbols.local_functions_symbols.applicable_kinds = local_function +dotnet_naming_symbols.local_functions_symbols.resharper_applicable_kinds = local_function +dotnet_naming_symbols.local_functions_symbols.resharper_required_modifiers = any +dotnet_naming_symbols.method_symbols.applicable_accessibilities = * +dotnet_naming_symbols.method_symbols.applicable_kinds = method +dotnet_naming_symbols.method_symbols.resharper_applicable_kinds = method +dotnet_naming_symbols.method_symbols.resharper_required_modifiers = any +dotnet_naming_symbols.parameters_symbols.applicable_accessibilities = * +dotnet_naming_symbols.parameters_symbols.applicable_kinds = parameter +dotnet_naming_symbols.parameters_symbols.resharper_applicable_kinds = parameter +dotnet_naming_symbols.parameters_symbols.resharper_required_modifiers = any +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_constants_symbols.resharper_applicable_kinds = constant_field +dotnet_naming_symbols.private_constants_symbols.resharper_required_modifiers = any +dotnet_naming_symbols.private_instance_fields_symbols.applicable_accessibilities = private +dotnet_naming_symbols.private_instance_fields_symbols.applicable_kinds = field +dotnet_naming_symbols.private_instance_fields_symbols.resharper_applicable_kinds = field,readonly_field +dotnet_naming_symbols.private_instance_fields_symbols.resharper_required_modifiers = instance +dotnet_naming_symbols.private_instance_fields_symbols_2.applicable_accessibilities = private +dotnet_naming_symbols.private_instance_fields_symbols_2.applicable_kinds = field +dotnet_naming_symbols.private_instance_fields_symbols_2.resharper_applicable_kinds = field,readonly_field +dotnet_naming_symbols.private_instance_fields_symbols_2.resharper_required_modifiers = instance +dotnet_naming_symbols.property_symbols.applicable_accessibilities = * +dotnet_naming_symbols.property_symbols.applicable_kinds = property +dotnet_naming_symbols.property_symbols.resharper_applicable_kinds = property +dotnet_naming_symbols.property_symbols.resharper_required_modifiers = any +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.public_fields_symbols.resharper_applicable_kinds = field,readonly_field +dotnet_naming_symbols.public_fields_symbols.resharper_required_modifiers = instance +dotnet_naming_symbols.public_static_fields_symbols.applicable_accessibilities = public,internal,protected,protected_internal,private_protected +dotnet_naming_symbols.public_static_fields_symbols.applicable_kinds = field +dotnet_naming_symbols.public_static_fields_symbols.required_modifiers = static +dotnet_naming_symbols.public_static_fields_symbols.resharper_applicable_kinds = field +dotnet_naming_symbols.public_static_fields_symbols.resharper_required_modifiers = static +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 = readonly,static +dotnet_naming_symbols.static_readonly_symbols.resharper_applicable_kinds = readonly_field +dotnet_naming_symbols.static_readonly_symbols.resharper_required_modifiers = static +dotnet_naming_symbols.types_and_namespaces_symbols.applicable_accessibilities = * +dotnet_naming_symbols.types_and_namespaces_symbols.applicable_kinds = class,delegate,enum,namespace,struct +dotnet_naming_symbols.types_and_namespaces_symbols.resharper_applicable_kinds = namespace,class,struct,enum,delegate +dotnet_naming_symbols.types_and_namespaces_symbols.resharper_required_modifiers = any +dotnet_naming_symbols.type_parameters_symbols.applicable_accessibilities = * +dotnet_naming_symbols.type_parameters_symbols.applicable_kinds = type_parameter +dotnet_naming_symbols.type_parameters_symbols.resharper_applicable_kinds = type_parameter +dotnet_naming_symbols.type_parameters_symbols.resharper_required_modifiers = any +dotnet_naming_symbols.unity_serialized_field_symbols.applicable_accessibilities = * +dotnet_naming_symbols.unity_serialized_field_symbols.applicable_kinds = +dotnet_naming_symbols.unity_serialized_field_symbols.resharper_applicable_kinds = unity_serialised_field +dotnet_naming_symbols.unity_serialized_field_symbols.resharper_required_modifiers = instance +dotnet_separate_import_directive_groups = false +dotnet_sort_system_directives_first = true +dotnet_style_parentheses_in_arithmetic_binary_operators = never_if_unnecessary:none +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:none +dotnet_style_parentheses_in_relational_binary_operators = never_if_unnecessary:none +dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion +dotnet_style_predefined_type_for_member_access = true:suggestion +dotnet_style_prefer_collection_expression = when_types_loosely_match: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 = +fsharp_align_function_signature_to_indentation = false +fsharp_alternative_long_member_definitions = false +fsharp_indent_on_try_with = false +fsharp_keep_if_then_in_same_line = false +fsharp_max_array_or_list_width = 80 +fsharp_max_elmish_width = 40 +fsharp_max_function_binding_width = 40 +fsharp_max_if_then_else_short_width = 60 +fsharp_max_infix_operator_expression = 80 +fsharp_max_record_width = 40 +fsharp_max_value_binding_width = 80 +fsharp_multiline_block_brackets_on_same_column = false +fsharp_multi_line_lambda_closing_newline = false +fsharp_newline_between_type_definition_and_members = true +fsharp_semicolon_at_end_of_line = false +fsharp_single_argument_web_mode = false +fsharp_space_after_comma = true +fsharp_space_after_semicolon = true +fsharp_space_around_delimiter = true +fsharp_space_before_class_constructor = false +fsharp_space_before_colon = false +fsharp_space_before_lowercase_invocation = true +fsharp_space_before_member = false +fsharp_space_before_parameter = true +fsharp_space_before_semicolon = false +fsharp_space_before_uppercase_invocation = false + +# ReSharper properties +resharper_accessor_owner_body = accessors_with_expression_body +resharper_alignment_tab_fill_style = use_spaces +resharper_align_first_arg_by_paren = false +resharper_align_linq_query = false +resharper_align_multiline_array_and_object_initializer = false +resharper_align_multiline_array_initializer = true +resharper_align_multiline_binary_patterns = false +resharper_align_multiline_comments = true +resharper_align_multiline_ctor_init = true +resharper_align_multiline_expression_braces = false +resharper_align_multiline_implements_list = true +resharper_align_multiline_list_pattern = false +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_multiline_type_parameter_constraints = false +resharper_align_multiline_type_parameter_list = false +resharper_align_ternary = align_not_nested +resharper_align_tuple_components = false +resharper_allow_alias = true +resharper_allow_high_precedence_app_parens = true +resharper_always_use_end_of_line_brace_style = false +resharper_apply_auto_detected_rules = true +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_access_specifier = 0 +resharper_blank_lines_after_block_statements = 1 +resharper_blank_lines_after_case = 0 +resharper_blank_lines_after_control_transfer_statements = 0 +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 = 0 +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_different_module_member_kinds = 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_multiline_module_members = 1 +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_module_member = 0 +resharper_blank_lines_around_single_line_property = 0 +resharper_blank_lines_around_single_line_type = 1 +resharper_blank_lines_around_type = 1 +resharper_blank_lines_before_access_specifier = 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_first_module_member_in_nested_module = 0 +resharper_blank_lines_before_first_module_member_in_top_level_module = 1 +resharper_blank_lines_before_multiline_statements = 0 +resharper_blank_lines_before_single_line_comment = 1 +resharper_blank_lines_inside_namespace = 0 +resharper_blank_lines_inside_type = 0 +resharper_blank_line_after_pi = true +resharper_blank_line_around_top_level_modules = 2 +resharper_braces_redundant = true +resharper_break_template_declaration = line_break +resharper_builtin_type_apply_to_native_integer = false +resharper_can_use_global_alias = false +resharper_configure_await_analysis_mode = disabled +resharper_constructor_or_destructor_body = block_body +resharper_continuous_indent_multiplier = 1 +resharper_continuous_line_indent = single +resharper_cpp_align_multiline_argument = true +resharper_cpp_align_multiline_binary_expressions_chain = false +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_allow_comment_after_lbrace = false +resharper_cpp_allow_far_alignment = false +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 = true +resharper_cpp_invocable_declaration_braces = next_line +resharper_cpp_keep_blank_lines_in_declarations = 2 +resharper_cpp_keep_existing_arrangement = true +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_place_simple_blocks_on_single_line = false +resharper_cpp_space_after_unary_operator = false +resharper_cpp_space_around_binary_operator = true +resharper_cpp_type_declaration_braces = next_line +resharper_cpp_wrap_lines = true +resharper_csharp_align_multiline_argument = false +resharper_csharp_align_multiline_binary_expressions_chain = true +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 = false +resharper_csharp_allow_comment_after_lbrace = true +resharper_csharp_allow_far_alignment = false +resharper_csharp_blank_lines_inside_region = 0 +resharper_csharp_empty_block_style = together_same_line +resharper_csharp_insert_final_newline = true +resharper_csharp_keep_blank_lines_in_declarations = 1 +resharper_csharp_keep_existing_enum_arrangement = false +resharper_csharp_keep_nontrivial_alias = false +resharper_csharp_new_line_before_while = false +resharper_csharp_prefer_qualified_reference = false +resharper_csharp_space_after_unary_operator = false +resharper_csharp_wrap_before_binary_opsign = true +resharper_csharp_wrap_lines = false +resharper_cxxcli_property_declaration_braces = next_line +resharper_declaration_body_on_the_same_line = if_owner_is_single_line +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_slate_format = true +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_export_declaration_braces = next_line +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_formatter_off_tag = @formatter:off +resharper_formatter_on_tag = @formatter:on +resharper_formatter_tags_accept_regexp = false +resharper_formatter_tags_enabled = true +resharper_format_leading_spaces_decl = false +resharper_free_block_braces = next_line +resharper_fsharp_allow_far_alignment = true +resharper_fsharp_empty_block_style = together_same_line +resharper_fsharp_insert_final_newline = false +resharper_fsharp_type_declaration_braces = pico +resharper_fsharp_wrap_lines = true +resharper_function_declaration_return_type_style = do_not_change +resharper_function_definition_return_type_style = do_not_change +resharper_generator_mode = false +resharper_html_allow_far_alignment = 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_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_break_from_case = 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_declaration_after_ufunction_and_uproperty = false +resharper_indent_export_declaration_members = true +resharper_indent_goto_labels = true +resharper_indent_inside_namespace = true +resharper_indent_invocation_pars = inside +resharper_indent_member_initializer_list = true +resharper_indent_method_decl_pars = inside +resharper_indent_nested_fixed_stmt = false +resharper_indent_nested_foreach_stmt = false +resharper_indent_nested_for_stmt = false +resharper_indent_nested_lock_stmt = false +resharper_indent_nested_usings_stmt = false +resharper_indent_nested_while_stmt = false +resharper_indent_pars = inside +resharper_indent_preprocessor_directives = normal +resharper_indent_preprocessor_if = no_indent +resharper_indent_preprocessor_other = no_indent +resharper_indent_preprocessor_region = usual_indent +resharper_indent_primary_constructor_decl_pars = inside +resharper_indent_raw_literal_string = align +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 = false +resharper_int_align_bitfield_sizes = false +resharper_int_align_comments = false +resharper_int_align_declaration_names = false +resharper_int_align_designated_initializers = false +resharper_int_align_enum_initializers = false +resharper_int_align_eq = false +resharper_int_align_fix_in_adjacent = true +resharper_keep_blank_lines_in_code = 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 = true +resharper_keep_existing_embedded_block_arrangement = false +resharper_keep_existing_expr_member_arrangement = true +resharper_keep_existing_invocation_parens_arrangement = true +resharper_keep_existing_line_break_before_declaration_body = true +resharper_keep_existing_list_patterns_arrangement = true +resharper_keep_existing_primary_constructor_declaration_parens_arrangement = true +resharper_keep_existing_property_patterns_arrangement = true +resharper_keep_existing_switch_expression_arrangement = true +resharper_keep_max_blank_line_around_module_members = 2 +resharper_keep_user_linebreaks = true +resharper_keep_user_wrapping = true +resharper_labeled_statement_style = line_break +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_after_deref_in_trailing_return_types = do_not_change +resharper_line_break_after_init_statement = do_not_change +resharper_line_break_after_type_repr_access_modifier = true +resharper_line_break_before_comma_in_member_initializer_lists = false +resharper_line_break_before_deref_in_trailing_return_types = do_not_change +resharper_line_break_before_function_try_block = do_not_change +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 = 100 +resharper_max_attribute_length_for_same_line = 38 +resharper_max_enum_members_on_line = 3 +resharper_max_formal_parameters_on_line = 10000 +resharper_max_initializer_elements_on_line = 10 +resharper_max_invocation_arguments_on_line = 10000 +resharper_max_primary_constructor_parameters_on_line = 10000 +resharper_member_initializer_list_style = do_not_change +resharper_method_or_operator_body = expression_body +resharper_namespace_declaration_braces = next_line +resharper_namespace_indentation = all +resharper_nested_ternary_style = autodetect +resharper_never_outdent_pipe_operators = true +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_null_checking_pattern_style = not_null_pattern +resharper_object_creation_when_type_evident = target_typed +resharper_object_creation_when_type_not_evident = explicitly_typed +resharper_old_engine = false +resharper_outdent_binary_operators = true +resharper_outdent_binary_ops = false +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, shift, bitwise_and, bitwise_exclusive_or, bitwise_inclusive_or, bitwise +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_accessorholder_attribute_on_same_line = false +resharper_place_accessor_attribute_on_same_line = false +resharper_place_comments_at_first_column = false +resharper_place_constructor_initializer_on_same_line = true +resharper_place_event_attribute_on_same_line = false +resharper_place_expr_accessor_on_single_line = if_owner_is_single_line +resharper_place_expr_method_on_single_line = if_owner_is_single_line +resharper_place_expr_property_on_single_line = if_owner_is_single_line +resharper_place_field_attribute_on_same_line = false +resharper_place_linq_into_on_new_line = false +resharper_place_method_attribute_on_same_line = false +resharper_place_namespace_definitions_on_same_line = false +resharper_place_primary_constructor_initializer_on_same_line = true +resharper_place_property_attribute_on_same_line = false +resharper_place_record_field_attribute_on_same_line = if_owner_is_single_line +resharper_place_simple_case_statement_on_same_line = false +resharper_place_simple_embedded_statement_on_same_line = if_owner_is_single_line +resharper_place_simple_initializer_on_single_line = true +resharper_place_simple_list_pattern_on_single_line = true +resharper_place_simple_property_pattern_on_single_line = true +resharper_place_simple_switch_expression_on_single_line = false +resharper_place_single_method_argument_lambda_on_same_line = true +resharper_place_type_attribute_on_same_line = false +resharper_place_type_constraints_on_same_line = true +resharper_prefer_explicit_discard_declaration = false +resharper_prefer_line_break_after_multiline_lparen = true +resharper_prefer_roslyn_rules_for_parentheses_clarity = false +resharper_prefer_separate_deconstructed_variables_declaration = false +resharper_prefer_wrap_around_eq = default +resharper_preserve_spaces_inside_tags = pre,textarea +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_only_unused_aliases = true +resharper_remove_spaces_on_blank_lines = true +resharper_remove_this_qualifier = true +resharper_remove_unused_only_aliases = false +resharper_requires_expression_braces = next_line +resharper_resx_allow_far_alignment = false +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_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_shaderlab_allow_far_alignment = false +resharper_shaderlab_brace_style = next_line +resharper_shaderlab_insert_final_newline = false +resharper_shaderlab_wrap_lines = true +resharper_show_autodetect_configure_formatting_tip = false +resharper_simple_block_style = do_not_change +resharper_simple_case_statement_style = do_not_change +resharper_simple_embedded_statement_style = do_not_change +resharper_slate_brackets_indent = inside +resharper_slate_brackets_wrap = chop_always +resharper_slate_wrap_before_bracket = true +resharper_slate_wrap_chained_binary_expression = chop_if_long +resharper_slate_wrap_chained_member_access = chop_if_long +resharper_sort_attributes = false +resharper_sort_class_selectors = false +resharper_sort_usings = true +resharper_spaces_around_eq_in_attribute = false +resharper_spaces_around_eq_in_pi_attribute = false +resharper_spaces_inside_tags = false +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_bitfield_declarator = true +resharper_space_after_colon_in_case = true +resharper_space_after_colon_in_inheritance_clause = true +resharper_space_after_comma = true +resharper_space_after_ellipsis_in_parameter_pack = true +resharper_space_after_for_colon = 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_operator_keyword = true +resharper_space_after_operator_not = false +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_ptr_in_nested_declarator = false +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_semicolon_in_for_statement = true +resharper_space_after_slate_operator = true +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_deref_in_trailing_return_type = true +resharper_space_around_lambda_arrow = true +resharper_space_around_member_access_operator = false +resharper_space_around_relational_op = 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_attribute_target_colon = false +resharper_space_before_checked_parentheses = false +resharper_space_before_colon = false +resharper_space_before_colon_in_bitfield_declarator = true +resharper_space_before_colon_in_case = false +resharper_space_before_colon_in_ctor_initializer = true +resharper_space_before_colon_in_inheritance_clause = true +resharper_space_before_comma = false +resharper_space_before_default_parentheses = false +resharper_space_before_ellipsis_in_parameter_pack = false +resharper_space_before_empty_invocation_parentheses = false +resharper_space_before_empty_method_parentheses = false +resharper_space_before_for_colon = true +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_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_postfix_operator = 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_semicolon = false +resharper_space_before_semicolon_in_for_statement = 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_trailing_comment_text = false +resharper_space_before_typeof_parentheses = false +resharper_space_before_type_argument_angle = 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_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_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_checked_parentheses = false +resharper_space_within_declaration_parentheses = false +resharper_space_within_default_parentheses = false +resharper_space_within_empty_blocks = 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_template_params = false +resharper_space_within_expression_parentheses = false +resharper_space_within_initializer_braces = false +resharper_space_within_invocation_parentheses = false +resharper_space_within_method_parentheses = false +resharper_space_within_nameof_parentheses = false +resharper_space_within_new_parentheses = false +resharper_space_within_parentheses = false +resharper_space_within_single_line_array_initializer_braces = true +resharper_space_within_sizeof_parentheses = false +resharper_space_within_slice_pattern = true +resharper_space_within_template_args = 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_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_T4_allow_far_alignment = false +resharper_T4_insert_final_newline = false +resharper_T4_wrap_lines = true +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 = false +resharper_trailing_comma_in_singleline_lists = false +resharper_treat_case_statement_with_break_as_simple = true +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_old_engine = false +resharper_use_roslyn_logic_for_evident_types = true +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_allow_far_alignment = false +resharper_vb_blank_lines_inside_region = 1 +resharper_vb_insert_final_newline = false +resharper_vb_keep_blank_lines_in_declarations = 2 +resharper_vb_keep_nontrivial_alias = true +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_before_binary_opsign = false +resharper_vb_wrap_lines = true +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_after_primary_constructor_declaration_lpar = true +resharper_wrap_after_property_in_chained_method_calls = false +resharper_wrap_arguments = wrap_if_long +resharper_wrap_arguments_style = wrap_if_long +resharper_wrap_around_elements = true +resharper_wrap_array_initializer_style = wrap_if_long +resharper_wrap_base_clause_style = wrap_if_long +resharper_wrap_before_arrow_with_expressions = false +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_eq = true +resharper_wrap_before_expression_rbrace = true +resharper_wrap_before_extends_colon = false +resharper_wrap_before_first_method_call = 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 = true +resharper_wrap_before_primary_constructor_declaration_lpar = false +resharper_wrap_before_primary_constructor_declaration_rpar = 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 = chop_if_long +resharper_wrap_comments = false +resharper_wrap_ctor_initializer_style = wrap_if_long +resharper_wrap_enumeration_style = chop_if_long +resharper_wrap_enum_declaration = chop_always +resharper_wrap_extends_list_style = wrap_if_long +resharper_wrap_for_stmt_header_style = chop_if_long +resharper_wrap_list_pattern = wrap_if_long +resharper_wrap_multiple_declaration_style = chop_if_long +resharper_wrap_multiple_type_parameter_constraints_style = chop_if_long +resharper_wrap_object_and_collection_initializer_style = chop_if_long +resharper_wrap_parameters_style = wrap_if_long +resharper_wrap_primary_constructor_parameters_style = 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_verbatim_interpolated_strings = no_wrap +resharper_xmldoc_allow_far_alignment = false +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_pi_attribute_style = do_not_touch +resharper_xmldoc_space_before_self_closing = true +resharper_xmldoc_wrap_lines = false +resharper_xmldoc_wrap_tags_and_pi = true +resharper_xmldoc_wrap_text = true +resharper_xml_allow_far_alignment = false +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_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_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_all_underscore_local_parameter_name_highlighting = warning +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_append_to_collection_expression_highlighting = suggestion +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 = suggestion +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 = suggestion +resharper_arrange_method_or_operator_body_highlighting = suggestion +resharper_arrange_null_checking_pattern_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_assignment_instead_of_discard_highlighting = warning +resharper_assignment_in_conditional_expression_highlighting = warning +resharper_assignment_is_fully_discarded_highlighting = warning +resharper_assign_null_to_not_null_attribute_highlighting = warning +resharper_asxx_path_error_highlighting = warning +resharper_async_iterator_invocation_without_await_foreach_highlighting = warning +resharper_async_void_event_handler_method_highlighting = suggestion +resharper_async_void_lambda_highlighting = warning +resharper_async_void_method_highlighting = suggestion +resharper_async_void_throw_exception_highlighting = suggestion +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_blazor_editor_required_highlighting = warning +resharper_both_context_call_declaration_global_highlighting = warning +resharper_both_context_call_usage_global_highlighting = warning +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_cannot_apply_equality_operator_to_type_highlighting = warning +resharper_can_replace_cast_with_lambda_return_type_highlighting = hint +resharper_can_replace_cast_with_shorter_type_argument_highlighting = suggestion +resharper_can_replace_cast_with_type_argument_highlighting = hint +resharper_can_replace_cast_with_variable_type_highlighting = hint +resharper_can_simplify_dictionary_lookup_with_try_add_highlighting = suggestion +resharper_can_simplify_dictionary_lookup_with_try_get_value_highlighting = suggestion +resharper_can_simplify_dictionary_removing_with_single_call_highlighting = suggestion +resharper_can_simplify_dictionary_try_get_value_with_get_value_or_default_highlighting = suggestion +resharper_can_simplify_is_assignable_from_highlighting = suggestion +resharper_can_simplify_is_instance_of_type_highlighting = suggestion +resharper_can_simplify_set_adding_with_single_call_highlighting = suggestion +resharper_can_simplify_string_escape_sequence_highlighting = hint +resharper_captured_primary_constructor_parameter_is_mutable_highlighting = warning +resharper_center_tag_is_obsolete_highlighting = warning +resharper_change_field_type_to_system_threading_lock_highlighting = suggestion +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 = none +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_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_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_command_invasion_declaration_global_highlighting = warning +resharper_command_invasion_usage_global_highlighting = warning +resharper_compare_non_constrained_generic_with_null_highlighting = none +resharper_compare_of_floats_by_equality_operator_highlighting = warning +resharper_conditional_access_qualifier_is_non_nullable_according_to_api_contract_highlighting = warning +resharper_conditional_ternary_equal_branch_highlighting = warning +resharper_condition_is_always_true_or_false_according_to_nullable_api_contract_highlighting = warning +resharper_condition_is_always_true_or_false_highlighting = warning +resharper_conflict_cqrs_attribute_highlighting = warning +resharper_confusing_char_as_integer_in_constructor_highlighting = warning +resharper_constant_conditional_access_qualifier_highlighting = warning +resharper_constant_expected_highlighting = suggestion +resharper_constant_null_coalescing_condition_highlighting = warning +resharper_consteval_if_is_always_constant_highlighting = warning +resharper_constructor_initializer_loop_highlighting = warning +resharper_constructor_with_must_dispose_resource_attribute_base_is_not_annotated_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_constructor_to_member_initializers_highlighting = suggestion +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_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_extension_block_highlighting = suggestion +resharper_convert_to_lambda_expression_highlighting = suggestion +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_bound_to_delegate_method_is_not_marked_as_u_function_highlighting = warning +resharper_cpp_clang_tidy_abseil_cleanup_ctad_highlighting = none +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_ranges_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_assignment_in_if_condition_highlighting = none +resharper_cpp_clang_tidy_bugprone_bad_signal_to_kill_thread_highlighting = warning +resharper_cpp_clang_tidy_bugprone_bitwise_pointer_cast_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_capturing_this_in_member_variable_highlighting = warning +resharper_cpp_clang_tidy_bugprone_casting_through_void_highlighting = warning +resharper_cpp_clang_tidy_bugprone_chained_comparison_highlighting = warning +resharper_cpp_clang_tidy_bugprone_compare_pointer_to_member_virtual_function_highlighting = warning +resharper_cpp_clang_tidy_bugprone_copy_constructor_init_highlighting = warning +resharper_cpp_clang_tidy_bugprone_crtp_constructor_accessibility_highlighting = suggestion +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_empty_catch_highlighting = warning +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_enable_if_highlighting = warning +resharper_cpp_clang_tidy_bugprone_incorrect_enable_shared_from_this_highlighting = warning +resharper_cpp_clang_tidy_bugprone_incorrect_roundings_highlighting = warning +resharper_cpp_clang_tidy_bugprone_inc_dec_in_conditions_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_misleading_setter_of_reference_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_new_in_one_expression_highlighting = warning +resharper_cpp_clang_tidy_bugprone_multiple_statement_macro_highlighting = warning +resharper_cpp_clang_tidy_bugprone_multi_level_implicit_pointer_conversion_highlighting = warning +resharper_cpp_clang_tidy_bugprone_narrowing_conversions_highlighting = warning +resharper_cpp_clang_tidy_bugprone_nondeterministic_pointer_iteration_order_highlighting = warning +resharper_cpp_clang_tidy_bugprone_non_zero_enum_to_bool_conversion_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_optional_value_conversion_highlighting = warning +resharper_cpp_clang_tidy_bugprone_parent_virtual_call_highlighting = warning +resharper_cpp_clang_tidy_bugprone_pointer_arithmetic_on_polymorphic_object_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_return_const_ref_from_parameter_highlighting = warning +resharper_cpp_clang_tidy_bugprone_shared_ptr_array_mismatch_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_standalone_empty_highlighting = warning +resharper_cpp_clang_tidy_bugprone_stringview_nullptr_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_memory_comparison_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_realloc_usage_highlighting = warning +resharper_cpp_clang_tidy_bugprone_suspicious_semicolon_highlighting = warning +resharper_cpp_clang_tidy_bugprone_suspicious_stringview_data_usage_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_switch_missing_default_case_highlighting = none +resharper_cpp_clang_tidy_bugprone_tagged_union_member_count_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_unchecked_optional_access_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_unintended_char_ostream_output_highlighting = warning +resharper_cpp_clang_tidy_bugprone_unique_ptr_array_mismatch_highlighting = warning +resharper_cpp_clang_tidy_bugprone_unsafe_functions_highlighting = warning +resharper_cpp_clang_tidy_bugprone_unused_local_non_trivial_variable_highlighting = none +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_arr39_c_highlighting = none +resharper_cpp_clang_tidy_cert_con36_c_highlighting = none +resharper_cpp_clang_tidy_cert_con54_cpp_highlighting = none +resharper_cpp_clang_tidy_cert_ctr56_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_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_err33_c_highlighting = warning +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_exp42_c_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_flp37_c_highlighting = none +resharper_cpp_clang_tidy_cert_int09_c_highlighting = none +resharper_cpp_clang_tidy_cert_mem57_cpp_highlighting = warning +resharper_cpp_clang_tidy_cert_msc24_c_highlighting = none +resharper_cpp_clang_tidy_cert_msc30_c_highlighting = none +resharper_cpp_clang_tidy_cert_msc32_c_highlighting = none +resharper_cpp_clang_tidy_cert_msc33_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_msc54_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_errno_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_trust_nonnull_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_api_modeling_trust_returns_nonnull_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_core_bitwise_shift_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_core_builtin_assume_modeling_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_dereference_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_fixed_address_dereference_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_new_array_size_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_array_delete_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_string_checker_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_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_core_enum_cast_out_of_range_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_optin_taint_generic_taint_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_optin_taint_tainted_alloc_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_optin_taint_tainted_div_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_optin_taint_taint_propagation_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_array_bound_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_security_cert_env_invalid_ptr_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_security_mmap_write_exec_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_security_pointer_sub_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_security_putenv_stack_array_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_security_setgid_setuid_order_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_unix_api_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_unix_block_in_critical_section_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_unix_chroot_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_not_null_terminated_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_errno_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_std_c_library_functions_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_unix_stream_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_aarch64_sme_attributes_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_alias_template_in_declaration_name_highlighting = warning +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_always_inline_coroutine_highlighting = none +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_android_unversioned_fallback_highlighting = none +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_argument_undefined_behaviour_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_arm_interrupt_save_fp_no_vfp_unit_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_arm_interrupt_vfp_clobber_highlighting = none +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_array_compare_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_array_parameter_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_access_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_attribute_warning_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_at_protocol_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_auto_decl_extensions_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_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_instead_of_logical_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_bitwise_op_parentheses_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_bit_int_extension_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_bounds_safety_counted_by_elt_type_unknown_size_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_braced_scalar_init_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_branch_protection_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_c23_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_c23_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_c2x_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_c2x_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_c2y_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_function_type_mismatch_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cast_function_type_strict_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_cfi_unchecked_callee_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cf_string_literal_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_character_conversion_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_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_coro_non_aligned_allocation_function_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_coro_type_aware_allocation_function_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_const_reference_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_narrowing_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp14_attribute_extensions_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_attribute_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_attribute_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_cpp23_attribute_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp23_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp23_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp23_lambda_attributes_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp26_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_cpp2c_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp2c_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_cpp_hidden_decl_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp_keyword_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp_unterminated_string_initialization_highlighting = warning +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_c_attribute_extension_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_dangling_assignment_gsl_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_dangling_assignment_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_dangling_capture_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 = none +resharper_cpp_clang_tidy_clang_diagnostic_decls_in_multiple_modules_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_defaulted_function_deleted_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_default_const_init_field_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_default_const_init_field_unsafe_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_default_const_init_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_default_const_init_unsafe_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_default_const_init_var_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_default_const_init_var_unsafe_highlighting = warning +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_delimited_escape_sequence_extension_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_altivec_src_compat_highlighting = none +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_builtins_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_coroutine_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_declarations_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_declarations_switch_case_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_literal_operator_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_missing_comma_variadic_parameter_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_non_prototype_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_octal_literals_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_ofast_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_pragma_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_redundant_constexpr_static_def_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_type_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_volatile_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecate_lax_vec_conv_all_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 = none +resharper_cpp_clang_tidy_clang_diagnostic_documentation_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_documentation_html_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_documentation_pedantic_highlighting = none +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 = none +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_dxil_validation_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_eager_load_cxx_named_modules_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_excessive_regsave_highlighting = none +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_experimental_header_units_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_experimental_lifetime_safety_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_experimental_option_highlighting = none +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_explicit_specialization_storage_class_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_export_unnamed_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_extractapi_misuse_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_ext_cxx_type_aware_allocators_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_final_dtor_non_final_class_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_final_macro_highlighting = warning +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_overflow_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_format_overflow_non_kprintf_highlighting = none +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_signedness_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_format_truncation_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_format_truncation_non_kprintf_highlighting = none +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_friend_enum_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_function_def_in_objc_container_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_function_effects_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_function_multiversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_future_attribute_extensions_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_line_marker_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_null_pointer_arithmetic_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_offsetof_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_pointer_arith_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_redeclared_enum_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_statement_expression_from_macro_expansion_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_gpu_maybe_wrong_side_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_higher_precision_for_complex_division_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_hip_omp_target_directives_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_hip_only_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_hlsl202y_extensions_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_hlsl_availability_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_hlsl_dxc_compatability_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_hlsl_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_hlsl_implicit_binding_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_base_class_qualifiers_highlighting = warning +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_ignored_reference_qualifiers_highlighting = warning +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_enum_enum_cast_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_conversion_on_negation_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_int_enum_cast_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_implicit_void_ptr_cast_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_import_implementation_partition_unit_in_interface_unit_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_angled_in_module_purview_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_function_pointer_types_strict_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_library_redeclaration_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_ms_pragma_section_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_init_priority_reserved_highlighting = none +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_installapi_violation_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_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_gnu_asm_cast_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_static_assert_message_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_token_paste_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_unevaluated_string_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_utf8_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_version_availability_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_jump_misses_init_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_legacy_constant_register_binding_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_linker_warnings_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_attached_to_named_module_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_mathematical_notation_identifier_extension_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_math_errno_enabled_with_veclib_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_init_from_predefined_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_inline_on_non_function_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_mutable_reference_highlighting = none +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_string_literal_from_predefined_highlighting = warning +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_misexpect_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_designated_field_initializers_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_multilib_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_template_arg_list_after_template_kw_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_mix_packoffset_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_file_mapping_mismatch_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_ms_bitfield_padding_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_multichar_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_multilib_not_found_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_multiple_move_vbase_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_multi_gpu_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_nan_infinity_disabled_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 = none +resharper_cpp_clang_tidy_clang_diagnostic_nonportable_system_include_path_highlighting = none +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_nontrivial_memcall_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 = none +resharper_cpp_clang_tidy_clang_diagnostic_nrvo_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_nvcc_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_octal_prefix_extension_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_openacc_cache_var_inside_loop_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_openacc_confusing_routine_name_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_openacc_deprecated_clause_alias_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_openacc_self_if_potential_conflict_highlighting = warning +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_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_openmp_future_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_exception_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_deployment_version_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_overriding_method_mismatch_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_overriding_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_packed_non_pod_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_padded_bitfield_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_pedantic_macros_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_perf_constraint_implies_noexcept_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_preferred_type_bitfield_enum_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pre_c11_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_c11_compat_pedantic_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_c23_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_c23_compat_pedantic_highlighting = none +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_c2y_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_c2y_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_cpp23_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp23_compat_pedantic_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp26_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp26_compat_pedantic_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp2c_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp2c_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_ptrauth_null_pointers_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_read_only_types_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_attribute_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_redundant_consteval_if_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 = none +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_super_attribute_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_reserved_attribute_identifier_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_module_identifier_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_reserved_user_defined_literal_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_restrict_expansion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_retained_language_linkage_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_return_local_addr_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_return_mismatch_highlighting = none +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 = none +resharper_cpp_clang_tidy_clang_diagnostic_rewrite_not_bool_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_sarif_format_unstable_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_bool_highlighting = warning +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_single_bit_bitfield_constant_conversion_highlighting = warning +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_openacc_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_source_uses_openmp_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_spirv_compat_highlighting = none +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_primary_template_shadow_highlighting = warning +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_default_highlighting = none +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_alignment_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_sync_fetch_and_nand_semantics_changed_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_target_clones_mixed_specifiers_highlighting = none +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_negation_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_template_in_declaration_name_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_tentative_definition_array_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_tentative_definition_compat_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_pointer_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_reference_return_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_unaligned_access_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unaligned_qualifier_implicit_cast_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_arm_za_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_undefined_arm_zt0_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 = none +resharper_cpp_clang_tidy_clang_diagnostic_undef_prefix_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_undef_true_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_underaligned_exception_object_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_underlying_atomic_qualifier_ignored_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_underlying_cv_qualifier_ignored_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_pointer_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_uninitialized_const_reference_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_uninitialized_explicit_init_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_uninitialized_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unique_object_duplication_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unknown_acc_extension_clause_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_directives_highlighting = warning +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_unnecessary_virtual_specifier_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unneeded_internal_declaration_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_unneeded_member_function_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unqualified_std_cast_call_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_break_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_fallthrough_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_generic_assoc_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_unsafe_buffer_usage_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_unsafe_buffer_usage_in_container_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_unsafe_buffer_usage_in_libc_call_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_unsequenced_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_abi_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_unterminated_string_initialization_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 = none +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 = none +resharper_cpp_clang_tidy_clang_diagnostic_unused_template_highlighting = none +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_variadic_macro_arguments_omitted_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_cxx_extension_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_vla_extension_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_vla_extension_static_assert_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_warning_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_capturing_lambda_coroutines_highlighting = warning +resharper_cpp_clang_tidy_cppcoreguidelines_avoid_const_or_ref_data_members_highlighting = warning +resharper_cpp_clang_tidy_cppcoreguidelines_avoid_c_arrays_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_avoid_do_while_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_avoid_reference_coroutine_parameters_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_to_enum_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_macro_usage_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_misleading_capture_default_by_value_highlighting = warning +resharper_cpp_clang_tidy_cppcoreguidelines_missing_std_forward_highlighting = warning +resharper_cpp_clang_tidy_cppcoreguidelines_narrowing_conversions_highlighting = warning +resharper_cpp_clang_tidy_cppcoreguidelines_noexcept_destructor_highlighting = warning +resharper_cpp_clang_tidy_cppcoreguidelines_noexcept_move_operations_highlighting = warning +resharper_cpp_clang_tidy_cppcoreguidelines_noexcept_swap_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_no_suspend_with_lock_highlighting = warning +resharper_cpp_clang_tidy_cppcoreguidelines_owning_memory_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_prefer_member_initializer_highlighting = none +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 = none +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_rvalue_reference_param_not_moved_highlighting = warning +resharper_cpp_clang_tidy_cppcoreguidelines_slicing_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_special_member_functions_highlighting = suggestion +resharper_cpp_clang_tidy_cppcoreguidelines_use_default_member_init_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_use_enum_class_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_virtual_class_destructor_highlighting = none +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_ignored_remove_result_highlighting = warning +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_inline_function_decl_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_prefer_static_over_anonymous_namespace_highlighting = none +resharper_cpp_clang_tidy_llvm_qualified_auto_highlighting = none +resharper_cpp_clang_tidy_llvm_twine_local_highlighting = none +resharper_cpp_clang_tidy_misc_confusable_identifiers_highlighting = warning +resharper_cpp_clang_tidy_misc_const_correctness_highlighting = none +resharper_cpp_clang_tidy_misc_coroutine_hostile_raii_highlighting = warning +resharper_cpp_clang_tidy_misc_definitions_in_headers_highlighting = none +resharper_cpp_clang_tidy_misc_header_include_cycle_highlighting = warning +resharper_cpp_clang_tidy_misc_include_cleaner_highlighting = none +resharper_cpp_clang_tidy_misc_misleading_bidirectional_highlighting = warning +resharper_cpp_clang_tidy_misc_misleading_identifier_highlighting = warning +resharper_cpp_clang_tidy_misc_misplaced_const_highlighting = none +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_misc_use_anonymous_namespace_highlighting = suggestion +resharper_cpp_clang_tidy_misc_use_internal_linkage_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_macro_to_enum_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_min_max_use_initializer_list_highlighting = suggestion +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_type_traits_highlighting = none +resharper_cpp_clang_tidy_modernize_unary_static_assert_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_use_auto_highlighting = none +resharper_cpp_clang_tidy_modernize_use_bool_literals_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_use_constraints_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_use_default_member_init_highlighting = none +resharper_cpp_clang_tidy_modernize_use_designated_initializers_highlighting = suggestion +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_integer_sign_comparison_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_use_nodiscard_highlighting = hint +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_ranges_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_use_scoped_lock_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_use_starts_ends_with_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_use_std_format_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_use_std_numbers_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_use_std_print_highlighting = suggestion +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_assert_equals_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_nsdate_formatter_highlighting = none +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_avoid_endl_highlighting = warning +resharper_cpp_clang_tidy_performance_enum_size_highlighting = suggestion +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_destructor_highlighting = warning +resharper_cpp_clang_tidy_performance_noexcept_move_constructor_highlighting = warning +resharper_cpp_clang_tidy_performance_noexcept_swap_highlighting = warning +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_avoid_pragma_once_highlighting = none +resharper_cpp_clang_tidy_portability_restrict_system_includes_highlighting = none +resharper_cpp_clang_tidy_portability_simd_intrinsics_highlighting = none +resharper_cpp_clang_tidy_portability_std_allocator_const_highlighting = warning +resharper_cpp_clang_tidy_portability_template_virtual_member_function_highlighting = warning +resharper_cpp_clang_tidy_readability_ambiguous_smartptr_reset_call_highlighting = suggestion +resharper_cpp_clang_tidy_readability_avoid_const_params_in_decls_highlighting = none +resharper_cpp_clang_tidy_readability_avoid_nested_conditional_operator_highlighting = none +resharper_cpp_clang_tidy_readability_avoid_return_with_void_value_highlighting = none +resharper_cpp_clang_tidy_readability_avoid_unconditional_preprocessor_if_highlighting = warning +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_contains_highlighting = none +resharper_cpp_clang_tidy_readability_container_data_pointer_highlighting = suggestion +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_duplicate_include_highlighting = none +resharper_cpp_clang_tidy_readability_else_after_return_highlighting = none +resharper_cpp_clang_tidy_readability_enum_initial_value_highlighting = suggestion +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_length_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_math_missing_parentheses_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_operators_representation_highlighting = suggestion +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_casting_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_inline_specifier_highlighting = none +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_reference_to_constructed_temporary_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_readability_use_concise_preprocessor_directives_highlighting = suggestion +resharper_cpp_clang_tidy_readability_use_std_min_max_highlighting = suggestion +resharper_cpp_clang_tidy_zircon_temporary_objects_highlighting = none +resharper_cpp_class_can_be_final_highlighting = none +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_concept_never_used_highlighting = warning +resharper_cpp_conditional_expression_can_be_simplified_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_definitions_order_highlighting = hint +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_overriden_method_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_evaluation_failure_highlighting = error +resharper_cpp_evaluation_internal_failure_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_forward_enum_declaration_without_underlying_type_highlighting = warning +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_function_result_should_be_used_highlighting = hint +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 = hint +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_module_partition_with_several_partition_units_highlighting = warning +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_multi_character_literal_highlighting = warning +resharper_cpp_multi_character_wide_literal_highlighting = warning +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_pass_value_parameter_by_const_reference_highlighting = suggestion +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_base_class_initializer_highlighting = suggestion +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_complexity_in_comparison_highlighting = suggestion +resharper_cpp_redundant_conditional_expression_highlighting = suggestion +resharper_cpp_redundant_const_specifier_highlighting = hint +resharper_cpp_redundant_control_flow_jump_highlighting = hint +resharper_cpp_redundant_dereferencing_and_taking_address_highlighting = suggestion +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_export_keyword_highlighting = warning +resharper_cpp_redundant_fwd_class_or_enum_specifier_highlighting = suggestion +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_adl_highlighting = none +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_static_specifier_on_thread_local_local_variable_highlighting = hint +resharper_cpp_redundant_template_arguments_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_redundant_zero_initializer_in_aggregate_initialization_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_assert_failure_highlighting = error +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_tabs_and_spaces_mismatch_highlighting = none +resharper_cpp_tabs_are_disallowed_highlighting = none +resharper_cpp_tabs_outside_indent_highlighting = none +resharper_cpp_template_arguments_can_be_deduced_highlighting = hint +resharper_cpp_template_parameter_never_used_highlighting = hint +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_missing_struct_member_highlighting = error +resharper_cpp_ue_missing_super_call_highlighting = warning +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_unmatched_pragma_end_region_directive_highlighting = warning +resharper_cpp_unmatched_pragma_region_directive_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_of_undeclared_class_highlighting = hint +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_warning_directive_highlighting = warning +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_cqrs_debug_highlighting = warning +resharper_cqrs_naming_recommendation_highlighting = warning +resharper_c_declaration_with_implicit_int_type_highlighting = warning +resharper_c_sharp14_overload_resolution_with_span_breaking_change_highlighting = suggestion +resharper_c_sharp_build_cs_invalid_module_name_highlighting = warning +resharper_c_sharp_missing_plugin_dependency_highlighting = warning +resharper_default_struct_equality_is_used_global_highlighting = warning +resharper_default_struct_equality_is_used_local_highlighting = warning +resharper_default_value_attribute_for_optional_parameter_highlighting = warning +resharper_dispose_on_using_variable_highlighting = warning +resharper_double_negation_in_pattern_highlighting = suggestion +resharper_double_negation_operator_highlighting = suggestion +resharper_duplicated_chained_if_bodies_highlighting = hint +resharper_duplicated_sequential_if_bodies_highlighting = hint +resharper_duplicated_statements_highlighting = warning +resharper_duplicated_switch_expression_arms_highlighting = hint +resharper_duplicated_switch_section_bodies_highlighting = hint +resharper_duplicate_item_in_logger_template_highlighting = warning +resharper_duplicate_key_collection_initialization_highlighting = warning +resharper_duplicate_resource_highlighting = warning +resharper_empty_constructor_highlighting = warning +resharper_empty_destructor_highlighting = warning +resharper_empty_extension_block_highlighting = warning +resharper_empty_for_statement_highlighting = warning +resharper_empty_general_catch_clause_highlighting = warning +resharper_empty_namespace_highlighting = warning +resharper_empty_region_highlighting = suggestion +resharper_empty_statement_highlighting = warning +resharper_empty_title_tag_highlighting = hint +resharper_entity_framework_client_side_db_function_call_highlighting = warning +resharper_entity_framework_model_validation_circular_dependency_highlighting = hint +resharper_entity_framework_model_validation_unlimited_string_length_highlighting = warning +resharper_entity_framework_n_plus_one_incomplete_data_query_highlighting = suggestion +resharper_entity_framework_n_plus_one_incomplete_data_usage_highlighting = warning +resharper_entity_framework_n_plus_one_query_highlighting = suggestion +resharper_entity_framework_n_plus_one_usage_highlighting = warning +resharper_entity_framework_unsupported_server_side_function_call_highlighting = warning +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_escaped_keyword_highlighting = warning +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_explicit_caller_info_argument_highlighting = warning +resharper_expression_is_always_null_highlighting = warning +resharper_extract_common_branching_code_highlighting = hint +resharper_extract_common_property_pattern_highlighting = hint +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_specifier_captures_right_braces_highlighting = warning +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_function_complexity_overflow_highlighting = none +resharper_function_never_returns_highlighting = warning +resharper_function_recursive_on_all_paths_highlighting = warning +resharper_f_sharp_builtin_function_reimplementation_highlighting = hint +resharper_f_sharp_cons_with_empty_list_pat_highlighting = suggestion +resharper_f_sharp_dot_lambda_can_be_used_highlighting = hint +resharper_f_sharp_expression_can_be_replaced_with_condition_highlighting = hint +resharper_f_sharp_interpolated_string_highlighting = suggestion +resharper_f_sharp_lambda_can_be_replaced_with_inner_expression_highlighting = hint +resharper_f_sharp_lambda_can_be_simplified_highlighting = hint +resharper_f_sharp_redundant_application_highlighting = warning +resharper_f_sharp_redundant_as_pattern_highlighting = warning +resharper_f_sharp_redundant_attribute_parens_highlighting = warning +resharper_f_sharp_redundant_attribute_suffix_highlighting = warning +resharper_f_sharp_redundant_backticks_highlighting = warning +resharper_f_sharp_redundant_dot_in_indexer_highlighting = warning +resharper_f_sharp_redundant_name_qualifier_highlighting = warning +resharper_f_sharp_redundant_new_highlighting = warning +resharper_f_sharp_redundant_open_highlighting = warning +resharper_f_sharp_redundant_parens_highlighting = warning +resharper_f_sharp_redundant_require_qualified_access_attribute_highlighting = warning +resharper_f_sharp_redundant_string_interpolation_highlighting = suggestion +resharper_f_sharp_redundant_union_case_field_patterns_highlighting = warning +resharper_f_sharp_use_wild_self_id_highlighting = suggestion +resharper_gc_suppress_finalize_for_type_without_destructor_highlighting = warning +resharper_generic_enumerator_not_disposed_highlighting = warning +resharper_godot_missing_parameterless_constructor_highlighting = warning +resharper_heuristic_unreachable_code_highlighting = warning +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_if_std_is_constant_evaluated_can_be_replaced_highlighting = suggestion +resharper_ignored_directive_highlighting = warning +resharper_inactive_preprocessor_branch_highlighting = warning +resharper_inconsistently_synchronized_field_highlighting = warning +resharper_inconsistent_naming_highlighting = warning +resharper_inconsistent_order_of_locks_highlighting = warning +resharper_incorrect_blank_lines_near_braces_highlighting = none +resharper_incorrect_constant_expected_annotation_highlighting = error +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_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_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_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_invoke_as_extension_method_highlighting = suggestion +resharper_in_parameter_with_must_dispose_resource_attribute_highlighting = warning +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_null_check_with_usage_highlighting = suggestion +resharper_lambda_expression_can_be_made_static_highlighting = none +resharper_lambda_expression_must_be_static_highlighting = suggestion +resharper_lambda_should_not_capture_context_highlighting = warning +resharper_localizable_element_highlighting = warning +resharper_local_function_can_be_made_static_highlighting = none +resharper_local_function_hides_method_highlighting = warning +resharper_local_variable_hides_member_highlighting = warning +resharper_local_variable_hides_primary_constructor_parameter_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_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_file_local_highlighting = none +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_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_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_supports_cancellation_highlighting = suggestion +resharper_misleading_body_like_statement_highlighting = warning +resharper_mismatched_asmdef_filename_highlighting = suggestion +resharper_missing_alt_attribute_in_img_tag_highlighting = hint +resharper_missing_blank_lines_highlighting = none +resharper_missing_body_tag_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_more_specific_foreach_variable_type_available_highlighting = suggestion +resharper_move_local_function_after_jump_statement_highlighting = hint +resharper_move_to_existing_positional_deconstruction_pattern_highlighting = hint +resharper_move_to_extension_block_highlighting = hint +resharper_move_variable_declaration_inside_loop_condition_highlighting = suggestion +resharper_multiple_cqrs_entity_highlighting = warning +resharper_multiple_nullable_attributes_usage_highlighting = warning +resharper_multiple_order_by_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 = warning +resharper_mvc_area_not_resolved_highlighting = warning +resharper_mvc_controller_not_resolved_highlighting = warning +resharper_mvc_invalid_model_type_highlighting = error +resharper_mvc_masterpage_not_resolved_highlighting = warning +resharper_mvc_partial_view_not_resolved_highlighting = warning +resharper_mvc_template_not_resolved_highlighting = warning +resharper_mvc_view_component_not_resolved_highlighting = warning +resharper_mvc_view_component_view_not_resolved_highlighting = warning +resharper_mvc_view_not_resolved_highlighting = warning +resharper_negation_of_relational_pattern_highlighting = suggestion +resharper_negative_equality_expression_highlighting = suggestion +resharper_negative_index_highlighting = warning +resharper_nested_record_update_can_be_simplified_highlighting = suggestion +resharper_nested_string_interpolation_highlighting = suggestion +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_out_parameter_variable_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_assigned_out_parameter_highlighting = warning +resharper_not_declared_in_parent_culture_highlighting = warning +resharper_not_disposed_resource_highlighting = warning +resharper_not_disposed_resource_is_returned_by_property_highlighting = warning +resharper_not_disposed_resource_is_returned_highlighting = suggestion +resharper_not_null_or_required_member_is_not_initialized_highlighting = warning +resharper_not_observable_annotation_redundancy_highlighting = warning +resharper_not_overridden_in_specific_culture_highlighting = warning +resharper_not_resolved_in_text_highlighting = warning +resharper_no_support_for_vb_highlighting = warning +resharper_nullable_warning_suppression_is_used_highlighting = none +resharper_nullness_annotation_conflict_with_jet_brains_annotations_highlighting = warning +resharper_null_coalescing_condition_is_always_not_null_according_to_api_contract_highlighting = warning +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_missing_cancel_after_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_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_obsolete_element_error_highlighting = error +resharper_obsolete_element_highlighting = warning +resharper_odin_odin_member_present_in_multiple_groups_highlighting = warning +resharper_odin_odin_member_wrong_grouping_attribute_highlighting = warning +resharper_odin_odin_unknown_grouping_path_highlighting = warning +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_operator_without_matched_checked_operator_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_out_parameter_value_is_always_discarded_global_highlighting = suggestion +resharper_out_parameter_value_is_always_discarded_local_highlighting = warning +resharper_out_parameter_with_handles_resource_disposal_attribute_highlighting = warning +resharper_overridden_with_empty_value_highlighting = warning +resharper_overridden_with_same_value_highlighting = suggestion +resharper_parameter_hides_member_highlighting = warning +resharper_parameter_hides_primary_constructor_parameter_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 = none +resharper_parameter_type_can_be_enumerable_local_highlighting = none +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_pattern_always_matches_highlighting = warning +resharper_pattern_is_always_true_or_false_highlighting = warning +resharper_pattern_is_redundant_highlighting = warning +resharper_pattern_never_matches_highlighting = warning +resharper_place_assignment_expression_into_block_highlighting = none +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_collection_was_modified_highlighting = warning +resharper_possible_invalid_operation_exception_highlighting = warning +resharper_possible_loss_of_fraction_highlighting = warning +resharper_possible_mistaken_call_to_get_type_highlighting = warning +resharper_possible_mistaken_system_type_argument_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_missing_indexer_initializer_comma_highlighting = warning +resharper_possibly_mistaken_use_of_cancellation_token_highlighting = warning +resharper_possibly_mistaken_use_of_interpolated_string_insert_highlighting = warning +resharper_possibly_unintended_side_effects_inside_conditional_invocation_highlighting = warning +resharper_possibly_unintended_usage_parameterless_get_expression_type_highlighting = error +resharper_prefer_concrete_value_over_default_highlighting = suggestion +resharper_prefer_explicitly_provided_tuple_component_name_highlighting = hint +resharper_primary_constructor_parameter_capture_disallowed_highlighting = none +resharper_private_field_can_be_converted_to_local_variable_highlighting = warning +resharper_property_can_be_made_init_only_global_highlighting = suggestion +resharper_property_can_be_made_init_only_local_highlighting = suggestion +resharper_property_field_keyword_is_never_assigned_highlighting = warning +resharper_property_field_keyword_is_never_used_highlighting = warning +resharper_property_not_resolved_highlighting = error +resharper_public_constructor_in_abstract_class_highlighting = suggestion +resharper_pure_attribute_on_void_method_highlighting = warning +resharper_query_invasion_declaration_global_highlighting = warning +resharper_query_invasion_usage_global_highlighting = warning +resharper_raw_string_can_be_simplified_highlighting = hint +resharper_razor_assembly_not_resolved_highlighting = warning +resharper_razor_layout_not_resolved_highlighting = error +resharper_razor_null_conditional_operator_highlighting_highlighting = warning +resharper_razor_section_not_resolved_highlighting = error +resharper_razor_unresolved_component_highlighting = warning +resharper_read_access_in_double_check_locking_highlighting = warning +resharper_redundant_abstract_modifier_highlighting = warning +resharper_redundant_accessor_body_highlighting = suggestion +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_suffix_highlighting = warning +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_bool_compare_highlighting = warning +resharper_redundant_caller_argument_expression_default_value_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_copy_call_highlighting = warning +resharper_redundant_collection_initializer_element_braces_highlighting = hint +resharper_redundant_configure_await_highlighting = suggestion +resharper_redundant_cqrs_attribute_highlighting = warning +resharper_redundant_declaration_semicolon_highlighting = hint +resharper_redundant_default_member_initializer_highlighting = warning +resharper_redundant_delegate_creation_highlighting = warning +resharper_redundant_dictionary_contains_key_before_adding_highlighting = warning +resharper_redundant_disable_warning_comment_highlighting = warning +resharper_redundant_discard_designation_highlighting = suggestion +resharper_redundant_empty_case_else_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_if_else_block_highlighting = hint +resharper_redundant_if_statement_then_keyword_highlighting = none +resharper_redundant_immediate_delegate_invocation_highlighting = suggestion +resharper_redundant_include_highlighting = warning +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_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_directive_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_partial_method_empty_implementation_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_class_keyword_highlighting = warning +resharper_redundant_scoped_parameter_modifier_highlighting = warning +resharper_redundant_sets_required_members_attribute_highlighting = warning +resharper_redundant_setter_value_parameter_declaration_highlighting = hint +resharper_redundant_space_highlighting = none +resharper_redundant_spread_element_highlighting = suggestion +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_switch_expression_arms_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_inside_nameof_highlighting = suggestion +resharper_redundant_type_arguments_of_method_highlighting = warning +resharper_redundant_type_check_in_pattern_highlighting = warning +resharper_redundant_type_declaration_body_highlighting = suggestion +resharper_redundant_unsafe_context_highlighting = warning +resharper_redundant_using_directive_global_highlighting = warning +resharper_redundant_using_directive_highlighting = warning +resharper_redundant_verbatim_prefix_highlighting = suggestion +resharper_redundant_verbatim_string_prefix_highlighting = suggestion +resharper_redundant_virtual_modifier_highlighting = warning +resharper_redundant_with_cancellation_highlighting = warning +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_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_async_with_task_return_highlighting = none +resharper_replace_auto_property_with_computed_property_highlighting = hint +resharper_replace_conditional_expression_with_null_coalescing_highlighting = suggestion +resharper_replace_object_pattern_with_var_pattern_highlighting = suggestion +resharper_replace_sequence_equal_with_constant_pattern_highlighting = suggestion +resharper_replace_slice_with_range_indexer_highlighting = hint +resharper_replace_substring_with_range_indexer_highlighting = hint +resharper_replace_with_field_keyword_highlighting = suggestion +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_primary_constructor_parameter_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_resource_item_not_resolved_highlighting = error +resharper_resource_not_resolved_highlighting = error +resharper_resx_not_resolved_highlighting = warning +resharper_return_of_task_produced_by_using_variable_highlighting = warning +resharper_return_of_using_variable_highlighting = warning +resharper_return_type_can_be_enumerable_global_highlighting = none +resharper_return_type_can_be_enumerable_local_highlighting = none +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_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_script_tag_has_both_src_and_content_attributes_highlighting = error +resharper_sealed_member_in_sealed_class_highlighting = warning +resharper_separate_control_transfer_statement_highlighting = none +resharper_separate_local_functions_with_jump_statement_highlighting = hint +resharper_service_contract_without_operations_highlighting = warning +resharper_shader_lab_shader_reference_multiple_candidates_highlighting = warning +resharper_shader_lab_shader_reference_not_resolved_highlighting = warning +resharper_shebang_directive_bad_placement_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_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_spin_lock_in_readonly_field_highlighting = warning +resharper_stack_alloc_inside_loop_highlighting = warning +resharper_static_member_initializer_referes_to_member_below_highlighting = warning +resharper_static_member_in_generic_type_highlighting = warning +resharper_static_problem_in_text_highlighting = warning +resharper_std_is_constant_evaluated_will_always_evaluate_to_constant_highlighting = warning +resharper_stream_read_return_value_ignored_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_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_span_comparison_highlighting = warning +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_lacks_i_equatable_global_highlighting = warning +resharper_struct_lacks_i_equatable_local_highlighting = warning +resharper_struct_member_can_be_made_read_only_highlighting = none +resharper_suggest_base_type_for_parameter_highlighting = none +resharper_suggest_base_type_for_parameter_in_constructor_highlighting = none +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_suppress_nullable_warning_expression_as_inverted_is_expression_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_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 = hint +resharper_symbol_from_not_copied_locally_reference_used_warning_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_thread_static_at_instance_field_highlighting = warning +resharper_thread_static_field_has_initializer_highlighting = warning +resharper_too_wide_local_variable_scope_highlighting = suggestion +resharper_try_cast_always_succeeds_highlighting = suggestion +resharper_try_statements_can_be_merged_highlighting = hint +resharper_type_parameter_can_be_variant_highlighting = suggestion +resharper_type_with_suspicious_equality_is_used_in_record_global_highlighting = warning +resharper_type_with_suspicious_equality_is_used_in_record_local_highlighting = warning +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_unexpected_attribute_highlighting = warning +resharper_unexpected_directive_highlighting = warning +resharper_unity_burst_accessing_managed_indexer_highlighting = warning +resharper_unity_burst_accessing_managed_method_highlighting = warning +resharper_unity_burst_boxing_not_supported_highlighting = warning +resharper_unity_burst_creating_managed_type_highlighting = warning +resharper_unity_burst_debug_log_invalid_argument_highlighting = warning +resharper_unity_burst_foreach_not_supported_highlighting = warning +resharper_unity_burst_function_signature_contains_managed_types_highlighting = warning +resharper_unity_burst_loading_managed_type_highlighting = warning +resharper_unity_burst_loading_static_not_readonly_highlighting = warning +resharper_unity_burst_local_string_variable_declaration_highlighting = suggestion +resharper_unity_burst_shared_static_create_highlighting = warning +resharper_unity_burst_string_format_invalid_argument_highlighting = warning +resharper_unity_burst_string_format_invalid_format_highlighting = warning +resharper_unity_burst_try_not_supported_highlighting = warning +resharper_unity_burst_typeof_expression_highlighting = warning +resharper_unity_burst_write_static_field_highlighting = warning +resharper_unity_duplicate_event_function_highlighting = warning +resharper_unity_duplicate_shortcut_highlighting = warning +resharper_unity_entities_aspect_wrong_fields_type_highlighting = error +resharper_unity_entities_inconsistent_modifiers_for_dots_inheritor_highlighting = error +resharper_unity_entities_must_be_struct_for_dots_inheritor_highlighting = error +resharper_unity_entities_not_updated_component_lookup_highlighting = warning +resharper_unity_entities_singleton_must_be_requested_highlighting = warning +resharper_unity_expected_component_highlighting = warning +resharper_unity_expected_scriptable_object_highlighting = warning +resharper_unity_explicit_tag_comparison_highlighting = warning +resharper_unity_incorrect_method_signature_highlighting = warning +resharper_unity_incorrect_method_signature_in_string_literal_highlighting = warning +resharper_unity_incorrect_mono_behaviour_instantiation_highlighting = warning +resharper_unity_incorrect_scriptable_object_instantiation_highlighting = warning +resharper_unity_inefficient_multidimensional_array_usage_highlighting = warning +resharper_unity_inefficient_multiplication_order_highlighting = warning +resharper_unity_inefficient_property_access_highlighting = none +resharper_unity_instantiate_without_parent_highlighting = warning +resharper_unity_load_scene_ambiguous_scene_name_highlighting = warning +resharper_unity_load_scene_disabled_scene_name_highlighting = warning +resharper_unity_load_scene_unexisting_scene_highlighting = warning +resharper_unity_load_scene_unknown_scene_name_highlighting = warning +resharper_unity_load_scene_wrong_index_highlighting = warning +resharper_unity_no_null_coalescing_highlighting = none +resharper_unity_no_null_pattern_matching_highlighting = none +resharper_unity_no_null_propagation_highlighting = none +resharper_unity_parameter_not_derived_from_component_highlighting = warning +resharper_unity_performance_critical_code_camera_main_highlighting = hint +resharper_unity_performance_critical_code_invocation_highlighting = hint +resharper_unity_performance_critical_code_null_comparison_highlighting = hint +resharper_unity_possible_misapplication_of_attribute_to_multiple_fields_highlighting = warning +resharper_unity_prefer_address_by_id_to_graphics_params_highlighting = warning +resharper_unity_prefer_generic_method_overload_highlighting = warning +resharper_unity_prefer_guid_reference_highlighting = hint +resharper_unity_prefer_non_alloc_api_highlighting = warning +resharper_unity_property_drawer_on_gui_base_highlighting = warning +resharper_unity_redundant_attribute_on_target_highlighting = warning +resharper_unity_redundant_event_function_highlighting = warning +resharper_unity_redundant_formerly_serialized_as_attribute_highlighting = warning +resharper_unity_redundant_hide_in_inspector_attribute_highlighting = warning +resharper_unity_redundant_initialize_on_load_attribute_highlighting = warning +resharper_unity_redundant_serialize_field_attribute_highlighting = warning +resharper_unity_shared_static_unmanaged_type_highlighting = warning +resharper_unity_unknown_animator_state_name_highlighting = warning +resharper_unity_unknown_input_axes_highlighting = warning +resharper_unity_unknown_layer_highlighting = warning +resharper_unity_unknown_resource_highlighting = warning +resharper_unity_unknown_tag_highlighting = warning +resharper_unity_unresolved_component_or_scriptable_object_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_warning_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_local_function_highlighting = warning +resharper_unused_local_function_parameter_highlighting = warning +resharper_unused_local_function_return_value_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_nullable_directive_highlighting = warning +resharper_unused_parameter_global_highlighting = suggestion +resharper_unused_parameter_in_partial_method_highlighting = warning +resharper_unused_parameter_local_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_default_struct_equality_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_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_discard_assignment_highlighting = suggestion +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_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_nameof_expression_for_part_of_the_string_highlighting = none +resharper_use_nameof_expression_highlighting = suggestion +resharper_use_nameof_for_dependency_property_highlighting = suggestion +resharper_use_name_of_instead_of_to_string_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_object_or_collection_initializer_highlighting = suggestion +resharper_use_pattern_matching_highlighting = suggestion +resharper_use_positional_deconstruction_pattern_highlighting = none +resharper_use_raw_string_highlighting = hint +resharper_use_string_interpolation_highlighting = suggestion +resharper_use_string_interpolation_when_possible_highlighting = hint +resharper_use_switch_case_pattern_variable_highlighting = suggestion +resharper_use_symbol_alias_highlighting = hint +resharper_use_throw_if_null_method_highlighting = none +resharper_use_unsigned_right_shift_operator_highlighting = suggestion +resharper_use_verbatim_string_highlighting = hint +resharper_use_with_expression_to_copy_anonymous_object_highlighting = suggestion +resharper_use_with_expression_to_copy_record_highlighting = suggestion +resharper_use_with_expression_to_copy_struct_highlighting = suggestion +resharper_use_with_expression_to_copy_tuple_highlighting = suggestion +resharper_using_statement_resource_initialization_expression_highlighting = hint +resharper_using_statement_resource_initialization_highlighting = warning +resharper_value_parameter_not_used_highlighting = warning +resharper_value_range_attribute_violation_highlighting = warning +resharper_variable_can_be_not_nullable_highlighting = warning +resharper_variable_hides_outer_variable_highlighting = warning +resharper_variable_length_string_hex_escape_sequence_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_dispose_resource_attribute_highlighting = warning +resharper_void_method_with_must_use_return_value_attribute_highlighting = warning +resharper_vulnerable_api_highlighting = warning +resharper_web_config_module_not_resolved_highlighting = warning +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 = warning +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 = warning +resharper_web_ignored_path_highlighting = none +resharper_web_mapped_path_highlighting = hint +resharper_with_expression_instead_of_initializer_highlighting = suggestion +resharper_with_expression_modifies_all_members_highlighting = warning +resharper_wrong_indent_size_highlighting = none +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_field_modifier_requires_name_attribute_highlighting = warning +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_dynamic_resource_type_highlighting = suggestion +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_element_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_xunit_xunit_test_with_console_output_highlighting = warning +resharper_zero_index_from_end_highlighting = warning + +[{*.har,*.jsb2,*.jsb3,*.json,*.jsonc,*.postman_collection,*.postman_collection.json,*.postman_environment,*.postman_environment.json,.babelrc,.eslintrc,.prettierrc,.stylelintrc,.ws-context,jest.config}] +indent_style = space +indent_size = 2 + +[*.asmdef] +indent_style = space +indent_size = 2 + +[*.{appxmanifest,asax,ascx,aspx,axaml,blockshader,cg,cginc,compute,cs,cshtml,dtd,fs,fsi,fsscript,fsx,fx,fxh,hlsl,hlsli,hlslinc,master,ml,mli,nuspec,paml,razor,resw,resx,shader,shaderFoundry,skin,urtshader,usf,ush,uxml,vb,xaml,xamlx,xoml,xsd}] +indent_style = space +indent_size = 4 +tab_width = 4 diff --git a/.github/workflows/create-release.yaml b/.github/workflows/create-release.yaml index 73d6ad6e..e84af26f 100644 --- a/.github/workflows/create-release.yaml +++ b/.github/workflows/create-release.yaml @@ -125,7 +125,7 @@ jobs: # run: | # filepath="Builds/airconsole-unity-plugin-v${{ env.version }}.unitypackage" # if [ ! -f "$filepath" ]; then - # echo "Build validation of airconsole-unity-plugin-v${{ env.version }}unitypackage failed" + # echo "Build validation of airconsole-unity-plugin-v${{ env.version }} unitypackage failed" # exit 1 # fi @@ -140,7 +140,7 @@ jobs: # uses: softprops/action-gh-release@v1 # if: startsWith(github.ref, 'refs/tags/') # with: - # files: Builds/release-${{ github.event.inputs.version }}.unitypackage + # files: Builds/airconsole-unity-plugin-v${{ github.event.inputs.version }}.unitypackage # body: ${{ steps.extract-release-notes.outputs.release_notes }} # env: # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index 4023ef67..7e50ced0 100644 --- a/.gitignore +++ b/.gitignore @@ -35,12 +35,6 @@ obj/ ehthumbs.db Thumbs.db -# ============ # -# IDEA generated # -# ============ # -/.idea - - # ============ # # Visual Studio Code generated # # ============ # @@ -50,3 +44,14 @@ TestBuilds/ Assets/AirConsole/airconsole.prefs* Assets/WebGLTemplates/**/airconsole-settings.js + +# ============ # +# IntellJ Code Style +# ============ # + +!/.idea/ +/.idea/* +!/.idea/.idea.airconsole-unity-plugin/ +!/.idea/.idea.airconsole-unity-plugin/.idea/ +/.idea/.idea.airconsole-unity-plugin/.idea/* +!/.idea/.idea.airconsole-unity-plugin/.idea/codeStyles/ diff --git a/.idea/.idea.airconsole-unity-plugin/.idea/codeStyles/Project.xml b/.idea/.idea.airconsole-unity-plugin/.idea/codeStyles/Project.xml new file mode 100644 index 00000000..a4c0f939 --- /dev/null +++ b/.idea/.idea.airconsole-unity-plugin/.idea/codeStyles/Project.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/.idea/.idea.airconsole-unity-plugin/.idea/codeStyles/codeStyleConfig.xml b/.idea/.idea.airconsole-unity-plugin/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 00000000..79ee123c --- /dev/null +++ b/.idea/.idea.airconsole-unity-plugin/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.serena/.gitignore b/.serena/.gitignore new file mode 100644 index 00000000..14d86ad6 --- /dev/null +++ b/.serena/.gitignore @@ -0,0 +1 @@ +/cache diff --git a/.serena/memories/project_overview.md b/.serena/memories/project_overview.md new file mode 100644 index 00000000..411e2377 --- /dev/null +++ b/.serena/memories/project_overview.md @@ -0,0 +1,6 @@ +# Project Overview +- Purpose: Unity plugin providing a C# wrapper around the AirConsole JavaScript API so Unity developers can build local multiplayer games that communicate with the AirConsole backend through the embedded web/websocket server. +- Tech stack: Unity/C# scripts plus accompanying assets located primarily under `Assets/`. Targets AirConsole-supported platforms (WebGL and Android TV). +- Repo structure highlights: Unity project root with standard folders (`Assets`, `Packages`, `ProjectSettings`, etc.), csproj files for various Unity modules/tests, documentation PDF in `Assets/AirConsole/Documentation_1.7.pdf`, and changelog/README at root. +- Entry points: open the Unity project (`airconsole-unity-plugin.sln` or via Unity Hub) and use provided AirConsole scenes/examples under `Assets/AirConsole` as the starting point. +- Special notes: includes embedded webserver/websocket server for editor communication, so no extra server dependency is required. \ No newline at end of file diff --git a/.serena/memories/style_and_conventions.md b/.serena/memories/style_and_conventions.md new file mode 100644 index 00000000..b79fa29b --- /dev/null +++ b/.serena/memories/style_and_conventions.md @@ -0,0 +1,4 @@ +# Style and Conventions +- Code is written in standard Unity/C# style (PascalCase for classes/methods, camelCase for private fields, serialized fields attributed as needed). +- Project relies on Unity-specific patterns (MonoBehaviours, scriptable objects, etc.); follow Unity's serialization and inspector conventions when modifying scripts. +- No repository-specific linting or formatting rules were documented, so adhere to default C# conventions and Unity best practices. \ No newline at end of file diff --git a/.serena/memories/suggested_commands.md b/.serena/memories/suggested_commands.md new file mode 100644 index 00000000..015c78e8 --- /dev/null +++ b/.serena/memories/suggested_commands.md @@ -0,0 +1,6 @@ +# Suggested Commands +- `git status` / `git diff` – inspect working tree and patch content. +- `ls` / `find . -name "*.cs"` – explore repository contents on macOS (Darwin) shell. +- `open airconsole-unity-plugin.sln` or launch via Unity Hub to edit/run the Unity project. +- Use the Unity Test Runner inside the Unity Editor to execute EditMode/PlayMode tests (no standalone CLI documented). +- Refer to the embedded documentation PDF at `Assets/AirConsole/Documentation_1.7.pdf` for setup instructions. \ No newline at end of file diff --git a/.serena/memories/task_completion.md b/.serena/memories/task_completion.md new file mode 100644 index 00000000..ccb983dd --- /dev/null +++ b/.serena/memories/task_completion.md @@ -0,0 +1,6 @@ +# Task Completion Checklist +- Ensure changes build inside the Unity Editor and do not break the AirConsole example scenes. +- Run relevant Unity EditMode/PlayMode tests through the Unity Test Runner if scripts were modified. +- Update README/CHANGELOG or documentation PDF references if behavior changes. +- Verify WebGL/Android-specific behavior when applicable (e.g., platform messaging, webview debugging instructions). +- Commit with clear messages and keep the embedded webserver/websocket functionality intact. \ No newline at end of file diff --git a/.serena/project.yml b/.serena/project.yml new file mode 100644 index 00000000..53eba993 --- /dev/null +++ b/.serena/project.yml @@ -0,0 +1,84 @@ +# list of languages for which language servers are started; choose from: +# al bash clojure cpp csharp csharp_omnisharp +# dart elixir elm erlang fortran go +# haskell java julia kotlin lua markdown +# nix perl php python python_jedi r +# rego ruby ruby_solargraph rust scala swift +# terraform typescript typescript_vts yaml zig +# Note: +# - For C, use cpp +# - For JavaScript, use typescript +# Special requirements: +# - csharp: Requires the presence of a .sln file in the project folder. +# When using multiple languages, the first language server that supports a given file will be used for that file. +# The first language is the default language and the respective language server will be used as a fallback. +# Note that when using the JetBrains backend, language servers are not used and this list is correspondingly ignored. +languages: +- csharp + +# the encoding used by text files in the project +# For a list of possible encodings, see https://docs.python.org/3.11/library/codecs.html#standard-encodings +encoding: "utf-8" + +# whether to use the project's gitignore file to ignore files +# Added on 2025-04-07 +ignore_all_files_in_gitignore: true + +# list of additional paths to ignore +# same syntax as gitignore, so you can use * and ** +# Was previously called `ignored_dirs`, please update your config if you are using that. +# Added (renamed) on 2025-04-07 +ignored_paths: [] + +# whether the project is in read-only mode +# If set to true, all editing tools will be disabled and attempts to use them will result in an error +# Added on 2025-04-18 +read_only: false + +# list of tool names to exclude. We recommend not excluding any tools, see the readme for more details. +# Below is the complete list of tools for convenience. +# To make sure you have the latest list of tools, and to view their descriptions, +# execute `uv run scripts/print_tool_overview.py`. +# +# * `activate_project`: Activates a project by name. +# * `check_onboarding_performed`: Checks whether project onboarding was already performed. +# * `create_text_file`: Creates/overwrites a file in the project directory. +# * `delete_lines`: Deletes a range of lines within a file. +# * `delete_memory`: Deletes a memory from Serena's project-specific memory store. +# * `execute_shell_command`: Executes a shell command. +# * `find_referencing_code_snippets`: Finds code snippets in which the symbol at the given location is referenced. +# * `find_referencing_symbols`: Finds symbols that reference the symbol at the given location (optionally filtered by type). +# * `find_symbol`: Performs a global (or local) search for symbols with/containing a given name/substring (optionally filtered by type). +# * `get_current_config`: Prints the current configuration of the agent, including the active and available projects, tools, contexts, and modes. +# * `get_symbols_overview`: Gets an overview of the top-level symbols defined in a given file. +# * `initial_instructions`: Gets the initial instructions for the current project. +# Should only be used in settings where the system prompt cannot be set, +# e.g. in clients you have no control over, like Claude Desktop. +# * `insert_after_symbol`: Inserts content after the end of the definition of a given symbol. +# * `insert_at_line`: Inserts content at a given line in a file. +# * `insert_before_symbol`: Inserts content before the beginning of the definition of a given symbol. +# * `list_dir`: Lists files and directories in the given directory (optionally with recursion). +# * `list_memories`: Lists memories in Serena's project-specific memory store. +# * `onboarding`: Performs onboarding (identifying the project structure and essential tasks, e.g. for testing or building). +# * `prepare_for_new_conversation`: Provides instructions for preparing for a new conversation (in order to continue with the necessary context). +# * `read_file`: Reads a file within the project directory. +# * `read_memory`: Reads the memory with the given name from Serena's project-specific memory store. +# * `remove_project`: Removes a project from the Serena configuration. +# * `replace_lines`: Replaces a range of lines within a file with new content. +# * `replace_symbol_body`: Replaces the full definition of a symbol. +# * `restart_language_server`: Restarts the language server, may be necessary when edits not through Serena happen. +# * `search_for_pattern`: Performs a search for a pattern in the project. +# * `summarize_changes`: Provides instructions for summarizing the changes made to the codebase. +# * `switch_modes`: Activates modes by providing a list of their names +# * `think_about_collected_information`: Thinking tool for pondering the completeness of collected information. +# * `think_about_task_adherence`: Thinking tool for determining whether the agent is still on track with the current task. +# * `think_about_whether_you_are_done`: Thinking tool for determining whether the task is truly completed. +# * `write_memory`: Writes a named memory (for future reference) to Serena's project-specific memory store. +excluded_tools: [] + +# initial prompt for the project. It will always be given to the LLM upon activating the project +# (contrary to the memories, which are loaded on demand). +initial_prompt: "" + +project_name: "airconsole-unity-plugin" +included_optional_tools: [] diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000..bba26ec9 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,82 @@ +# AGENTS GUIDE — Assets/AirConsole Focus + +The `airconsole-unity-plugin` project targets Unity 2022.3.x and ships the full AirConsole runtime, editor tooling, Android TV helpers, and WebGL controller templates. This guide is tailored to the contents under `Assets/AirConsole`. + +## What Lives in Assets/AirConsole + +- `scripts/Runtime`: Core API surface (`AirConsole.cs`), websocket/webview bridges (`WebsocketListener.cs`, `WebViewManager.cs`), runtime settings (`Settings.cs`, `AirconsoleRuntimeSettings.cs`, `NativeGameSizingSettings.cs`), logging (`AirConsoleLogger.cs`, `DebugLevel.cs`), platform runtime configurators, and Android plugin wrappers under `Runtime/Plugin/Android`. +- `scripts/Editor`: Custom inspectors/windows (`Inspector.cs`, `SettingWindow.cs`, `PlayMode.cs`, `SafeAreaTester.cs`, `WebListener.cs`), build automation (`BuildAutomation/*`), project maintenance checks (`ProjectMaintenance/*`), and plugin developer helpers (`PluginDevelopment/*`). +- `scripts/SupportCheck`: Unity version/platform validator ASMDEF used in-editor. +- `scripts/Tests`: ASMDEF-scoped EditMode, PlayMode, and Editor tests. +- `examples`: Sample scenes (`basic`, `pong`, `platformer`, `swipe`, `game-states`, `safe-area`, `translations`) for manual validation. +- `extras`: Controller template HTML and `HighScoreHelper.cs`. +- `plugins`: Managed dependencies (`Newtonsoft.Json.dll`, `websocket-sharp.dll`) plus Android native plugin payload under `plugins/Android`. +- `unity-webview`: Embedded WebView plugin with runtime/editor asmdefs and native binaries under `Plugins`. +- `unity-webview` is an imported external dependency. You are not allowed to alter it. +- Docs and misc: `Documentation_1.7.pdf`, `Documentation for AndroidTV.pdf`, `Upgrade_Plugin_Version.md`, `README.txt`, `airconsole.prefs`, and the distributable `airconsole-code.unitypackage`. + +## Runtime Essentials + +- **API + bridge**: `AirConsole.cs` exposes the public API; `WebsocketListener` routes JSON actions/events; `WebViewManager` coordinates the embedded webview. Add new events in both the listener and the API surface. +- **Config assets**: `AirconsoleRuntimeSettings.asset` and `NativeGameSizingSettings.asset` (in `scripts/Runtime/Resources`) hold defaults for ports, safe-area sizing, etc. Adjust via the editor UI instead of hardcoding. +- **Platform setup**: Implementations of `IRuntimeConfigurator` (`AndroidRuntimeConfigurator`, `WebGLRuntimeConfigurator`, `EditorRuntimeConfigurator`) handle platform-specific initialization. Extend these rather than branching deep in the API. +- **Android plugin wrappers**: `PluginManager`, `AndroidUnityUtils`, and callback helpers (`UnityPluginExecutionCallback`, `UnityPluginStringCallback`, `GenericUnityPluginCallback`, `UnityAndroidObjectProvider`) encapsulate Java bridge calls. Keep new native hooks consistent with these wrappers. +- **Logging & diagnostics**: Use `AirConsoleLogger` with `DebugLevel` enums to respect runtime debug settings. + +## Editor & Build Tooling + +- **UI/inspectors**: `SettingWindow`, `Inspector`, `PlayMode`, `SafeAreaTester`, and `WebListener` provide editor UI and simulator hooks. Prefer extending these instead of adding ad-hoc windows. +- **Build automation** (`scripts/Editor/BuildAutomation`): + - `PreBuildProcessing` and `PostBuildProcess` wrap pre/post hooks; post steps validate WebGL template AirConsole JS versions. + - `AndroidManifestProcessor`, `AndroidGradleProcessor`, `AndroidProjectProcessor`, `AndroidManifest`, and `AndroidXMLDocument` mutate generated Android projects/manifests. Use these helpers instead of manual IO. +- **Project maintenance** (`ProjectMaintenance`): `ProjectDependencyCheck`, `SemVerCheck`, and `ProjectConfigurationCheck` enforce Unity version and project settings; `ProjectPreferenceManager/ProjectPreferences` manage stored preferences; `ProjectUpgradeEditor` supports upgrade flows. +- **Plugin development helpers** (`PluginDevelopment`): `BuildHelper` hosts build/packaging entry points (Web/Android) and can auto-zip or auto-commit; `DevelopmentTools` includes additional packager utilities. + +## Tests, Samples, Validation + +- Tests live under `scripts/Tests` (EditMode/PlayMode/Editor asmdefs). Run via Unity Test Runner; some PlayMode tests expect Android as the active build target. +- Manual checks: leverage sample scenes in `examples` to verify controller flows, safe-area behavior, translations, and Android TV input. +- WebGL validation: keep `PostBuildProcess` version checks aligned with the AirConsole JS used in `Assets/WebGLTemplates/AirConsole-*`. + +## Dependencies & Third-Party + +- Managed DLLs: `Newtonsoft.Json.dll` and `websocket-sharp.dll` are under `plugins/` and referenced by runtime asmdefs. +- Embedded webview: `unity-webview` includes runtime/editor code plus native libs under `unity-webview/Plugins`. +- Android native pieces are under `plugins/Android`; ensure gradle/manifest processors remain compatible when updating them. + +## Common Workflows + +- **Add/extend an API event**: Update `WebsocketListener` to parse/route the action, expose it in `AirConsole`, and wire through logging; add tests where possible. +- **Adjust runtime defaults**: Modify `AirconsoleRuntimeSettings.asset` or `NativeGameSizingSettings.asset` (via editor windows). Avoid hardcoded constants in code. +- **Android manifest/Gradle edits**: Implement changes in `AndroidManifestProcessor`/`AndroidGradleProcessor`/`AndroidProjectProcessor`; ensure `useCustomMainManifest` stays enabled. +- **WebGL template/JS version bumps**: Update constants/regex in `PostBuildProcess`, refresh `Settings.RequiredMinimumVersion` if needed, and sync HTML in `Assets/WebGLTemplates/AirConsole-*`. +- **Packaging/exports**: Use `BuildHelper.BuildWeb()`, `BuildHelper.BuildAndroid()`, or `BuildHelper.BuildAndroidInternal()`; they run configuration checks and can zip outputs. + +## Guardrails & Gotchas + +- Conditional compilation is heavily used: `#if !DISABLE_AIRCONSOLE`, `UNITY_ANDROID`, `UNITY_EDITOR`, `UNITY_WEBGL`. Keep new code behind appropriate defines and asmdefs. +- Respect asmdef boundaries (`AirConsole.Runtime`, `AirConsole.Editor`, `AirConsole.SupportCheck`, `AirConsole.Examples`, `unity-webview`); place new files in matching folders. +- Embedded websocket/webview server underpins editor play; avoid breaking `WebsocketListener`/`WebViewManager` interactions (ports come from runtime settings). +- Safe-area handling is central for Android TV/Automotive—maintain `OnSafeAreaChanged` flows and avoid state changes before safe-area readiness. +- Build helper may auto-commit with `build: TIMESTAMP` when uncommitted changes exist; be mindful when running locally. + +## Event Queue Architecture (Thread-Safe Callbacks) + +The WebView plugin uses a thread-safe event queue to handle callbacks from native code (Android only at this point): + +### Event Processing Lifecycle + +Events are processed at multiple points to ensure timely delivery: + +1. **`Update()`**: Primary drain point (every frame) +2. **`LateUpdate()`**: Secondary drain (end of frame) +3. **`FixedUpdate()`**: Tertiary drain (physics frame / fixed timestep / before rendering) +4. **`OnApplicationPause(false)`**: Flush on resume +5. **`OnDisable()`**: Flush before component teardown +6. **`OnApplicationQuit()`**: Final flush before app exit + +## Additional References + +- `Documentation_1.7.pdf` (setup/examples), `Documentation for AndroidTV.pdf`, and `Upgrade_Plugin_Version.md` for upgrade flows. +- Controller HTML template: `extras/controller-template.html`. +- Quick intro: `Assets/AirConsole/README.txt`; preferences file `airconsole.prefs`. diff --git a/Assets/AirConsole/ProjectCodeUpdater.cs b/Assets/AirConsole/ProjectCodeUpdater.cs index 069bdc49..b2aebc06 100644 --- a/Assets/AirConsole/ProjectCodeUpdater.cs +++ b/Assets/AirConsole/ProjectCodeUpdater.cs @@ -30,10 +30,12 @@ private static void ImportCodePackage() { // In 2.6.0, this was moved to Assets/AirConsole/scripts/Editor/Assets/AirConsoleIcon.png with editor icon focused import settings. AssetDatabase.DeleteAsset("Assets/AirConsole/resources/AirConsoleLogo.png"); - AssetDatabase.DeleteAsset("Assets/AirConsole/examples"); - AssetDatabase.DeleteAsset("Assets/AirConsole/scripts"); - AssetDatabase.DeleteAsset("Assets/AirConsole/unity-webview"); - AssetDatabase.Refresh(); + if (RequiresStructureCleanup()) { + AssetDatabase.DeleteAsset("Assets/AirConsole/examples"); + AssetDatabase.DeleteAsset("Assets/AirConsole/scripts"); + AssetDatabase.DeleteAsset("Assets/AirConsole/unity-webview"); + AssetDatabase.Refresh(); + } // Because the AssetDatabase refresh happens asynchronously at the end of the editor loop, we must use delayedCall to // execute the package import. Otherwise, files like AirConsole.cs that must be imported in the 'scripts/Runtime' directory @@ -50,6 +52,16 @@ private static void ExecuteCodePackageImport() { AssetDatabase.DeleteAsset($"Assets/AirConsole/{nameof(ProjectCodeUpdater)}.cs"); AssetDatabase.DeleteAsset(CodePackagePath.Replace(Application.dataPath, "Assets")); } + + private static bool RequiresStructureCleanup() { + string legacyAirConsolePath = Path.Combine(Application.dataPath, "AirConsole", "scripts", "AirConsole.cs"); + string runtimeAirConsolePath = Path.Combine(Application.dataPath, "AirConsole", "scripts", "Runtime", "AirConsole.cs"); + + bool legacyExists = File.Exists(legacyAirConsolePath); + bool runtimeExists = File.Exists(runtimeAirConsolePath); + + return legacyExists && !runtimeExists; + } } } #endif diff --git a/Assets/AirConsole/examples/basic/AudioManager.cs b/Assets/AirConsole/examples/basic/AudioManager.cs new file mode 100644 index 00000000..405c11e5 --- /dev/null +++ b/Assets/AirConsole/examples/basic/AudioManager.cs @@ -0,0 +1,34 @@ +#if !DISABLE_AIRCONSOLE +namespace NDream.AirConsole.Examples { + using NDream.AirConsole; + using UnityEngine; + + /// + /// Example Audio Player that starts playing when the game is ready and stops when the game ends. + /// It also listens to volume changes and adjusts the audio accordingly. + /// + public class AudioManager : MonoBehaviour { + // We are using a Platform Script Defines here to avoid extra code to handle non-Android runtime platforms. +#if UNITY_ANDROID && !UNITY_EDITOR + private void Awake() { + // Until OnReady is called, we don't want any audio from Unity playing as the webview Player Lobby overlay will be shown. + AudioListener.pause = true; + + AirConsole.instance.OnGameAudioFocusChanged += HandleGameAudioFocusChange; + } + + private void OnDestroy() { + if (AirConsole.instance) { + AirConsole.instance.OnGameAudioFocusChanged -= HandleGameAudioFocusChange; + } + } + + private void HandleGameAudioFocusChange(bool hasAudioFocus, float newMaximumVolume) { + AirConsoleLogger.Log(() => $"HandleGameAudioFocusChange({hasAudioFocus},{newMaximumVolume})"); + AudioListener.volume = newMaximumVolume; + AudioListener.pause = !hasAudioFocus; + } +#endif + } +} +#endif diff --git a/Assets/AirConsole/unity-webview/Plugins/Editor/UnityWebViewPostprocessBuild.cs.meta b/Assets/AirConsole/examples/basic/AudioManager.cs.meta similarity index 83% rename from Assets/AirConsole/unity-webview/Plugins/Editor/UnityWebViewPostprocessBuild.cs.meta rename to Assets/AirConsole/examples/basic/AudioManager.cs.meta index 2d862b52..ab748cc6 100644 --- a/Assets/AirConsole/unity-webview/Plugins/Editor/UnityWebViewPostprocessBuild.cs.meta +++ b/Assets/AirConsole/examples/basic/AudioManager.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0b2f5f306eb6e4afcbc074e6efccc188 +guid: f8eacf087b9954b9bab975cd1a0e968c MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/AirConsole/examples/basic/AudioPlayer.cs b/Assets/AirConsole/examples/basic/AudioPlayer.cs deleted file mode 100644 index f4170267..00000000 --- a/Assets/AirConsole/examples/basic/AudioPlayer.cs +++ /dev/null @@ -1,63 +0,0 @@ -#if !DISABLE_AIRCONSOLE -namespace NDream.AirConsole.Examples { - using NDream.AirConsole; - using UnityEngine; - - /// - /// Example Audio Player that starts playing when the game is ready and stops when the game ends. - /// It also listens to volume changes and adjusts the audio accordingly. - /// - [RequireComponent(typeof(AudioSource))] - public class AudioPlayer : MonoBehaviour { - private AudioSource _audioSource; - - private void Awake() { - _audioSource = GetComponent(); - if (!_audioSource) { - AirConsoleLogger.LogError(() => "AudioPlayer requires an AudioSource component.", this); - enabled = false; - return; - } - - SetupAudioSource(); - AirConsole.instance.onReady += HandleOnReady; - AirConsole.instance.onGameEnd += HandleOnGameEnd; - - // Until OnReady is called, we don't want any audio from Unity playing as the Player Lobby overlay will be shown. - AudioListener.pause = true; - } - - private void SetupAudioSource() { - _audioSource.playOnAwake = false; - _audioSource.loop = true; - _audioSource.volume = 1.0f; - if (!_audioSource.clip) { - _audioSource.clip = Resources.Load("Audio/Music/Happy_1"); - } - } - - private void HandleOnGameEnd() { - // After OnGameEnd is called, we must not play any audio until OnReady is called again. During this time the Player Lobby - // overlay will be shown. - AudioListener.pause = true; - } - - private void HandleOnReady(string code) { - AirConsoleLogger.Log(() => $"OnReady for {code}"); - AudioListener.pause = false; - _audioSource.Play(); - } - - private void HandleAudioVolumeChange(float volume) { - AirConsoleLogger.Log(() => $"Setting volume to {volume}"); - if (volume > 0) { - AudioListener.pause = false; - AudioListener.volume = volume; - _audioSource.Play(); - } else if (Mathf.Approximately(0, volume)) { - AudioListener.pause = true; - } - } - } -} -#endif diff --git a/Assets/AirConsole/examples/basic/basic.unity b/Assets/AirConsole/examples/basic/basic.unity index 5a6e07ed..4e382aa8 100644 --- a/Assets/AirConsole/examples/basic/basic.unity +++ b/Assets/AirConsole/examples/basic/basic.unity @@ -3155,6 +3155,7 @@ GameObject: m_Component: - component: {fileID: 841124342} - component: {fileID: 841124341} + - component: {fileID: 841124343} m_Layer: 0 m_Name: AirConsole m_TagString: Untagged @@ -3176,7 +3177,7 @@ MonoBehaviour: m_EditorClassIdentifier: controllerHtml: {fileID: 4900000, guid: 24d0ea9f52a200b479f21be5710f94ac, type: 3} autoScaleCanvas: 1 - androidGameVersion: 2025-05-27-12-55-11 + androidGameVersion: 2025-10-14-07-07-52 androidUIResizeMode: 0 webViewLoadingSprite: {fileID: 0} nativeGameSizingSupported: 0 @@ -3199,6 +3200,18 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &841124343 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 841124340} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8eacf087b9954b9bab975cd1a0e968c, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &878053057 GameObject: m_ObjectHideFlags: 0 @@ -4467,147 +4480,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1064712596} m_CullTransparentMesh: 0 ---- !u!1 &1070081529 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1070081532} - - component: {fileID: 1070081531} - - component: {fileID: 1070081530} - m_Layer: 0 - m_Name: AudioPlayer - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1070081530 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1070081529} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d33481c3f96324d4bba3e5db8826fd6e, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!82 &1070081531 -AudioSource: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1070081529} - m_Enabled: 1 - serializedVersion: 4 - OutputAudioMixerGroup: {fileID: 0} - m_audioClip: {fileID: 8300000, guid: 804632e1e46684476b4ea5f752e8df15, type: 3} - m_PlayOnAwake: 0 - m_Volume: 1 - m_Pitch: 1 - Loop: 1 - Mute: 0 - Spatialize: 0 - SpatializePostEffects: 0 - Priority: 128 - DopplerLevel: 1 - MinDistance: 1 - MaxDistance: 500 - Pan2D: 0 - rolloffMode: 0 - BypassEffects: 0 - BypassListenerEffects: 0 - BypassReverbZones: 0 - rolloffCustomCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 - - serializedVersion: 3 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - panLevelCustomCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - spreadCustomCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - reverbZoneMixCustomCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 ---- !u!4 &1070081532 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1070081529} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.36577117, y: -0.17775297, z: 0.030780792} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1087830224 GameObject: m_ObjectHideFlags: 0 @@ -4753,6 +4625,7 @@ GameObject: - component: {fileID: 1158769764} - component: {fileID: 1158769762} - component: {fileID: 1158769761} + - component: {fileID: 1158769766} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -4842,6 +4715,19 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1158769766 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1158769760} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a1b5c6dd8de3e4b4fafb3c384af7e1d2, type: 3} + m_Name: + m_EditorClassIdentifier: + targetCamera: {fileID: 1158769764} --- !u!1 &1179297375 GameObject: m_ObjectHideFlags: 0 @@ -5381,6 +5267,134 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1493791325} m_CullTransparentMesh: 0 +--- !u!1 &1506040750 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1506040753} + - component: {fileID: 1506040752} + m_Layer: 0 + m_Name: AudioPlayer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!82 &1506040752 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1506040750} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: 804632e1e46684476b4ea5f752e8df15, type: 3} + m_PlayOnAwake: 1 + m_Volume: 1 + m_Pitch: 1 + Loop: 1 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!4 &1506040753 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1506040750} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.36577117, y: -0.17775297, z: 0.030780792} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1521427270 GameObject: m_ObjectHideFlags: 0 @@ -7698,4 +7712,4 @@ SceneRoots: - {fileID: 607279077} - {fileID: 1179297379} - {fileID: 535473225} - - {fileID: 1070081532} + - {fileID: 1506040753} diff --git a/Assets/AirConsole/plugins/Android/unityandroidlibrary.aar b/Assets/AirConsole/plugins/Android/unityandroidlibrary.aar index e8d0a560..d107448a 100644 Binary files a/Assets/AirConsole/plugins/Android/unityandroidlibrary.aar and b/Assets/AirConsole/plugins/Android/unityandroidlibrary.aar differ diff --git a/Assets/AirConsole/scripts/Editor/AirConsole.Editor.asmdef b/Assets/AirConsole/scripts/Editor/AirConsole.Editor.asmdef index 216e967d..d2150dcc 100644 --- a/Assets/AirConsole/scripts/Editor/AirConsole.Editor.asmdef +++ b/Assets/AirConsole/scripts/Editor/AirConsole.Editor.asmdef @@ -1,23 +1,23 @@ { - "name": "AirConsole.Editor", - "rootNamespace": "NDream.AirConsole.Editor", - "references": [ - "AirConsole.Runtime", - "UnityEditor.UI" - ], - "includePlatforms": [ - "Editor" - ], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": true, - "precompiledReferences": [ - "Newtonsoft.Json.dll" - ], - "autoReferenced": true, - "defineConstraints": [ - "UNITY_2022_3_OR_NEWER" - ], - "versionDefines": [], - "noEngineReferences": false + "name": "AirConsole.Editor", + "rootNamespace": "NDream.AirConsole.Editor", + "references": [ + "AirConsole.Runtime", + "UnityEditor.UI" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "Newtonsoft.Json.dll" + ], + "autoReferenced": true, + "defineConstraints": [ + "UNITY_2022_3_OR_NEWER" + ], + "versionDefines": [], + "noEngineReferences": false } \ No newline at end of file diff --git a/Assets/AirConsole/scripts/Editor/BuildAutomation/AndroidGradleProcessor.cs b/Assets/AirConsole/scripts/Editor/BuildAutomation/AndroidGradleProcessor.cs index 3167aca3..8d898f34 100644 --- a/Assets/AirConsole/scripts/Editor/BuildAutomation/AndroidGradleProcessor.cs +++ b/Assets/AirConsole/scripts/Editor/BuildAutomation/AndroidGradleProcessor.cs @@ -4,6 +4,7 @@ namespace NDream.AirConsole.Editor { using System.Collections.Generic; using System.IO; using System.Linq; + using System.Text.RegularExpressions; internal abstract class AndroidGradleProcessor { private const string PROGUARD_CLASSMEMBERS @@ -11,11 +12,68 @@ private const string PROGUARD_CLASSMEMBERS internal static void Execute(string basePath) { UpdateMainGradleProperties(Path.GetFullPath(Path.Combine(basePath, "..")), "gradle.properties"); - UpdateMainGradleTemplate(Path.GetFullPath(basePath), "build.gradle"); + + UpdateLibraryGradleTemplate(Path.GetFullPath(basePath), "build.gradle"); UpdateProGuard(Path.GetFullPath(basePath), "proguard-unity.txt"); AirConsoleLogger.LogDevelopment(() => "Updated gradle files for AirConsole Android build"); } + private static void UpdateMainGradleTemplate(string basePath, string buildGradle) { + string[] lines = File.ReadAllLines(Path.Combine(basePath, buildGradle)); + + Regex applicationVersionExtractor + = new(@"id 'com.android.application' version '(?\d+)\.(?\d+)\.(?\d+)' apply false"); + Regex libraryVersionVersionExtractor + = new(@"id 'com.android.library' version '(?\d+)\.(?\d+)\.(?\d+)' apply false"); + bool updated = false; + for (int i = 0; i < lines.Length; i++) { + // regex to check the used gradle version + Match match = applicationVersionExtractor.Match(lines[i]); + if (match.Success) { + if (int.Parse(match.Groups["Major"].Value) < 8 + || int.Parse(match.Groups["Minor"].Value) < 1 + || int.Parse(match.Groups["Build"].Value) < 1) { + lines[i] = "id 'com.android.application' version '8.1.1' apply false"; + updated = true; + } + } else { + match = libraryVersionVersionExtractor.Match(lines[i]); + if (match.Success) { + if (int.Parse(match.Groups["Major"].Value) < 8 + || int.Parse(match.Groups["Minor"].Value) < 1 + || int.Parse(match.Groups["Build"].Value) < 1) { + lines[i] = "id 'com.android.library' version '8.1.1' apply false"; + updated = true; + } + } + } + } + + if (updated) { + File.WriteAllLines(Path.Combine(basePath, buildGradle), lines); + AirConsoleLogger.LogDevelopment(() => "Updated gradle main template"); + } + } + + private static void UpdateGradleWrapperVersion(string basePath, string gradleWrapperProperties) { + string[] lines = File.ReadAllLines(Path.Combine(basePath, gradleWrapperProperties)); + Regex versionExtractor + = new(@"^distributionUrl=.*/gradle-(?\d+)\.(?\d+)\.(?\d+)-bin.zip$"); + for (int i = 0; i < lines.Length; i++) { + // regex to check the used gradle version + Match match = versionExtractor.Match(lines[i]); + if (lines[i].StartsWith("distributionUrl=") && match.Success + && (int.Parse(match.Groups["Major"].Value) < 8 + || int.Parse(match.Groups["Minor"].Value) < 1 + || int.Parse(match.Groups["Build"].Value) < 1)) { + lines[i] = "distributionUrl=https\\://services.gradle.org/distributions/gradle-8.1.1-bin.zip"; + File.WriteAllLines(Path.Combine(basePath, gradleWrapperProperties), lines); + AirConsoleLogger.LogDevelopment(() => $"Updated gradle wrapper to {lines[i]}"); + return; + } + } + } + private static void UpdateProGuard(string basePath, string proguardUnityTxt) { string filePath = Path.Combine(basePath, proguardUnityTxt); string fileText = File.ReadAllText(filePath); @@ -27,7 +85,7 @@ private static void UpdateProGuard(string basePath, string proguardUnityTxt) { File.WriteAllText(filePath, fileText); } - private static void UpdateMainGradleTemplate(string basePath, string gradleTemplateName) { + private static void UpdateLibraryGradleTemplate(string basePath, string gradleTemplateName) { string gradleTemplatePath = Path.Combine(basePath, gradleTemplateName); string[] initialLines = File.ReadAllText(gradleTemplatePath) .Replace("\r\n", "\n") @@ -72,6 +130,10 @@ private static void UpdateMainGradleProperties(string basePath, string gradlePro lines = "# AirConsole\nandroid.useAndroidX=true\n\n# Unity provided\n" + lines; } + if (!lines.Contains("android.suppressUnsupportedCompileSdk")) { + lines += "\nandroid.suppressUnsupportedCompileSdk=35,34"; + } + if (lines != initialLines) { File.WriteAllText(gradlePropertiesPath, lines); AirConsoleLogger.LogDevelopment(() => diff --git a/Assets/AirConsole/scripts/Runtime/AirConsole.Runtime.asmdef b/Assets/AirConsole/scripts/Runtime/AirConsole.Runtime.asmdef index 8913fa27..b771d892 100644 --- a/Assets/AirConsole/scripts/Runtime/AirConsole.Runtime.asmdef +++ b/Assets/AirConsole/scripts/Runtime/AirConsole.Runtime.asmdef @@ -1,27 +1,27 @@ { - "name": "AirConsole.Runtime", - "rootNamespace": "NDream.AirConsole", - "references": [ - "Unity.TextMeshPro", - "UnityEngine.UI", - "com.airconsole.unity-webview.runtime" - ], - "includePlatforms": [ - "Android", - "Editor", - "WebGL" - ], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": true, - "precompiledReferences": [ - "Newtonsoft.Json.dll", - "websocket-sharp.dll" - ], - "autoReferenced": true, - "defineConstraints": [ - "UNITY_2022_3_OR_NEWER" - ], - "versionDefines": [], - "noEngineReferences": false + "name": "AirConsole.Runtime", + "rootNamespace": "NDream.AirConsole", + "references": [ + "Unity.TextMeshPro", + "UnityEngine.UI", + "com.airconsole.unity-webview.runtime" + ], + "includePlatforms": [ + "Android", + "Editor", + "WebGL" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "Newtonsoft.Json.dll", + "websocket-sharp.dll" + ], + "autoReferenced": true, + "defineConstraints": [ + "UNITY_2022_3_OR_NEWER" + ], + "versionDefines": [], + "noEngineReferences": false } \ No newline at end of file diff --git a/Assets/AirConsole/scripts/Runtime/AirConsole.cs b/Assets/AirConsole/scripts/Runtime/AirConsole.cs index 652ed02e..3015d897 100644 --- a/Assets/AirConsole/scripts/Runtime/AirConsole.cs +++ b/Assets/AirConsole/scripts/Runtime/AirConsole.cs @@ -1,19 +1,20 @@ #if !UNITY_EDITOR && UNITY_ANDROID #define AIRCONSOLE_ANDROID_RUNTIME #endif -using UnityEngine; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System; -using System.Diagnostics; -using NDream.AirConsole.Android.Plugin; -using WebSocketSharp.Server; -using Newtonsoft.Json.Linq; -using UnityEngine.Serialization; -using Debug = UnityEngine.Debug; -using UnityEngine.SceneManagement; namespace NDream.AirConsole { + using NDream.AirConsole.Android.Plugin; + using Newtonsoft.Json.Linq; + using System.Collections.Generic; + using System.Collections.ObjectModel; + using System.Diagnostics; + using System.Threading; + using System; + using UnityEngine.SceneManagement; + using UnityEngine.Serialization; + using UnityEngine; + using WebSocketSharp.Server; + public enum StartMode { VirtualControllers, Debug, @@ -62,6 +63,13 @@ public enum AndroidUIResizeMode { public delegate void OnResume(); + /// + /// Used to notify the game about changes to audio focus and maximum allowed volume. + /// + /// True, if the application has AudioFocus. Otherwise the application should stop all audio playback e.g. AudioListener.pause = !hasAudioFocus + /// The received volume is a float value between 0.0 (muted) and 1.0 (maximum volume). + public delegate void OnGameAudioFocusChanged(bool hasAudioFocus, float newMaximumVolume); + /// /// Gets called when the safe area of the screen changes. /// This event provides information about the visible area of the screen where your @@ -72,7 +80,6 @@ public enum AndroidUIResizeMode { public class AirConsole : MonoBehaviour { #region airconsole unity config - [Tooltip("The controller html file for your game")] public UnityEngine.Object controllerHtml; @@ -107,15 +114,14 @@ public class AirConsole : MonoBehaviour { [Tooltip("Language used in the simulator during play mode.")] public string devLanguage; - [Tooltip("Used as local IP instead of your public IP in Unity Editor. Use this to use the controller together with ngrok")] + [Tooltip( + "Used as local IP instead of your public IP in Unity Editor. Use this to use the controller together with ngrok")] public string LocalIpOverride; - #endregion #if !DISABLE_AIRCONSOLE #region airconsole api - // ReSharper disable MemberCanBePrivate.Global UnusedMember.Global /// @@ -261,6 +267,17 @@ public static AirConsole instance { /// public event OnResume onResume; + /// + /// Used to notify the game about changes to audio focus and maximum allowed volume. + /// This must be implemented for Android based games and must be registered before OnReady is invoked. + /// + /// True, if the application has AudioFocus. Otherwise the application should stop all audio playback e.g. AudioListener.pause = !hasAudioFocus + /// The received volume is a float value between 0.0 (muted) and 1.0 (maximum volume). + public event OnGameAudioFocusChanged OnGameAudioFocusChanged; + + private bool _canHaveAudioFocus = true; + private bool _ignoreAudioFocusLoss = true; + internal event Action UnityDestroy; internal event Action UnityResume; internal event Action UnityPause; @@ -358,7 +375,7 @@ public int GetDeviceId() { /// are active players by calling getActivePlayerDeviceIds(). /// The screen can call this function every time a game round starts. /// - /// The maximum number of controllers that should + /// The maximum number of controllers that should /// get a player number assigned. public void SetActivePlayers(int max_players = -1) { if (!IsAirConsoleUnityPluginReady()) { @@ -593,7 +610,8 @@ public void TranslateUIElements(object[] elements) { /// /// The uid for which you want a profile picture. Screens don't have profile pictures. /// The size of in pixels of the picture. Default is 64. - public string GetProfilePicture(string uid, int size = 64) => $"{Settings.AIRCONSOLE_PROFILE_PICTURE_URL}{uid}&size={size}"; + public string GetProfilePicture(string uid, int size = 64) => + $"{Settings.AIRCONSOLE_PROFILE_PICTURE_URL}{uid}&size={size}"; /// /// Returns the url to a profile picture of a user. @@ -611,7 +629,10 @@ public string GetProfilePicture(int device_id = -1, int size = 64) { if (GetDevice(GetDeviceId()) != null) { try { - return Settings.AIRCONSOLE_PROFILE_PICTURE_URL + (string)GetDevice(device_id)["uid"] + "&size=" + size; + return Settings.AIRCONSOLE_PROFILE_PICTURE_URL + + (string)GetDevice(device_id)["uid"] + + "&size=" + + size; } catch (Exception) { if (Settings.debug.warning) { AirConsoleLogger.LogWarning(() => @@ -717,8 +738,8 @@ public void SetCustomDeviceStateProperty(string key, object value) { JToken custom = _devices[0]["custom"]; if (custom == null) { - JObject new_custom = new(); - _devices[0]["custom"] = JToken.FromObject(new_custom); + JObject newCustom = new(); + _devices[0]["custom"] = JToken.FromObject(newCustom); } @@ -823,7 +844,8 @@ public bool IsUserLoggedIn(int device_id = -1) { /// An array of high score rank types. High score rank types can include data from across the world, only a specific area or a users friends. Valid array entries are "world", "country", "region", "city", "friends", "partner". Default is ["world"]. /// Amount of high scores to return per rank type. Default is 8. /// Amount of top high scores to return per rank type. top is part of total. Default is 5. - public void RequestHighScores(string level_name, string level_version, List uids = null, List ranks = null, + public void RequestHighScores(string level_name, string level_version, List uids = null, + List ranks = null, int total = -1, int top = -1) { if (!IsAirConsoleUnityPluginReady()) { throw new NotReadyException(); @@ -874,7 +896,8 @@ public void RequestHighScores(string level_name, string level_version, ListCustom high score data (e.g. can be used to implement Ghost modes or include data to verify that it is not a fake high score). /// A short human readable representation of the score. (e.g. "4 points in 3s"). Defaults to "X points" where x is the score converted to an integer. /// - public void StoreHighScore(string level_name, string level_version, float score, string uid, JObject data = null, + public void StoreHighScore(string level_name, string level_version, float score, string uid, + JObject data = null, string score_string = null) { List uids = new(); uids.Add(uid); @@ -892,7 +915,8 @@ public void StoreHighScore(string level_name, string level_version, float score, /// Custom high score data (e.g. can be used to implement Ghost modes or include data to verify that it is not a fake high score). /// A short human readable representation of the score. (e.g. "4 points in 3s"). Defaults to "X points" where x is the score converted to an integer. /// - public void StoreHighScore(string level_name, string level_version, float score, List uids, JObject data = null, + public void StoreHighScore(string level_name, string level_version, float score, List uids, + JObject data = null, string score_string = null) { if (!IsAirConsoleUnityPluginReady()) { throw new NotReadyException(); @@ -926,9 +950,7 @@ public void StoreHighScore(string level_name, string level_version, float score, /// /// Gets thrown when you call an API method before OnReady was called. /// - public class NotReadyException : SystemException { - public NotReadyException() : base() { } - } + public class NotReadyException : SystemException { } /// /// Requests persistent data from the servers. @@ -1103,20 +1125,23 @@ public void SetImmersiveState(JObject payload) { #endregion #region unity functions - protected void Awake() { if (instance != this) { Destroy(gameObject); } - // always set default object name - // important for unity webgl communication + // Always set default object name + // Critical for unity webgl communication gameObject.name = "AirConsole"; if (IsAndroidRuntime) { - AirConsoleLogger.Log(() => $"Launching build {Application.version} in Unity v{Application.unityVersion}"); + AirConsoleLogger.Log(() => + $"Launching build {Application.version} in Unity v{Application.unityVersion}"); + defaultScreenHeight = Screen.height; _pluginManager = new PluginManager(this); + _pluginManager.OnUpdateVolume += HandleOnMaxVolumeChanged; + _pluginManager.OnAudioFocusChange += HandleNativeAudioFocusChanged; } } @@ -1172,7 +1197,7 @@ private void InitWebSockets() { wsListener.onResume += OnResume; if (Application.isEditor) { - // start websocket connection + // Start websocket and connection wsServer = new WebSocketServer(Settings.webSocketPort); wsServer.AddWebSocketService(Settings.WEBSOCKET_PATH, () => wsListener); wsServer.Start(); @@ -1182,7 +1207,7 @@ private void InitWebSockets() { } } else { if (Application.platform == RuntimePlatform.WebGLPlayer) { - // call external javascript init function + // Call external javascript init function Application.ExternalCall("onGameReady", autoScaleCanvas); } } @@ -1201,7 +1226,8 @@ private void HandlePlatformReady(JObject msg) { internal void SetSafeArea(JObject msg) { JObject safeAreaObj = msg.SelectToken("safeArea")?.Value(); if (safeAreaObj == null) { - throw new UnityException($"OnSetSafeArea called without safeArea property in the message: {msg.ToString()}"); + throw new UnityException( + $"OnSetSafeArea called without safeArea property in the message: {msg.ToString()}"); } eventQueue.Enqueue(delegate { @@ -1217,7 +1243,6 @@ private void RefreshSafeArea(JObject safeAreaObj) { float height = Screen.height * heightValue; float width = Screen.width * GetFloatFromMessage(safeAreaObj, "width", 1); - // TODO(Marc) Update when we send width / height that are no longer bottom / right Rect safeArea = new() { y = y, height = height, @@ -1226,9 +1251,11 @@ private void RefreshSafeArea(JObject safeAreaObj) { }; SafeArea = safeArea; - if (androidUIResizeMode is AndroidUIResizeMode.ResizeCamera or AndroidUIResizeMode.ResizeCameraAndReferenceResolution + if (androidUIResizeMode is AndroidUIResizeMode.ResizeCamera + or AndroidUIResizeMode.ResizeCameraAndReferenceResolution && Camera.main) { - AirConsoleLogger.LogDevelopment(() => $"Original pixelRect {Camera.main.pixelRect}, new pixelRect {safeArea}"); + AirConsoleLogger.LogDevelopment(() => + $"Original pixelRect {Camera.main.pixelRect}, new pixelRect {safeArea}"); Camera.main.pixelRect = safeArea; } @@ -1247,15 +1274,18 @@ protected void Update() { _runtimeConfigurator?.RefreshConfiguration(); if (IsAndroidRuntime) { - //back button on TV remotes + // Back button on TV remotes if (Input.GetKeyDown(KeyCode.Escape)) { Application.Quit(); } } } + protected void LateUpdate() => ProcessEvents(); + + protected void FixedUpdate() => ProcessEvents(); + private void ProcessEvents() { - // dispatch event queue on main unity thread while (eventQueue.Count > 0) { eventQueue.Dequeue().Invoke(); } @@ -1288,11 +1318,9 @@ public static T ACFindObjectOfType() where T : UnityEngine.Object { return FindFirstObjectByType(); #endif } - #endregion #region internal functions - private void OnDeviceStateChange(JObject msg) { if (msg["device_id"] == null) { return; @@ -1414,7 +1442,68 @@ private void OnMessage(JObject msg) { } } + private void RequestAudioFocus() { + if (!_canHaveAudioFocus) { + AirConsoleLogger.Log(() => "AirConsole: Not requesting audio focus because the app is not allowed."); + return; + } + + if (IsAndroidRuntime) { + HasAudioFocus = _pluginManager.RequestAudioFocus(); + } else { + HasAudioFocus = true; + } + + if (!HasAudioFocus) { + AirConsoleLogger.LogError(() => + "AirConsole: Failed to obtain audio focus. Audio may not work as expected. Should pause platform"); + } + } + + private void AbandonAudioFocus() { + HasAudioFocus = false; + if (IsAndroidRuntime) { + _pluginManager.AbandonAudioFocus(); + } + } + + private bool _firstReady = true; + + // TODO(QAB-14400, QAB-14401): This does not yet work correctly - when going to web, we lose audio focus and due to that + // we do not regain it when coming back from web in OnReady. We need to distinguish between the two paths private void OnReady(JObject msg) { + _ignoreAudioFocusLoss = false; + if (_firstReady) { + _firstReady = false; + _canHaveAudioFocus = true; + } + + RequestAudioFocus(); + if (Application.platform == RuntimePlatform.Android) { + // Android based games must respect the volume change requests so we can correctly handle Android AudioFocus behavior as + // demanded by Automotive on one side and Android 33+ on the other side. + if (OnGameAudioFocusChanged == null || OnGameAudioFocusChanged.GetInvocationList().Length == 0) { +#if UNITY_EDITOR + UnityEditor.EditorApplication.isPlaying = false; + throw new Exception("No listeners registered to OnGameAudioFocusChanged. Editor playback stopped."); +#else + throw new Exception("No listeners registered to OnGameAudioFocusChanged."); +#endif + } + + if (!Application.isEditor) { + webViewObject.AbandonUnityAudioFocus(); + + // TODO(PRO-1637): Implement the necessary pieces to properly handle AudioFocus changes on Android in conjunction with + // WebView and the AirConsole Unity Plugin. + } + } else { + if (OnGameAudioFocusChanged != null && OnGameAudioFocusChanged.GetInvocationList().Length > 0) { + AirConsoleLogger.Log(() => + "Registration to event OnGameAudioFocusChanged identified. This will only be called when running on Android devices."); + } + } + // Queue all state modifications to run on the Unity main thread to avoid race conditions eventQueue.Enqueue(delegate() { if (webViewLoadingCanvas) { @@ -1456,6 +1545,8 @@ private void OnReady(JObject msg) { _devices.Add(assign); } + _receivedReady = true; + if (onReady != null) { onReady((string)msg["code"]); } @@ -1550,6 +1641,7 @@ private void ResetCaches(Action taskToQueueAfterClear) { _server_time_offset = 0; _location = null; _translations = null; + _receivedReady = false; // Reset safe area _safeAreaWasSet = false; @@ -1611,7 +1703,12 @@ private void CleanupWebSocketListener() { AirConsoleLogger.LogDevelopment(() => "WebSocket listener cleanup complete"); } - private void RecreateWebView() { + private void ReloadWebView() { + if (!_receivedReady) { + AirConsoleLogger.LogDevelopment(() => "Skipping reload. We have not yet left the Player Lobby."); + return; + } + if (string.IsNullOrEmpty(_webViewOriginalUrl) || string.IsNullOrEmpty(_webViewConnectionUrl)) { List missingComponents = new(); if (string.IsNullOrEmpty(_webViewOriginalUrl)) { @@ -1627,32 +1724,17 @@ private void RecreateWebView() { return; } - AirConsoleLogger.LogDevelopment(() => $"Recreating webview with URL: {_webViewOriginalUrl}"); - - // Cleanup websocket listener first to prevent stale events - CleanupWebSocketListener(); - - // Reset webview manager - _webViewManager = null; - - // Destroy the old webview if (webViewObject) { - if (_pluginManager != null && _reloadWebviewHandler != null) { - _pluginManager.OnReloadWebview -= _reloadWebviewHandler; - _reloadWebviewHandler = null; - } - - webViewObject.Destroy(); - - Destroy(webViewObject.gameObject); - webViewObject = null; + AirConsoleLogger.LogDevelopment(() => $"Reloading webview with URL: {_webViewOriginalUrl}"); + LoadAndroidWebviewUrl(_webViewOriginalUrl); + } else { + AirConsoleLogger.LogError(() => "Reloading webview failed, no webViewObject found."); } - - // Recreate the webview with stored connection URL - CreateAndroidWebview(_webViewConnectionUrl); } private void OnGameEnd(JObject msg) { + _ignoreAudioFocusLoss = true; + AbandonAudioFocus(); _webViewManager.RequestStateTransition(WebViewManager.WebViewState.FullScreen); try { @@ -1672,7 +1754,7 @@ private void OnGameEnd(JObject msg) { eventQueue.Enqueue(delegate { // We want to chain RecreateWebView to ensure it happens independent of // the eventQueue getting cleared and related side effects. - ResetCaches(RecreateWebView); + ResetCaches(ReloadWebView); }); } catch (Exception e) { if (Settings.debug.error) { @@ -1796,6 +1878,8 @@ private void OnPremium(JObject msg) { } private void OnPause(JObject msg) { + AbandonAudioFocus(); + try { if (onPause != null) { eventQueue.Enqueue(delegate() { @@ -1816,6 +1900,9 @@ private void OnPause(JObject msg) { } private void OnResume(JObject msg) { + // When we resume, we can have audio focus again. + _canHaveAudioFocus = true; + RequestAudioFocus(); try { if (onResume != null) { eventQueue.Enqueue(delegate() { @@ -1857,6 +1944,24 @@ public ReadOnlyCollection ActivePlayerDeviceIds { get => _players.AsReadOnly(); } + /// + /// Maximum Audio Volume allowed at this time.
+ /// A value of 0 indicates, that the game should be muted right now and all audio output should be paused.
+ /// A value of 1 indicates, that the game can play audio at full volume.
+ /// Values in between should be used to set the volume of the audio output.
+ /// This value can change at any time and you are expected to listen to OnMaximumVolumeChanged and adjust accordingly immediately. + ///
+ /// 1 + public float MaximumAudioVolume { get; private set; } = 1; + + /// + /// Does the game currently have audio focus?
+ /// If false, the game should not play any audio at all.
+ /// If true, the game can play audio, respecting the MaximumAudioVolume property.
+ /// This value can change at any time and you are expected to listen to OnGameAudioFocusChanged and adjust accordingly immediately. + ///
+ public bool HasAudioFocus { get; private set; } = true; + /// /// True, if this is the Android platform running on the device, not the editor. /// @@ -1891,6 +1996,7 @@ internal static bool IsAndroidOrEditor { private Action _reloadWebviewHandler; private PluginManager _pluginManager; + private bool _receivedReady = false; private List _devices = new(); private int _device_id; private int _server_time_offset; @@ -1923,14 +2029,13 @@ private void StopWebsocketServer() { private void OnClose() { // Queue the clear operation to run on the Unity main thread to avoid race conditions - eventQueue.Enqueue(delegate() { - _devices.Clear(); - }); + eventQueue.Enqueue(delegate() { _devices.Clear(); }); } public static string GetUrl(StartMode mode) { bool isHttps = !Application.isEditor - || (!string.IsNullOrEmpty(instance.LocalIpOverride) && instance.LocalIpOverride.StartsWith("https://")); + || (!string.IsNullOrEmpty(instance.LocalIpOverride) + && instance.LocalIpOverride.StartsWith("https://")); string url = isHttps ? Settings.AIRCONSOLE_DEV_URL_HTTPS : Settings.AIRCONSOLE_DEV_URL_HTTP; if (mode == StartMode.VirtualControllers || mode == StartMode.DebugVirtualControllers) { url += "simulator/"; @@ -2007,13 +2112,11 @@ private void AllocateDeviceSlots(int i) { private int GetScaledWebViewHeight() => (int)((float)webViewHeight * Screen.height / defaultScreenHeight); - private void OnConnectUrlReceived (string connectionUrl) { + private void OnConnectUrlReceived(string connectionUrl) { _pluginManager.OnConnectionUrlReceived -= OnConnectUrlReceived; eventQueue.Enqueue(delegate { - // connectionUrl = "client?id=bmw-idc-23&runtimePlatform=android&homeCountry=DE&SwPu=24-11"; CreateAndroidWebview(connectionUrl); }); - } private string ComputeUrlVersion(string version) { @@ -2027,7 +2130,8 @@ private void InitWebView() { if (!string.IsNullOrEmpty(androidGameVersion)) { PrepareWebviewOverlay(); if (Application.isEditor) { - string connectionUrl = $"client?id=androidunity-{ComputeUrlVersion(Settings.VERSION)}&runtimePlatform=android"; + string connectionUrl + = $"client?id=androidunity-{ComputeUrlVersion(Settings.VERSION)}&runtimePlatform=android"; CreateAndroidWebview(connectionUrl); } else if (IsAndroidRuntime) { AirConsoleLogger.LogDevelopment(() => @@ -2035,7 +2139,8 @@ private void InitWebView() { if (_pluginManager.IsInitialized) { string connectionUrl = _pluginManager.ConnectionUrl; - AirConsoleLogger.LogDevelopment(() => $"InitWebView: DataProviderInitialized, use connection url {connectionUrl}"); + AirConsoleLogger.LogDevelopment(() => + $"InitWebView: DataProviderInitialized, use connection url {connectionUrl}"); CreateAndroidWebview(connectionUrl); } else { @@ -2075,6 +2180,7 @@ private void PrepareWebviewOverlay() { } else { webViewLoadingImage.rectTransform.sizeDelta = new Vector2(Screen.width / 2, Screen.height / 2); } + webViewLoadingImage.preserveAspect = true; if (!webViewLoadingSprite) { webViewLoadingImage.sprite = Resources.Load("androidtv-loadingscreen", typeof(Sprite)) as Sprite; @@ -2083,7 +2189,7 @@ private void PrepareWebviewOverlay() { private void CreateAndroidWebview(string connectionUrl) { AirConsoleLogger.LogDevelopment(() => $"CreateAndroidWebview with connection url {connectionUrl}"); - if (webViewObject == null) { + if (!webViewObject) { _webViewConnectionUrl = connectionUrl; webViewObject = new GameObject("WebViewObject").AddComponent(); @@ -2091,6 +2197,8 @@ private void CreateAndroidWebview(string connectionUrl) { DontDestroyOnLoad(webViewObject.gameObject); } + webViewObject.SetOnAudioFocusChanged(HandleWebViewAudioFocusChanged); + webViewObject.Init(ProcessJS, err => AirConsoleLogger.LogDevelopment(() => $"AirConsole WebView error: {err}"), httpError => AirConsoleLogger.LogDevelopment(() => $"AirConsole WebView HttpError: {httpError}"), @@ -2100,13 +2208,18 @@ private void CreateAndroidWebview(string connectionUrl) { cookies => AirConsoleLogger.LogDevelopment(() => $"AirConsole WebView cookies: {cookies}"), true, false); + if (IsAndroidRuntime && _pluginManager != null) { + _pluginManager.OnReloadWebview += () => webViewObject.Reload(); + _pluginManager.InitializeOfflineCheck(); + } + string url; if (IsAndroidRuntime) { - string urlOverride = AndroidIntentUtils.GetIntentExtraString("base_url", string.Empty); - url = !string.IsNullOrEmpty(urlOverride) ? urlOverride : Settings.AIRCONSOLE_BASE_URL; - AirConsoleLogger.LogDevelopment(() => $"BaseURL Override: {urlOverride}"); + string urlOverride = AndroidIntentUtils.GetIntentExtraString("base_url", string.Empty); + url = !string.IsNullOrEmpty(urlOverride) ? urlOverride : Settings.AIRCONSOLE_BASE_URL; + AirConsoleLogger.LogDevelopment(() => $"BaseURL Override: {urlOverride}"); } else { - url = Settings.AIRCONSOLE_BASE_URL; + url = Settings.AIRCONSOLE_BASE_URL; } url += connectionUrl; @@ -2115,7 +2228,7 @@ private void CreateAndroidWebview(string connectionUrl) { } androidGameVersion = AndroidIntentUtils.GetIntentExtraString("game_version", androidGameVersion); - + url += "&game-id=" + Application.identifier; url += "&game-version=" + androidGameVersion; url += "&unity-version=" + Application.unityVersion; @@ -2126,36 +2239,45 @@ private void CreateAndroidWebview(string connectionUrl) { _webViewOriginalUrl = url; _webViewManager = new WebViewManager(webViewObject, defaultScreenHeight); - webViewObject.SetVisibility(!Application.isEditor); - AirConsoleLogger.LogDevelopment(() => $"Initial URL: {url}"); - webViewObject.LoadURL(url); + LoadAndroidWebviewUrl(url); - if (IsAndroidRuntime) { - if (_pluginManager != null) { - _reloadWebviewHandler = () => webViewObject.LoadURL(url); - _pluginManager.OnReloadWebview += _reloadWebviewHandler; - _pluginManager.InitializeOfflineCheck(); + _logPlatformMessages = AndroidIntentUtils.GetIntentExtraBool("log_platform_messages", false); + InitWebSockets(); + } + } + + private void LoadAndroidWebviewUrl(string url) { + webViewObject.SetVisibility(!Application.isEditor); + AirConsoleLogger.LogDevelopment(() => $"Initial URL: {url}"); + webViewObject.LoadURL(url); + + if (IsAndroidRuntime) { + if (_pluginManager != null) { + if (_reloadWebviewHandler != null) { + _pluginManager.OnReloadWebview -= _reloadWebviewHandler; } - bool isWebviewDebuggable = AndroidIntentUtils.GetIntentExtraBool("webview_debuggable", false); - webViewObject.EnableWebviewDebugging(isWebviewDebuggable); + _reloadWebviewHandler = () => webViewObject.LoadURL(url); + _pluginManager.OnReloadWebview += _reloadWebviewHandler; + _pluginManager.InitializeOfflineCheck(); } - _logPlatformMessages = AndroidIntentUtils.GetIntentExtraBool("log_platform_messages", false); - InitWebSockets(); + bool isWebviewDebuggable = AndroidIntentUtils.GetIntentExtraBool("webview_debuggable", false); + webViewObject.EnableWebviewDebugging(isWebviewDebuggable); } } private static bool ResolveNativeGameSizingSupport(bool fallback) { - AirconsoleRuntimeSettings settings = Resources.Load(AirconsoleRuntimeSettings.ResourceName); + AirconsoleRuntimeSettings settings + = Resources.Load(AirconsoleRuntimeSettings.ResourceName); return settings ? settings.NativeGameSizingSupported : fallback; } - private static int GetAndroidBundleVersionCode() { AndroidJavaObject ca = UnityAndroidObjectProvider.GetUnityActivity(); AndroidJavaObject packageManager = ca.Call("getPackageManager"); - AndroidJavaObject pInfo = packageManager.Call("getPackageInfo", Application.identifier, 0); + AndroidJavaObject pInfo + = packageManager.Call("getPackageInfo", Application.identifier, 0); return pInfo.Get("versionCode"); } @@ -2167,13 +2289,11 @@ private void OnLaunchApp(JObject msg) { if (gameId != Application.identifier || gameVersion != instance.androidGameVersion) { // Marshal to main thread since this is called from WebSocket background thread - eventQueue.Enqueue(() => { - StartCoroutine(HandleLaunchAppTransition(msg, gameId, gameVersion)); - }); + eventQueue.Enqueue(() => HandleLaunchAppTransition(msg, gameId, gameVersion)); } } - private System.Collections.IEnumerator HandleLaunchAppTransition(JObject msg, string gameId, string gameVersion) { + private void HandleLaunchAppTransition(JObject msg, string gameId, string gameVersion) { bool quitAfterLaunchIntent = false; // Flag used to force old pre v2.5 way of quitting if (msg["quit_after_launch_intent"] != null) { @@ -2184,8 +2304,9 @@ private System.Collections.IEnumerator HandleLaunchAppTransition(JObject msg, st if (!quitAfterLaunchIntent) { Application.Quit(); if (_pluginManager == null || !_pluginManager.IsAutomotive()) { - AirConsoleLogger.LogDevelopment(() => $"Quit and wait for 2 seconds"); - yield return new WaitForSecondsRealtime(2.0f); + int waitTime = _pluginManager != null && _pluginManager.IsAutomotive() ? 500 : 2000; + AirConsoleLogger.LogDevelopment(() => $"Quit and wait for {waitTime} milliseconds"); + Thread.Sleep(waitTime); } else { AirConsoleLogger.LogDevelopment(() => $"Quit immediately"); } @@ -2199,11 +2320,10 @@ private System.Collections.IEnumerator HandleLaunchAppTransition(JObject msg, st if (quitAfterLaunchIntent) { AirConsoleLogger.LogDevelopment(() => $"Quit after launch intent"); Application.Quit(); - yield break; + return; } - float timeout = 2.0f; - yield return new WaitForSecondsRealtime(timeout); + Thread.Sleep(_pluginManager != null && _pluginManager.IsAutomotive() ? 500 : 2000); FinishActivity(); } @@ -2256,7 +2376,7 @@ private void OnUnityWebviewResize(JObject msg) { int h = Screen.height; if (msg["top_bar_height"] != null) { - h = (int)msg["top_bar_height"] * 2; // todo(android-native): This probably should use the screen dpi scaling factor + h = (int)msg["top_bar_height"] * 2; // TODO(android-native): This should use the screen dpi scaling factor webViewHeight = h; _webViewManager.SetWebViewHeight(h); } @@ -2268,7 +2388,8 @@ private void OnUnityWebviewResize(JObject msg) { } if (Camera.main - && androidUIResizeMode is AndroidUIResizeMode.ResizeCamera or AndroidUIResizeMode.ResizeCameraAndReferenceResolution) { + && androidUIResizeMode is AndroidUIResizeMode.ResizeCamera + or AndroidUIResizeMode.ResizeCameraAndReferenceResolution) { Camera.main.pixelRect = GetCameraPixelRect(); } } @@ -2295,7 +2416,8 @@ private void OnAndroidSceneLoaded(Scene scene, LoadSceneMode sceneMode) { return; } - if (androidUIResizeMode is AndroidUIResizeMode.ResizeCamera or AndroidUIResizeMode.ResizeCameraAndReferenceResolution) { + if (androidUIResizeMode is AndroidUIResizeMode.ResizeCamera + or AndroidUIResizeMode.ResizeCameraAndReferenceResolution) { Camera.main.pixelRect = GetCameraPixelRect(); } @@ -2325,6 +2447,159 @@ private void AdaptUGuiLayout() { } } + #region Audio Focus and Volume + + private bool _nativeGainedAudioFocus; + private bool _canIgnoreNativeAudioLoss = true; + + private void HandleOnMaxVolumeChanged(float newMaximumVolume) { + MaximumAudioVolume = Mathf.Clamp01(_canHaveAudioFocus ? newMaximumVolume : 0f); + AirConsoleLogger.LogDevelopment(() => + $"HandleOnMaxVolumeChanged({newMaximumVolume}) -> {MaximumAudioVolume}. No action taken."); + + + } + + // TODO(QAB-14400, QAB-14401, QAB-14403): Handle Audio Focus change not yet fully implemented. + // Needs testing on various devices and scenarios and requires a more complete state machine. + // TODO(QAB-14400, QAB-14401, QAB-14403): Is this actually correct regarding _ignoreAudioFocusLoss which is true from onGameEnd -> onReady? + // Plugin Manager Audio Focus change handler + private void HandleAudioFocusChange(bool canHaveAudioFocus, bool shallMuteWebview) { + AirConsoleLogger.LogDevelopment(() => $"HandleAudioFocusChanged({canHaveAudioFocus})"); + + if (!canHaveAudioFocus && _ignoreAudioFocusLoss) { + AirConsoleLogger.LogDevelopment(() => "Ignoring audio focus loss until the game is ready."); + return; + } + + // TODO(PRO-1637): Implement a more complete state machine to handle audio focus changes correctly. + _canHaveAudioFocus = canHaveAudioFocus; + if (!canHaveAudioFocus) { + AirConsoleLogger.LogError(() => "Can have audio focus lost."); + } + + MaximumAudioVolume = canHaveAudioFocus ? 1f : 0f; + eventQueue.Enqueue(() => OnGameAudioFocusChanged?.Invoke(canHaveAudioFocus, MaximumAudioVolume)); + } + + // Webview Audio Focus change handler + private void HandleWebViewAudioFocusChanged(string command) { + HandlePlatformAudioFocusChanged(command); + } + + private void HandleNativeAudioFocusChanged(string command) { + HandlePlatformAudioFocusChanged(command); + } + + private void HandlePlatformAudioFocusChanged(string command) { + AirConsoleLogger.LogDevelopment(() => $"HandlePlatformAudioFocusChanged('{command}')"); + if (string.IsNullOrEmpty(command)) { + AirConsoleLogger.LogError(() => "Audio focus command was null or empty."); + return; + } + + if (command.StartsWith("WEBVIEW_AUDIOFOCUS_", StringComparison.Ordinal)) { + HandleWebViewAudioFocusEvent(command); + return; + } + + if (command.StartsWith("NATIVE_AUDIOFOCUS_", StringComparison.Ordinal)) { + HandleNativeAudioFocusEvent(command); + return; + } + + AirConsoleLogger.LogError(() => $"Unknown audio focus command: {command}"); + } + + private void HandleWebViewAudioFocusEvent(string command) { + switch (command) { + case "WEBVIEW_AUDIOFOCUS_START": + break; + case "WEBVIEW_AUDIOFOCUS_STOP": + break; + case "WEBVIEW_AUDIOFOCUS_GAIN": + case "WEBVIEW_AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE": + case "WEBVIEW_AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK": + case "WEBVIEW_AUDIOFOCUS_GAIN_TRANSIENT": + AirConsoleLogger.Log(() => + $"{command}: Can ignore native loss={_canIgnoreNativeAudioLoss}"); + HasAudioFocus = true; + _ignoreAudioFocusLoss = true; + break; + case "WEBVIEW_AUDIOFOCUS_LOSS": + AirConsoleLogger.Log(() => + $"{command}: Can ignore native loss={_canIgnoreNativeAudioLoss}"); + + if (_nativeGainedAudioFocus) { + return; + } + + _ignoreAudioFocusLoss = false; + HandleAudioFocusChange(false, true); + break; + + case "WEBVIEW_AUDIOFOCUS_LOSS_TRANSIENT": + case "WEBVIEW_AUDIOFOCUS_LOSS_CAN_DUCK": + break; + + // This is fired when we ask the webview to abandon audio focus. + case "WEBVIEW_AUDIOFOCUS_ABANDON": + break; + + default: + AirConsoleLogger.LogError(() => $"Unknown audio focus command from webview: {command}"); + break; + } + } + + private void HandleNativeAudioFocusEvent(string command) { + switch (command) { + case "NATIVE_AUDIOFOCUS_GAIN": + case "NATIVE_AUDIOFOCUS_GAIN_TRANSIENT": + case "NATIVE_AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE": + case "NATIVE_AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK": + AirConsoleLogger.Log(() => + $"{command}: Can ignore native loss={_canIgnoreNativeAudioLoss}"); + HasAudioFocus = true; + _ignoreAudioFocusLoss = false; + _nativeGainedAudioFocus = true; + + HandleAudioFocusChange(true, true); + + break; + + case "NATIVE_AUDIOFOCUS_LOSS": + AirConsoleLogger.Log(() => + $"{command}: Can ignore native loss={_canIgnoreNativeAudioLoss}"); + + if (_canIgnoreNativeAudioLoss) { + _canIgnoreNativeAudioLoss = false; + return; + } + + _nativeGainedAudioFocus = false; + _ignoreAudioFocusLoss = false; + HandleAudioFocusChange(false, true); + + break; + case "NATIVE_AUDIOFOCUS_LOSS_TRANSIENT": + case "NATIVE_AUDIOFOCUS_LOSS_CAN_DUCK": + break; + case "NATIVE_AUDIOFOCUS_ABANDON": + _nativeGainedAudioFocus = false; + _ignoreAudioFocusLoss = false; + HandleAudioFocusChange(true, false); + break; + + case "NATIVE_AUDIOFOCUS_NONE": + break; + default: + AirConsoleLogger.LogError(() => $"Unknown audio focus command from native plugin: {command}"); + break; + } + } + #endregion Audio Focus and Volume + /// /// Called when there is an update for the content provider. /// @@ -2356,17 +2631,9 @@ private static float GetFloatFromMessage(JObject msg, string name, int defaultVa !string.IsNullOrEmpty((string)msg[name]) ? (float)msg[name] : defaultValue; - #endregion #region AirConsole Internal - - internal event Action OnApplicationFocusChanged; - - private void OnApplicationFocus(bool hasFocus) { - OnApplicationFocusChanged?.Invoke(hasFocus); - } - /// /// Sends a message to the platform. /// @@ -2378,7 +2645,6 @@ internal void SendPlatformMessage(JObject msg) { wsListener.Message(msg); } - #endregion AirConsole Internal #endif diff --git a/Assets/AirConsole/scripts/Runtime/NativeGameSizingSettings.cs b/Assets/AirConsole/scripts/Runtime/NativeGameSizingSettings.cs new file mode 100644 index 00000000..61fd8841 --- /dev/null +++ b/Assets/AirConsole/scripts/Runtime/NativeGameSizingSettings.cs @@ -0,0 +1,21 @@ +using UnityEngine; + +namespace NDream.AirConsole { + /// + /// Provides runtime access to the native game sizing setting that is configured in the editor. + /// + public sealed class NativeGameSizingSettings : ScriptableObject { + public const string ResourceName = "NativeGameSizingSettings"; + + [SerializeField] + private bool nativeGameSizingSupported = true; + + public bool NativeGameSizingSupported => nativeGameSizingSupported; + +#if UNITY_EDITOR + public void SetNativeGameSizingSupported(bool value) { + nativeGameSizingSupported = value; + } +#endif + } +} diff --git a/Assets/AirConsole/examples/basic/AudioPlayer.cs.meta b/Assets/AirConsole/scripts/Runtime/NativeGameSizingSettings.cs.meta similarity index 83% rename from Assets/AirConsole/examples/basic/AudioPlayer.cs.meta rename to Assets/AirConsole/scripts/Runtime/NativeGameSizingSettings.cs.meta index a2241e10..d9f4a9e4 100644 --- a/Assets/AirConsole/examples/basic/AudioPlayer.cs.meta +++ b/Assets/AirConsole/scripts/Runtime/NativeGameSizingSettings.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d33481c3f96324d4bba3e5db8826fd6e +guid: bb1d59c4db4ae47d7b1503189436d1ed MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/AirConsole/scripts/Runtime/Plugin/Android/GenericUnityPluginCallback.cs b/Assets/AirConsole/scripts/Runtime/Plugin/Android/GenericUnityPluginCallback.cs index c589caf7..7b12ab23 100644 --- a/Assets/AirConsole/scripts/Runtime/Plugin/Android/GenericUnityPluginCallback.cs +++ b/Assets/AirConsole/scripts/Runtime/Plugin/Android/GenericUnityPluginCallback.cs @@ -24,4 +24,4 @@ public void onExecute(T value) { } } } -#endif \ No newline at end of file +#endif diff --git a/Assets/AirConsole/scripts/Runtime/Plugin/Android/PluginManager.cs b/Assets/AirConsole/scripts/Runtime/Plugin/Android/PluginManager.cs index b017597b..76913c62 100644 --- a/Assets/AirConsole/scripts/Runtime/Plugin/Android/PluginManager.cs +++ b/Assets/AirConsole/scripts/Runtime/Plugin/Android/PluginManager.cs @@ -18,12 +18,13 @@ public class PluginManager { /// Currently only supports UNITY_ANDROID && !UNITY_EDITOR scenarios. // ReSharper disable once EventNeverSubscribedTo.Global internal event Action OnConnectionUrlReceived; + + internal event Action OnUpdateVolume; + internal event Action OnAudioFocusChange; internal PluginManager(AirConsole airConsole) { - AirConsoleLogger.LogDevelopment(() => $"{nameof(PluginManager)} created."); - GenericUnityPluginCallback pauseCallback = new(HandlePlatformPauseEvent); - + UnityPluginStringCallback callback = new( url => { IsInitialized = true; @@ -32,6 +33,17 @@ internal PluginManager(AirConsole airConsole) { }, error => { AirConsoleLogger.Log(() => $"AndroidDataProvider initialization failed with {error}"); } ); + + GenericUnityPluginCallback onVolumeChangeCallback = new(volume => { + AirConsoleLogger.LogDevelopment(() => $"Volume changed to {volume}"); + OnUpdateVolume?.Invoke(volume); + }); + + GenericUnityPluginCallback onAudioFocusChangeCallback = new(focusEvent => { + AirConsoleLogger.LogDevelopment(() => $"Audio focus event received: {focusEvent}"); + + OnAudioFocusChange?.Invoke(focusEvent); + }); UnityPluginExecutionCallback reloadCallback = new(() => { OnReloadWebview?.Invoke(); }); _service = @@ -39,12 +51,14 @@ internal PluginManager(AirConsole airConsole) { pauseCallback, reloadCallback, Settings.AIRCONSOLE_BASE_URL, - callback); + callback, + onVolumeChangeCallback, + onAudioFocusChangeCallback); _airConsole = airConsole; - _airConsole.UnityPause += OnPause; - _airConsole.UnityResume += OnResume; _airConsole.UnityDestroy += OnDestroy; + + AirConsoleLogger.LogDevelopment(() => $"{nameof(PluginManager)} created."); } internal void ReportPlatformReady() { @@ -52,43 +66,38 @@ internal void ReportPlatformReady() { _service.Call("reportPlatformReady"); } + + internal bool RequestAudioFocus() { + AirConsoleLogger.LogDevelopment(() => "RequestAudioFocus called."); + return _service.Call("requestAudioFocus"); + } + + internal void AbandonAudioFocus() { + AirConsoleLogger.LogDevelopment(() => "AbandonAudioFocus called."); + _service.Call("abandonAudioFocus"); + } // /// // /// Writes client identification related information using the native library // /// // /// The screen connectCode to write. // /// The screen uid to write. - internal void WriteClientIdentification(string connectCode, string uid) { - AirConsoleLogger.LogDevelopment(() => $"WriteClientIdentification w/ connectCode: {connectCode}, uid: {uid}"); - _service?.Call("writeClientIdentification", connectCode, uid); - } - - internal bool IsTV() { - return _service != null && _service.Call("isTV"); - } - internal bool IsAutomotive() { - return _service != null && _service.Call("isAutomotive"); - } - internal bool IsNormalDevice() { - return _service != null && _service.Call("isNormalDevice"); - } - - internal void InitializeOfflineCheck() { - AirConsoleLogger.LogDevelopment(() => "InitializeOfflineCheck called."); - - _service.Call("initializeOfflineCheck"); + internal void WriteClientIdentification(string connectCode, string uid) { + AirConsoleLogger.LogDevelopment(() => + $"WriteClientIdentification w/ connectCode: {connectCode}, uid: {uid}"); + _service?.Call("writeClientIdentification", connectCode, uid); } - private void OnPause() { - AirConsoleLogger.LogDevelopment(() => "OnPause called."); + internal bool IsTV() => _service != null && _service.Call("isTV"); - _service.Call("onPause"); - } + internal bool IsAutomotive() => _service != null && _service.Call("isAutomotive"); + + internal bool IsNormalDevice() => _service != null && _service.Call("isNormalDevice"); - private void OnResume() { - AirConsoleLogger.LogDevelopment(() => "OnResume called."); + internal void InitializeOfflineCheck() { + AirConsoleLogger.LogDevelopment(() => "InitializeOfflineCheck called."); - _service.Call("onResume"); + _service.Call("initializeOfflineCheck"); } private void OnDestroy() { @@ -118,4 +127,4 @@ internal static void SendPlatformMessage(string type) { } } } -} \ No newline at end of file +} diff --git a/Assets/AirConsole/scripts/Runtime/Resources/NativeGameSizingSettings.asset b/Assets/AirConsole/scripts/Runtime/Resources/NativeGameSizingSettings.asset new file mode 100644 index 00000000..8f0a569f --- /dev/null +++ b/Assets/AirConsole/scripts/Runtime/Resources/NativeGameSizingSettings.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a7a108afd50e493bb30165bdf49d7ea3, type: 3} + m_Name: NativeGameSizingSettings + m_EditorClassIdentifier: + nativeGameSizingSupported: 1 diff --git a/Assets/AirConsole/unity-webview/Plugins/Editor.meta b/Assets/AirConsole/scripts/Runtime/Resources/NativeGameSizingSettings.asset.meta similarity index 52% rename from Assets/AirConsole/unity-webview/Plugins/Editor.meta rename to Assets/AirConsole/scripts/Runtime/Resources/NativeGameSizingSettings.asset.meta index 4afc4293..7f534306 100644 --- a/Assets/AirConsole/unity-webview/Plugins/Editor.meta +++ b/Assets/AirConsole/scripts/Runtime/Resources/NativeGameSizingSettings.asset.meta @@ -1,8 +1,8 @@ fileFormatVersion: 2 -guid: 5415c2bc4488c42739b36767bc7f8c83 -folderAsset: yes -DefaultImporter: +guid: 3d4900a69c99d45f8923e6f7f183461d +NativeFormatImporter: externalObjects: {} + mainObjectFileID: 11400000 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/AirConsole/scripts/Runtime/Settings.cs b/Assets/AirConsole/scripts/Runtime/Settings.cs index 9ca3f8a5..d3a64589 100644 --- a/Assets/AirConsole/scripts/Runtime/Settings.cs +++ b/Assets/AirConsole/scripts/Runtime/Settings.cs @@ -5,7 +5,7 @@ namespace NDream.AirConsole { public static class Settings { public static readonly Version RequiredMinimumVersion = new(1, 10, 0); - public const string VERSION = "2.6.1"; + public const string VERSION = "2.6.2"; // ReSharper disable once UnusedMember.Global // Used by AirConsole on Android only public const string AIRCONSOLE_BASE_URL = "https://www.airconsole.com/"; diff --git a/Assets/AirConsole/scripts/SupportCheck/AirConsole.SupportCheck.asmdef b/Assets/AirConsole/scripts/SupportCheck/AirConsole.SupportCheck.asmdef index 4e261d08..50434e89 100644 --- a/Assets/AirConsole/scripts/SupportCheck/AirConsole.SupportCheck.asmdef +++ b/Assets/AirConsole/scripts/SupportCheck/AirConsole.SupportCheck.asmdef @@ -1,21 +1,21 @@ { - "name": "AirConsole.Support", - "rootNamespace": "NDream.AirConsole.Support", - "references": [], - "includePlatforms": [ - "Editor" - ], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": true, - "precompiledReferences": [ - "Newtonsoft.Json.dll", - "websocket-sharp.dll" - ], - "autoReferenced": true, - "defineConstraints": [ - "!UNITY_2022_3_OR_NEWER" - ], - "versionDefines": [], - "noEngineReferences": false + "name": "AirConsole.Support", + "rootNamespace": "NDream.AirConsole.Support", + "references": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "Newtonsoft.Json.dll", + "websocket-sharp.dll" + ], + "autoReferenced": true, + "defineConstraints": [ + "!UNITY_2022_3_OR_NEWER" + ], + "versionDefines": [], + "noEngineReferences": false } \ No newline at end of file diff --git a/Assets/AirConsole/scripts/Tests/EditMode/AirConsole.EditMode.Tests.asmdef b/Assets/AirConsole/scripts/Tests/EditMode/AirConsole.EditMode.Tests.asmdef index 0c045dda..b0dd4f8a 100644 --- a/Assets/AirConsole/scripts/Tests/EditMode/AirConsole.EditMode.Tests.asmdef +++ b/Assets/AirConsole/scripts/Tests/EditMode/AirConsole.EditMode.Tests.asmdef @@ -1,27 +1,27 @@ { - "name": "AirConsole.EditMode.Tests", - "rootNamespace": "NDream.AirConsole.EditMode.Tests", - "references": [ - "UnityEngine.TestRunner", - "AirConsole.Runtime" - ], - "includePlatforms": [ - "Android", - "Editor", - "WebGL" - ], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": true, - "precompiledReferences": [ - "nunit.framework.dll", - "Newtonsoft.Json.dll" - ], - "autoReferenced": true, - "defineConstraints": [ - "UNITY_2022_3_OR_NEWER", - "UNITY_INCLUDE_TESTS" - ], - "versionDefines": [], - "noEngineReferences": false + "name": "AirConsole.EditMode.Tests", + "rootNamespace": "NDream.AirConsole.EditMode.Tests", + "references": [ + "UnityEngine.TestRunner", + "AirConsole.Runtime" + ], + "includePlatforms": [ + "Android", + "Editor", + "WebGL" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "nunit.framework.dll", + "Newtonsoft.Json.dll" + ], + "autoReferenced": true, + "defineConstraints": [ + "UNITY_2022_3_OR_NEWER", + "UNITY_INCLUDE_TESTS" + ], + "versionDefines": [], + "noEngineReferences": false } \ No newline at end of file diff --git a/Assets/AirConsole/scripts/Tests/EditMode/AirConsoleTests.cs b/Assets/AirConsole/scripts/Tests/EditMode/AirConsoleTests.cs index 8de884aa..f1b39618 100644 --- a/Assets/AirConsole/scripts/Tests/EditMode/AirConsoleTests.cs +++ b/Assets/AirConsole/scripts/Tests/EditMode/AirConsoleTests.cs @@ -102,6 +102,10 @@ private void Start() { frameCount++; base.Update(); } + + internal new void FixedUpdate() => base.FixedUpdate(); + internal new void LateUpdate() => base.LateUpdate(); + internal new void SetSafeArea(JObject message) { base.SetSafeArea(message); diff --git a/Assets/AirConsole/scripts/Tests/Editor/AirConsole.Editor.Tests.asmdef b/Assets/AirConsole/scripts/Tests/Editor/AirConsole.Editor.Tests.asmdef index 88f8ecb1..987a0627 100644 --- a/Assets/AirConsole/scripts/Tests/Editor/AirConsole.Editor.Tests.asmdef +++ b/Assets/AirConsole/scripts/Tests/Editor/AirConsole.Editor.Tests.asmdef @@ -1,27 +1,27 @@ { - "name": "AirConsole.Editor.Tests", - "rootNamespace": "NDream.AirConsole.Editor.Tests", - "references": [ - "UnityEngine.TestRunner", - "UnityEditor.TestRunner", - "AirConsole.Runtime", - "AirConsole.Editor" - ], - "includePlatforms": [ - "Editor" - ], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": true, - "precompiledReferences": [ - "nunit.framework.dll", - "Newtonsoft.Json.dll" - ], - "autoReferenced": false, - "defineConstraints": [ - "UNITY_2022_3_OR_NEWER", - "UNITY_INCLUDE_TESTS" - ], - "versionDefines": [], - "noEngineReferences": false + "name": "AirConsole.Editor.Tests", + "rootNamespace": "NDream.AirConsole.Editor.Tests", + "references": [ + "UnityEngine.TestRunner", + "UnityEditor.TestRunner", + "AirConsole.Runtime", + "AirConsole.Editor" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "nunit.framework.dll", + "Newtonsoft.Json.dll" + ], + "autoReferenced": false, + "defineConstraints": [ + "UNITY_2022_3_OR_NEWER", + "UNITY_INCLUDE_TESTS" + ], + "versionDefines": [], + "noEngineReferences": false } \ No newline at end of file diff --git a/Assets/AirConsole/scripts/Tests/PlayMode/AirConsole.PlayMode.Tests.asmdef b/Assets/AirConsole/scripts/Tests/PlayMode/AirConsole.PlayMode.Tests.asmdef index 5938c6d5..f85bc658 100644 --- a/Assets/AirConsole/scripts/Tests/PlayMode/AirConsole.PlayMode.Tests.asmdef +++ b/Assets/AirConsole/scripts/Tests/PlayMode/AirConsole.PlayMode.Tests.asmdef @@ -1,23 +1,23 @@ { - "name": "AirConsole.PlayMode.Tests", - "rootNamespace": "NDream.AirConsole.PlayMode.Tests", - "references": [ - "UnityEngine.TestRunner", - "AirConsole.Runtime" - ], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": true, - "precompiledReferences": [ - "nunit.framework.dll", - "Newtonsoft.Json.dll" - ], - "autoReferenced": false, - "defineConstraints": [ - "UNITY_2022_3_OR_NEWER", - "UNITY_INCLUDE_TESTS" - ], - "versionDefines": [], - "noEngineReferences": false + "name": "AirConsole.PlayMode.Tests", + "rootNamespace": "NDream.AirConsole.PlayMode.Tests", + "references": [ + "UnityEngine.TestRunner", + "AirConsole.Runtime" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "nunit.framework.dll", + "Newtonsoft.Json.dll" + ], + "autoReferenced": false, + "defineConstraints": [ + "UNITY_2022_3_OR_NEWER", + "UNITY_INCLUDE_TESTS" + ], + "versionDefines": [], + "noEngineReferences": false } \ No newline at end of file diff --git a/Assets/AirConsole/unity-webview/Editor.meta b/Assets/AirConsole/unity-webview/Editor.meta index 439d487c..6b1a1fa1 100644 --- a/Assets/AirConsole/unity-webview/Editor.meta +++ b/Assets/AirConsole/unity-webview/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3e67d20066ca445cab1d878aa12db423 +guid: 00f4b1d6b8cdd4cb186e63faf26990a0 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/AirConsole/unity-webview/Editor/UnityWebViewPostprocessBuild.cs b/Assets/AirConsole/unity-webview/Editor/UnityWebViewPostprocessBuild.cs index cb840e4d..4586f87d 100644 --- a/Assets/AirConsole/unity-webview/Editor/UnityWebViewPostprocessBuild.cs +++ b/Assets/AirConsole/unity-webview/Editor/UnityWebViewPostprocessBuild.cs @@ -23,6 +23,8 @@ public class UnityWebViewPostprocessBuild { private static bool nofragment = true; + + //// for android/unity 2018.1 or newer //// cf. https://forum.unity.com/threads/android-hardwareaccelerated-is-forced-false-in-all-activities.532786/ //// cf. https://github.com/Over17/UnityAndroidManifestCallback @@ -47,53 +49,9 @@ public void OnPreprocessBuild(BuildTarget buildTarget, string path) { public void OnPostGenerateGradleAndroidProject(string basePath) { var changed = false; var androidManifest = new AndroidManifest(GetManifestPath(basePath)); - if (!nofragment) { - changed = (androidManifest.AddFileProvider(basePath) || changed); - { - var path = GetBuildGradlePath(basePath); - var lines0 = File.ReadAllText(path).Replace("\r\n", "\n").Replace("\r", "\n").Split(new[]{'\n'}); - { - var lines = new List(); - var independencies = false; - foreach (var line in lines0) { - if (line == "dependencies {") { - independencies = true; - } else if (independencies && line == "}") { - independencies = false; - lines.Add(" implementation 'androidx.core:core:1.6.0'"); - } else if (independencies) { - if (line.Contains("implementation(name: 'core") - || line.Contains("implementation(name: 'androidx.core.core") - || line.Contains("implementation 'androidx.core:core")) { - break; - } - } - lines.Add(line); - } - if (lines.Count > lines0.Length) { - File.WriteAllText(path, string.Join("\n", lines) + "\n"); - } - } - } - { - var path = GetGradlePropertiesPath(basePath); - var lines0 = ""; - var lines = ""; - if (File.Exists(path)) { - lines0 = File.ReadAllText(path).Replace("\r\n", "\n").Replace("\r", "\n") + "\n"; - lines = lines0; - } - if (!lines.Contains("android.useAndroidX=true")) { - lines += "android.useAndroidX=true\n"; - } - if (!lines.Contains("android.enableJetifier=true")) { - lines += "android.enableJetifier=true\n"; - } - if (lines != lines0) { - File.WriteAllText(path, lines); - } - } - } + + AddAndroidXDependencies(ref changed, androidManifest, basePath, !nofragment); + changed = (androidManifest.SetExported(true) || changed); changed = (androidManifest.SetWindowSoftInputMode("adjustPan") || changed); changed = (androidManifest.SetHardwareAccelerated(true) || changed); @@ -112,6 +70,63 @@ public void OnPostGenerateGradleAndroidProject(string basePath) { Debug.Log("unitywebview: adjusted AndroidManifest.xml."); } } + + private void AddAndroidXDependencies(ref bool changed, AndroidManifest androidManifest, string basePath, bool includeCoreDependency) { + changed = androidManifest.AddFileProvider(basePath) || changed; + { + string path = GetBuildGradlePath(basePath); + string[] lines0 = File.ReadAllText(path).Replace("\r\n", "\n").Replace("\r", "\n").Split(new[] { '\n' }); + { + List lines = new(); + bool inDependencies = false; + bool hasCore = false; + foreach (string line in lines0) { + if (line == "dependencies {") { + inDependencies = true; + } else if (inDependencies && line == "}") { + if (includeCoreDependency && !hasCore) { + lines.Add(" implementation 'androidx.core:core:1.6.0'"); + hasCore = true; + } + inDependencies = false; + } else if (inDependencies) { + if (line.Contains("implementation(name: 'core") + || line.Contains("implementation(name: 'androidx.core.core") + || line.Contains("implementation 'androidx.core:core")) { + hasCore = true; + } + } + + lines.Add(line); + } + + if (lines.Count > lines0.Length) { + File.WriteAllText(path, string.Join("\n", lines) + "\n"); + } + } + } + { + string path = GetGradlePropertiesPath(basePath); + string lines0 = ""; + string lines = ""; + if (File.Exists(path)) { + lines0 = File.ReadAllText(path).Replace("\r\n", "\n").Replace("\r", "\n") + "\n"; + lines = lines0; + } + + if (!lines.Contains("android.useAndroidX=true")) { + lines += "android.useAndroidX=true\n"; + } + + if (!lines.Contains("android.enableJetifier=true")) { + lines += "android.enableJetifier=true\n"; + } + + if (lines != lines0) { + File.WriteAllText(path, lines); + } + } + } #endif public int callbackOrder { @@ -186,25 +201,8 @@ public static void OnPostprocessBuild(BuildTarget buildTarget, string path) { var androidManifest = new AndroidManifest(manifest); if (!nofragment) { changed = (androidManifest.AddFileProvider("Assets/Plugins/Android") || changed); - var files = Directory.GetFiles("Assets/Plugins/Android/"); - var found = false; - foreach (var file in files) { - if (Regex.IsMatch(file, @"^Assets/Plugins/Android/(androidx\.core\.)?core-.*.aar$")) { - found = true; - break; - } - } - if (!found) { - foreach (var file in files) { - var match = Regex.Match(file, @"^Assets/Plugins/Android/(core.*.aar).tmpl$"); - if (match.Success) { - var name = match.Groups[1].Value; - File.Copy(file, "Assets/Plugins/Android/" + name, true); - break; - } - } - } } + changed = (androidManifest.SetWindowSoftInputMode("adjustPan") || changed); changed = (androidManifest.SetHardwareAccelerated(true) || changed); #if UNITYWEBVIEW_ANDROID_USES_CLEARTEXT_TRAFFIC @@ -283,6 +281,7 @@ public static void OnPostprocessBuild(BuildTarget buildTarget, string path) { File.WriteAllText(projPath, dst); } } + } internal class AndroidXmlDocument : XmlDocument { @@ -391,6 +390,7 @@ internal bool AddFileProvider(string basePath) { bool changed = false; var authorities = PlayerSettings.applicationIdentifier + ".unitywebview.fileprovider"; if (SelectNodes("/manifest/application/provider[@android:authorities='" + authorities + "']", nsMgr).Count == 0) { + // Add the file provider for the Fragment-based webview implementation. var elem = CreateElement("provider"); elem.Attributes.Append(CreateAndroidAttribute("name", "androidx.core.content.FileProvider")); elem.Attributes.Append(CreateAndroidAttribute("authorities", authorities)); @@ -401,6 +401,7 @@ internal bool AddFileProvider(string basePath) { meta.Attributes.Append(CreateAndroidAttribute("resource", "@xml/unitywebview_file_provider_paths")); elem.AppendChild(meta); ApplicationElement.AppendChild(elem); + changed = true; var xml = GetFileProviderSettingPath(basePath); if (!File.Exists(xml)) { diff --git a/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-development.aar.tmpl b/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-development.aar.tmpl index 23bdad7d..14649de8 100644 Binary files a/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-development.aar.tmpl and b/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-development.aar.tmpl differ diff --git a/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-development.aar.tmpl.meta b/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-development.aar.tmpl.meta index 32a588c1..66510900 100644 --- a/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-development.aar.tmpl.meta +++ b/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-development.aar.tmpl.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4cfd7b6baeab943089b567032c2b3ee6 +guid: 768496df2473a48e6a77b0378d3de5a1 DefaultImporter: externalObjects: {} userData: diff --git a/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-release.aar.tmpl b/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-release.aar.tmpl index f3181c27..14649de8 100644 Binary files a/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-release.aar.tmpl and b/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-release.aar.tmpl differ diff --git a/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-release.aar.tmpl.meta b/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-release.aar.tmpl.meta index d4aa3543..f0cbe4e4 100644 --- a/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-release.aar.tmpl.meta +++ b/Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-release.aar.tmpl.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 69e600137811c42778f78793d1022369 +guid: 36390d8e865ea43038c562226860c091 DefaultImporter: externalObjects: {} userData: diff --git a/Assets/AirConsole/unity-webview/Plugins/Editor/UnityWebViewPostprocessBuild.cs b/Assets/AirConsole/unity-webview/Plugins/Editor/UnityWebViewPostprocessBuild.cs deleted file mode 100644 index cb840e4d..00000000 --- a/Assets/AirConsole/unity-webview/Plugins/Editor/UnityWebViewPostprocessBuild.cs +++ /dev/null @@ -1,539 +0,0 @@ -#if UNITY_EDITOR -using System.Collections.Generic; -using System.Collections; -using System.IO; -using System.Reflection; -using System.Text.RegularExpressions; -using System.Text; -using System.Xml; -using System; -using UnityEditor.Android; -#if UNITY_2018_1_OR_NEWER -using UnityEditor.Build; -#endif -using UnityEditor.Callbacks; -using UnityEditor; -using UnityEngine; - -#if UNITY_2018_1_OR_NEWER -public class UnityWebViewPostprocessBuild : IPreprocessBuild, IPostGenerateGradleAndroidProject -#else -public class UnityWebViewPostprocessBuild -#endif -{ - private static bool nofragment = true; - - //// for android/unity 2018.1 or newer - //// cf. https://forum.unity.com/threads/android-hardwareaccelerated-is-forced-false-in-all-activities.532786/ - //// cf. https://github.com/Over17/UnityAndroidManifestCallback - -#if UNITY_2018_1_OR_NEWER - public void OnPreprocessBuild(BuildTarget buildTarget, string path) { - if (buildTarget == BuildTarget.Android) { - var dev = "Packages/com.airconsole.unity-webview/Assets/Plugins/Android/WebViewPlugin-development.aar.tmpl"; - var rel = "Packages/com.airconsole.unity-webview/Assets/Plugins/Android/WebViewPlugin-release.aar.tmpl"; - if (!File.Exists(dev) || !File.Exists(rel)) { - dev = "Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-development.aar.tmpl"; - rel = "Assets/AirConsole/unity-webview/Plugins/Android/WebViewPlugin-release.aar.tmpl"; - } - var src = (EditorUserBuildSettings.development) ? dev : rel; - //Directory.CreateDirectory("Temp/StagingArea/aar"); - //File.Copy(src, "Temp/StagingArea/aar/WebViewPlugin.aar", true); - Directory.CreateDirectory("Assets/Plugins/Android"); - File.Copy(src, "Assets/Plugins/Android/WebViewPlugin.aar", true); - } - } - - public void OnPostGenerateGradleAndroidProject(string basePath) { - var changed = false; - var androidManifest = new AndroidManifest(GetManifestPath(basePath)); - if (!nofragment) { - changed = (androidManifest.AddFileProvider(basePath) || changed); - { - var path = GetBuildGradlePath(basePath); - var lines0 = File.ReadAllText(path).Replace("\r\n", "\n").Replace("\r", "\n").Split(new[]{'\n'}); - { - var lines = new List(); - var independencies = false; - foreach (var line in lines0) { - if (line == "dependencies {") { - independencies = true; - } else if (independencies && line == "}") { - independencies = false; - lines.Add(" implementation 'androidx.core:core:1.6.0'"); - } else if (independencies) { - if (line.Contains("implementation(name: 'core") - || line.Contains("implementation(name: 'androidx.core.core") - || line.Contains("implementation 'androidx.core:core")) { - break; - } - } - lines.Add(line); - } - if (lines.Count > lines0.Length) { - File.WriteAllText(path, string.Join("\n", lines) + "\n"); - } - } - } - { - var path = GetGradlePropertiesPath(basePath); - var lines0 = ""; - var lines = ""; - if (File.Exists(path)) { - lines0 = File.ReadAllText(path).Replace("\r\n", "\n").Replace("\r", "\n") + "\n"; - lines = lines0; - } - if (!lines.Contains("android.useAndroidX=true")) { - lines += "android.useAndroidX=true\n"; - } - if (!lines.Contains("android.enableJetifier=true")) { - lines += "android.enableJetifier=true\n"; - } - if (lines != lines0) { - File.WriteAllText(path, lines); - } - } - } - changed = (androidManifest.SetExported(true) || changed); - changed = (androidManifest.SetWindowSoftInputMode("adjustPan") || changed); - changed = (androidManifest.SetHardwareAccelerated(true) || changed); -#if UNITYWEBVIEW_ANDROID_USES_CLEARTEXT_TRAFFIC - changed = (androidManifest.SetUsesCleartextTraffic(true) || changed); -#endif -#if UNITYWEBVIEW_ANDROID_ENABLE_CAMERA - changed = (androidManifest.AddCamera() || changed); - changed = (androidManifest.AddGallery() || changed); -#endif -#if UNITYWEBVIEW_ANDROID_ENABLE_MICROPHONE - changed = (androidManifest.AddMicrophone() || changed); -#endif - if (changed) { - androidManifest.Save(); - Debug.Log("unitywebview: adjusted AndroidManifest.xml."); - } - } -#endif - - public int callbackOrder { - get { - return 1; - } - } - - private string GetManifestPath(string basePath) { - var pathBuilder = new StringBuilder(basePath); - pathBuilder.Append(Path.DirectorySeparatorChar).Append("src"); - pathBuilder.Append(Path.DirectorySeparatorChar).Append("main"); - pathBuilder.Append(Path.DirectorySeparatorChar).Append("AndroidManifest.xml"); - return pathBuilder.ToString(); - } - - private string GetBuildGradlePath(string basePath) { - var pathBuilder = new StringBuilder(basePath); - pathBuilder.Append(Path.DirectorySeparatorChar).Append("build.gradle"); - return pathBuilder.ToString(); - } - - private string GetGradlePropertiesPath(string basePath) { - var pathBuilder = new StringBuilder(basePath); - if (basePath.EndsWith("unityLibrary")) { - pathBuilder.Append(Path.DirectorySeparatorChar).Append(".."); - } - pathBuilder.Append(Path.DirectorySeparatorChar).Append("gradle.properties"); - return pathBuilder.ToString(); - } - - //// for others - - [PostProcessBuild(100)] - public static void OnPostprocessBuild(BuildTarget buildTarget, string path) { -#if UNITY_2018_1_OR_NEWER - try { - File.Delete("Assets/Plugins/Android/WebViewPlugin.aar"); - File.Delete("Assets/Plugins/Android/WebViewPlugin.aar.meta"); - Directory.Delete("Assets/Plugins/Android"); - File.Delete("Assets/Plugins/Android.meta"); - Directory.Delete("Assets/Plugins"); - File.Delete("Assets/Plugins.meta"); - } catch (Exception) { - } -#else - if (buildTarget == BuildTarget.Android) { - string manifest = Path.Combine(Application.dataPath, "Plugins/Android/AndroidManifest.xml"); - if (!File.Exists(manifest)) { - string manifest0 = Path.Combine(Application.dataPath, "../Temp/StagingArea/AndroidManifest-main.xml"); - if (!File.Exists(manifest0)) { - Debug.LogError("unitywebview: cannot find both Assets/Plugins/Android/AndroidManifest.xml and Temp/StagingArea/AndroidManifest-main.xml. please build the app to generate Assets/Plugins/Android/AndroidManifest.xml and then rebuild it again."); - return; - } else { - File.Copy(manifest0, manifest, true); - } - } - var changed = false; - if (EditorUserBuildSettings.development) { - if (!File.Exists("Assets/Plugins/Android/WebView.aar") - || !File.ReadAllBytes("Assets/Plugins/Android/WebView.aar").SequenceEqual(File.ReadAllBytes("Assets/Plugins/Android/WebViewPlugin-development.aar.tmpl"))) { - File.Copy("Assets/Plugins/Android/WebViewPlugin-development.aar.tmpl", "Assets/Plugins/Android/WebView.aar", true); - changed = true; - } - } else { - if (!File.Exists("Assets/Plugins/Android/WebView.aar") - || !File.ReadAllBytes("Assets/Plugins/Android/WebView.aar").SequenceEqual(File.ReadAllBytes("Assets/Plugins/Android/WebViewPlugin-release.aar.tmpl"))) { - File.Copy("Assets/Plugins/Android/WebViewPlugin-release.aar.tmpl", "Assets/Plugins/Android/WebView.aar", true); - changed = true; - } - } - var androidManifest = new AndroidManifest(manifest); - if (!nofragment) { - changed = (androidManifest.AddFileProvider("Assets/Plugins/Android") || changed); - var files = Directory.GetFiles("Assets/Plugins/Android/"); - var found = false; - foreach (var file in files) { - if (Regex.IsMatch(file, @"^Assets/Plugins/Android/(androidx\.core\.)?core-.*.aar$")) { - found = true; - break; - } - } - if (!found) { - foreach (var file in files) { - var match = Regex.Match(file, @"^Assets/Plugins/Android/(core.*.aar).tmpl$"); - if (match.Success) { - var name = match.Groups[1].Value; - File.Copy(file, "Assets/Plugins/Android/" + name, true); - break; - } - } - } - } - changed = (androidManifest.SetWindowSoftInputMode("adjustPan") || changed); - changed = (androidManifest.SetHardwareAccelerated(true) || changed); -#if UNITYWEBVIEW_ANDROID_USES_CLEARTEXT_TRAFFIC - changed = (androidManifest.SetUsesCleartextTraffic(true) || changed); -#endif -#if UNITYWEBVIEW_ANDROID_ENABLE_CAMERA - changed = (androidManifest.AddCamera() || changed); - changed = (androidManifest.AddGallery() || changed); -#endif -#if UNITYWEBVIEW_ANDROID_ENABLE_MICROPHONE - changed = (androidManifest.AddMicrophone() || changed); -#endif -#if UNITY_5_6_0 || UNITY_5_6_1 - changed = (androidManifest.SetActivityName("net.gree.unitywebview.CUnityPlayerActivity") || changed); -#endif - if (changed) { - androidManifest.Save(); - Debug.LogError("unitywebview: adjusted AndroidManifest.xml and/or WebView.aar. Please rebuild the app."); - } - } -#endif - if (buildTarget == BuildTarget.iOS) { - string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; - var type = Type.GetType("UnityEditor.iOS.Xcode.PBXProject, UnityEditor.iOS.Extensions.Xcode"); - if (type == null) - { - Debug.LogError("unitywebview: failed to get PBXProject. please install iOS build support."); - return; - } - var src = File.ReadAllText(projPath); - //dynamic proj = type.GetConstructor(Type.EmptyTypes).Invoke(null); - var proj = type.GetConstructor(Type.EmptyTypes).Invoke(null); - //proj.ReadFromString(src); - { - var method = type.GetMethod("ReadFromString"); - method.Invoke(proj, new object[]{src}); - } - var target = ""; -#if UNITY_2019_3_OR_NEWER - //target = proj.GetUnityFrameworkTargetGuid(); - { - var method = type.GetMethod("GetUnityFrameworkTargetGuid"); - target = (string)method.Invoke(proj, null); - } -#else - //target = proj.TargetGuidByName("Unity-iPhone"); - { - var method = type.GetMethod("TargetGuidByName"); - target = (string)method.Invoke(proj, new object[]{"Unity-iPhone"}); - } -#endif - //proj.AddFrameworkToProject(target, "WebKit.framework", false); - { - var method = type.GetMethod("AddFrameworkToProject"); - method.Invoke(proj, new object[]{target, "WebKit.framework", false}); - } - var cflags = ""; - if (EditorUserBuildSettings.development) { - cflags += " -DUNITYWEBVIEW_DEVELOPMENT"; - } -#if UNITYWEBVIEW_IOS_ALLOW_FILE_URLS - cflags += " -DUNITYWEBVIEW_IOS_ALLOW_FILE_URLS"; -#endif - cflags = cflags.Trim(); - if (!string.IsNullOrEmpty(cflags)) { - // proj.AddBuildProperty(target, "OTHER_LDFLAGS", cflags); - var method = type.GetMethod("AddBuildProperty", new Type[]{typeof(string), typeof(string), typeof(string)}); - method.Invoke(proj, new object[]{target, "OTHER_CFLAGS", cflags}); - } - var dst = ""; - //dst = proj.WriteToString(); - { - var method = type.GetMethod("WriteToString"); - dst = (string)method.Invoke(proj, null); - } - File.WriteAllText(projPath, dst); - } - } -} - -internal class AndroidXmlDocument : XmlDocument { - private string m_Path; - protected XmlNamespaceManager nsMgr; - public readonly string AndroidXmlNamespace = "http://schemas.android.com/apk/res/android"; - - public AndroidXmlDocument(string path) { - m_Path = path; - using (var reader = new XmlTextReader(m_Path)) { - reader.Read(); - Load(reader); - } - nsMgr = new XmlNamespaceManager(NameTable); - nsMgr.AddNamespace("android", AndroidXmlNamespace); - } - - public string Save() { - return SaveAs(m_Path); - } - - public string SaveAs(string path) { - using (var writer = new XmlTextWriter(path, new UTF8Encoding(false))) { - writer.Formatting = Formatting.Indented; - Save(writer); - } - return path; - } -} - -internal class AndroidManifest : AndroidXmlDocument { - private readonly XmlElement ManifestElement; - private readonly XmlElement ApplicationElement; - - public AndroidManifest(string path) : base(path) { - ManifestElement = SelectSingleNode("/manifest") as XmlElement; - ApplicationElement = SelectSingleNode("/manifest/application") as XmlElement; - } - - private XmlAttribute CreateAndroidAttribute(string key, string value) { - XmlAttribute attr = CreateAttribute("android", key, AndroidXmlNamespace); - attr.Value = value; - return attr; - } - - internal XmlNode GetActivityWithLaunchIntent() { - return - SelectSingleNode( - "/manifest/application/activity[intent-filter/action/@android:name='android.intent.action.MAIN' and " - + "intent-filter/category/@android:name='android.intent.category.LAUNCHER']", - nsMgr); - } - - internal bool SetUsesCleartextTraffic(bool enabled) { - // android:usesCleartextTraffic - bool changed = false; - if (ApplicationElement.GetAttribute("usesCleartextTraffic", AndroidXmlNamespace) != ((enabled) ? "true" : "false")) { - ApplicationElement.SetAttribute("usesCleartextTraffic", AndroidXmlNamespace, (enabled) ? "true" : "false"); - changed = true; - } - return changed; - } - - // for api level 33 - internal bool SetExported(bool enabled) { - bool changed = false; - var activity = GetActivityWithLaunchIntent() as XmlElement; - if (activity.GetAttribute("exported", AndroidXmlNamespace) != ((enabled) ? "true" : "false")) { - activity.SetAttribute("exported", AndroidXmlNamespace, (enabled) ? "true" : "false"); - changed = true; - } - return changed; - } - - internal bool SetWindowSoftInputMode(string mode) { - bool changed = false; - var activity = GetActivityWithLaunchIntent() as XmlElement; - if (activity.GetAttribute("windowSoftInputMode", AndroidXmlNamespace) != mode) { - activity.SetAttribute("windowSoftInputMode", AndroidXmlNamespace, mode); - changed = true; - } - return changed; - } - - internal bool SetHardwareAccelerated(bool enabled) { - bool changed = false; - var activity = GetActivityWithLaunchIntent() as XmlElement; - if (activity.GetAttribute("hardwareAccelerated", AndroidXmlNamespace) != ((enabled) ? "true" : "false")) { - activity.SetAttribute("hardwareAccelerated", AndroidXmlNamespace, (enabled) ? "true" : "false"); - changed = true; - } - return changed; - } - - internal bool SetActivityName(string name) { - bool changed = false; - var activity = GetActivityWithLaunchIntent() as XmlElement; - if (activity.GetAttribute("name", AndroidXmlNamespace) != name) { - activity.SetAttribute("name", AndroidXmlNamespace, name); - changed = true; - } - return changed; - } - - internal bool AddFileProvider(string basePath) { - bool changed = false; - var authorities = PlayerSettings.applicationIdentifier + ".unitywebview.fileprovider"; - if (SelectNodes("/manifest/application/provider[@android:authorities='" + authorities + "']", nsMgr).Count == 0) { - var elem = CreateElement("provider"); - elem.Attributes.Append(CreateAndroidAttribute("name", "androidx.core.content.FileProvider")); - elem.Attributes.Append(CreateAndroidAttribute("authorities", authorities)); - elem.Attributes.Append(CreateAndroidAttribute("exported", "false")); - elem.Attributes.Append(CreateAndroidAttribute("grantUriPermissions", "true")); - var meta = CreateElement("meta-data"); - meta.Attributes.Append(CreateAndroidAttribute("name", "android.support.FILE_PROVIDER_PATHS")); - meta.Attributes.Append(CreateAndroidAttribute("resource", "@xml/unitywebview_file_provider_paths")); - elem.AppendChild(meta); - ApplicationElement.AppendChild(elem); - changed = true; - var xml = GetFileProviderSettingPath(basePath); - if (!File.Exists(xml)) { - Directory.CreateDirectory(Path.GetDirectoryName(xml)); - File.WriteAllText( - xml, - "\n" + - " \n" + - "\n"); - } - } - return changed; - } - - private string GetFileProviderSettingPath(string basePath) { - var pathBuilder = new StringBuilder(basePath); - pathBuilder.Append(Path.DirectorySeparatorChar).Append("src"); - pathBuilder.Append(Path.DirectorySeparatorChar).Append("main"); - pathBuilder.Append(Path.DirectorySeparatorChar).Append("res"); - pathBuilder.Append(Path.DirectorySeparatorChar).Append("xml"); - pathBuilder.Append(Path.DirectorySeparatorChar).Append("unitywebview_file_provider_paths.xml"); - return pathBuilder.ToString(); - } - - internal bool AddCamera() { - bool changed = false; - if (SelectNodes("/manifest/uses-permission[@android:name='android.permission.CAMERA']", nsMgr).Count == 0) { - var elem = CreateElement("uses-permission"); - elem.Attributes.Append(CreateAndroidAttribute("name", "android.permission.CAMERA")); - ManifestElement.AppendChild(elem); - changed = true; - } - if (SelectNodes("/manifest/uses-feature[@android:name='android.hardware.camera']", nsMgr).Count == 0) { - var elem = CreateElement("uses-feature"); - elem.Attributes.Append(CreateAndroidAttribute("name", "android.hardware.camera")); - ManifestElement.AppendChild(elem); - changed = true; - } - // cf. https://developer.android.com/training/data-storage/shared/media#media-location-permission - if (SelectNodes("/manifest/uses-permission[@android:name='android.permission.ACCESS_MEDIA_LOCATION']", nsMgr).Count == 0) { - var elem = CreateElement("uses-permission"); - elem.Attributes.Append(CreateAndroidAttribute("name", "android.permission.ACCESS_MEDIA_LOCATION")); - ManifestElement.AppendChild(elem); - changed = true; - } - // cf. https://developer.android.com/training/package-visibility/declaring - if (SelectNodes("/manifest/queries", nsMgr).Count == 0) { - var elem = CreateElement("queries"); - ManifestElement.AppendChild(elem); - changed = true; - } - if (SelectNodes("/manifest/queries/intent/action[@android:name='android.media.action.IMAGE_CAPTURE']", nsMgr).Count == 0) { - var action = CreateElement("action"); - action.Attributes.Append(CreateAndroidAttribute("name", "android.media.action.IMAGE_CAPTURE")); - var intent = CreateElement("intent"); - intent.AppendChild(action); - var queries = SelectSingleNode("/manifest/queries") as XmlElement; - queries.AppendChild(intent); - changed = true; - } - return changed; - } - - internal bool AddGallery() { - bool changed = false; - // for api level 33 - if (SelectNodes("/manifest/uses-permission[@android:name='android.permission.READ_MEDIA_IMAGES']", nsMgr).Count == 0) { - var elem = CreateElement("uses-permission"); - elem.Attributes.Append(CreateAndroidAttribute("name", "android.permission.READ_MEDIA_IMAGES")); - ManifestElement.AppendChild(elem); - changed = true; - } - if (SelectNodes("/manifest/uses-permission[@android:name='android.permission.READ_MEDIA_VIDEO']", nsMgr).Count == 0) { - var elem = CreateElement("uses-permission"); - elem.Attributes.Append(CreateAndroidAttribute("name", "android.permission.READ_MEDIA_VIDEO")); - ManifestElement.AppendChild(elem); - changed = true; - } - if (SelectNodes("/manifest/uses-permission[@android:name='android.permission.READ_MEDIA_AUDIO']", nsMgr).Count == 0) { - var elem = CreateElement("uses-permission"); - elem.Attributes.Append(CreateAndroidAttribute("name", "android.permission.READ_MEDIA_AUDIO")); - ManifestElement.AppendChild(elem); - changed = true; - } - // cf. https://developer.android.com/training/package-visibility/declaring - if (SelectNodes("/manifest/queries", nsMgr).Count == 0) { - var elem = CreateElement("queries"); - ManifestElement.AppendChild(elem); - changed = true; - } - if (SelectNodes("/manifest/queries/intent/action[@android:name='android.media.action.GET_CONTENT']", nsMgr).Count == 0) { - var action = CreateElement("action"); - action.Attributes.Append(CreateAndroidAttribute("name", "android.media.action.GET_CONTENT")); - var intent = CreateElement("intent"); - intent.AppendChild(action); - var queries = SelectSingleNode("/manifest/queries") as XmlElement; - queries.AppendChild(intent); - changed = true; - } - return changed; - } - - internal bool AddMicrophone() { - bool changed = false; - if (SelectNodes("/manifest/uses-permission[@android:name='android.permission.MICROPHONE']", nsMgr).Count == 0) { - var elem = CreateElement("uses-permission"); - elem.Attributes.Append(CreateAndroidAttribute("name", "android.permission.MICROPHONE")); - ManifestElement.AppendChild(elem); - changed = true; - } - if (SelectNodes("/manifest/uses-feature[@android:name='android.hardware.microphone']", nsMgr).Count == 0) { - var elem = CreateElement("uses-feature"); - elem.Attributes.Append(CreateAndroidAttribute("name", "android.hardware.microphone")); - ManifestElement.AppendChild(elem); - changed = true; - } - // cf. https://github.com/gree/unity-webview/issues/679 - // cf. https://github.com/fluttercommunity/flutter_webview_plugin/issues/138#issuecomment-559307558 - // cf. https://stackoverflow.com/questions/38917751/webview-webrtc-not-working/68024032#68024032 - // cf. https://stackoverflow.com/questions/40236925/allowing-microphone-accesspermission-in-webview-android-studio-java/47410311#47410311 - if (SelectNodes("/manifest/uses-permission[@android:name='android.permission.MODIFY_AUDIO_SETTINGS']", nsMgr).Count == 0) { - var elem = CreateElement("uses-permission"); - elem.Attributes.Append(CreateAndroidAttribute("name", "android.permission.MODIFY_AUDIO_SETTINGS")); - ManifestElement.AppendChild(elem); - changed = true; - } - if (SelectNodes("/manifest/uses-permission[@android:name='android.permission.RECORD_AUDIO']", nsMgr).Count == 0) { - var elem = CreateElement("uses-permission"); - elem.Attributes.Append(CreateAndroidAttribute("name", "android.permission.RECORD_AUDIO")); - ManifestElement.AppendChild(elem); - changed = true; - } - return changed; - } -} -#endif diff --git a/Assets/AirConsole/unity-webview/Plugins/WebView.bundle.meta b/Assets/AirConsole/unity-webview/Plugins/WebView.bundle.meta index 09bec84a..42a688b6 100644 --- a/Assets/AirConsole/unity-webview/Plugins/WebView.bundle.meta +++ b/Assets/AirConsole/unity-webview/Plugins/WebView.bundle.meta @@ -1,33 +1,58 @@ fileFormatVersion: 2 -guid: 5e6d20ceb4c28439b803c8423db284d5 +guid: 60e7bf38137eb4950b2f02b7d57c1ad3 +folderAsset: yes PluginImporter: - externalObjects: {} - serializedVersion: 2 + serializedVersion: 1 iconMap: {} executionOrder: {} - defineConstraints: [] isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 platformData: - - first: - Any: - second: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: enabled: 0 settings: {} - - first: - Editor: Editor - second: + Editor: enabled: 1 settings: + CPU: AnyCPU DefaultValueInitialized: true - - first: - Standalone: OSXUniversal - second: + OS: OSX + Linux: + enabled: 0 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: x86_64 + OSXIntel: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel64: enabled: 1 settings: CPU: AnyCPU + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Win: + enabled: 0 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: userData: assetBundleName: assetBundleVariant: diff --git a/Assets/AirConsole/unity-webview/Plugins/WebView.bundle/Contents/Info.plist b/Assets/AirConsole/unity-webview/Plugins/WebView.bundle/Contents/Info.plist index 186615dc..fabdc7c3 100644 --- a/Assets/AirConsole/unity-webview/Plugins/WebView.bundle/Contents/Info.plist +++ b/Assets/AirConsole/unity-webview/Plugins/WebView.bundle/Contents/Info.plist @@ -3,7 +3,7 @@ BuildMachineOSBuild - 24G231 + 24G325 CFBundleDevelopmentRegion English CFBundleExecutable diff --git a/Assets/AirConsole/unity-webview/Plugins/WebView.bundle/Contents/MacOS/WebView b/Assets/AirConsole/unity-webview/Plugins/WebView.bundle/Contents/MacOS/WebView index 19f2a22e..35ff43ba 100755 Binary files a/Assets/AirConsole/unity-webview/Plugins/WebView.bundle/Contents/MacOS/WebView and b/Assets/AirConsole/unity-webview/Plugins/WebView.bundle/Contents/MacOS/WebView differ diff --git a/Assets/AirConsole/unity-webview/Runtime.meta b/Assets/AirConsole/unity-webview/Runtime.meta index 95fd8772..c373cb11 100644 --- a/Assets/AirConsole/unity-webview/Runtime.meta +++ b/Assets/AirConsole/unity-webview/Runtime.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2a81893663cd042c99b7c90d0b3a12d6 +guid: 95465021a9bc74b50acf56a8e83765dd folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/AirConsole/unity-webview/Runtime/WebViewCallback.cs b/Assets/AirConsole/unity-webview/Runtime/WebViewCallback.cs new file mode 100644 index 00000000..fa2c940a --- /dev/null +++ b/Assets/AirConsole/unity-webview/Runtime/WebViewCallback.cs @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2024 AirConsole + * + * C# proxy class implementing CWebViewPluginCallback Java interface. + * Enables direct synchronous callbacks from Java to C# without UnitySendMessage delay. + */ + +using UnityEngine; +using System; + +#if UNITY_ANDROID + +/// +/// AndroidJavaProxy implementation for CWebViewPluginCallback. +/// Java calls methods on this class directly, which then invokes WebViewObject callbacks. +/// Thread-safe: callbacks may arrive from any thread and are routed appropriately. +/// +public class WebViewCallback : AndroidJavaProxy +{ + private readonly WebViewObject _webViewObject; + + public WebViewCallback(WebViewObject webViewObject) + : base("net.gree.unitywebview.CWebViewPluginCallback") + { + _webViewObject = webViewObject ?? throw new ArgumentNullException(nameof(webViewObject)); + } + + /// + /// Called when JavaScript invokes Unity.call(). + /// + // ReSharper disable once InconsistentNaming + public void call(string message) + { + _webViewObject.CallFromJS(message); + } + + /// + /// Called when a navigation error occurs. + /// + // ReSharper disable once InconsistentNaming + public void onError(string error) + { + _webViewObject.CallOnError(error); + } + + /// + /// Called when an HTTP error response is received. + /// + // ReSharper disable once InconsistentNaming + public void onHttpError(string statusCode) + { + _webViewObject.CallOnHttpError(statusCode); + } + + /// + /// Called when page navigation starts. + /// + // ReSharper disable once InconsistentNaming + public void onStarted(string url) + { + _webViewObject.CallOnStarted(url); + } + + /// + /// Called when page navigation finishes. + /// + // ReSharper disable once InconsistentNaming + public void onLoaded(string url) + { + _webViewObject.CallOnLoaded(url); + } + + /// + /// Called when a hooked URL pattern is matched. + /// + // ReSharper disable once InconsistentNaming + public void onHooked(string url) + { + _webViewObject.CallOnHooked(url); + } + + /// + /// Called when audio focus state changes. + /// + // ReSharper disable once InconsistentNaming + public void onAudioFocusChanged(string state) + { + _webViewObject.CallOnAudioFocusChanged(state); + } + + /// + /// Called when soft keyboard visibility changes. + /// + // ReSharper disable once InconsistentNaming + public void onKeyboardVisible(string height) + { + _webViewObject.SetKeyboardVisible(height); + } + + /// + /// Called when file chooser permissions are needed. + /// + // ReSharper disable once InconsistentNaming + public void onRequestFileChooserPermissions() + { + _webViewObject.RequestFileChooserPermissions(); + } +} + +#endif diff --git a/Assets/AirConsole/unity-webview/Runtime/WebViewCallback.cs.meta b/Assets/AirConsole/unity-webview/Runtime/WebViewCallback.cs.meta new file mode 100644 index 00000000..8767a77b --- /dev/null +++ b/Assets/AirConsole/unity-webview/Runtime/WebViewCallback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AirConsole/unity-webview/Runtime/WebViewEvent.cs b/Assets/AirConsole/unity-webview/Runtime/WebViewEvent.cs new file mode 100644 index 00000000..ca6d4892 --- /dev/null +++ b/Assets/AirConsole/unity-webview/Runtime/WebViewEvent.cs @@ -0,0 +1,244 @@ +using System; + +/// +/// Represents a queued event in the WebView system. +/// Enqueued from any thread, dequeued and processed on the Unity main thread. +/// +public class WebViewEvent +{ + /// + /// Enumeration of all supported WebView event types. + /// Matches the message prefixes used by the native bridge. + /// + public enum EventType + { + /// JavaScript message from the WebView (CallFromJS). + Message, + /// General error from the WebView (CallOnError). + Error, + /// HTTP error from the WebView (CallOnHttpError). + HttpError, + /// Navigation started (CallOnStarted). + Started, + /// Navigation completed (CallOnLoaded). + Loaded, + /// URL hook triggered (CallOnHooked). + Hooked, + /// Cookie information retrieved (CallOnCookies). + Cookies, + /// Audio focus state changed (CallOnAudioFocusChanged). + AudioFocusChanged, + /// Keyboard visibility changed (SetKeyboardVisible). + KeyboardHeightChanged, + /// File chooser permissions requested (RequestFileChooserPermissions). + FileChooserPermissions, + /// Unknown or unrecognized event type. + Unknown + } + + /// + /// The type of this event. + /// + public EventType Type { get; private set; } + + /// + /// String payload for the event (e.g., JS message, error text, URL). + /// + public string Payload { get; private set; } + + /// + /// Integer payload for numeric data (e.g., audio focus state, keyboard height in pixels). + /// + public int IntPayload { get; private set; } + + /// + /// Float payload reserved for future use. + /// + public float FloatPayload { get; private set; } + + /// + /// Timestamp when the event was created (UTC). + /// Useful for debugging and metrics. + /// + public DateTime Timestamp { get; private set; } + + /// + /// Private constructor. Use factory methods to create events. + /// + private WebViewEvent(EventType type, string payload = null, int intPayload = 0, float floatPayload = 0f) + { + Type = type; + Payload = payload; + IntPayload = intPayload; + FloatPayload = floatPayload; + Timestamp = DateTime.UtcNow; + } + + #region Factory Methods + + /// + /// Creates a JavaScript message event. + /// + /// The message payload from JavaScript. + /// A new WebViewEvent of type Message. + public static WebViewEvent Message(string message) + { + return new WebViewEvent(EventType.Message, message); + } + + /// + /// Creates an error event. + /// + /// The error message. + /// A new WebViewEvent of type Error. + public static WebViewEvent Error(string error) + { + return new WebViewEvent(EventType.Error, error); + } + + /// + /// Creates an HTTP error event. + /// + /// The HTTP error details. + /// A new WebViewEvent of type HttpError. + public static WebViewEvent HttpError(string error) + { + return new WebViewEvent(EventType.HttpError, error); + } + + /// + /// Creates a navigation started event. + /// + /// The URL that started loading. + /// A new WebViewEvent of type Started. + public static WebViewEvent Started(string url) + { + return new WebViewEvent(EventType.Started, url); + } + + /// + /// Creates a navigation loaded event. + /// + /// The URL that finished loading. + /// A new WebViewEvent of type Loaded. + public static WebViewEvent Loaded(string url) + { + return new WebViewEvent(EventType.Loaded, url); + } + + /// + /// Creates a URL hook event. + /// + /// The hooked URL. + /// A new WebViewEvent of type Hooked. + public static WebViewEvent Hooked(string url) + { + return new WebViewEvent(EventType.Hooked, url); + } + + /// + /// Creates a cookies event. + /// + /// The cookie string. + /// A new WebViewEvent of type Cookies. + public static WebViewEvent Cookies(string cookies) + { + return new WebViewEvent(EventType.Cookies, cookies); + } + + /// + /// Creates an audio focus changed event. + /// + /// The audio focus state string. + /// A new WebViewEvent of type AudioFocusChanged. + public static WebViewEvent AudioFocusChanged(string state) + { + return new WebViewEvent(EventType.AudioFocusChanged, state); + } + + /// + /// Creates a keyboard height changed event. + /// + /// The keyboard height in pixels. + /// A new WebViewEvent of type KeyboardHeightChanged. + public static WebViewEvent KeyboardHeightChanged(int height) + { + return new WebViewEvent(EventType.KeyboardHeightChanged, height.ToString(), height); + } + + /// + /// Creates a keyboard height changed event from string. + /// + /// The keyboard height as string. + /// A new WebViewEvent of type KeyboardHeightChanged. + public static WebViewEvent KeyboardHeightChanged(string heightString) + { + int height = 0; + int.TryParse(heightString, out height); + return new WebViewEvent(EventType.KeyboardHeightChanged, heightString, height); + } + + /// + /// Creates a file chooser permissions request event. + /// + /// A new WebViewEvent of type FileChooserPermissions. + public static WebViewEvent FileChooserPermissions() + { + return new WebViewEvent(EventType.FileChooserPermissions); + } + + /// + /// Creates an event from a native bridge message string. + /// Parses the "Type:Payload" format used by the Android bridge. + /// + /// The raw message from the native bridge. + /// A new WebViewEvent, or null if the message format is invalid. + public static WebViewEvent FromNativeMessage(string message) + { + if (string.IsNullOrEmpty(message)) + return null; + + var colonIndex = message.IndexOf(':'); + if (colonIndex == -1) + return null; + + var type = message.Substring(0, colonIndex); + var payload = colonIndex + 1 < message.Length ? message.Substring(colonIndex + 1) : string.Empty; + + switch (type) + { + case "CallFromJS": + return Message(payload); + case "CallOnError": + return Error(payload); + case "CallOnHttpError": + return HttpError(payload); + case "CallOnStarted": + return Started(payload); + case "CallOnLoaded": + return Loaded(payload); + case "CallOnHooked": + return Hooked(payload); + case "CallOnCookies": + return Cookies(payload); + case "CallOnAudioFocusChanged": + return AudioFocusChanged(payload); + case "SetKeyboardVisible": + return KeyboardHeightChanged(payload); + case "RequestFileChooserPermissions": + return FileChooserPermissions(); + default: + return new WebViewEvent(EventType.Unknown, message); + } + } + + #endregion + + /// + /// Returns a string representation for debugging. + /// + public override string ToString() + { + return $"WebViewEvent[{Type}]: {Payload ?? "(no payload)"} @ {Timestamp:HH:mm:ss.fff}"; + } +} diff --git a/Assets/AirConsole/unity-webview/Runtime/WebViewEvent.cs.meta b/Assets/AirConsole/unity-webview/Runtime/WebViewEvent.cs.meta new file mode 100644 index 00000000..e9feb004 --- /dev/null +++ b/Assets/AirConsole/unity-webview/Runtime/WebViewEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 03e8196427c59441989215be8854d79c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AirConsole/unity-webview/Runtime/WebViewObject.cs b/Assets/AirConsole/unity-webview/Runtime/WebViewObject.cs index 93235ad2..4c5559ff 100644 --- a/Assets/AirConsole/unity-webview/Runtime/WebViewObject.cs +++ b/Assets/AirConsole/unity-webview/Runtime/WebViewObject.cs @@ -23,7 +23,9 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Collections.Concurrent; using System.Runtime.InteropServices; +using System.Threading; #if UNITY_2018_4_OR_NEWER using UnityEngine.Networking; #endif @@ -52,8 +54,7 @@ public class UnitySendMessageDispatcher /// Target GameObject name. /// Method to call on the GameObject. /// Message payload forwarded to the receiver. - public static void Dispatch(string name, string method, string message) - { + public static void Dispatch(string name, string method, string message) { GameObject obj = GameObject.Find(name); if (obj != null) obj.SendMessage(method, message); @@ -66,6 +67,9 @@ public static void Dispatch(string name, string method, string message) ///
public class WebViewObject : MonoBehaviour { +#if UNITY_ANDROID + WebViewCallback callback; +#endif Callback onJS; Callback onError; Callback onHttpError; @@ -76,6 +80,11 @@ public class WebViewObject : MonoBehaviour Callback onAudioFocusChanged; bool paused; bool visibility; + + // Thread-safe event queue infrastructure + private static int _mainThreadId = -1; + private readonly ConcurrentQueue _eventQueue = new ConcurrentQueue(); + bool alertDialogEnabled; bool scrollBounceEnabled; int mMarginLeft; @@ -114,21 +123,42 @@ public class WebViewObject : MonoBehaviour NetworkReachability? androidNetworkReachability0 = null; #endif - void OnApplicationPause(bool paused) - { + private void OnApplicationPause(bool paused) { + // Temporarily disable pausing to ensure the event queue is processed + this.paused = false; + ProcessEventQueue(); + this.paused = paused; + if (webView == null) return; - // if (!paused && mKeyboardVisibleHeight > 0) - // { - // webView.Call("SetVisibility", false); - // mResumedTimestamp = Time.realtimeSinceStartup; - // } webView.Call("OnApplicationPause", paused); } - void Update() - { + /// + /// Called when the component is disabled. Flushes any remaining events in the queue. + /// + private void OnDisable() { + // Flush remaining events before component destruction + // Temporarily unpause to allow processing + var wasPaused = paused; + paused = false; + ProcessEventQueue(); + paused = wasPaused; + } + + /// + /// Called when the application is about to quit. Flushes any remaining events. + /// + void OnApplicationQuit() { + // Final flush before app closes + var wasPaused = paused; + paused = false; + ProcessEventQueue(); + paused = wasPaused; + } + + private void Update() { // NOTE: // // When OnApplicationPause(true) is called and the app is in closing, webView.Call(...) @@ -155,227 +185,75 @@ void Update() return; #if UNITYWEBVIEW_ANDROID_ENABLE_NAVIGATOR_ONLINE var t = Time.time; - if (t - 1.0f >= androidNetworkReachabilityCheckT0) - { + if (t - 1.0f >= androidNetworkReachabilityCheckT0) { androidNetworkReachabilityCheckT0 = t; var androidNetworkReachability = Application.internetReachability; - if (androidNetworkReachability0 != androidNetworkReachability) - { + if (androidNetworkReachability0 != androidNetworkReachability) { androidNetworkReachability0 = androidNetworkReachability; webView.Call("SetNetworkAvailable", androidNetworkReachability != NetworkReachability.NotReachable); } } #endif - if (mResumedTimestamp != 0.0f && Time.realtimeSinceStartup - mResumedTimestamp > 0.5f) - { + if (mResumedTimestamp != 0.0f && Time.realtimeSinceStartup - mResumedTimestamp > 0.5f) { mResumedTimestamp = 0.0f; webView.Call("SetVisibility", mVisibility); } - if (Screen.height != mLastScreenHeight) - { + if (Screen.height != mLastScreenHeight) { mLastScreenHeight = Screen.height; webView.Call("EvaluateJS", "(function() {var e = document.activeElement; if (e != null && e.tagName.toLowerCase() != 'body') {e.blur(); e.focus();}})()"); } - for (;;) { - if (webView == null) - break; - var s = webView.Call("GetMessage"); - if (s == null) - break; - var i = s.IndexOf(':', 0); - if (i == -1) - continue; - switch (s.Substring(0, i)) { - case "CallFromJS": - CallFromJS(s.Substring(i + 1)); - break; - case "CallOnError": - CallOnError(s.Substring(i + 1)); - break; - case "CallOnHttpError": - CallOnHttpError(s.Substring(i + 1)); - break; - case "CallOnLoaded": - CallOnLoaded(s.Substring(i + 1)); - break; - case "CallOnStarted": - CallOnStarted(s.Substring(i + 1)); - break; - case "CallOnHooked": - CallOnHooked(s.Substring(i + 1)); - break; - case "CallOnAudioFocusChanged": - CallOnAudioFocusChanged(s.Substring(i + 1)); - break; - case "SetKeyboardVisible": - SetKeyboardVisible(s.Substring(i + 1)); - break; - case "RequestFileChooserPermissions": - RequestFileChooserPermissions(); - break; - } - } - } - - /// - /// Updates the tracked keyboard height when the native plugin reports visibility changes. - /// - /// Keyboard height, in pixels, supplied by the Android plugin. - public void SetKeyboardVisible(string keyboardVisibleHeight) - { - if (BottomAdjustmentDisabled()) - { - return; - } - var keyboardVisibleHeight0 = mKeyboardVisibleHeight; - var keyboardVisibleHeight1 = Int32.Parse(keyboardVisibleHeight); - if (keyboardVisibleHeight0 != keyboardVisibleHeight1) - { - mKeyboardVisibleHeight = keyboardVisibleHeight1; - SetMargins(mMarginLeft, mMarginTop, mMarginRight, mMarginBottom, mMarginRelative); - } - } - /// - /// Requests runtime storage permissions required by the Android file chooser implementation. - /// - public void RequestFileChooserPermissions() - { - var permissions = new List(); - using (var version = new AndroidJavaClass("android.os.Build$VERSION")) - { - if (version.GetStatic("SDK_INT") >= 33) - { - if (!Permission.HasUserAuthorizedPermission("android.permission.READ_MEDIA_IMAGES")) - { - permissions.Add("android.permission.READ_MEDIA_IMAGES"); - } - if (!Permission.HasUserAuthorizedPermission("android.permission.READ_MEDIA_VIDEO")) - { - permissions.Add("android.permission.READ_MEDIA_VIDEO"); - } - if (!Permission.HasUserAuthorizedPermission("android.permission.READ_MEDIA_AUDIO")) - { - permissions.Add("android.permission.READ_MEDIA_AUDIO"); - } - } - else - { - if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead)) - { - permissions.Add(Permission.ExternalStorageRead); - } - if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite)) - { - permissions.Add(Permission.ExternalStorageWrite); - } - } - } - if (!Permission.HasUserAuthorizedPermission(Permission.Camera)) - { - permissions.Add(Permission.Camera); - } - if (permissions.Count > 0) - { -#if UNITY_2020_2_OR_NEWER - var grantedCount = 0; - var deniedCount = 0; - var callbacks = new PermissionCallbacks(); - callbacks.PermissionGranted += (permission) => - { - grantedCount++; - if (grantedCount + deniedCount == permissions.Count) - { - StartCoroutine(CallOnRequestFileChooserPermissionsResult(grantedCount == permissions.Count)); - } - }; - callbacks.PermissionDenied += (permission) => - { - deniedCount++; - if (grantedCount + deniedCount == permissions.Count) - { - StartCoroutine(CallOnRequestFileChooserPermissionsResult(grantedCount == permissions.Count)); - } - }; - callbacks.PermissionDeniedAndDontAskAgain += (permission) => - { - deniedCount++; - if (grantedCount + deniedCount == permissions.Count) - { - StartCoroutine(CallOnRequestFileChooserPermissionsResult(grantedCount == permissions.Count)); - } - }; - Permission.RequestUserPermissions(permissions.ToArray(), callbacks); -#else - StartCoroutine(RequestFileChooserPermissionsCoroutine(permissions.ToArray())); -#endif - } - else - { - StartCoroutine(CallOnRequestFileChooserPermissionsResult(true)); - } + // Process any events queued from background threads + ProcessEventQueue(); } #if UNITY_2020_2_OR_NEWER #else int mRequestPermissionPhase; - IEnumerator RequestFileChooserPermissionsCoroutine(string[] permissions) - { - foreach (var permission in permissions) - { + IEnumerator RequestFileChooserPermissionsCoroutine(string[] permissions) { + foreach (var permission in permissions) { mRequestPermissionPhase = 0; Permission.RequestUserPermission(permission); // waiting permission dialog that may not be opened. - for (var i = 0; i < 8 && mRequestPermissionPhase == 0; i++) - { + for (var i = 0; i < 8 && mRequestPermissionPhase == 0; i++) { yield return new WaitForSeconds(0.25f); } - if (mRequestPermissionPhase == 0) - { + if (mRequestPermissionPhase == 0) { // permission dialog was not opened. continue; } - while (mRequestPermissionPhase == 1) - { + while (mRequestPermissionPhase == 1) { yield return new WaitForSeconds(0.3f); } } yield return new WaitForSeconds(0.3f); var granted = 0; - foreach (var permission in permissions) - { - if (Permission.HasUserAuthorizedPermission(permission)) - { + foreach (var permission in permissions) { + if (Permission.HasUserAuthorizedPermission(permission)) { granted++; } } StartCoroutine(CallOnRequestFileChooserPermissionsResult(granted == permissions.Length)); } - void OnApplicationFocus(bool hasFocus) - { - if (hasFocus) - { - if (mRequestPermissionPhase == 1) - { + void OnApplicationFocus(bool hasFocus) { + if (hasFocus) { + if (mRequestPermissionPhase == 1) { mRequestPermissionPhase = 2; } } else { - if (mRequestPermissionPhase == 0) - { + if (mRequestPermissionPhase == 0) { mRequestPermissionPhase = 1; } } } #endif - private IEnumerator CallOnRequestFileChooserPermissionsResult(bool granted) - { - for (var i = 0; i < 3; i++) - { + private IEnumerator CallOnRequestFileChooserPermissionsResult(bool granted) { + for (var i = 0; i < 3; i++) { yield return null; } webView.Call("OnRequestFileChooserPermissionsResult", granted); @@ -386,14 +264,11 @@ private IEnumerator CallOnRequestFileChooserPermissionsResult(bool granted) /// /// Original bottom margin in pixels. /// The adjusted bottom margin accounting for keyboard height. - public int AdjustBottomMargin(int bottom) - { - if (BottomAdjustmentDisabled()) - { + public int AdjustBottomMargin(int bottom) { + if (BottomAdjustmentDisabled()) { return bottom; } - else if (mKeyboardVisibleHeight <= 0) - { + else if (mKeyboardVisibleHeight <= 0) { return bottom; } else @@ -403,10 +278,8 @@ public int AdjustBottomMargin(int bottom) using (var activity = unityClass.GetStatic("currentActivity")) using (var player = activity.Get("mUnityPlayer")) using (var view = player.Call("getView")) - using (var rect = new AndroidJavaObject("android.graphics.Rect")) - { - if (view.Call("getGlobalVisibleRect", rect)) - { + using (var rect = new AndroidJavaObject("android.graphics.Rect")) { + if (view.Call("getGlobalVisibleRect", rect)) { int h0 = rect.Get("bottom"); view.Call("getWindowVisibleDisplayFrame", rect); int h1 = rect.Get("bottom"); @@ -417,8 +290,7 @@ public int AdjustBottomMargin(int bottom) } } - private bool BottomAdjustmentDisabled() - { + private bool BottomAdjustmentDisabled() { #if UNITYWEBVIEW_ANDROID_FORCE_MARGIN_ADJUSTMENT_FOR_KEYBOARD return false; #else @@ -432,8 +304,12 @@ private bool BottomAdjustmentDisabled() IntPtr webView; #endif - void Awake() - { + private void Awake() { + // Capture the main thread ID for thread-safe event queueing + if (_mainThreadId == -1) { + _mainThreadId = Thread.CurrentThread.ManagedThreadId; + } + Debug.Log($"Initializing WebViewObject v{VersionInfo.VERSION}"); alertDialogEnabled = true; scrollBounceEnabled = true; @@ -443,6 +319,21 @@ void Awake() mMarginBottomComputed = -9999; } + /// + /// Secondary event drain called after all Update() methods have run. + /// Catches any events queued during the current frame's Update cycle. + /// + private void LateUpdate() { + ProcessEventQueue(); + } + + /// + /// Catches any events queued during the current frame's FixedUpdate cycle. + /// + private void FixedUpdate() { + ProcessEventQueue(); + } + /// /// Gets a value indicating whether the soft keyboard is currently visible. /// @@ -627,11 +518,9 @@ private static extern void _CWebViewPlugin_Reload( /// Determines whether the current platform exposes a compatible WebView implementation. /// /// true when the underlying native plugin can be instantiated; otherwise false. - public static bool IsWebViewAvailable() - { + public static bool IsWebViewAvailable() { #if !UNITY_EDITOR && UNITY_ANDROID - using (var plugin = new AndroidJavaObject("net.gree.unitywebview.CWebViewPlugin")) - { + using (var plugin = new AndroidJavaObject("net.gree.unitywebview.CWebViewPlugin")) { return plugin.CallStatic("IsWebViewAvailable"); } #else @@ -680,9 +569,7 @@ public void Init( bool wkAllowsLinkPreview = true, bool wkAllowsBackForwardNavigationGestures = true, // editor - bool separated = false, - Callback audioFocusChanged = null) - { + bool separated = false) { #if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX _CWebViewPlugin_InitStatic( Application.platform == RuntimePlatform.OSXEditor, @@ -695,7 +582,6 @@ public void Init( onLoaded = ld; onHooked = hooked; onCookies = cookies; - onAudioFocusChanged = audioFocusChanged; #if UNITY_WEBGL #if !UNITY_EDITOR _gree_unity_webview_init(name); @@ -741,13 +627,16 @@ public void Init( webView.SetStatic("forceBringToFront", true); #endif webView.Call("Init", name, transparent, zoom, androidForceDarkMode, ua, radius); + + // Set up direct callback for zero-delay event delivery + callback = new (this); + webView.Call("SetCallback", callback); #else Debug.LogError("Webview is not supported on this platform."); #endif } - public void Destroy() - { + private void OnDestroy() { #if UNITY_WEBGL #if !UNITY_EDITOR _gree_unity_webview_destroy(name); @@ -782,8 +671,7 @@ public void Destroy() /// /// Pauses WebView timers and rendering to match Unity's lifecycle. /// - public void Pause() - { + public void Pause() { #if UNITY_WEBPLAYER || UNITY_WEBGL //TODO: UNSUPPORTED #elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX @@ -805,8 +693,7 @@ public void Pause() /// /// Resumes WebView timers previously paused via . /// - public void Resume() - { + public void Resume() { #if UNITY_WEBPLAYER || UNITY_WEBGL //TODO: UNSUPPORTED #elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX @@ -828,8 +715,7 @@ public void Resume() /// /// Desired centre position in screen pixels (historically anchored to lower-left). /// Desired width and height of the WebView in pixels. - public void SetCenterPositionWithScale(Vector2 center, Vector2 scale) - { + public void SetCenterPositionWithScale(Vector2 center, Vector2 scale) { #if UNITY_WEBPLAYER || UNITY_WEBGL //TODO: UNSUPPORTED #elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX @@ -851,8 +737,7 @@ public void SetCenterPositionWithScale(Vector2 center, Vector2 scale) /// Right margin in pixels or percentage. /// Bottom margin in pixels or percentage. /// When true, margins are interpreted as percentages of the screen size. - public void SetMargins(int left, int top, int right, int bottom, bool relative = false) - { + public void SetMargins(int left, int top, int right, int bottom, bool relative = false) { #if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX //TODO: UNSUPPORTED return; @@ -887,8 +772,7 @@ public void SetMargins(int left, int top, int right, int bottom, bool relative = mr = right; mb = bottom; #elif UNITY_IPHONE - if (relative) - { + if (relative) { float w = (float)Screen.width; float h = (float)Screen.height; ml = left / w; @@ -904,20 +788,17 @@ public void SetMargins(int left, int top, int right, int bottom, bool relative = mb = bottom; } #elif UNITY_ANDROID - if (relative) - { + if (relative) { float w = (float)Screen.width; float h = (float)Screen.height; int iw = Display.main.systemWidth; int ih = Display.main.systemHeight; - if (!Screen.fullScreen) - { + if (!Screen.fullScreen) { using (var unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) using (var activity = unityClass.GetStatic("currentActivity")) using (var player = activity.Get("mUnityPlayer")) using (var view = player.Call("getView")) - using (var rect = new AndroidJavaObject("android.graphics.Rect")) - { + using (var rect = new AndroidJavaObject("android.graphics.Rect")) { view.Call("getDrawingRect", rect); iw = rect.Call("width"); ih = rect.Call("height"); @@ -942,8 +823,7 @@ public void SetMargins(int left, int top, int right, int bottom, bool relative = && mt == mMarginTopComputed && mr == mMarginRightComputed && mb == mMarginBottomComputed - && r == mMarginRelativeComputed) - { + && r == mMarginRelativeComputed) { return; } mMarginLeftComputed = ml; @@ -975,16 +855,13 @@ public void SetMargins(int left, int top, int right, int bottom, bool relative = /// Shows or hides the WebView while keeping its state intact. /// /// true to make the WebView visible; otherwise false. - public void SetVisibility(bool v) - { + public void SetVisibility(bool v) { #if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX - if (bg != null) - { - bg.gameObject.active = v; + if (bg != null) { + bg.gameObject.SetActive(v); } #endif - if (GetVisibility() && !v) - { + if (GetVisibility() && !v) { EvaluateJS("if (document && document.activeElement) document.activeElement.blur();"); } #if UNITY_WEBGL @@ -1015,8 +892,7 @@ public void SetVisibility(bool v) /// /// Gets the last visibility flag applied to the WebView. /// - public bool GetVisibility() - { + public bool GetVisibility() { return visibility; } @@ -1024,8 +900,7 @@ public bool GetVisibility() /// Toggles native scroll bar rendering where supported. /// /// true to show scroll bars; otherwise false. - public void SetScrollbarsVisibility(bool v) - { + public void SetScrollbarsVisibility(bool v) { #if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX // TODO: UNSUPPORTED #elif UNITY_IPHONE @@ -1046,7 +921,7 @@ public void SetScrollbarsVisibility(bool v) /// /// Whether debugging should be enabled. public void EnableWebviewDebugging(bool enabled) { -#if UNITY_ANDROID && !(UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX) +#if UNITY_ANDROID && !UNITY_EDITOR if (webView == null) { return; } @@ -1061,8 +936,7 @@ public void EnableWebviewDebugging(bool enabled) { /// Enables or disables user interaction with the WebView surface. /// /// Whether touch input is forwarded to the WebView. - public void SetInteractionEnabled(bool enabled) - { + public void SetInteractionEnabled(bool enabled) { #if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX // TODO: UNSUPPORTED #elif UNITY_IPHONE @@ -1082,8 +956,7 @@ public void SetInteractionEnabled(bool enabled) /// Controls whether JavaScript alert/confirm/prompt dialogs are permitted. /// /// true to allow dialogs; otherwise false. - public void SetAlertDialogEnabled(bool e) - { + public void SetAlertDialogEnabled(bool e) { #if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX // TODO: UNSUPPORTED #elif UNITY_IPHONE @@ -1103,8 +976,7 @@ public void SetAlertDialogEnabled(bool e) /// /// Gets the cached alert dialog enable flag. /// - public bool GetAlertDialogEnabled() - { + public bool GetAlertDialogEnabled() { return alertDialogEnabled; } @@ -1112,8 +984,7 @@ public bool GetAlertDialogEnabled() /// Toggles bouncing/elastic scrolling on supported platforms. /// /// true to enable bouncing, otherwise false. - public void SetScrollBounceEnabled(bool e) - { + public void SetScrollBounceEnabled(bool e) { #if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX // TODO: UNSUPPORTED #elif UNITY_IPHONE @@ -1131,8 +1002,7 @@ public void SetScrollBounceEnabled(bool e) /// /// Gets the cached bounce/elastic scrolling flag. /// - public bool GetScrollBounceEnabled() - { + public bool GetScrollBounceEnabled() { return scrollBounceEnabled; } @@ -1140,8 +1010,7 @@ public bool GetScrollBounceEnabled() /// Grants or revokes camera access for WebRTC and file input elements. /// /// Whether the WebView should expose camera capture to web content. - public void SetCameraAccess(bool allowed) - { + public void SetCameraAccess(bool allowed) { #if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX // TODO: UNSUPPORTED #elif UNITY_IPHONE @@ -1159,8 +1028,7 @@ public void SetCameraAccess(bool allowed) /// Grants or revokes microphone access for WebRTC and audio capture flows. /// /// Whether the WebView should expose microphone capture to web content. - public void SetMicrophoneAccess(bool allowed) - { + public void SetMicrophoneAccess(bool allowed) { #if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX // TODO: UNSUPPORTED #elif UNITY_IPHONE @@ -1177,24 +1045,22 @@ public void SetMicrophoneAccess(bool allowed) /// /// Forces the Android plugin to request audio focus back for Unity's audio subsystem. /// - public void RequestUnityAudioFocus() - { + public void RequestUnityAudioFocus() { #if UNITY_ANDROID && !UNITY_EDITOR if (webView == null) return; - webView.Call("RequestUnityAudioFocus"); + webView.Call("requestUnityAudioFocus"); #endif } /// /// Relinquishes Unity's audio focus so WebView media can take control. /// - public void AbandonUnityAudioFocus() - { + public void AbandonUnityAudioFocus() { #if UNITY_ANDROID && !UNITY_EDITOR if (webView == null) return; - webView.Call("AbandonUnityAudioFocus"); + webView.Call("abandonUnityAudioFocus"); #endif } @@ -1205,8 +1071,7 @@ public void AbandonUnityAudioFocus() /// Regex pattern for URLs that should be blocked. /// Regex pattern that triggers hook callbacks. /// true if the operation is supported on the current platform. - public bool SetURLPattern(string allowPattern, string denyPattern, string hookPattern) - { + public bool SetURLPattern(string allowPattern, string denyPattern, string hookPattern) { #if UNITY_WEBPLAYER || UNITY_WEBGL //TODO: UNSUPPORTED return false; @@ -1228,8 +1093,7 @@ public bool SetURLPattern(string allowPattern, string denyPattern, string hookPa /// Navigates the WebView to the specified URL. /// /// Absolute or relative URL to load. - public void LoadURL(string url) - { + public void LoadURL(string url) { if (string.IsNullOrEmpty(url)) return; #if UNITY_WEBGL @@ -1256,8 +1120,7 @@ public void LoadURL(string url) /// /// HTML markup to display. /// Base URL used for resolving relative paths. - public void LoadHTML(string html, string baseUrl) - { + public void LoadHTML(string html, string baseUrl) { if (string.IsNullOrEmpty(html)) return; if (string.IsNullOrEmpty(baseUrl)) @@ -1281,8 +1144,7 @@ public void LoadHTML(string html, string baseUrl) /// Evaluates JavaScript inside the current WebView context. /// /// Script source to execute. - public void EvaluateJS(string js) - { + public void EvaluateJS(string js) { #if UNITY_WEBGL #if !UNITY_EDITOR _gree_unity_webview_evaluateJS(name, js); @@ -1305,8 +1167,7 @@ public void EvaluateJS(string js) /// /// Returns the current navigation progress percentage where supported. /// - public int Progress() - { + public int Progress() { #if UNITY_WEBPLAYER || UNITY_WEBGL //TODO: UNSUPPORTED return 0; @@ -1327,8 +1188,7 @@ public int Progress() /// /// Returns whether the WebView has a previous page in its navigation history. /// - public bool CanGoBack() - { + public bool CanGoBack() { #if UNITY_WEBPLAYER || UNITY_WEBGL //TODO: UNSUPPORTED return false; @@ -1349,8 +1209,7 @@ public bool CanGoBack() /// /// Returns whether the WebView can navigate forward in its history stack. /// - public bool CanGoForward() - { + public bool CanGoForward() { #if UNITY_WEBPLAYER || UNITY_WEBGL //TODO: UNSUPPORTED return false; @@ -1371,8 +1230,7 @@ public bool CanGoForward() /// /// Navigates to the previous entry in the WebView history if available. /// - public void GoBack() - { + public void GoBack() { #if UNITY_WEBPLAYER || UNITY_WEBGL //TODO: UNSUPPORTED #elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX @@ -1391,8 +1249,7 @@ public void GoBack() /// /// Navigates to the next entry in the WebView history if available. /// - public void GoForward() - { + public void GoForward() { #if UNITY_WEBPLAYER || UNITY_WEBGL //TODO: UNSUPPORTED #elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX @@ -1411,8 +1268,7 @@ public void GoForward() /// /// Reloads the current WebView page. /// - public void Reload() - { + public void Reload() { #if UNITY_WEBPLAYER || UNITY_WEBGL //TODO: UNSUPPORTED #elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX @@ -1428,62 +1284,184 @@ public void Reload() #endif } + #region Thread-Safe Event Queue + + /// + /// Checks if the current thread is the Unity main thread. + /// + /// True if executing on the main thread, false otherwise. + private bool IsMainThread() { + if (_mainThreadId == -1) + return false; // Defensive: queue if main thread ID not yet captured + return Thread.CurrentThread.ManagedThreadId == _mainThreadId; + } + + /// + /// Processes all queued events on the main thread. + /// Called from Update(), LateUpdate(), and lifecycle hooks. + /// Safe to call multiple times (idempotent). + /// + private void ProcessEventQueue() { + if (paused) + return; + + WebViewEvent evt; + while (_eventQueue.TryDequeue(out evt)) { + try + { + DispatchEvent(evt); + } + catch (Exception ex) { + Debug.LogError($"WebView event handler exception for {evt.Type}: {ex}"); + // Continue processing remaining events + } + } + } + + /// + /// Dispatches a single event to the appropriate callback. + /// + /// The event to dispatch. + private void DispatchEvent(WebViewEvent evt) { + switch (evt.Type) { + case WebViewEvent.EventType.Message: + CallFromJS(evt.Payload); + break; + case WebViewEvent.EventType.Error: + CallOnError(evt.Payload); + break; + case WebViewEvent.EventType.HttpError: + CallOnHttpError(evt.Payload); + break; + case WebViewEvent.EventType.Started: + CallOnStarted(evt.Payload); + break; + case WebViewEvent.EventType.Loaded: + CallOnLoaded(evt.Payload); + break; + case WebViewEvent.EventType.Hooked: + CallOnHooked(evt.Payload); + break; + case WebViewEvent.EventType.Cookies: + CallOnCookies(evt.Payload); + break; + case WebViewEvent.EventType.AudioFocusChanged: + CallOnAudioFocusChanged(evt.Payload); + break; + case WebViewEvent.EventType.KeyboardHeightChanged: + SetKeyboardVisible(evt.Payload); + break; + case WebViewEvent.EventType.FileChooserPermissions: + RequestFileChooserPermissions(); + break; + case WebViewEvent.EventType.Unknown: + Debug.LogWarning($"Unknown WebView event received: {evt.Payload}"); + break; + } + } + + /// + /// Enqueues an event from a native bridge message string. + /// Thread-safe - can be called from any thread. + /// + /// The raw message in "Type:Payload" format. + public void EnqueueEvent(string message) { + var evt = WebViewEvent.FromNativeMessage(message); + if (evt != null) { + _eventQueue.Enqueue(evt); + } + } + + /// + /// Enqueues a WebViewEvent directly. + /// Thread-safe - can be called from any thread. + /// + /// The event to enqueue. + public void EnqueueEvent(WebViewEvent evt) { + if (evt != null) { + _eventQueue.Enqueue(evt); + } + } + + /// + /// Gets the current number of events in the queue. + /// Useful for debugging and performance monitoring. + /// + public int EventQueueCount => _eventQueue.Count; + + #endregion + /// /// Invokes the registered error callback with the supplied message. + /// Thread-safe: if called from a background thread, the event is queued for main thread processing. /// /// Descriptive error message. - public void CallOnError(string error) - { - if (onError != null) - { + public void CallOnError(string error) { + if (!IsMainThread()) { + EnqueueEvent(WebViewEvent.Error(error)); + return; + } + if (onError != null) { onError(error); } } /// /// Invokes the registered HTTP error callback for the given status information. + /// Thread-safe: if called from a background thread, the event is queued for main thread processing. /// /// HTTP error payload (status code or detail string). - public void CallOnHttpError(string error) - { - if (onHttpError != null) - { + public void CallOnHttpError(string error) { + if (!IsMainThread()) { + EnqueueEvent(WebViewEvent.HttpError(error)); + return; + } + if (onHttpError != null) { onHttpError(error); } } /// /// Forwards navigation-start notifications to the Unity listener. + /// Thread-safe: if called from a background thread, the event is queued for main thread processing. /// /// URL that began loading. - public void CallOnStarted(string url) - { - if (onStarted != null) - { + public void CallOnStarted(string url) { + if (!IsMainThread()) { + EnqueueEvent(WebViewEvent.Started(url)); + return; + } + if (onStarted != null) { onStarted(url); } } /// /// Forwards navigation-complete notifications to the Unity listener. + /// Thread-safe: if called from a background thread, the event is queued for main thread processing. /// /// URL that finished loading. - public void CallOnLoaded(string url) - { - if (onLoaded != null) - { + public void CallOnLoaded(string url) { + if (!IsMainThread()) { + EnqueueEvent(WebViewEvent.Loaded(url)); + return; + } + if (onLoaded != null) { onLoaded(url); } } /// /// Dispatches JavaScript messages received from the native bridge to managed listeners. + /// Thread-safe: if called from a background thread, the event is queued for main thread processing. /// /// Message payload supplied by the page. - public void CallFromJS(string message) - { - if (onJS != null) - { + public void CallFromJS(string message) { + if (!IsMainThread()) { + EnqueueEvent(WebViewEvent.Message(message)); + return; + } + if (onJS != null) { #if !UNITY_ANDROID #if UNITY_2018_4_OR_NEWER message = UnityWebRequest.UnEscapeURL(message); @@ -1497,12 +1475,15 @@ public void CallFromJS(string message) /// /// Dispatches URL-hook notifications to managed listeners. + /// Thread-safe: if called from a background thread, the event is queued for main thread processing. /// /// Hooked URL reported by the native layer. - public void CallOnHooked(string message) - { - if (onHooked != null) - { + public void CallOnHooked(string message) { + if (!IsMainThread()) { + EnqueueEvent(WebViewEvent.Hooked(message)); + return; + } + if (onHooked != null) { #if !UNITY_ANDROID #if UNITY_2018_4_OR_NEWER message = UnityWebRequest.UnEscapeURL(message); @@ -1516,34 +1497,138 @@ public void CallOnHooked(string message) /// /// Delivers cookie information retrieved from the WebView. + /// Thread-safe: if called from a background thread, the event is queued for main thread processing. /// /// Cookie string in standard HTTP header format. - public void CallOnCookies(string cookies) - { - if (onCookies != null) - { + public void CallOnCookies(string cookies) { + if (!IsMainThread()) { + EnqueueEvent(WebViewEvent.Cookies(cookies)); + return; + } + if (onCookies != null) { onCookies(cookies); } } /// /// Dispatches audio focus state transitions emitted by the Android plugin. + /// Thread-safe: if called from a background thread, the event is queued for main thread processing. /// /// State identifier such as webview-start or unity-gain. - public void CallOnAudioFocusChanged(string state) - { - if (onAudioFocusChanged != null) - { + public void CallOnAudioFocusChanged(string state) { + if (!IsMainThread()) { + EnqueueEvent(WebViewEvent.AudioFocusChanged(state)); + return; + } + if (onAudioFocusChanged != null) { onAudioFocusChanged(state); } } + /// + /// Updates the tracked keyboard height when the native plugin reports visibility changes. + /// + /// Keyboard height, in pixels, supplied by the Android plugin. + public void SetKeyboardVisible(string keyboardVisibleHeight) { +#if !UNITY_ANDROID || UNITY_EDITOR || UNITY_STANDALONE + return; +#else + if (!IsMainThread()) { + EnqueueEvent(WebViewEvent.KeyboardHeightChanged(keyboardVisibleHeight)); + return; + } + if (BottomAdjustmentDisabled()) { + return; + } + var keyboardVisibleHeight0 = mKeyboardVisibleHeight; + var keyboardVisibleHeight1 = Int32.Parse(keyboardVisibleHeight); + if (keyboardVisibleHeight0 != keyboardVisibleHeight1) { + mKeyboardVisibleHeight = keyboardVisibleHeight1; + SetMargins(mMarginLeft, mMarginTop, mMarginRight, mMarginBottom, mMarginRelative); + } +#endif + } + + /// + /// Requests runtime storage permissions required by the Android file chooser implementation. + /// + public void RequestFileChooserPermissions() { +#if !UNITY_ANDROID || UNITY_EDITOR || UNITY_STANDALONE + return; +#else + if (!IsMainThread()) { + EnqueueEvent(WebViewEvent.FileChooserPermissions()); + return; + } + var permissions = new List(); + using (var version = new AndroidJavaClass("android.os.Build$VERSION")) { + if (version.GetStatic("SDK_INT") >= 33) { + if (!Permission.HasUserAuthorizedPermission("android.permission.READ_MEDIA_IMAGES")) { + permissions.Add("android.permission.READ_MEDIA_IMAGES"); + } + if (!Permission.HasUserAuthorizedPermission("android.permission.READ_MEDIA_VIDEO")) { + permissions.Add("android.permission.READ_MEDIA_VIDEO"); + } + if (!Permission.HasUserAuthorizedPermission("android.permission.READ_MEDIA_AUDIO")) { + permissions.Add("android.permission.READ_MEDIA_AUDIO"); + } + } + else + { + if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead)) { + permissions.Add(Permission.ExternalStorageRead); + } + if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite)) { + permissions.Add(Permission.ExternalStorageWrite); + } + } + } + if (!Permission.HasUserAuthorizedPermission(Permission.Camera)) { + permissions.Add(Permission.Camera); + } + if (permissions.Count > 0) { +#if UNITY_2020_2_OR_NEWER + var grantedCount = 0; + var deniedCount = 0; + var callbacks = new PermissionCallbacks(); + callbacks.PermissionGranted += (permission) => + { + grantedCount++; + if (grantedCount + deniedCount == permissions.Count) { + StartCoroutine(CallOnRequestFileChooserPermissionsResult(grantedCount == permissions.Count)); + } + }; + callbacks.PermissionDenied += (permission) => + { + deniedCount++; + if (grantedCount + deniedCount == permissions.Count) { + StartCoroutine(CallOnRequestFileChooserPermissionsResult(grantedCount == permissions.Count)); + } + }; + callbacks.PermissionDeniedAndDontAskAgain += (permission) => + { + deniedCount++; + if (grantedCount + deniedCount == permissions.Count) { + StartCoroutine(CallOnRequestFileChooserPermissionsResult(grantedCount == permissions.Count)); + } + }; + Permission.RequestUserPermissions(permissions.ToArray(), callbacks); +#else + StartCoroutine(RequestFileChooserPermissionsCoroutine(permissions.ToArray())); +#endif + } + else + { + StartCoroutine(CallOnRequestFileChooserPermissionsResult(true)); + } +#endif + } + /// /// Overrides the audio focus change callback at runtime. /// /// Callback invoked for audio focus transitions. - public void SetOnAudioFocusChanged(Callback cb) - { + public void SetOnAudioFocusChanged(Callback cb) { onAudioFocusChanged = cb; } @@ -1552,8 +1637,7 @@ public void SetOnAudioFocusChanged(Callback cb) /// /// HTTP header key. /// Header value. - public void AddCustomHeader(string headerKey, string headerValue) - { + public void AddCustomHeader(string headerKey, string headerValue) { #if UNITY_WEBPLAYER || UNITY_WEBGL //TODO: UNSUPPORTED #elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX @@ -1574,8 +1658,7 @@ public void AddCustomHeader(string headerKey, string headerValue) /// /// HTTP header key to query. /// The stored header value or null if none is found. - public string GetCustomHeaderValue(string headerKey) - { + public string GetCustomHeaderValue(string headerKey) { #if UNITY_WEBPLAYER || UNITY_WEBGL //TODO: UNSUPPORTED return null; @@ -1597,8 +1680,7 @@ public string GetCustomHeaderValue(string headerKey) /// Removes a custom header so it is no longer appended to web requests. /// /// HTTP header key to remove. - public void RemoveCustomHeader(string headerKey) - { + public void RemoveCustomHeader(string headerKey) { #if UNITY_WEBPLAYER || UNITY_WEBGL #elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX #elif UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX || UNITY_IPHONE @@ -1615,8 +1697,7 @@ public void RemoveCustomHeader(string headerKey) /// /// Clears all previously added custom headers. /// - public void ClearCustomHeader() - { + public void ClearCustomHeader() { #if UNITY_WEBPLAYER || UNITY_WEBGL //TODO: UNSUPPORTED #elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX @@ -1635,8 +1716,7 @@ public void ClearCustomHeader() /// /// Deletes persistent WebView cookies where supported. /// - public void ClearCookies() - { + public void ClearCookies() { #if UNITY_WEBPLAYER || UNITY_WEBGL //TODO: UNSUPPORTED #elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX @@ -1656,8 +1736,7 @@ public void ClearCookies() /// /// Flushes the in-memory cookie store to disk. /// - public void SaveCookies() - { + public void SaveCookies() { #if UNITY_WEBPLAYER || UNITY_WEBGL //TODO: UNSUPPORTED #elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX @@ -1678,8 +1757,7 @@ public void SaveCookies() /// Requests the cookie string for a given URL. Result is returned via . /// /// URL whose cookies should be retrieved. - public void GetCookies(string url) - { + public void GetCookies(string url) { #if UNITY_WEBPLAYER || UNITY_WEBGL //TODO: UNSUPPORTED #elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX @@ -1702,8 +1780,7 @@ public void GetCookies(string url) /// /// HTTP basic auth user name. /// HTTP basic auth password. - public void SetBasicAuthInfo(string userName, string password) - { + public void SetBasicAuthInfo(string userName, string password) { #if UNITY_WEBPLAYER || UNITY_WEBGL //TODO: UNSUPPORTED #elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX @@ -1725,8 +1802,7 @@ public void SetBasicAuthInfo(string userName, string password) /// Clears the WebView cache, optionally including disk-backed resources. /// /// When true, disk cache entries are also removed. - public void ClearCache(bool includeDiskFiles) - { + public void ClearCache(bool includeDiskFiles) { #if UNITY_WEBPLAYER || UNITY_WEBGL //TODO: UNSUPPORTED #elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX @@ -1747,8 +1823,7 @@ public void ClearCache(bool includeDiskFiles) /// Adjusts the Android text zoom scaling factor (100 is default size). /// /// Text zoom percentage. - public void SetTextZoom(int textZoom) - { + public void SetTextZoom(int textZoom) { #if UNITY_WEBPLAYER || UNITY_WEBGL //TODO: UNSUPPORTED #elif UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_EDITOR_LINUX @@ -1763,18 +1838,14 @@ public void SetTextZoom(int textZoom) } #if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX - void OnApplicationFocus(bool focus) - { - if (!focus) - { + void OnApplicationFocus(bool focus) { + if (!focus) { hasFocus = false; } } - void Start() - { - if (canvas != null) - { + void Start() { + if (canvas != null) { var g = new GameObject(gameObject.name + "BG"); g.transform.parent = canvas.transform; bg = g.AddComponent(); @@ -1782,8 +1853,7 @@ void Start() } } - void Update() - { + void Update() { if (bg != null) { bg.transform.SetAsLastSibling(); } @@ -1823,6 +1893,10 @@ void Update() break; } } + + // Process any events queued from background threads + ProcessEventQueue(); + if (webView == IntPtr.Zero || !visibility) return; bool refreshBitmap = (Time.frameCount % bitmapRefreshCycle == 0); @@ -1849,8 +1923,7 @@ void Update() } } - void UpdateBGTransform() - { + void UpdateBGTransform() { if (bg != null) { bg.rectTransform.anchorMin = Vector2.zero; bg.rectTransform.anchorMax = Vector2.zero; @@ -1871,8 +1944,7 @@ void UpdateBGTransform() /// public int devicePixelRatio = 1; - void OnGUI() - { + void OnGUI() { if (webView == IntPtr.Zero || !visibility) return; switch (Event.current.type) { diff --git a/Assets/Packager/Editor/Packager.cs b/Assets/Packager/Editor/Packager.cs index 8549ac1f..59515623 100644 --- a/Assets/Packager/Editor/Packager.cs +++ b/Assets/Packager/Editor/Packager.cs @@ -80,27 +80,6 @@ private static void ExportPackage(string outputPath) { Debug.ClearDeveloperConsole(); AirConsoleLogger.Log(() => $"Exporting to {outputPath}"); - string packageCache = Path.GetFullPath(Path.Combine(Application.dataPath, "..", "Library", "PackageCache")); - string webviewPackagePath = - Directory.GetDirectories(packageCache).FirstOrDefault(d => d.Contains("com.airconsole.unity-webview")); - - if (!Directory.Exists(webviewPackagePath)) { - EditorUtility.DisplayDialog("Error", "Can not find airconsole webview package", "OK"); - AirConsoleLogger.LogError(() => "Can not find airconsole webview package"); - return; - } - - string webviewPackagePathAssets = Path.Combine(webviewPackagePath, "Assets"); - - string targetPath = Path.GetFullPath(Path.Combine(Application.dataPath, "AirConsole", "unity-webview")); - DeleteAssetDatabaseDirectory(targetPath); - AssetDatabase.Refresh(); - - EditorApplication.LockReloadAssemblies(); - - MoveSubDirectories(webviewPackagePathAssets, targetPath); - File.Move(Path.Combine(webviewPackagePath, "unity-webview.asmdef"), Path.Combine(targetPath, "unity-webview.asmdef")); - File.Move(Path.Combine(webviewPackagePath, "unity-webview.asmdef.meta"), Path.Combine(targetPath, "unity-webview.asmdef.meta")); RemoveControllersFromWebGlTemplates(); RemoveAirConsolePreferences(); AssetDatabase.Refresh(); @@ -110,13 +89,8 @@ private static void ExportPackage(string outputPath) { CollectPackageInclusionPaths(packagePath, out IEnumerable packageInclusionPaths); AssetDatabase.ExportPackage(packageInclusionPaths.ToArray(), outputPath, ExportPackageOptions.Recurse); - File.Move(Path.Combine(targetPath, "unity-webview.asmdef"), Path.Combine(webviewPackagePath, "unity-webview.asmdef")); - File.Move(Path.Combine(targetPath, "unity-webview.asmdef.meta"), Path.Combine(webviewPackagePath, "unity-webview.asmdef.meta")); - MoveSubDirectories(targetPath, webviewPackagePathAssets); - DeleteAssetDatabaseDirectory(targetPath); CleanupCodePackage(); - AssetDatabase.Refresh(); - EditorApplication.UnlockReloadAssemblies(); + Debug.ClearDeveloperConsole(); } diff --git a/Assets/WebGLTemplates/AirConsole-2020/airconsole-unity-plugin.js b/Assets/WebGLTemplates/AirConsole-2020/airconsole-unity-plugin.js index a27095ac..0ac711af 100644 --- a/Assets/WebGLTemplates/AirConsole-2020/airconsole-unity-plugin.js +++ b/Assets/WebGLTemplates/AirConsole-2020/airconsole-unity-plugin.js @@ -1,6 +1,6 @@ /** * Copyright by N-Dream AG 2025. - * @version 2.6.0 + * @version 2.6.2 */ /** @@ -9,6 +9,10 @@ function App(container, canvas, web_config, progress_config) { var me = this; + + // TODO(PRO-1804): Remove this workaround when Android TV uses a fullscreen webview too + const isAndroidTV = window.location.search.includes('androidTv=1'); + window.AIRCONSOLE_ANDROID_NATIVE_GAMESIZING = window.AIRCONSOLE_ANDROID_NATIVE_GAMESIZING && !isAndroidTV; me.is_native_app = typeof Unity != "undefined"; me.is_editor = !!me.getURLParameterByName("unity-editor-websocket-port"); diff --git a/Assets/WebGLTemplates/AirConsole-U6/airconsole-settings.js.meta b/Assets/WebGLTemplates/AirConsole-U6/airconsole-settings.js.meta deleted file mode 100644 index 120bdf38..00000000 --- a/Assets/WebGLTemplates/AirConsole-U6/airconsole-settings.js.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: b63b835fd6ecf40dea8c11e1afe40ec6 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/WebGLTemplates/AirConsole-U6/airconsole-unity-plugin.js b/Assets/WebGLTemplates/AirConsole-U6/airconsole-unity-plugin.js index 1c556c1f..c10b995b 100644 --- a/Assets/WebGLTemplates/AirConsole-U6/airconsole-unity-plugin.js +++ b/Assets/WebGLTemplates/AirConsole-U6/airconsole-unity-plugin.js @@ -1,6 +1,6 @@ /** * Copyright by N-Dream AG 2025. - * @version 2.6.0 + * @version 2.6.2 */ /** @@ -9,7 +9,11 @@ function App(container, canvas, web_config, progress_config) { var me = this; - + + // TODO(PRO-1804): Remove this workaround when Android TV uses a fullscreen webview too + const isAndroidTV = window.location.search.includes('androidTv=1'); + window.AIRCONSOLE_ANDROID_NATIVE_GAMESIZING = window.AIRCONSOLE_ANDROID_NATIVE_GAMESIZING && !isAndroidTV; + me.is_native_app = typeof Unity != "undefined"; me.is_editor = !!me.getURLParameterByName("unity-editor-websocket-port"); if (!window.AIRCONSOLE_ANDROID_NATIVE_GAMESIZING) { diff --git a/Builds/internalonly-airconsole-unity-plugin-v2.6.2-rc2.unitypackage b/Builds/internalonly-airconsole-unity-plugin-v2.6.2-rc2.unitypackage new file mode 100644 index 00000000..5068f761 Binary files /dev/null and b/Builds/internalonly-airconsole-unity-plugin-v2.6.2-rc2.unitypackage differ diff --git a/CHANGELOG.md b/CHANGELOG.md index d0ecff21..ef478590 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,9 @@ This includes security related updates like requiring fixed Unity versions and i - **Unity API:** `OnMaximumVolumeChanged` event to notify when the games maximum volume must be changed. - **Android:** After the last device disconnects, the webview is reset along the game state. - **Android:** Add support to override the game version used in a previously built android game through intent extras with adb. +- **Android:** The support for native game sizing is communicated +- **Android Audio Focus:** Improvements to match the expected behavior on Android Automotive. +- **Android Audio Focus:** Drive maximum volume based on Android system requirements to avoid pausing when losing audio focus. ### Removed diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index a62772ed..abf9128d 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -885,8 +885,8 @@ PlayerSettings: webGLMemoryGeometricGrowthCap: 96 webGLPowerPreference: 2 scriptingDefineSymbols: - Android: - WebGL: + Android: + WebGL: additionalCompilerArguments: Android: [] platformArchitecture: