From 06c429d071f6a00ea9e526ba1944e3d922dce537 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Onur=20Tanr=C4=B1kulu?= Date: Mon, 2 Feb 2026 14:54:59 +0300 Subject: [PATCH 1/8] chore: sync with PackageTemplate configuration - Update .editorconfig to comprehensive version (371 lines) - Update global.json to SDK 10.0.100 with rollForward: major - Update CLAUDE.md with latest development guidelines Co-Authored-By: Claude Sonnet 4.5 --- .editorconfig | 425 ++++++++++++++++++++++++++++++++++++-------------- global.json | 2 +- 2 files changed, 306 insertions(+), 121 deletions(-) diff --git a/.editorconfig b/.editorconfig index 0c3315f..9f0c528 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,185 +1,370 @@ root = true +# ================================ +# All Files +# ================================ + [*] +charset = utf-8 insert_final_newline = true +trim_trailing_whitespace = true indent_style = space indent_size = 4 -trim_trailing_whitespace = true end_of_line = lf -charset = utf-8 -[*.cs] +[*.sln] +indent_style = tab -# New line preferences -csharp_new_line_before_open_brace = all -csharp_new_line_before_else = true -csharp_new_line_before_catch = true -csharp_new_line_before_finally = true -csharp_new_line_before_members_in_object_initializers = true -csharp_new_line_before_members_in_anonymous_types = true -csharp_new_line_between_query_expression_clauses = true +# ================================ +# XML & Config Files +# ================================ -# Indentation preferences -csharp_indent_block_contents = true -csharp_indent_braces = false -csharp_indent_case_contents = true -csharp_indent_case_contents_when_block = false -csharp_indent_switch_labels = true -csharp_indent_labels = one_less_than_current +[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}] +indent_size = 2 -# Modifier preferences -csharp_preferred_modifier_order = public,private,protected,internal,file,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,required,volatile,async:suggestion -dotnet_style_require_accessibility_modifiers = always:warning +[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}] +indent_size = 2 -# Qualification preferences +# ================================ +# Data Files +# ================================ + +[*.json] +indent_size = 2 + +[*.{yml,yaml}] +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false + +# ================================ +# Scripts +# ================================ + +[*.sh] +end_of_line = lf +indent_size = 2 + +[*.{cmd,bat}] +end_of_line = crlf +indent_size = 2 + +[*.ps1] +indent_size = 2 + +# ================================ +# C# Files +# ================================ + +[*.cs] + +charset = utf-8-bom +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 4 + +# Organize usings +dotnet_sort_system_directives_first = true +dotnet_separate_import_directive_groups = false + +# this. and Me. preferences dotnet_style_qualification_for_field = false:suggestion dotnet_style_qualification_for_property = false:suggestion dotnet_style_qualification_for_method = false:suggestion dotnet_style_qualification_for_event = false:suggestion -# Type and Var preferences -csharp_style_var_for_built_in_types = false:suggestion -csharp_style_var_when_type_is_apparent = true:suggestion -csharp_style_var_elsewhere = false:suggestion +# Language keywords vs BCL types dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion dotnet_style_predefined_type_for_member_access = true:suggestion -# Primary constructors -dotnet_diagnostic.IDE0290.severity = none -csharp_style_prefer_primary_constructors = false:none - -# Naming conventions: Constants -dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion -dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields -dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style -dotnet_naming_symbols.constant_fields.applicable_kinds = field -dotnet_naming_symbols.constant_fields.required_modifiers = const -dotnet_naming_style.pascal_case_style.capitalization = pascal_case +# Parentheses preferences +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent -# Naming conventions: Static fields -dotnet_naming_rule.static_fields_should_have_prefix.severity = suggestion -dotnet_naming_rule.static_fields_should_have_prefix.symbols = static_fields -dotnet_naming_rule.static_fields_should_have_prefix.style = static_prefix_style -dotnet_naming_symbols.static_fields.applicable_kinds = field -dotnet_naming_symbols.static_fields.required_modifiers = static -dotnet_naming_symbols.static_fields.applicable_accessibilities = private, internal, private_protected -dotnet_naming_style.static_prefix_style.required_prefix = s_ -dotnet_naming_style.static_prefix_style.capitalization = camel_case - -# Naming conventions: Private fields -dotnet_naming_rule.camel_case_for_private_internal_fields.severity = suggestion -dotnet_naming_rule.camel_case_for_private_internal_fields.symbols = private_internal_fields -dotnet_naming_rule.camel_case_for_private_internal_fields.style = camel_case_underscore_style -dotnet_naming_symbols.private_internal_fields.applicable_kinds = field -dotnet_naming_symbols.private_internal_fields.applicable_accessibilities = private, internal -dotnet_naming_style.camel_case_underscore_style.required_prefix = _ -dotnet_naming_style.camel_case_underscore_style.capitalization = camel_case - -# Code style defaults -csharp_style_namespace_declarations = file_scoped:suggestion -csharp_using_directive_placement = outside_namespace:suggestion -dotnet_sort_system_directives_first = true -csharp_prefer_braces = true:silent -csharp_preserve_single_line_blocks = true:none -csharp_preserve_single_line_statements = false:none -csharp_prefer_static_local_function = true:suggestion -csharp_prefer_simple_using_statement = true:suggestion -csharp_style_prefer_switch_expression = true:suggestion +# Modifier preferences +dotnet_style_require_accessibility_modifiers = always:warning dotnet_style_readonly_field = true:suggestion # Expression-level preferences dotnet_style_object_initializer = true:suggestion dotnet_style_collection_initializer = true:suggestion -dotnet_style_prefer_collection_expression = when_types_exactly_match dotnet_style_explicit_tuple_names = true:suggestion -dotnet_style_coalesce_expression = true:suggestion -dotnet_style_null_propagation = true -dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion dotnet_style_prefer_inferred_tuple_names = true:suggestion dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion dotnet_style_prefer_auto_properties = false:warning dotnet_style_prefer_conditional_expression_over_assignment = true:silent dotnet_style_prefer_conditional_expression_over_return = true:silent -csharp_prefer_simple_default_expression = true:suggestion -csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion +dotnet_style_prefer_compound_assignment = true:suggestion +dotnet_style_prefer_simplified_interpolation = true:suggestion +dotnet_style_prefer_simplified_boolean_expressions = true:suggestion +dotnet_style_prefer_collection_expression = false:none + +# Null-checking preferences +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_null_propagation = true:suggestion +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion + +# Parameter preferences +dotnet_code_quality_unused_parameters = all:suggestion + +# var preferences +csharp_style_var_for_built_in_types = true:suggestion +csharp_style_var_when_type_is_apparent = true:suggestion +csharp_style_var_elsewhere = true:suggestion # Expression-bodied members -csharp_style_expression_bodied_methods = true:silent -csharp_style_expression_bodied_constructors = false:silent -csharp_style_expression_bodied_operators = true:silent -csharp_style_expression_bodied_properties = false:silent -csharp_style_expression_bodied_indexers = true:silent -csharp_style_expression_bodied_accessors = true:silent +csharp_style_expression_bodied_methods = false:none +csharp_style_expression_bodied_constructors = false:none +csharp_style_expression_bodied_operators = false:none +csharp_style_expression_bodied_properties = true:none +csharp_style_expression_bodied_indexers = true:none +csharp_style_expression_bodied_accessors = true:none csharp_style_expression_bodied_lambdas = true:silent csharp_style_expression_bodied_local_functions = true:silent -# Pattern matching +# Pattern matching preferences csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion csharp_style_pattern_matching_over_as_with_null_check = true:suggestion -csharp_style_inlined_variable_declaration = true:suggestion +csharp_style_prefer_not_pattern = true:suggestion +csharp_style_prefer_pattern_matching = true:silent +csharp_style_prefer_extended_property_pattern = true:suggestion +csharp_style_prefer_switch_expression = true:suggestion -# Null checking preferences +# Null-checking preferences csharp_style_throw_expression = true:suggestion csharp_style_conditional_delegate_call = true:suggestion +csharp_style_prefer_null_check_over_type_check = true:suggestion -# Nullable reference types -dotnet_diagnostic.CS8600.severity = suggestion -dotnet_diagnostic.CS8602.severity = suggestion -dotnet_diagnostic.CS8603.severity = suggestion +# Modifier preferences +csharp_prefer_static_local_function = true:suggestion +csharp_preferred_modifier_order = public,private,protected,internal,file,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,required,volatile,async:suggestion + +# Code-block preferences +csharp_prefer_braces = true:silent +csharp_prefer_simple_using_statement = true:suggestion +csharp_style_namespace_declarations = file_scoped:suggestion +csharp_style_prefer_method_group_conversion = true:silent +csharp_style_prefer_top_level_statements = true:silent +csharp_style_prefer_primary_constructors = false:none -# Other features +# Expression-level preferences +csharp_prefer_simple_default_expression = true:suggestion +csharp_style_prefer_local_over_anonymous_function = true:suggestion csharp_style_prefer_index_operator = true:suggestion csharp_style_prefer_range_operator = true:suggestion +csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion +csharp_style_prefer_tuple_swap = true:suggestion +csharp_style_prefer_utf8_string_literals = true:suggestion +csharp_style_inlined_variable_declaration = true:suggestion +csharp_style_deconstructed_variable_declaration = true:suggestion +csharp_style_unused_value_assignment_preference = discard_variable:suggestion +csharp_style_unused_value_expression_statement_preference = discard_variable:silent + +# using directive preferences +csharp_using_directive_placement = outside_namespace:suggestion + +# Other preferences csharp_style_pattern_local_over_anonymous_function = false:none -# Diagnostic suppressions -dotnet_diagnostic.IDE0071.severity = silent -dotnet_diagnostic.IDE0031.severity = silent +# New line preferences +csharp_new_line_before_open_brace = all +csharp_new_line_before_else = true +csharp_new_line_before_catch = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_between_query_expression_clauses = true -# XML documentation warnings -dotnet_diagnostic.CS1591.severity = none -dotnet_diagnostic.CS1573.severity = none -dotnet_diagnostic.CS1572.severity = none -dotnet_diagnostic.CS1571.severity = none -dotnet_diagnostic.CS1570.severity = none -dotnet_diagnostic.CS1587.severity = none -dotnet_diagnostic.CS1574.severity = none -dotnet_diagnostic.CS1580.severity = none -dotnet_diagnostic.CS1584.severity = none -dotnet_diagnostic.CS1658.severity = none +# Indentation preferences +csharp_indent_case_contents = true +csharp_indent_switch_labels = true +csharp_indent_labels = one_less_than_current +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents_when_block = false # Space preferences csharp_space_after_cast = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_between_parentheses = false +csharp_space_before_colon_in_inheritance_clause = true csharp_space_after_colon_in_inheritance_clause = true +csharp_space_around_binary_operators = before_and_after +csharp_space_between_method_declaration_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_call_parameter_list_parentheses = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false 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_around_declaration_statements = do_not_ignore -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_before_open_square_brackets = 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_space_around_declaration_statements = do_not_ignore -[*.{json,yaml,yml}] -indent_size = 2 +# Wrapping preferences +csharp_preserve_single_line_statements = true +csharp_preserve_single_line_blocks = true -[*.{csproj,xml,props,targets,resx}] -indent_size = 2 +# Whitespace options +csharp_style_allow_embedded_statements_on_same_line_experimental = false +csharp_style_allow_blank_lines_between_consecutive_braces_experimental = false +csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = false +csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = false +csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = false +dotnet_style_allow_multiple_blank_lines_experimental = false +dotnet_style_allow_statement_immediately_after_block_experimental = false -[*.sh] -end_of_line = lf +# Naming: Interfaces +dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion +dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface +dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i -[*.{cmd,bat}] -end_of_line = crlf +dotnet_naming_symbols.interface.applicable_kinds = interface +dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.interface.required_modifiers = + +dotnet_naming_style.begins_with_i.required_prefix = I +dotnet_naming_style.begins_with_i.required_suffix = +dotnet_naming_style.begins_with_i.word_separator = +dotnet_naming_style.begins_with_i.capitalization = pascal_case + +# Naming: Types +dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.types_should_be_pascal_case.symbols = types +dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case + +dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum +dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.types.required_modifiers = + +# Naming: Non-field members +dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members +dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case + +dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method +dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.non_field_members.required_modifiers = + +dotnet_naming_style.pascal_case.required_prefix = +dotnet_naming_style.pascal_case.required_suffix = +dotnet_naming_style.pascal_case.word_separator = +dotnet_naming_style.pascal_case.capitalization = pascal_case + +# Naming: Non-private static fields +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.symbols = non_private_static_fields +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.style = non_private_static_field_style + +dotnet_naming_symbols.non_private_static_fields.applicable_kinds = field +dotnet_naming_symbols.non_private_static_fields.applicable_accessibilities = public, protected, internal, protected_internal, private_protected +dotnet_naming_symbols.non_private_static_fields.required_modifiers = static + +dotnet_naming_style.non_private_static_field_style.capitalization = pascal_case + +# Naming: Non-private readonly fields +dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.symbols = non_private_readonly_fields +dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.style = non_private_readonly_field_style + +dotnet_naming_symbols.non_private_readonly_fields.applicable_kinds = field +dotnet_naming_symbols.non_private_readonly_fields.applicable_accessibilities = public, protected, internal, protected_internal, private_protected +dotnet_naming_symbols.non_private_readonly_fields.required_modifiers = readonly + +dotnet_naming_style.non_private_readonly_field_style.capitalization = pascal_case + +# Naming: Constants +dotnet_naming_rule.constants_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.constants_should_be_pascal_case.symbols = constants +dotnet_naming_rule.constants_should_be_pascal_case.style = pascal_case_style + +dotnet_naming_symbols.constants.applicable_kinds = field, local +dotnet_naming_symbols.constants.required_modifiers = const + +dotnet_naming_style.pascal_case_style.capitalization = pascal_case + +# Naming: Private static fields +dotnet_naming_rule.static_fields_should_be_camel_case.severity = suggestion +dotnet_naming_rule.static_fields_should_be_camel_case.symbols = static_fields +dotnet_naming_rule.static_fields_should_be_camel_case.style = static_field_style + +dotnet_naming_symbols.static_fields.applicable_kinds = field +dotnet_naming_symbols.static_fields.applicable_accessibilities = private, internal, private_protected +dotnet_naming_symbols.static_fields.required_modifiers = static + +dotnet_naming_style.static_field_style.capitalization = camel_case +dotnet_naming_style.static_field_style.required_prefix = s_ + +# Naming: Private instance fields +dotnet_naming_rule.instance_fields_should_be_camel_case.severity = suggestion +dotnet_naming_rule.instance_fields_should_be_camel_case.symbols = instance_fields +dotnet_naming_rule.instance_fields_should_be_camel_case.style = instance_field_style + +dotnet_naming_symbols.instance_fields.applicable_kinds = field +dotnet_naming_symbols.instance_fields.applicable_accessibilities = private, internal, private_protected + +dotnet_naming_style.instance_field_style.capitalization = camel_case +dotnet_naming_style.instance_field_style.required_prefix = _ + +# Naming: Locals and parameters +dotnet_naming_rule.locals_should_be_camel_case.severity = suggestion +dotnet_naming_rule.locals_should_be_camel_case.symbols = locals_and_parameters +dotnet_naming_rule.locals_should_be_camel_case.style = camel_case_style + +dotnet_naming_symbols.locals_and_parameters.applicable_kinds = parameter, local + +dotnet_naming_style.camel_case_style.capitalization = camel_case + +# Naming: Local functions +dotnet_naming_rule.local_functions_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.local_functions_should_be_pascal_case.symbols = local_functions +dotnet_naming_rule.local_functions_should_be_pascal_case.style = pascal_case_style + +dotnet_naming_symbols.local_functions.applicable_kinds = local_function + +# Primary constructors +dotnet_diagnostic.IDE0290.severity = none + +# Namespace matching +dotnet_diagnostic.IDE0130.severity = none + +# Nullable reference types +dotnet_diagnostic.CS8600.severity = warning +dotnet_diagnostic.CS8602.severity = warning +dotnet_diagnostic.CS8603.severity = warning +dotnet_diagnostic.CS8618.severity = warning +dotnet_diagnostic.CS8625.severity = warning + +# XML documentation +dotnet_diagnostic.CS1591.severity = none +dotnet_diagnostic.CS1573.severity = none +dotnet_diagnostic.CS1572.severity = none +dotnet_diagnostic.CS1571.severity = none +dotnet_diagnostic.CS1570.severity = none +dotnet_diagnostic.CS1587.severity = none +dotnet_diagnostic.CS1574.severity = none +dotnet_diagnostic.CS1580.severity = none +dotnet_diagnostic.CS1584.severity = none +dotnet_diagnostic.CS1658.severity = none + +# Code quality +dotnet_diagnostic.CA1822.severity = suggestion +dotnet_diagnostic.IDE0011.severity = warning +dotnet_diagnostic.IDE0040.severity = warning +dotnet_diagnostic.IDE0051.severity = warning +dotnet_diagnostic.IDE0052.severity = warning +dotnet_diagnostic.IDE0055.severity = warning + +# Suppressions +dotnet_diagnostic.IDE0071.severity = silent +dotnet_diagnostic.IDE0031.severity = silent diff --git a/global.json b/global.json index 611d1b4..dc92f2e 100644 --- a/global.json +++ b/global.json @@ -3,4 +3,4 @@ "rollForward": "major", "version": "10.0.100" } -} +} \ No newline at end of file From 989002d2a5024f1ef20d7be818f8ee411720c84d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Onur=20Tanr=C4=B1kulu?= Date: Mon, 2 Feb 2026 19:15:44 +0300 Subject: [PATCH 2/8] chore: update icon --- Icon.png | Bin 5027 -> 62469 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Icon.png b/Icon.png index ecbc41af2ff35c5195b5d22739c8508c9f3c6a8c..3869ccdd52f35c7460035c9a937cd5f50fae19b4 100644 GIT binary patch literal 62469 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 efX@Pl|P=w^3X8QGmi)4lv#G?w2Md@)_CrT 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�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 literal 5027 zcmeHKO>g5w7@VDK>W=$zg*#@mk)kaIX?PO+>SdBf#b`!U7 zs1O(Kd*A>P7Z4||2qB<1Bz^&hiYuoTD}lt7cM`|jE$vcq;^0V$?eR0u`}NE_laDty zZePFl!Zk^fu6NekTavVJEJ=+&uU>+YuYN1uhs)E+`n#DVsf*&$pe5&d#EUl8QFY%1lAd zv;rrZq3R;4DUgy1m+YmZsc}j)HewNr^9-;?g-wP$=h={-LtVXo%m8FJ2r3(A`VvKz zi7a0mLl|X3&O~S3{e)>-EaQ7AVQXV>b5TT-c&jPHIZwNskLI=7oV$!nTWzA30!+eK z1ab4k6xPN$^JS=;t?0I5T3y}njFx9wFYA`4>oaJ;Y1rRC1+}}n={Zf$bRL6(ZYa+2 zzk(_8`aF#=gd9eAz_cVD$f!!Bx5`I61;gN-HT5D0yiT0uI3}#q_GO4#4MXagWT|Jg z9B{wsP{p=-Ed}?nrML!jE!Q?3m)i6BZBF(?ZN>bV(kUmv@yM!4Z0gu9RUFGT6`);G zdbaK;Hno{NiE4H`O5EdIAon#eWQDAHthQsKRp;(S-DYo8hDy<&26{GL!Fm5fi zOhf2-DiLoz%%FJt5KUF#VItJ-%S4o!QMnur&&bDxESK{qLk6TzDE`cP z#{2mMr)*^axx0Y8v~%6(@tCD20!VO*q0_K5^W}cZBZQM=6cQ|=)y6R`S8r7xlyme* zE$7ll2n#}3~@YQ(5W?9grkXuHWPq$S{u`MCz{_J4jon8 zR^1#Ps{Me)K%GLjzrTgvf*t2Zr@hiGK7H_u(KtfVk$$xB!^4jreEa!N&n|rb>R}M>#b9Im3jCsbKZ}RUcbZMWlh`L$UyGFfz)<=T+Y*Zf-;bdGN3I2yif)AcMzI^=IAHRw}GE!%4qy6<8 H_dfg^wuI3` From 55ef2643779d410ffca0f23c7ef80d9c51fccff3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Onur=20Tanr=C4=B1kulu?= Date: Mon, 2 Feb 2026 19:16:38 +0300 Subject: [PATCH 3/8] chore: update Unity sandbox editorconfig --- sandbox/UnityApplication/.editorconfig | 453 ++++++++++++++++++------- 1 file changed, 331 insertions(+), 122 deletions(-) diff --git a/sandbox/UnityApplication/.editorconfig b/sandbox/UnityApplication/.editorconfig index 86c71fc..87eaf5c 100644 --- a/sandbox/UnityApplication/.editorconfig +++ b/sandbox/UnityApplication/.editorconfig @@ -1,188 +1,397 @@ root = true +# ================================ +# All Files +# ================================ + [*] +charset = utf-8 insert_final_newline = true +trim_trailing_whitespace = true indent_style = space indent_size = 4 -trim_trailing_whitespace = true end_of_line = lf -charset = utf-8 -[*.cs] +[*.sln] +indent_style = tab -# New line preferences -csharp_new_line_before_open_brace = all -csharp_new_line_before_else = true -csharp_new_line_before_catch = true -csharp_new_line_before_finally = true -csharp_new_line_before_members_in_object_initializers = true -csharp_new_line_before_members_in_anonymous_types = true -csharp_new_line_between_query_expression_clauses = true +# ================================ +# Asset Files +# ================================ -# Indentation preferences -csharp_indent_block_contents = true -csharp_indent_braces = false -csharp_indent_case_contents = true -csharp_indent_case_contents_when_block = false -csharp_indent_switch_labels = true -csharp_indent_labels = one_less_than_current +[*.{asset,prefab,unity,mat,controller,anim,physicMaterial,physicsMaterial2D,mask,overrideController,playable}] +indent_size = 2 -# Modifier preferences -csharp_preferred_modifier_order = public,private,protected,internal,file,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,required,volatile,async:suggestion -dotnet_style_require_accessibility_modifiers = always:warning +[*.{meta,asmdef,asmref}] +indent_size = 2 + +# ================================ +# XML & Config Files +# ================================ + +[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}] +indent_size = 2 + +[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}] +indent_size = 2 + +# ================================ +# Data Files +# ================================ + +[*.json] +indent_size = 2 + +[*.{yml,yaml}] +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false + +# ================================ +# Shader Files +# ================================ + +[*.{shader,shadergraph,shadersubgraph,hlsl,cginc,compute}] +indent_size = 4 + +[*.uss] +indent_size = 2 + +[*.uxml] +indent_size = 2 + +# ================================ +# Scripts +# ================================ + +[*.sh] +end_of_line = lf +indent_size = 2 + +[*.{cmd,bat}] +end_of_line = crlf +indent_size = 2 + +[*.ps1] +indent_size = 2 -# Qualification preferences +# ================================ +# C# Files +# ================================ + +[*.cs] + +charset = utf-8-bom +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 4 + +# Organize usings +dotnet_sort_system_directives_first = true +dotnet_separate_import_directive_groups = false + +# this. and Me. preferences dotnet_style_qualification_for_field = false:suggestion dotnet_style_qualification_for_property = false:suggestion dotnet_style_qualification_for_method = false:suggestion dotnet_style_qualification_for_event = false:suggestion -# Type and Var preferences -csharp_style_var_for_built_in_types = false:suggestion -csharp_style_var_when_type_is_apparent = true:suggestion -csharp_style_var_elsewhere = false:suggestion +# Language keywords vs BCL types dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion dotnet_style_predefined_type_for_member_access = true:suggestion -# Primary constructors -dotnet_diagnostic.IDE0290.severity = none -csharp_style_prefer_primary_constructors = false:none +# Parentheses preferences +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent -# Naming conventions: Constants -dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion -dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields -dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style -dotnet_naming_symbols.constant_fields.applicable_kinds = field -dotnet_naming_symbols.constant_fields.required_modifiers = const -dotnet_naming_style.pascal_case_style.capitalization = pascal_case - -# Naming conventions: Static fields -dotnet_naming_rule.static_fields_should_have_prefix.severity = suggestion -dotnet_naming_rule.static_fields_should_have_prefix.symbols = static_fields -dotnet_naming_rule.static_fields_should_have_prefix.style = static_prefix_style -dotnet_naming_symbols.static_fields.applicable_kinds = field -dotnet_naming_symbols.static_fields.required_modifiers = static -dotnet_naming_symbols.static_fields.applicable_accessibilities = private, internal, private_protected -dotnet_naming_style.static_prefix_style.required_prefix = s_ -dotnet_naming_style.static_prefix_style.capitalization = camel_case - -# Naming conventions: Private fields -dotnet_naming_rule.camel_case_for_private_internal_fields.severity = suggestion -dotnet_naming_rule.camel_case_for_private_internal_fields.symbols = private_internal_fields -dotnet_naming_rule.camel_case_for_private_internal_fields.style = camel_case_underscore_style -dotnet_naming_symbols.private_internal_fields.applicable_kinds = field -dotnet_naming_symbols.private_internal_fields.applicable_accessibilities = private, internal -dotnet_naming_style.camel_case_underscore_style.required_prefix = _ -dotnet_naming_style.camel_case_underscore_style.capitalization = camel_case - -# Code style defaults -csharp_style_namespace_declarations = file_scoped:suggestion -csharp_using_directive_placement = outside_namespace:suggestion -dotnet_sort_system_directives_first = true -csharp_prefer_braces = true:silent -csharp_preserve_single_line_blocks = true:none -csharp_preserve_single_line_statements = false:none -csharp_prefer_static_local_function = true:suggestion -csharp_prefer_simple_using_statement = true:suggestion -csharp_style_prefer_switch_expression = true:suggestion +# Modifier preferences +dotnet_style_require_accessibility_modifiers = always:warning dotnet_style_readonly_field = true:suggestion # Expression-level preferences dotnet_style_object_initializer = true:suggestion dotnet_style_collection_initializer = true:suggestion -dotnet_style_prefer_collection_expression = false:none dotnet_style_explicit_tuple_names = true:suggestion -dotnet_style_coalesce_expression = true:suggestion -dotnet_style_null_propagation = true -dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion dotnet_style_prefer_inferred_tuple_names = true:suggestion dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion dotnet_style_prefer_auto_properties = false:warning dotnet_style_prefer_conditional_expression_over_assignment = true:silent dotnet_style_prefer_conditional_expression_over_return = true:silent -csharp_prefer_simple_default_expression = true:suggestion -csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion +dotnet_style_prefer_compound_assignment = true:suggestion +dotnet_style_prefer_simplified_interpolation = true:suggestion +dotnet_style_prefer_simplified_boolean_expressions = true:suggestion +dotnet_style_prefer_collection_expression = false:none + +# Null-checking preferences +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_null_propagation = true:suggestion +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion + +# Parameter preferences +dotnet_code_quality_unused_parameters = all:suggestion + +# var preferences +csharp_style_var_for_built_in_types = true:suggestion +csharp_style_var_when_type_is_apparent = true:suggestion +csharp_style_var_elsewhere = true:suggestion # Expression-bodied members -csharp_style_expression_bodied_methods = true:silent -csharp_style_expression_bodied_constructors = false:silent -csharp_style_expression_bodied_operators = true:silent -csharp_style_expression_bodied_properties = false:silent -csharp_style_expression_bodied_indexers = true:silent -csharp_style_expression_bodied_accessors = true:silent +csharp_style_expression_bodied_methods = false:none +csharp_style_expression_bodied_constructors = false:none +csharp_style_expression_bodied_operators = false:none +csharp_style_expression_bodied_properties = true:none +csharp_style_expression_bodied_indexers = true:none +csharp_style_expression_bodied_accessors = true:none csharp_style_expression_bodied_lambdas = true:silent csharp_style_expression_bodied_local_functions = true:silent -# Pattern matching +# Pattern matching preferences csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion csharp_style_pattern_matching_over_as_with_null_check = true:suggestion -csharp_style_inlined_variable_declaration = true:suggestion +csharp_style_prefer_not_pattern = true:suggestion +csharp_style_prefer_pattern_matching = true:silent +csharp_style_prefer_extended_property_pattern = true:suggestion +csharp_style_prefer_switch_expression = true:suggestion -# Null checking preferences +# Null-checking preferences csharp_style_throw_expression = true:suggestion csharp_style_conditional_delegate_call = true:suggestion +csharp_style_prefer_null_check_over_type_check = true:suggestion -# Nullable reference types -dotnet_diagnostic.CS8600.severity = suggestion -dotnet_diagnostic.CS8602.severity = suggestion -dotnet_diagnostic.CS8603.severity = suggestion +# Modifier preferences +csharp_prefer_static_local_function = true:suggestion +csharp_preferred_modifier_order = public,private,protected,internal,file,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,required,volatile,async:suggestion + +# Code-block preferences +csharp_prefer_braces = true:silent +csharp_prefer_simple_using_statement = true:suggestion +csharp_style_namespace_declarations = block_scoped:error +csharp_style_prefer_method_group_conversion = true:silent +csharp_style_prefer_top_level_statements = false:error +csharp_style_prefer_primary_constructors = false:none -# Other features +# Expression-level preferences +csharp_prefer_simple_default_expression = true:suggestion +csharp_style_prefer_local_over_anonymous_function = true:suggestion csharp_style_prefer_index_operator = true:suggestion csharp_style_prefer_range_operator = true:suggestion +csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion +csharp_style_prefer_tuple_swap = true:suggestion +csharp_style_prefer_utf8_string_literals = false:none +csharp_style_inlined_variable_declaration = true:suggestion +csharp_style_deconstructed_variable_declaration = true:suggestion +csharp_style_unused_value_assignment_preference = discard_variable:suggestion +csharp_style_unused_value_expression_statement_preference = discard_variable:silent + +# using directive preferences +csharp_using_directive_placement = outside_namespace:suggestion + +# Other preferences csharp_style_pattern_local_over_anonymous_function = false:none -# Diagnostic suppressions -dotnet_diagnostic.IDE0071.severity = silent -dotnet_diagnostic.IDE0031.severity = silent +# New line preferences +csharp_new_line_before_open_brace = all +csharp_new_line_before_else = true +csharp_new_line_before_catch = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_between_query_expression_clauses = true -# XML documentation warnings -dotnet_diagnostic.CS1591.severity = none -dotnet_diagnostic.CS1573.severity = none -dotnet_diagnostic.CS1572.severity = none -dotnet_diagnostic.CS1571.severity = none -dotnet_diagnostic.CS1570.severity = none -dotnet_diagnostic.CS1587.severity = none -dotnet_diagnostic.CS1574.severity = none -dotnet_diagnostic.CS1580.severity = none -dotnet_diagnostic.CS1584.severity = none -dotnet_diagnostic.CS1658.severity = none +# Indentation preferences +csharp_indent_case_contents = true +csharp_indent_switch_labels = true +csharp_indent_labels = one_less_than_current +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents_when_block = false # Space preferences csharp_space_after_cast = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_between_parentheses = false +csharp_space_before_colon_in_inheritance_clause = true csharp_space_after_colon_in_inheritance_clause = true +csharp_space_around_binary_operators = before_and_after +csharp_space_between_method_declaration_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_call_parameter_list_parentheses = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false 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_around_declaration_statements = do_not_ignore -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_before_open_square_brackets = 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_space_around_declaration_statements = do_not_ignore -[*.{json,yaml,yml}] -indent_size = 2 +# Wrapping preferences +csharp_preserve_single_line_statements = true +csharp_preserve_single_line_blocks = true -[*.{csproj,xml,props,targets,resx}] -indent_size = 2 +# Whitespace options +csharp_style_allow_embedded_statements_on_same_line_experimental = false +csharp_style_allow_blank_lines_between_consecutive_braces_experimental = false +csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = false +csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = false +csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = false +dotnet_style_allow_multiple_blank_lines_experimental = false +dotnet_style_allow_statement_immediately_after_block_experimental = false -[*.{asmdef,asmref,meta}] -indent_size = 2 +# Naming: Interfaces +dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion +dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface +dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i -[*.sh] -end_of_line = lf +dotnet_naming_symbols.interface.applicable_kinds = interface +dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.interface.required_modifiers = -[*.{cmd,bat}] -end_of_line = crlf +dotnet_naming_style.begins_with_i.required_prefix = I +dotnet_naming_style.begins_with_i.required_suffix = +dotnet_naming_style.begins_with_i.word_separator = +dotnet_naming_style.begins_with_i.capitalization = pascal_case + +# Naming: Types +dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.types_should_be_pascal_case.symbols = types +dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case + +dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum +dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.types.required_modifiers = + +# Naming: Non-field members +dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members +dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case + +dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method +dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.non_field_members.required_modifiers = + +dotnet_naming_style.pascal_case.required_prefix = +dotnet_naming_style.pascal_case.required_suffix = +dotnet_naming_style.pascal_case.word_separator = +dotnet_naming_style.pascal_case.capitalization = pascal_case + +# Naming: Non-private static fields +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.symbols = non_private_static_fields +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.style = non_private_static_field_style + +dotnet_naming_symbols.non_private_static_fields.applicable_kinds = field +dotnet_naming_symbols.non_private_static_fields.applicable_accessibilities = public, protected, internal, protected_internal, private_protected +dotnet_naming_symbols.non_private_static_fields.required_modifiers = static + +dotnet_naming_style.non_private_static_field_style.capitalization = pascal_case + +# Naming: Non-private readonly fields +dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.symbols = non_private_readonly_fields +dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.style = non_private_readonly_field_style + +dotnet_naming_symbols.non_private_readonly_fields.applicable_kinds = field +dotnet_naming_symbols.non_private_readonly_fields.applicable_accessibilities = public, protected, internal, protected_internal, private_protected +dotnet_naming_symbols.non_private_readonly_fields.required_modifiers = readonly + +dotnet_naming_style.non_private_readonly_field_style.capitalization = pascal_case + +# Naming: Constants +dotnet_naming_rule.constants_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.constants_should_be_pascal_case.symbols = constants +dotnet_naming_rule.constants_should_be_pascal_case.style = pascal_case_style + +dotnet_naming_symbols.constants.applicable_kinds = field, local +dotnet_naming_symbols.constants.required_modifiers = const + +dotnet_naming_style.pascal_case_style.capitalization = pascal_case + +# Naming: Private static fields +dotnet_naming_rule.static_fields_should_be_camel_case.severity = suggestion +dotnet_naming_rule.static_fields_should_be_camel_case.symbols = static_fields +dotnet_naming_rule.static_fields_should_be_camel_case.style = static_field_style + +dotnet_naming_symbols.static_fields.applicable_kinds = field +dotnet_naming_symbols.static_fields.applicable_accessibilities = private, internal, private_protected +dotnet_naming_symbols.static_fields.required_modifiers = static + +dotnet_naming_style.static_field_style.capitalization = camel_case +dotnet_naming_style.static_field_style.required_prefix = s_ + +# Naming: Private instance fields +dotnet_naming_rule.instance_fields_should_be_camel_case.severity = suggestion +dotnet_naming_rule.instance_fields_should_be_camel_case.symbols = instance_fields +dotnet_naming_rule.instance_fields_should_be_camel_case.style = instance_field_style + +dotnet_naming_symbols.instance_fields.applicable_kinds = field +dotnet_naming_symbols.instance_fields.applicable_accessibilities = private, internal, private_protected + +dotnet_naming_style.instance_field_style.capitalization = camel_case +dotnet_naming_style.instance_field_style.required_prefix = _ + +# Naming: Locals and parameters +dotnet_naming_rule.locals_should_be_camel_case.severity = suggestion +dotnet_naming_rule.locals_should_be_camel_case.symbols = locals_and_parameters +dotnet_naming_rule.locals_should_be_camel_case.style = camel_case_style + +dotnet_naming_symbols.locals_and_parameters.applicable_kinds = parameter, local + +dotnet_naming_style.camel_case_style.capitalization = camel_case + +# Naming: Local functions +dotnet_naming_rule.local_functions_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.local_functions_should_be_pascal_case.symbols = local_functions +dotnet_naming_rule.local_functions_should_be_pascal_case.style = pascal_case_style + +dotnet_naming_symbols.local_functions.applicable_kinds = local_function + +# Primary constructors +dotnet_diagnostic.IDE0290.severity = none + +# Namespace matching +dotnet_diagnostic.IDE0130.severity = none + +# Nullable reference types +dotnet_diagnostic.CS8600.severity = warning +dotnet_diagnostic.CS8602.severity = warning +dotnet_diagnostic.CS8603.severity = warning +dotnet_diagnostic.CS8618.severity = silent +dotnet_diagnostic.CS8625.severity = warning + +# XML documentation +dotnet_diagnostic.CS1591.severity = none +dotnet_diagnostic.CS1573.severity = none +dotnet_diagnostic.CS1572.severity = none +dotnet_diagnostic.CS1571.severity = none +dotnet_diagnostic.CS1570.severity = none +dotnet_diagnostic.CS1587.severity = none +dotnet_diagnostic.CS1574.severity = none +dotnet_diagnostic.CS1580.severity = none +dotnet_diagnostic.CS1584.severity = none +dotnet_diagnostic.CS1658.severity = none + +# Code quality +dotnet_diagnostic.CA1822.severity = suggestion +dotnet_diagnostic.IDE0011.severity = warning +dotnet_diagnostic.IDE0040.severity = warning +dotnet_diagnostic.IDE0051.severity = silent +dotnet_diagnostic.IDE0052.severity = silent +dotnet_diagnostic.IDE0055.severity = warning + +# Serialization warnings +dotnet_diagnostic.CS0649.severity = silent +dotnet_diagnostic.CS0414.severity = silent + +# Suppressions +dotnet_diagnostic.IDE0071.severity = silent +dotnet_diagnostic.IDE0031.severity = silent From 8d85add2577cc8bd676488ed4f089fa1cae154f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Onur=20Tanr=C4=B1kulu?= Date: Mon, 2 Feb 2026 19:26:09 +0300 Subject: [PATCH 4/8] chore: add Unity csc.rsp files --- .../Packages/com.grovegames.behaviourtree/Editor/csc.rsp | 2 ++ .../Packages/com.grovegames.behaviourtree/Runtime/csc.rsp | 2 ++ .../Packages/com.grovegames.behaviourtree/Tests/Editor/csc.rsp | 2 ++ .../Packages/com.grovegames.behaviourtree/Tests/Runtime/csc.rsp | 2 ++ 4 files changed, 8 insertions(+) create mode 100644 src/GroveGames.BehaviourTree.Unity/Packages/com.grovegames.behaviourtree/Editor/csc.rsp create mode 100644 src/GroveGames.BehaviourTree.Unity/Packages/com.grovegames.behaviourtree/Runtime/csc.rsp create mode 100644 src/GroveGames.BehaviourTree.Unity/Packages/com.grovegames.behaviourtree/Tests/Editor/csc.rsp create mode 100644 src/GroveGames.BehaviourTree.Unity/Packages/com.grovegames.behaviourtree/Tests/Runtime/csc.rsp diff --git a/src/GroveGames.BehaviourTree.Unity/Packages/com.grovegames.behaviourtree/Editor/csc.rsp b/src/GroveGames.BehaviourTree.Unity/Packages/com.grovegames.behaviourtree/Editor/csc.rsp new file mode 100644 index 0000000..d194954 --- /dev/null +++ b/src/GroveGames.BehaviourTree.Unity/Packages/com.grovegames.behaviourtree/Editor/csc.rsp @@ -0,0 +1,2 @@ +-langversion:10 +-nullable:enable diff --git a/src/GroveGames.BehaviourTree.Unity/Packages/com.grovegames.behaviourtree/Runtime/csc.rsp b/src/GroveGames.BehaviourTree.Unity/Packages/com.grovegames.behaviourtree/Runtime/csc.rsp new file mode 100644 index 0000000..d194954 --- /dev/null +++ b/src/GroveGames.BehaviourTree.Unity/Packages/com.grovegames.behaviourtree/Runtime/csc.rsp @@ -0,0 +1,2 @@ +-langversion:10 +-nullable:enable diff --git a/src/GroveGames.BehaviourTree.Unity/Packages/com.grovegames.behaviourtree/Tests/Editor/csc.rsp b/src/GroveGames.BehaviourTree.Unity/Packages/com.grovegames.behaviourtree/Tests/Editor/csc.rsp new file mode 100644 index 0000000..d194954 --- /dev/null +++ b/src/GroveGames.BehaviourTree.Unity/Packages/com.grovegames.behaviourtree/Tests/Editor/csc.rsp @@ -0,0 +1,2 @@ +-langversion:10 +-nullable:enable diff --git a/src/GroveGames.BehaviourTree.Unity/Packages/com.grovegames.behaviourtree/Tests/Runtime/csc.rsp b/src/GroveGames.BehaviourTree.Unity/Packages/com.grovegames.behaviourtree/Tests/Runtime/csc.rsp new file mode 100644 index 0000000..d194954 --- /dev/null +++ b/src/GroveGames.BehaviourTree.Unity/Packages/com.grovegames.behaviourtree/Tests/Runtime/csc.rsp @@ -0,0 +1,2 @@ +-langversion:10 +-nullable:enable From c75e279709975e04004f5ea9e91a22021db11310 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Onur=20Tanr=C4=B1kulu?= Date: Tue, 10 Feb 2026 09:41:02 +0300 Subject: [PATCH 5/8] fix: convert Unity slnx to LF and expand gitattributes macros Co-Authored-By: Claude Sonnet 4.5 --- sandbox/UnityApplication/.gitattributes | 218 +++++++++--------- .../UnityApplication/UnityApplication.slnx | 2 +- 2 files changed, 106 insertions(+), 114 deletions(-) diff --git a/sandbox/UnityApplication/.gitattributes b/sandbox/UnityApplication/.gitattributes index 3776778..72be0eb 100644 --- a/sandbox/UnityApplication/.gitattributes +++ b/sandbox/UnityApplication/.gitattributes @@ -1,11 +1,3 @@ -# Define macros (only works in top-level gitattributes files) -[attr]lfs filter=lfs diff=lfs merge=lfs -text -[attr]unity-json eol=lf linguist-language=json -[attr]unity-yaml merge=unityyamlmerge eol=lf linguist-language=yaml - -# Optionally collapse Unity-generated files on GitHub diffs -# [attr]unity-yaml merge=unityyamlmerge text linguist-language=yaml linguist-generated - # Unity source files *.cginc text *.compute text linguist-language=hlsl @@ -15,12 +7,12 @@ *.shader text # Unity JSON files -*.asmdef unity-json -*.asmref unity-json -*.index unity-json -*.inputactions unity-json -*.shadergraph unity-json -*.shadersubgraph unity-json +*.asmdef eol=lf linguist-language=json +*.asmref eol=lf linguist-language=json +*.index eol=lf linguist-language=json +*.inputactions eol=lf linguist-language=json +*.shadergraph eol=lf linguist-language=json +*.shadersubgraph eol=lf linguist-language=json # Unity UI Toolkit files *.tss text diff=css linguist-language=css @@ -28,134 +20,134 @@ *.uxml text linguist-language=xml linguist-detectable # Unity YAML -*.anim unity-yaml -*.asset unity-yaml -*.brush unity-yaml -*.controller unity-yaml -*.flare unity-yaml -*.fontsettings unity-yaml -*.giparams unity-yaml -*.guiskin unity-yaml -*.lighting unity-yaml -*.mask unity-yaml -*.mat unity-yaml -*.meta unity-yaml -*.mixer unity-yaml -*.overrideController unity-yaml -*.playable unity-yaml -*.prefab unity-yaml -*.preset unity-yaml -*.renderTexture unity-yaml -*.scenetemplate unity-yaml -*.shadervariants unity-yaml -*.signal unity-yaml -*.spriteatlas unity-yaml -*.spriteatlasv2 unity-yaml -*.terrainlayer unity-yaml -*.unity unity-yaml +*.anim merge=unityyamlmerge eol=lf linguist-language=yaml +*.asset merge=unityyamlmerge eol=lf linguist-language=yaml +*.brush merge=unityyamlmerge eol=lf linguist-language=yaml +*.controller merge=unityyamlmerge eol=lf linguist-language=yaml +*.flare merge=unityyamlmerge eol=lf linguist-language=yaml +*.fontsettings merge=unityyamlmerge eol=lf linguist-language=yaml +*.giparams merge=unityyamlmerge eol=lf linguist-language=yaml +*.guiskin merge=unityyamlmerge eol=lf linguist-language=yaml +*.lighting merge=unityyamlmerge eol=lf linguist-language=yaml +*.mask merge=unityyamlmerge eol=lf linguist-language=yaml +*.mat merge=unityyamlmerge eol=lf linguist-language=yaml +*.meta merge=unityyamlmerge eol=lf linguist-language=yaml +*.mixer merge=unityyamlmerge eol=lf linguist-language=yaml +*.overrideController merge=unityyamlmerge eol=lf linguist-language=yaml +*.playable merge=unityyamlmerge eol=lf linguist-language=yaml +*.prefab merge=unityyamlmerge eol=lf linguist-language=yaml +*.preset merge=unityyamlmerge eol=lf linguist-language=yaml +*.renderTexture merge=unityyamlmerge eol=lf linguist-language=yaml +*.scenetemplate merge=unityyamlmerge eol=lf linguist-language=yaml +*.shadervariants merge=unityyamlmerge eol=lf linguist-language=yaml +*.signal merge=unityyamlmerge eol=lf linguist-language=yaml +*.spriteatlas merge=unityyamlmerge eol=lf linguist-language=yaml +*.spriteatlasv2 merge=unityyamlmerge eol=lf linguist-language=yaml +*.terrainlayer merge=unityyamlmerge eol=lf linguist-language=yaml +*.unity merge=unityyamlmerge eol=lf linguist-language=yaml # "physic" for 3D but "physics" for 2D -*.physicMaterial unity-yaml -*.physicsMaterial2D unity-yaml +*.physicMaterial merge=unityyamlmerge eol=lf linguist-language=yaml +*.physicsMaterial2D merge=unityyamlmerge eol=lf linguist-language=yaml # Exclude third-party plugins from GitHub stats Assets/Plugins/** linguist-vendored # Unity LFS -*.cubemap lfs -*.unitypackage lfs +*.cubemap filter=lfs diff=lfs merge=lfs -text +*.unitypackage filter=lfs diff=lfs merge=lfs -text # 3D models -*.3dm lfs -*.3ds lfs -*.blend lfs -*.c4d lfs -*.collada lfs -*.dae lfs -*.dxf lfs -*.FBX lfs -*.fbx lfs -*.jas lfs -*.lws lfs -*.lxo lfs -*.ma lfs -*.max lfs -*.mb lfs -*.obj lfs -*.ply lfs -*.skp lfs -*.stl lfs -*.ztl lfs +*.3dm filter=lfs diff=lfs merge=lfs -text +*.3ds filter=lfs diff=lfs merge=lfs -text +*.blend filter=lfs diff=lfs merge=lfs -text +*.c4d filter=lfs diff=lfs merge=lfs -text +*.collada filter=lfs diff=lfs merge=lfs -text +*.dae filter=lfs diff=lfs merge=lfs -text +*.dxf filter=lfs diff=lfs merge=lfs -text +*.FBX filter=lfs diff=lfs merge=lfs -text +*.fbx filter=lfs diff=lfs merge=lfs -text +*.jas filter=lfs diff=lfs merge=lfs -text +*.lws filter=lfs diff=lfs merge=lfs -text +*.lxo filter=lfs diff=lfs merge=lfs -text +*.ma filter=lfs diff=lfs merge=lfs -text +*.max filter=lfs diff=lfs merge=lfs -text +*.mb filter=lfs diff=lfs merge=lfs -text +*.obj filter=lfs diff=lfs merge=lfs -text +*.ply filter=lfs diff=lfs merge=lfs -text +*.skp filter=lfs diff=lfs merge=lfs -text +*.stl filter=lfs diff=lfs merge=lfs -text +*.ztl filter=lfs diff=lfs merge=lfs -text # Audio -*.aif lfs -*.aiff lfs -*.it lfs -*.mod lfs -*.mp3 lfs -*.ogg lfs -*.s3m lfs -*.wav lfs -*.xm lfs +*.aif filter=lfs diff=lfs merge=lfs -text +*.aiff filter=lfs diff=lfs merge=lfs -text +*.it filter=lfs diff=lfs merge=lfs -text +*.mod filter=lfs diff=lfs merge=lfs -text +*.mp3 filter=lfs diff=lfs merge=lfs -text +*.ogg filter=lfs diff=lfs merge=lfs -text +*.s3m filter=lfs diff=lfs merge=lfs -text +*.wav filter=lfs diff=lfs merge=lfs -text +*.xm filter=lfs diff=lfs merge=lfs -text # Video -*.asf lfs -*.avi lfs -*.flv lfs -*.mov lfs -*.mp4 lfs -*.mpeg lfs -*.mpg lfs -*.ogv lfs -*.wmv lfs +*.asf filter=lfs diff=lfs merge=lfs -text +*.avi filter=lfs diff=lfs merge=lfs -text +*.flv filter=lfs diff=lfs merge=lfs -text +*.mov filter=lfs diff=lfs merge=lfs -text +*.mp4 filter=lfs diff=lfs merge=lfs -text +*.mpeg filter=lfs diff=lfs merge=lfs -text +*.mpg filter=lfs diff=lfs merge=lfs -text +*.ogv filter=lfs diff=lfs merge=lfs -text +*.wmv filter=lfs diff=lfs merge=lfs -text # Images -*.bmp lfs -*.exr lfs -*.gif lfs -*.hdr lfs -*.iff lfs -*.jpeg lfs -*.jpg lfs -*.pict lfs -*.png lfs -*.psd lfs -*.tga lfs -*.tif lfs -*.tiff lfs -*.webp lfs +*.bmp filter=lfs diff=lfs merge=lfs -text +*.exr filter=lfs diff=lfs merge=lfs -text +*.gif filter=lfs diff=lfs merge=lfs -text +*.hdr filter=lfs diff=lfs merge=lfs -text +*.iff filter=lfs diff=lfs merge=lfs -text +*.jpeg filter=lfs diff=lfs merge=lfs -text +*.jpg filter=lfs diff=lfs merge=lfs -text +*.pict filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.psd filter=lfs diff=lfs merge=lfs -text +*.tga filter=lfs diff=lfs merge=lfs -text +*.tif filter=lfs diff=lfs merge=lfs -text +*.tiff filter=lfs diff=lfs merge=lfs -text +*.webp filter=lfs diff=lfs merge=lfs -text # Compressed Archive -*.7z lfs -*.bz2 lfs -*.gz lfs -*.rar lfs -*.tar lfs -*.zip lfs +*.7z filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.rar filter=lfs diff=lfs merge=lfs -text +*.tar filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text # Compiled Dynamic Library -*.dll lfs -*.pdb lfs -*.so lfs +*.dll filter=lfs diff=lfs merge=lfs -text +*.pdb filter=lfs diff=lfs merge=lfs -text +*.so filter=lfs diff=lfs merge=lfs -text # Fonts -*.otf lfs -*.ttf lfs +*.otf filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text # Executable/Installer -*.apk lfs -*.exe lfs +*.apk filter=lfs diff=lfs merge=lfs -text +*.exe filter=lfs diff=lfs merge=lfs -text # Documents -*.pdf lfs +*.pdf filter=lfs diff=lfs merge=lfs -text # ETC -*.a lfs -*.reason lfs -*.rns lfs +*.a filter=lfs diff=lfs merge=lfs -text +*.reason filter=lfs diff=lfs merge=lfs -text +*.rns filter=lfs diff=lfs merge=lfs -text # Spine export file for Unity -*.skel.bytes lfs +*.skel.bytes filter=lfs diff=lfs merge=lfs -text # Exceptions for .asset files such as lightning pre-baking LightingData.asset binary \ No newline at end of file diff --git a/sandbox/UnityApplication/UnityApplication.slnx b/sandbox/UnityApplication/UnityApplication.slnx index 02e48e6..4adb8c2 100644 --- a/sandbox/UnityApplication/UnityApplication.slnx +++ b/sandbox/UnityApplication/UnityApplication.slnx @@ -1,4 +1,4 @@ - + From 19d35b522553fa77808a1a352149c8f2f7c18cb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Onur=20Tanr=C4=B1kulu?= Date: Tue, 10 Feb 2026 09:43:52 +0300 Subject: [PATCH 6/8] chore: rewrite gitattributes with modern .NET standards Co-Authored-By: Claude Sonnet 4.5 --- .gitattributes | 98 ++++++++++++++++++++------------------------------ 1 file changed, 38 insertions(+), 60 deletions(-) diff --git a/.gitattributes b/.gitattributes index 3a60d1c..0d01b48 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,81 +1,59 @@ -* text=auto +* text=auto eol=lf -# Documents -*.bibtex text diff=bibtex -*.doc diff=astextplain -*.DOC diff=astextplain -*.docx diff=astextplain -*.DOCX diff=astextplain -*.dot diff=astextplain -*.DOT diff=astextplain -*.pdf diff=astextplain -*.PDF diff=astextplain -*.rtf diff=astextplain -*.RTF diff=astextplain +# .NET source files +*.cs text diff=csharp +*.csx text diff=csharp +*.cshtml text diff=html + +# .NET project files +*.sln text +*.slnx text +*.csproj text +*.props text +*.targets text + +# Configuration files +*.json text +*.xml text +*.config text +*.yml text +*.yaml text + +# Documentation *.md text diff=markdown -*.mdx text diff=markdown -*.tex text diff=tex -*.adoc text -*.textile text -*.mustache text -*.csv text eol=crlf -*.tab text -*.tsv text *.txt text -*.sql text -*.epub diff=astextplain -# Graphics +# Scripts +*.ps1 text eol=crlf +*.cmd text eol=crlf +*.bat text eol=crlf +*.sh text eol=lf + +# Images *.png binary *.jpg binary *.jpeg binary *.gif binary -*.tif binary -*.tiff binary *.ico binary *.svg text -*.eps binary - -# Scripts -*.bash text eol=lf -*.fish text eol=lf -*.sh text eol=lf -*.zsh text eol=lf -*.bat text eol=crlf -*.cmd text eol=crlf -*.ps1 text eol=crlf - -# Serialisation -*.json text -*.toml text -*.xml text -*.yaml text -*.yml text # Archives -*.7z binary -*.gz binary -*.tar binary -*.tgz binary *.zip binary +*.nupkg binary +*.snupkg binary -# Text files where line endings should be preserved -*.patch -text - -# Dotnet files -*.cs text diff=csharp -*.cshtml text diff=html -*.csx text diff=csharp -*.sln text eol=crlf -*.csproj text eol=crlf +# Executables +*.dll binary +*.exe binary +*.pdb binary +*.so binary -# Apply override to all files in the directory +# Apply markdown detection *.md linguist-detectable -# Fix syntax highlighting on GitHub to allow comments +# VS Code JSON with comments .vscode/*.json linguist-language=JSON-with-Comments -# Exclude files from exporting +# Exclude from exports .gitattributes export-ignore .gitignore export-ignore -.gitkeep export-ignore \ No newline at end of file From ccfcf9382cbaf8f6057c5851e92b278d3ac3a6ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Onur=20Tanr=C4=B1kulu?= Date: Tue, 10 Feb 2026 10:09:28 +0300 Subject: [PATCH 7/8] chore: sync test project with PackageTemplate standards Co-Authored-By: Claude Sonnet 4.5 --- .../GroveGames.BehaviourTree.Tests.csproj | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/GroveGames.BehaviourTree.Tests/GroveGames.BehaviourTree.Tests.csproj b/tests/GroveGames.BehaviourTree.Tests/GroveGames.BehaviourTree.Tests.csproj index dd53524..cb4d388 100644 --- a/tests/GroveGames.BehaviourTree.Tests/GroveGames.BehaviourTree.Tests.csproj +++ b/tests/GroveGames.BehaviourTree.Tests/GroveGames.BehaviourTree.Tests.csproj @@ -1,12 +1,18 @@ - net10.0 + net10.0;net9.0;net8.0 enable false true + true + $(RootNamespace).Tests + + + + From 7e01c3564a67d766a0ec1a11b1ce5f567a6a95f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Onur=20Tanr=C4=B1kulu?= Date: Tue, 10 Feb 2026 10:21:19 +0300 Subject: [PATCH 8/8] chore: fix formatting issues Co-Authored-By: Claude Sonnet 4.5 --- src/GroveGames.BehaviourTree/AssemblyInfo.cs | 4 ++-- src/GroveGames.BehaviourTree/BehaviourTree.cs | 2 +- src/GroveGames.BehaviourTree/ChildTree.cs | 2 +- .../Collections/Blackboard.cs | 2 +- .../Collections/IBlackboard.cs | 10 +++++----- src/GroveGames.BehaviourTree/IChildTree.cs | 4 ++-- src/GroveGames.BehaviourTree/ITree.cs | 14 +++++++------- .../Nodes/BehaviourNode.cs | 2 +- .../Nodes/BehaviourRoot.cs | 2 +- .../Nodes/ChildAlreadyAttachedException.cs | 4 ++-- .../Nodes/Composites/Composite.cs | 2 +- .../Nodes/Composites/Parallel.cs | 4 ++-- .../Nodes/Composites/ParallelPolicy.cs | 2 +- .../Nodes/Composites/Selector.cs | 2 +- .../Nodes/Composites/Sequence.cs | 2 +- .../Nodes/Decorators/Abort.cs | 2 +- .../Nodes/Decorators/Conditional.cs | 2 +- .../Nodes/Decorators/Cooldown.cs | 2 +- .../Nodes/Decorators/Decorator.cs | 2 +- .../Nodes/Decorators/Delayer.cs | 2 +- .../Nodes/Decorators/Failer.cs | 2 +- .../Nodes/Decorators/Inverter.cs | 2 +- .../Nodes/Decorators/RepeatMode.cs | 2 +- .../Nodes/Decorators/Repeater.cs | 2 +- .../Nodes/Decorators/Reset.cs | 2 +- .../Nodes/Decorators/Succeeder.cs | 2 +- .../Nodes/Decorators/SuccessOnce.cs | 2 +- .../Nodes/EmptyBehaviourNode.cs | 2 +- src/GroveGames.BehaviourTree/Nodes/INode.cs | 18 +++++++++--------- src/GroveGames.BehaviourTree/Nodes/IParent.cs | 8 ++++---- src/GroveGames.BehaviourTree/Nodes/IRoot.cs | 2 +- .../Nodes/NodeState.cs | 2 +- .../CallerArgumentExpressionAttribute.cs | 2 +- .../Polyfills/System.Threading/Lock.cs | 2 +- .../System/ArgumentExceptionExtensions.cs | 2 +- .../System/ArgumentNullExceptionExtensions.cs | 2 +- .../ArgumentOutOfRangeExceptionExtensions.cs | 2 +- .../ObjectDisposedExceptionExtensions.cs | 2 +- .../Collections/BlackboardTests.cs | 2 +- .../GlobalUsings.cs | 2 +- .../Nodes/Composites/CompositeTests.cs | 2 +- .../Nodes/Composites/ParallelTests.cs | 2 +- .../Nodes/Composites/SelectorTests.cs | 2 +- .../Nodes/Composites/SequenceTests.cs | 2 +- .../Nodes/Decorators/AbortTests.cs | 2 +- .../Nodes/Decorators/ConditionalTests.cs | 2 +- .../Nodes/Decorators/CooldownTests.cs | 2 +- .../Nodes/Decorators/DecoratorTests.cs | 2 +- .../Nodes/Decorators/DelayerTests.cs | 2 +- .../Nodes/Decorators/FailerTests.cs | 2 +- .../Nodes/Decorators/InverterTests.cs | 2 +- .../Nodes/Decorators/RepeaterTests.cs | 2 +- .../Nodes/Decorators/ResetTests.cs | 2 +- .../Nodes/Decorators/SucceederTests.cs | 2 +- .../Nodes/Decorators/SuccessOnceTests.cs | 2 +- .../Nodes/EmptyNodeTests.cs | 2 +- .../Nodes/NodeTests.cs | 2 +- .../Nodes/RootTests.cs | 2 +- .../TreeTests.cs | 2 +- 59 files changed, 84 insertions(+), 84 deletions(-) diff --git a/src/GroveGames.BehaviourTree/AssemblyInfo.cs b/src/GroveGames.BehaviourTree/AssemblyInfo.cs index c7670c0..39f1dd7 100644 --- a/src/GroveGames.BehaviourTree/AssemblyInfo.cs +++ b/src/GroveGames.BehaviourTree/AssemblyInfo.cs @@ -1,6 +1,6 @@ -using System.Runtime.CompilerServices; +using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("GroveGames.BehaviourTree.Tests")] [assembly: InternalsVisibleTo("GroveGames.BehaviourTree.Unity")] [assembly: InternalsVisibleTo("GroveGames.BehaviourTree.Godot")] -[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] \ No newline at end of file +[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] diff --git a/src/GroveGames.BehaviourTree/BehaviourTree.cs b/src/GroveGames.BehaviourTree/BehaviourTree.cs index 60b288d..498d218 100644 --- a/src/GroveGames.BehaviourTree/BehaviourTree.cs +++ b/src/GroveGames.BehaviourTree/BehaviourTree.cs @@ -1,4 +1,4 @@ -using GroveGames.BehaviourTree.Nodes; +using GroveGames.BehaviourTree.Nodes; namespace GroveGames.BehaviourTree; diff --git a/src/GroveGames.BehaviourTree/ChildTree.cs b/src/GroveGames.BehaviourTree/ChildTree.cs index c3a08b4..9c8793a 100644 --- a/src/GroveGames.BehaviourTree/ChildTree.cs +++ b/src/GroveGames.BehaviourTree/ChildTree.cs @@ -1,4 +1,4 @@ -using GroveGames.BehaviourTree.Nodes; +using GroveGames.BehaviourTree.Nodes; namespace GroveGames.BehaviourTree; diff --git a/src/GroveGames.BehaviourTree/Collections/Blackboard.cs b/src/GroveGames.BehaviourTree/Collections/Blackboard.cs index de6f1c7..814cbd4 100644 --- a/src/GroveGames.BehaviourTree/Collections/Blackboard.cs +++ b/src/GroveGames.BehaviourTree/Collections/Blackboard.cs @@ -1,4 +1,4 @@ -namespace GroveGames.BehaviourTree.Collections; +namespace GroveGames.BehaviourTree.Collections; public class Blackboard : IBlackboard { diff --git a/src/GroveGames.BehaviourTree/Collections/IBlackboard.cs b/src/GroveGames.BehaviourTree/Collections/IBlackboard.cs index 3c8786c..a8ab4aa 100644 --- a/src/GroveGames.BehaviourTree/Collections/IBlackboard.cs +++ b/src/GroveGames.BehaviourTree/Collections/IBlackboard.cs @@ -1,9 +1,9 @@ -namespace GroveGames.BehaviourTree.Collections; +namespace GroveGames.BehaviourTree.Collections; public interface IBlackboard { - void SetValue(string key, T obj) where T : notnull; - T? GetValue(string key); - void DeleteValue(string key); - void Clear(); + public void SetValue(string key, T obj) where T : notnull; + public T? GetValue(string key); + public void DeleteValue(string key); + public void Clear(); } diff --git a/src/GroveGames.BehaviourTree/IChildTree.cs b/src/GroveGames.BehaviourTree/IChildTree.cs index 272139c..11f591d 100644 --- a/src/GroveGames.BehaviourTree/IChildTree.cs +++ b/src/GroveGames.BehaviourTree/IChildTree.cs @@ -1,8 +1,8 @@ -using GroveGames.BehaviourTree.Nodes; +using GroveGames.BehaviourTree.Nodes; namespace GroveGames.BehaviourTree; public interface IChildTree { - void SetupTree(IParent parent); + public void SetupTree(IParent parent); } diff --git a/src/GroveGames.BehaviourTree/ITree.cs b/src/GroveGames.BehaviourTree/ITree.cs index 4fcd762..848ed6d 100644 --- a/src/GroveGames.BehaviourTree/ITree.cs +++ b/src/GroveGames.BehaviourTree/ITree.cs @@ -1,11 +1,11 @@ -namespace GroveGames.BehaviourTree; +namespace GroveGames.BehaviourTree; public interface ITree { - void SetupTree(); - void Reset(); - void Abort(); - void Enable(); - void Disable(); - void Tick(float deltaTime); + public void SetupTree(); + public void Reset(); + public void Abort(); + public void Enable(); + public void Disable(); + public void Tick(float deltaTime); } diff --git a/src/GroveGames.BehaviourTree/Nodes/BehaviourNode.cs b/src/GroveGames.BehaviourTree/Nodes/BehaviourNode.cs index 5adc84d..c842bcd 100644 --- a/src/GroveGames.BehaviourTree/Nodes/BehaviourNode.cs +++ b/src/GroveGames.BehaviourTree/Nodes/BehaviourNode.cs @@ -1,4 +1,4 @@ -using GroveGames.BehaviourTree.Collections; +using GroveGames.BehaviourTree.Collections; namespace GroveGames.BehaviourTree.Nodes; diff --git a/src/GroveGames.BehaviourTree/Nodes/BehaviourRoot.cs b/src/GroveGames.BehaviourTree/Nodes/BehaviourRoot.cs index 5b743d5..9effb90 100644 --- a/src/GroveGames.BehaviourTree/Nodes/BehaviourRoot.cs +++ b/src/GroveGames.BehaviourTree/Nodes/BehaviourRoot.cs @@ -1,4 +1,4 @@ -using GroveGames.BehaviourTree.Collections; +using GroveGames.BehaviourTree.Collections; namespace GroveGames.BehaviourTree.Nodes; diff --git a/src/GroveGames.BehaviourTree/Nodes/ChildAlreadyAttachedException.cs b/src/GroveGames.BehaviourTree/Nodes/ChildAlreadyAttachedException.cs index 88bfa10..981af54 100644 --- a/src/GroveGames.BehaviourTree/Nodes/ChildAlreadyAttachedException.cs +++ b/src/GroveGames.BehaviourTree/Nodes/ChildAlreadyAttachedException.cs @@ -1,4 +1,4 @@ -namespace GroveGames.BehaviourTree.Nodes +namespace GroveGames.BehaviourTree.Nodes { public class ChildAlreadyAttachedException : InvalidOperationException { @@ -11,4 +11,4 @@ public ChildAlreadyAttachedException(string message) public ChildAlreadyAttachedException(string message, Exception innerException) : base(message, innerException) { } } -} \ No newline at end of file +} diff --git a/src/GroveGames.BehaviourTree/Nodes/Composites/Composite.cs b/src/GroveGames.BehaviourTree/Nodes/Composites/Composite.cs index 3bcae8d..c4bfe62 100644 --- a/src/GroveGames.BehaviourTree/Nodes/Composites/Composite.cs +++ b/src/GroveGames.BehaviourTree/Nodes/Composites/Composite.cs @@ -1,4 +1,4 @@ -namespace GroveGames.BehaviourTree.Nodes.Composites; +namespace GroveGames.BehaviourTree.Nodes.Composites; public abstract class Composite : BehaviourNode, IParent { diff --git a/src/GroveGames.BehaviourTree/Nodes/Composites/Parallel.cs b/src/GroveGames.BehaviourTree/Nodes/Composites/Parallel.cs index d466a15..febf88d 100644 --- a/src/GroveGames.BehaviourTree/Nodes/Composites/Parallel.cs +++ b/src/GroveGames.BehaviourTree/Nodes/Composites/Parallel.cs @@ -1,4 +1,4 @@ -namespace GroveGames.BehaviourTree.Nodes.Composites; +namespace GroveGames.BehaviourTree.Nodes.Composites; public sealed class Parallel : Composite { @@ -61,4 +61,4 @@ public static IParent Parallel(this IParent parent, ParallelPolicy policy) parent.Attach(parallel); return parallel; } -} \ No newline at end of file +} diff --git a/src/GroveGames.BehaviourTree/Nodes/Composites/ParallelPolicy.cs b/src/GroveGames.BehaviourTree/Nodes/Composites/ParallelPolicy.cs index 21bc794..9a1d816 100644 --- a/src/GroveGames.BehaviourTree/Nodes/Composites/ParallelPolicy.cs +++ b/src/GroveGames.BehaviourTree/Nodes/Composites/ParallelPolicy.cs @@ -1,4 +1,4 @@ -namespace GroveGames.BehaviourTree.Nodes.Composites; +namespace GroveGames.BehaviourTree.Nodes.Composites; public enum ParallelPolicy { diff --git a/src/GroveGames.BehaviourTree/Nodes/Composites/Selector.cs b/src/GroveGames.BehaviourTree/Nodes/Composites/Selector.cs index ede35a9..1989f25 100644 --- a/src/GroveGames.BehaviourTree/Nodes/Composites/Selector.cs +++ b/src/GroveGames.BehaviourTree/Nodes/Composites/Selector.cs @@ -1,4 +1,4 @@ -namespace GroveGames.BehaviourTree.Nodes.Composites; +namespace GroveGames.BehaviourTree.Nodes.Composites; public sealed class Selector : Composite { diff --git a/src/GroveGames.BehaviourTree/Nodes/Composites/Sequence.cs b/src/GroveGames.BehaviourTree/Nodes/Composites/Sequence.cs index 557d2ba..dcfe835 100644 --- a/src/GroveGames.BehaviourTree/Nodes/Composites/Sequence.cs +++ b/src/GroveGames.BehaviourTree/Nodes/Composites/Sequence.cs @@ -1,4 +1,4 @@ -namespace GroveGames.BehaviourTree.Nodes.Composites; +namespace GroveGames.BehaviourTree.Nodes.Composites; public sealed class Sequence : Composite { diff --git a/src/GroveGames.BehaviourTree/Nodes/Decorators/Abort.cs b/src/GroveGames.BehaviourTree/Nodes/Decorators/Abort.cs index f2f3dda..76ba8eb 100644 --- a/src/GroveGames.BehaviourTree/Nodes/Decorators/Abort.cs +++ b/src/GroveGames.BehaviourTree/Nodes/Decorators/Abort.cs @@ -1,4 +1,4 @@ -namespace GroveGames.BehaviourTree.Nodes.Decorators; +namespace GroveGames.BehaviourTree.Nodes.Decorators; public class Abort : Decorator { diff --git a/src/GroveGames.BehaviourTree/Nodes/Decorators/Conditional.cs b/src/GroveGames.BehaviourTree/Nodes/Decorators/Conditional.cs index 310487c..1d78f7f 100644 --- a/src/GroveGames.BehaviourTree/Nodes/Decorators/Conditional.cs +++ b/src/GroveGames.BehaviourTree/Nodes/Decorators/Conditional.cs @@ -1,4 +1,4 @@ -namespace GroveGames.BehaviourTree.Nodes.Decorators; +namespace GroveGames.BehaviourTree.Nodes.Decorators; public sealed class Conditional : Decorator { diff --git a/src/GroveGames.BehaviourTree/Nodes/Decorators/Cooldown.cs b/src/GroveGames.BehaviourTree/Nodes/Decorators/Cooldown.cs index 56a5155..f9e8de7 100644 --- a/src/GroveGames.BehaviourTree/Nodes/Decorators/Cooldown.cs +++ b/src/GroveGames.BehaviourTree/Nodes/Decorators/Cooldown.cs @@ -1,4 +1,4 @@ -namespace GroveGames.BehaviourTree.Nodes.Decorators; +namespace GroveGames.BehaviourTree.Nodes.Decorators; public sealed class Cooldown : Decorator { diff --git a/src/GroveGames.BehaviourTree/Nodes/Decorators/Decorator.cs b/src/GroveGames.BehaviourTree/Nodes/Decorators/Decorator.cs index 329eb2e..7d8a127 100644 --- a/src/GroveGames.BehaviourTree/Nodes/Decorators/Decorator.cs +++ b/src/GroveGames.BehaviourTree/Nodes/Decorators/Decorator.cs @@ -1,4 +1,4 @@ -namespace GroveGames.BehaviourTree.Nodes.Decorators; +namespace GroveGames.BehaviourTree.Nodes.Decorators; public abstract class Decorator : BehaviourNode, IParent { diff --git a/src/GroveGames.BehaviourTree/Nodes/Decorators/Delayer.cs b/src/GroveGames.BehaviourTree/Nodes/Decorators/Delayer.cs index b6c338b..8bfbf47 100644 --- a/src/GroveGames.BehaviourTree/Nodes/Decorators/Delayer.cs +++ b/src/GroveGames.BehaviourTree/Nodes/Decorators/Delayer.cs @@ -1,4 +1,4 @@ -namespace GroveGames.BehaviourTree.Nodes.Decorators; +namespace GroveGames.BehaviourTree.Nodes.Decorators; public sealed class Delayer : Decorator { diff --git a/src/GroveGames.BehaviourTree/Nodes/Decorators/Failer.cs b/src/GroveGames.BehaviourTree/Nodes/Decorators/Failer.cs index e2cf8bd..72032d8 100644 --- a/src/GroveGames.BehaviourTree/Nodes/Decorators/Failer.cs +++ b/src/GroveGames.BehaviourTree/Nodes/Decorators/Failer.cs @@ -1,4 +1,4 @@ -namespace GroveGames.BehaviourTree.Nodes.Decorators; +namespace GroveGames.BehaviourTree.Nodes.Decorators; public sealed class Failer : Decorator { diff --git a/src/GroveGames.BehaviourTree/Nodes/Decorators/Inverter.cs b/src/GroveGames.BehaviourTree/Nodes/Decorators/Inverter.cs index 1c68193..919b91d 100644 --- a/src/GroveGames.BehaviourTree/Nodes/Decorators/Inverter.cs +++ b/src/GroveGames.BehaviourTree/Nodes/Decorators/Inverter.cs @@ -1,4 +1,4 @@ -namespace GroveGames.BehaviourTree.Nodes.Decorators; +namespace GroveGames.BehaviourTree.Nodes.Decorators; public sealed class Inverter : Decorator { diff --git a/src/GroveGames.BehaviourTree/Nodes/Decorators/RepeatMode.cs b/src/GroveGames.BehaviourTree/Nodes/Decorators/RepeatMode.cs index 26b19d5..bd5794d 100644 --- a/src/GroveGames.BehaviourTree/Nodes/Decorators/RepeatMode.cs +++ b/src/GroveGames.BehaviourTree/Nodes/Decorators/RepeatMode.cs @@ -1,4 +1,4 @@ -namespace GroveGames.BehaviourTree.Nodes.Decorators; +namespace GroveGames.BehaviourTree.Nodes.Decorators; public enum RepeatMode { diff --git a/src/GroveGames.BehaviourTree/Nodes/Decorators/Repeater.cs b/src/GroveGames.BehaviourTree/Nodes/Decorators/Repeater.cs index c223aab..c148f53 100644 --- a/src/GroveGames.BehaviourTree/Nodes/Decorators/Repeater.cs +++ b/src/GroveGames.BehaviourTree/Nodes/Decorators/Repeater.cs @@ -1,4 +1,4 @@ -namespace GroveGames.BehaviourTree.Nodes.Decorators; +namespace GroveGames.BehaviourTree.Nodes.Decorators; public sealed class Repeater : Decorator { diff --git a/src/GroveGames.BehaviourTree/Nodes/Decorators/Reset.cs b/src/GroveGames.BehaviourTree/Nodes/Decorators/Reset.cs index 819a39f..a811f6e 100644 --- a/src/GroveGames.BehaviourTree/Nodes/Decorators/Reset.cs +++ b/src/GroveGames.BehaviourTree/Nodes/Decorators/Reset.cs @@ -1,4 +1,4 @@ -namespace GroveGames.BehaviourTree.Nodes.Decorators; +namespace GroveGames.BehaviourTree.Nodes.Decorators; public class Reset : Decorator { diff --git a/src/GroveGames.BehaviourTree/Nodes/Decorators/Succeeder.cs b/src/GroveGames.BehaviourTree/Nodes/Decorators/Succeeder.cs index 57bc1d4..ff38d3a 100644 --- a/src/GroveGames.BehaviourTree/Nodes/Decorators/Succeeder.cs +++ b/src/GroveGames.BehaviourTree/Nodes/Decorators/Succeeder.cs @@ -1,4 +1,4 @@ -namespace GroveGames.BehaviourTree.Nodes.Decorators; +namespace GroveGames.BehaviourTree.Nodes.Decorators; public sealed class Succeeder : Decorator { diff --git a/src/GroveGames.BehaviourTree/Nodes/Decorators/SuccessOnce.cs b/src/GroveGames.BehaviourTree/Nodes/Decorators/SuccessOnce.cs index a1407a3..392c9ae 100644 --- a/src/GroveGames.BehaviourTree/Nodes/Decorators/SuccessOnce.cs +++ b/src/GroveGames.BehaviourTree/Nodes/Decorators/SuccessOnce.cs @@ -1,4 +1,4 @@ -namespace GroveGames.BehaviourTree.Nodes.Decorators; +namespace GroveGames.BehaviourTree.Nodes.Decorators; public class SuccessOnce : Decorator { diff --git a/src/GroveGames.BehaviourTree/Nodes/EmptyBehaviourNode.cs b/src/GroveGames.BehaviourTree/Nodes/EmptyBehaviourNode.cs index a6497d7..8995c87 100644 --- a/src/GroveGames.BehaviourTree/Nodes/EmptyBehaviourNode.cs +++ b/src/GroveGames.BehaviourTree/Nodes/EmptyBehaviourNode.cs @@ -1,4 +1,4 @@ -namespace GroveGames.BehaviourTree.Nodes; +namespace GroveGames.BehaviourTree.Nodes; public sealed class EmptyBehaviourNode : INode { diff --git a/src/GroveGames.BehaviourTree/Nodes/INode.cs b/src/GroveGames.BehaviourTree/Nodes/INode.cs index fd63963..6f5c28f 100644 --- a/src/GroveGames.BehaviourTree/Nodes/INode.cs +++ b/src/GroveGames.BehaviourTree/Nodes/INode.cs @@ -1,12 +1,12 @@ -namespace GroveGames.BehaviourTree.Nodes; +namespace GroveGames.BehaviourTree.Nodes; public interface INode { - NodeState Evaluate(float deltaTime); - void Reset(); - void Abort(); - void StartEvaluate(); - void EndEvaluate(); - void SetParent(IParent parent); - NodeState State { get; } -} \ No newline at end of file + public NodeState Evaluate(float deltaTime); + public void Reset(); + public void Abort(); + public void StartEvaluate(); + public void EndEvaluate(); + public void SetParent(IParent parent); + public NodeState State { get; } +} diff --git a/src/GroveGames.BehaviourTree/Nodes/IParent.cs b/src/GroveGames.BehaviourTree/Nodes/IParent.cs index 4798bc7..174f2e5 100644 --- a/src/GroveGames.BehaviourTree/Nodes/IParent.cs +++ b/src/GroveGames.BehaviourTree/Nodes/IParent.cs @@ -1,10 +1,10 @@ -using GroveGames.BehaviourTree.Collections; +using GroveGames.BehaviourTree.Collections; namespace GroveGames.BehaviourTree.Nodes; public interface IParent { - IParent Attach(INode node); - IParent Attach(IChildTree tree); - IBlackboard Blackboard { get; } + public IParent Attach(INode node); + public IParent Attach(IChildTree tree); + public IBlackboard Blackboard { get; } } diff --git a/src/GroveGames.BehaviourTree/Nodes/IRoot.cs b/src/GroveGames.BehaviourTree/Nodes/IRoot.cs index 5aeba5d..997144c 100644 --- a/src/GroveGames.BehaviourTree/Nodes/IRoot.cs +++ b/src/GroveGames.BehaviourTree/Nodes/IRoot.cs @@ -1,4 +1,4 @@ -namespace GroveGames.BehaviourTree.Nodes; +namespace GroveGames.BehaviourTree.Nodes; public interface IRoot : INode, IParent { diff --git a/src/GroveGames.BehaviourTree/Nodes/NodeState.cs b/src/GroveGames.BehaviourTree/Nodes/NodeState.cs index 63db371..0c8183a 100644 --- a/src/GroveGames.BehaviourTree/Nodes/NodeState.cs +++ b/src/GroveGames.BehaviourTree/Nodes/NodeState.cs @@ -1,4 +1,4 @@ -namespace GroveGames.BehaviourTree.Nodes; +namespace GroveGames.BehaviourTree.Nodes; public enum NodeState { diff --git a/src/GroveGames.BehaviourTree/Polyfills/System.Runtime.CompilerServices/CallerArgumentExpressionAttribute.cs b/src/GroveGames.BehaviourTree/Polyfills/System.Runtime.CompilerServices/CallerArgumentExpressionAttribute.cs index 31147ca..cdedcad 100644 --- a/src/GroveGames.BehaviourTree/Polyfills/System.Runtime.CompilerServices/CallerArgumentExpressionAttribute.cs +++ b/src/GroveGames.BehaviourTree/Polyfills/System.Runtime.CompilerServices/CallerArgumentExpressionAttribute.cs @@ -1,4 +1,4 @@ -#if !NET5_0_OR_GREATER +#if !NET5_0_OR_GREATER namespace System.Runtime.CompilerServices; diff --git a/src/GroveGames.BehaviourTree/Polyfills/System.Threading/Lock.cs b/src/GroveGames.BehaviourTree/Polyfills/System.Threading/Lock.cs index 0f7be9e..eb8c6e0 100644 --- a/src/GroveGames.BehaviourTree/Polyfills/System.Threading/Lock.cs +++ b/src/GroveGames.BehaviourTree/Polyfills/System.Threading/Lock.cs @@ -1,4 +1,4 @@ -#if !NET9_0_OR_GREATER +#if !NET9_0_OR_GREATER namespace System.Threading; diff --git a/src/GroveGames.BehaviourTree/Polyfills/System/ArgumentExceptionExtensions.cs b/src/GroveGames.BehaviourTree/Polyfills/System/ArgumentExceptionExtensions.cs index cbcc66b..24db63a 100644 --- a/src/GroveGames.BehaviourTree/Polyfills/System/ArgumentExceptionExtensions.cs +++ b/src/GroveGames.BehaviourTree/Polyfills/System/ArgumentExceptionExtensions.cs @@ -1,4 +1,4 @@ -#if !NET7_0_OR_GREATER +#if !NET7_0_OR_GREATER using System.Diagnostics.CodeAnalysis; using System.Runtime.CompilerServices; diff --git a/src/GroveGames.BehaviourTree/Polyfills/System/ArgumentNullExceptionExtensions.cs b/src/GroveGames.BehaviourTree/Polyfills/System/ArgumentNullExceptionExtensions.cs index e67ba0b..eefae2f 100644 --- a/src/GroveGames.BehaviourTree/Polyfills/System/ArgumentNullExceptionExtensions.cs +++ b/src/GroveGames.BehaviourTree/Polyfills/System/ArgumentNullExceptionExtensions.cs @@ -1,4 +1,4 @@ -#if !NET6_0_OR_GREATER +#if !NET6_0_OR_GREATER using System.Diagnostics.CodeAnalysis; using System.Runtime.CompilerServices; diff --git a/src/GroveGames.BehaviourTree/Polyfills/System/ArgumentOutOfRangeExceptionExtensions.cs b/src/GroveGames.BehaviourTree/Polyfills/System/ArgumentOutOfRangeExceptionExtensions.cs index a4eba3a..d29c1b0 100644 --- a/src/GroveGames.BehaviourTree/Polyfills/System/ArgumentOutOfRangeExceptionExtensions.cs +++ b/src/GroveGames.BehaviourTree/Polyfills/System/ArgumentOutOfRangeExceptionExtensions.cs @@ -1,4 +1,4 @@ -#if !NET8_0_OR_GREATER +#if !NET8_0_OR_GREATER using System.Runtime.CompilerServices; diff --git a/src/GroveGames.BehaviourTree/Polyfills/System/ObjectDisposedExceptionExtensions.cs b/src/GroveGames.BehaviourTree/Polyfills/System/ObjectDisposedExceptionExtensions.cs index 48312cd..df8a33e 100644 --- a/src/GroveGames.BehaviourTree/Polyfills/System/ObjectDisposedExceptionExtensions.cs +++ b/src/GroveGames.BehaviourTree/Polyfills/System/ObjectDisposedExceptionExtensions.cs @@ -1,4 +1,4 @@ -#if !NET8_0_OR_GREATER +#if !NET8_0_OR_GREATER namespace System; diff --git a/tests/GroveGames.BehaviourTree.Tests/Collections/BlackboardTests.cs b/tests/GroveGames.BehaviourTree.Tests/Collections/BlackboardTests.cs index 77dcb96..53ab882 100644 --- a/tests/GroveGames.BehaviourTree.Tests/Collections/BlackboardTests.cs +++ b/tests/GroveGames.BehaviourTree.Tests/Collections/BlackboardTests.cs @@ -1,4 +1,4 @@ -using GroveGames.BehaviourTree.Collections; +using GroveGames.BehaviourTree.Collections; namespace GroveGames.BehaviourTree.Tests.Collections; diff --git a/tests/GroveGames.BehaviourTree.Tests/GlobalUsings.cs b/tests/GroveGames.BehaviourTree.Tests/GlobalUsings.cs index c802f44..9df1d42 100644 --- a/tests/GroveGames.BehaviourTree.Tests/GlobalUsings.cs +++ b/tests/GroveGames.BehaviourTree.Tests/GlobalUsings.cs @@ -1 +1 @@ -global using Xunit; +global using Xunit; diff --git a/tests/GroveGames.BehaviourTree.Tests/Nodes/Composites/CompositeTests.cs b/tests/GroveGames.BehaviourTree.Tests/Nodes/Composites/CompositeTests.cs index 0f93df2..7615ecf 100644 --- a/tests/GroveGames.BehaviourTree.Tests/Nodes/Composites/CompositeTests.cs +++ b/tests/GroveGames.BehaviourTree.Tests/Nodes/Composites/CompositeTests.cs @@ -1,4 +1,4 @@ -using System.Reflection; +using System.Reflection; using GroveGames.BehaviourTree.Collections; using GroveGames.BehaviourTree.Nodes; diff --git a/tests/GroveGames.BehaviourTree.Tests/Nodes/Composites/ParallelTests.cs b/tests/GroveGames.BehaviourTree.Tests/Nodes/Composites/ParallelTests.cs index 934d99c..f435a67 100644 --- a/tests/GroveGames.BehaviourTree.Tests/Nodes/Composites/ParallelTests.cs +++ b/tests/GroveGames.BehaviourTree.Tests/Nodes/Composites/ParallelTests.cs @@ -1,4 +1,4 @@ -using GroveGames.BehaviourTree.Collections; +using GroveGames.BehaviourTree.Collections; using GroveGames.BehaviourTree.Nodes; using GroveGames.BehaviourTree.Nodes.Composites; diff --git a/tests/GroveGames.BehaviourTree.Tests/Nodes/Composites/SelectorTests.cs b/tests/GroveGames.BehaviourTree.Tests/Nodes/Composites/SelectorTests.cs index 8268e4e..77d29eb 100644 --- a/tests/GroveGames.BehaviourTree.Tests/Nodes/Composites/SelectorTests.cs +++ b/tests/GroveGames.BehaviourTree.Tests/Nodes/Composites/SelectorTests.cs @@ -1,4 +1,4 @@ -using System.Reflection; +using System.Reflection; using GroveGames.BehaviourTree.Collections; using GroveGames.BehaviourTree.Nodes; diff --git a/tests/GroveGames.BehaviourTree.Tests/Nodes/Composites/SequenceTests.cs b/tests/GroveGames.BehaviourTree.Tests/Nodes/Composites/SequenceTests.cs index 30ebcc4..bfd99df 100644 --- a/tests/GroveGames.BehaviourTree.Tests/Nodes/Composites/SequenceTests.cs +++ b/tests/GroveGames.BehaviourTree.Tests/Nodes/Composites/SequenceTests.cs @@ -1,4 +1,4 @@ -using GroveGames.BehaviourTree.Collections; +using GroveGames.BehaviourTree.Collections; using GroveGames.BehaviourTree.Nodes; using GroveGames.BehaviourTree.Nodes.Composites; diff --git a/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/AbortTests.cs b/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/AbortTests.cs index 74bc017..86c3c94 100644 --- a/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/AbortTests.cs +++ b/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/AbortTests.cs @@ -1,4 +1,4 @@ -using GroveGames.BehaviourTree.Collections; +using GroveGames.BehaviourTree.Collections; using GroveGames.BehaviourTree.Nodes; using GroveGames.BehaviourTree.Nodes.Decorators; diff --git a/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/ConditionalTests.cs b/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/ConditionalTests.cs index aa24782..764021b 100644 --- a/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/ConditionalTests.cs +++ b/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/ConditionalTests.cs @@ -1,4 +1,4 @@ -using GroveGames.BehaviourTree.Collections; +using GroveGames.BehaviourTree.Collections; using GroveGames.BehaviourTree.Nodes; using GroveGames.BehaviourTree.Nodes.Decorators; diff --git a/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/CooldownTests.cs b/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/CooldownTests.cs index 9895eb4..7aacd05 100644 --- a/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/CooldownTests.cs +++ b/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/CooldownTests.cs @@ -1,4 +1,4 @@ -using GroveGames.BehaviourTree.Collections; +using GroveGames.BehaviourTree.Collections; using GroveGames.BehaviourTree.Nodes; using GroveGames.BehaviourTree.Nodes.Decorators; diff --git a/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/DecoratorTests.cs b/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/DecoratorTests.cs index e43a667..7677f1c 100644 --- a/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/DecoratorTests.cs +++ b/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/DecoratorTests.cs @@ -1,4 +1,4 @@ -using GroveGames.BehaviourTree.Collections; +using GroveGames.BehaviourTree.Collections; using GroveGames.BehaviourTree.Nodes; using GroveGames.BehaviourTree.Nodes.Decorators; diff --git a/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/DelayerTests.cs b/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/DelayerTests.cs index 2bff2dd..19920ae 100644 --- a/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/DelayerTests.cs +++ b/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/DelayerTests.cs @@ -1,4 +1,4 @@ -using GroveGames.BehaviourTree.Collections; +using GroveGames.BehaviourTree.Collections; using GroveGames.BehaviourTree.Nodes; using GroveGames.BehaviourTree.Nodes.Decorators; diff --git a/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/FailerTests.cs b/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/FailerTests.cs index 9fc4057..45c9570 100644 --- a/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/FailerTests.cs +++ b/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/FailerTests.cs @@ -1,4 +1,4 @@ -using GroveGames.BehaviourTree.Collections; +using GroveGames.BehaviourTree.Collections; using GroveGames.BehaviourTree.Nodes; using GroveGames.BehaviourTree.Nodes.Decorators; diff --git a/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/InverterTests.cs b/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/InverterTests.cs index 081c306..6e2006e 100644 --- a/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/InverterTests.cs +++ b/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/InverterTests.cs @@ -1,4 +1,4 @@ -using GroveGames.BehaviourTree.Collections; +using GroveGames.BehaviourTree.Collections; using GroveGames.BehaviourTree.Nodes; using GroveGames.BehaviourTree.Nodes.Decorators; diff --git a/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/RepeaterTests.cs b/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/RepeaterTests.cs index 826b355..edfcd8e 100644 --- a/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/RepeaterTests.cs +++ b/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/RepeaterTests.cs @@ -1,4 +1,4 @@ -using GroveGames.BehaviourTree.Collections; +using GroveGames.BehaviourTree.Collections; using GroveGames.BehaviourTree.Nodes; using GroveGames.BehaviourTree.Nodes.Decorators; diff --git a/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/ResetTests.cs b/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/ResetTests.cs index cef5506..dd820b1 100644 --- a/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/ResetTests.cs +++ b/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/ResetTests.cs @@ -1,4 +1,4 @@ -using GroveGames.BehaviourTree.Collections; +using GroveGames.BehaviourTree.Collections; using GroveGames.BehaviourTree.Nodes; using GroveGames.BehaviourTree.Nodes.Decorators; diff --git a/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/SucceederTests.cs b/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/SucceederTests.cs index 04cc439..5eb6f27 100644 --- a/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/SucceederTests.cs +++ b/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/SucceederTests.cs @@ -1,4 +1,4 @@ -using GroveGames.BehaviourTree.Collections; +using GroveGames.BehaviourTree.Collections; using GroveGames.BehaviourTree.Nodes; using GroveGames.BehaviourTree.Nodes.Decorators; diff --git a/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/SuccessOnceTests.cs b/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/SuccessOnceTests.cs index fd6eef9..7b7c7de 100644 --- a/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/SuccessOnceTests.cs +++ b/tests/GroveGames.BehaviourTree.Tests/Nodes/Decorators/SuccessOnceTests.cs @@ -1,4 +1,4 @@ -using GroveGames.BehaviourTree.Collections; +using GroveGames.BehaviourTree.Collections; using GroveGames.BehaviourTree.Nodes; using GroveGames.BehaviourTree.Nodes.Decorators; diff --git a/tests/GroveGames.BehaviourTree.Tests/Nodes/EmptyNodeTests.cs b/tests/GroveGames.BehaviourTree.Tests/Nodes/EmptyNodeTests.cs index 4f004a4..5e4f4fb 100644 --- a/tests/GroveGames.BehaviourTree.Tests/Nodes/EmptyNodeTests.cs +++ b/tests/GroveGames.BehaviourTree.Tests/Nodes/EmptyNodeTests.cs @@ -1,4 +1,4 @@ -using GroveGames.BehaviourTree.Nodes; +using GroveGames.BehaviourTree.Nodes; namespace GroveGames.BehaviourTree.Tests.Nodes; diff --git a/tests/GroveGames.BehaviourTree.Tests/Nodes/NodeTests.cs b/tests/GroveGames.BehaviourTree.Tests/Nodes/NodeTests.cs index 12ea582..4d09192 100644 --- a/tests/GroveGames.BehaviourTree.Tests/Nodes/NodeTests.cs +++ b/tests/GroveGames.BehaviourTree.Tests/Nodes/NodeTests.cs @@ -1,4 +1,4 @@ -using System.Reflection; +using System.Reflection; using GroveGames.BehaviourTree.Collections; using GroveGames.BehaviourTree.Nodes; diff --git a/tests/GroveGames.BehaviourTree.Tests/Nodes/RootTests.cs b/tests/GroveGames.BehaviourTree.Tests/Nodes/RootTests.cs index 0c1d084..02571d4 100644 --- a/tests/GroveGames.BehaviourTree.Tests/Nodes/RootTests.cs +++ b/tests/GroveGames.BehaviourTree.Tests/Nodes/RootTests.cs @@ -1,4 +1,4 @@ -using GroveGames.BehaviourTree.Collections; +using GroveGames.BehaviourTree.Collections; using GroveGames.BehaviourTree.Nodes; namespace GroveGames.BehaviourTree.Tests.Nodes; diff --git a/tests/GroveGames.BehaviourTree.Tests/TreeTests.cs b/tests/GroveGames.BehaviourTree.Tests/TreeTests.cs index e0ef429..ee7a6be 100644 --- a/tests/GroveGames.BehaviourTree.Tests/TreeTests.cs +++ b/tests/GroveGames.BehaviourTree.Tests/TreeTests.cs @@ -1,4 +1,4 @@ -using System.Reflection; +using System.Reflection; using GroveGames.BehaviourTree.Collections; using GroveGames.BehaviourTree.Nodes;