|
@@ -0,0 +1,51 @@
|
|
|
+GD0111: The exported tool button must be an expression-bodied property
|
|
|
+======================================================================
|
|
|
+
|
|
|
+==================================== ======================================
|
|
|
+ Value
|
|
|
+==================================== ======================================
|
|
|
+**Rule ID** GD0111
|
|
|
+**Category** Usage
|
|
|
+**Fix is breaking or non-breaking** Non-breaking
|
|
|
+**Enabled by default** Yes
|
|
|
+==================================== ======================================
|
|
|
+
|
|
|
+Cause
|
|
|
+-----
|
|
|
+
|
|
|
+A property is annotated with the ``[ExportToolButton]`` attribute but it's not
|
|
|
+an `expression-bodied property`_.
|
|
|
+
|
|
|
+Rule description
|
|
|
+----------------
|
|
|
+
|
|
|
+When reloading the .NET assembly, Godot will attempt to serialize exported
|
|
|
+members to preserve their values. A field or a property with a backing field
|
|
|
+that stores a ``Callable`` may prevent the unloading of the assembly.
|
|
|
+
|
|
|
+An expression-bodied property doesn't have a backing field and won't store
|
|
|
+the ``Callable``, so Godot won't attempt to serialize it, which should result
|
|
|
+in the successful reloading of the .NET assembly.
|
|
|
+
|
|
|
+.. code-block:: csharp
|
|
|
+
|
|
|
+ [ExportToolButton("Click me!")]
|
|
|
+ public Callable ValidClickMeButton => Callable.From(ClickMe);
|
|
|
+
|
|
|
+ // Invalid because the Callable will be stored in the property's backing field.
|
|
|
+ [ExportToolButton("Click me!")]
|
|
|
+ public Callable InvalidClickMeButton { get; } = Callable.From(ClickMe);
|
|
|
+
|
|
|
+How to fix violations
|
|
|
+---------------------
|
|
|
+
|
|
|
+To fix a violation of this rule, replace the property implementation with an
|
|
|
+`expression-bodied property`_.
|
|
|
+
|
|
|
+When to suppress warnings
|
|
|
+-------------------------
|
|
|
+
|
|
|
+Do not suppress a warning from this rule. ``Callable`` instances may prevent
|
|
|
+the .NET assembly from unloading.
|
|
|
+
|
|
|
+.. _expression-bodied property: https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/expression-bodied-members#properties
|