12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- 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
|