Commit graph

179 commits

Author SHA1 Message Date
Rémi Verschelde
30b0aadab6
Bump version to 4.4.1-rc 2025-03-03 18:21:20 +01:00
Raul Santos
f4094b554d
[.NET] Disallow [ExportToolButton] on members thay may store the Callable
Ensures the user doesn't store the Callable so the .NET assembly can be reloaded.
2025-02-14 01:09:59 +01:00
Paul Joannon
fb8553e4d7
Move to .NET8
- Change TFM and LangVersion
- Better exception throwing (CA1510, CA1512, CA1513)
- Better exception utility method definition (CA1859)
- Prefer comparing `.Count` over calling `.Any()` (CA1860)
- Prefer `.AsSpan()` over `.Substring()` (CA1846)
- Add a few more `scoped`
- Use `RuntimeHelpers.GetUninitializedObject()` instead of `FormatterServices.GetUninitializedObject()`
- Use delegate instead of delegate pointer in variant generic conversions
- Enable EnforceExtendedAnalyzerRules in source generator projects
- Disable CS8981 on structs named movable in Godot.NativeInterop
2024-12-13 14:00:13 +01:00
RedworkDE
f0b6b24d9e
C#: Update to net7.0
Because of ref safety changes in the languages, all methods that return an interop struct have to have all other reference parameters marked as scoped to signal the the method does not capture that reference.

The variant change is necessary, because for some reason a type of the exact shape godot_variant is in, crashes the .NET 7 JIT, but when changing it to be sequential with the same effective layout it works.
2024-12-12 17:42:39 +01:00
Thaddeus Crews
57d08dbec3
C#: Fix warnings caught by new problem-matchers
• Restore MSVC problem matcher for Linux builds
2024-12-10 14:04:35 -06:00
Raul Santos
4e5080d805
[.NET] Preserve no-hint behavior for unmarshallable generics in dictionaries 2024-11-21 20:38:55 +01:00
Thaddeus Crews
ec7fd4f6f1
Merge pull request #97894 from paulloz/dotnet/export-tool-button
Implement `[ExportToolButton]`
2024-11-19 15:20:07 -06:00
Paul Joannon
4f52c2bb1f
Implement [ExportToolButton] 2024-11-18 20:19:47 +01:00
Adam Johnston
186f35fc9b remove duplicate read/write only property warning from ScriptPropertiesGenerator 2024-11-13 14:23:53 -08:00
Zae
2a3d400dd8 C#: Escape signal parameters 2024-10-23 23:24:00 +08:00
Thaddeus Crews
cb3c01a5fe
Merge pull request #97588 from TML233/generated-raise-signal
[C#] Change generated On{SignalName} to EmitSignal{SignalName}
2024-10-21 16:39:12 -05:00
Juan Pablo Arce
e3790de461 Fix exported typed dictionaries in .NET having an incorrect hint, which led to incorrect scene serialization 2024-10-18 00:55:24 -03:00
Zae
9c99e519c6 C#: Fix unhandled GD0303 error for nested generic attribute types 2024-10-11 03:03:05 +08:00
TML
fa48ed9945 Change generated On{SignalName} to EmitSignal{SignalName} 2024-09-28 22:10:33 +08:00
Raul Santos
da37998dc8
C#: Generate On{EventName} method to raise signal events 2024-09-26 20:10:53 +02:00
Raul Santos
445e822bcf
C#: Generate signal event with the same accessibility as the delegate 2024-09-23 03:38:18 +02:00
Raul Santos
0aa46e19c5
C#: Fallback to CoreCLR/MonoVM hosting APIs when hostfxr/NativeAOT fails
Some platforms don't support hostfxr but we can use the coreclr/monosgen library directly to initialize the runtime.

Android exports now use the `android` runtime identifier instead of `linux-bionic`, this removes the restrictions we previously had:
- Adds support for all Android architectures (arm32, arm64, x32, and x64), previously only the 64-bit architectures were supported.
- Loads `System.Security.Cryptography.Native.Android` (the .NET library that binds to the Android OS crypto functions).
2024-09-16 17:07:03 +02:00
Thaddeus Crews
9853a69144
Implement typed dictionaries 2024-09-04 10:27:26 -05:00
Rémi Verschelde
0d0eb71694
Merge pull request #94599 from juanjp600/node-array-export-diagnostic
C#: Fix GD0107 not applying to arrays and dictionaries containing nodes
2024-08-16 23:45:26 +02:00
Rémi Verschelde
c2a4942850
Bump version to 4.4-dev
Mr. Godot still didn't show up...
2024-08-15 11:39:34 +02:00
Juan Pablo Arce
8aa444d212 Fix GD0107 not applying to arrays and dictionaries containing nodes 2024-07-24 02:20:29 -03:00
Raul Santos
65cd0c86f9
C#: Escape generated members 2024-06-15 19:07:42 +02:00
Gaoyao Massimo Hu
e3270113ca
Remove useless isFirstEntry and useless source.Append("else ") 2024-05-14 07:44:56 +01:00
Gaoyao Massimo Hu
06b716d8b3
Fix C# Hint NodeType and ResourceType HintString 2024-05-08 16:22:52 +01:00
Rémi Verschelde
7d03b1de0b
Style: Trim trailing whitespace and ensure newline at EOF
Found by apply the file_format checks again via #91597.
2024-05-08 10:12:46 +02:00
Rémi Verschelde
629e91acff
Merge pull request #91479 from Repiteo/dotnet/sln-csproj-attributes
C#: Fix attributes for `sln`/`csproj` files
2024-05-04 11:52:29 +02:00
Thaddeus Crews
64f2e8b64f
Dotnet: Fix attributes for sln/csproj files 2024-05-03 12:21:51 -05:00
K. S. Ernest (iFire) Lee
f9b488508c
Add PackedVector4Array Variant type
Co-authored-by: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com>
Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
2024-05-03 00:58:27 +02:00
Rémi Verschelde
4eaafc8fa8
Merge pull request #91375 from paulloz/dotnet/prevent-generator-crash-on-exported-unconstructed-generic-arrays
C#: Fix generator crash w/ generic arrays
2024-05-02 12:46:42 +02:00
Raul Santos
1510f88ae1
C#: Ignore late bound methods in MustBeVariantAnalyzer
If symbol is late bound (as is the case when using `dynamic`) we can't obtain the symbol to analyze the usage of `[MustBeVariant]`.
2024-05-01 03:18:21 +02:00
Paul Joannon
aba787393f
C#: Fix generator crash w/ generic arrays 2024-04-30 22:22:09 +02:00
Konstantin Kretov
2b46e009fa
Fill copyright field in .csproj files
This ensures that nuget packages will have both license and copyright fields filled.
2024-04-26 11:41:04 +02:00
Jason Hunter
bdbd9995f8
Add property UsingGodotNETSdk to Godot.NET.Sdk
The Godot.NET.Sdk (for C# use) should define the property `UsingGodotNETSdk` in its [SDK.props](a07dd0d6a5/modules/mono/editor/Godot.NET.Sdk/Godot.NET.Sdk/Sdk/Sdk.props).  

## Why
Defining this property allows shared build configuration (e.g. Directory.Build.targets or other imported msbuild files) to detect deterministically when they are operating within the scope of a project controlled by Godot.NET.Sdk.  This enables shared build configuration that may span many different projects within a folder to have Godot.NET.Sdk-specific configuration that only applies to Godot projects.

## Why named UsingGodotNETSdk
This naming scheme is common practice in Microsoft Dotnet SDKs.  For example, the property `UsingMicrosoftNETSdk` is defined by the default SDK, `UsingMicrosoftTraversalSdk` is defined by [Microsoft.Build.Traversal](363532de5b/src/Traversal/Sdk/Sdk.props (L10)), `UsingMicrosoftNoTargetsSdk` by [Microsoft.Build.NoTargets](363532de5b/src/NoTargets/Sdk/Sdk.props (L10)), and so on.  The property `UsingMicrosoftNETSdk` is even used in the implementation of Godot.NET.Sdk for conditional logic of the type predicted here.

Note that these "Using*" properties are _additive_ in the sense that more than one can be defined for a given project (as SDKs can effectively be built upon other SDKs, using them as components).  So, it is normal and appropriate for both `UsingMicrosoftNETSdk` and `UsingGodotNETSdk` to be simultaneously defined within the same project.
2024-03-18 09:48:52 -07:00
Paul Joannon
42233284b1
Fix interpolated strings in ScriptPropertyDefVal 2024-03-01 11:24:46 +01:00
Paul Joannon
139a5df821
Cleanup C# projects, code quality & style
New rules:
- Do not silence CA1805 any more
- Limit where we silence CA1707, CA1711, CA1720
- Enforce severity=warning for IDE0040
- Enforce Allman style braces
- Enforce naming conventions (IDE1006 is still severity=suggestion)

Fixes:
- Fix REFL045, CS1572, CS1573
- Suppress CS0618 when generating `InvokeGodotClassMethod`
- Fix indent when generating GD_constants.cs
- Temporarily silence CS1734 in generated code
- Fix a lot of naming rule violations

Misc.:
- Remove ReSharper comments for RedundantNameQualifier
- Remove suppression attributes for RedundantNameQualifier
- Remove severity=warnings for CA1716, CA1304 (already included in the level of analysis we run)
2024-02-27 20:11:24 +01:00
Rémi Verschelde
c6d091e0f3
Merge pull request #87253 from van800/van800/analyser
Provide a roslyn analyzers corresponding to the GD0001 and GD0002
2024-02-21 15:22:54 +01:00
Ivan Shakhov
00dc19585b provide analyser corresponding to the GD0001 and GD0002, add ClassPartialModifierAnalyzerFix, and tests
Co-authored-by: Raul Santos <raulsntos@gmail.com>
Co-authored-by: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com>
2024-02-21 12:35:28 +03:00
Rémi Verschelde
aeaec000fc
Merge pull request #88495 from paulloz/dotnet/test-and-fix-exports-diagnostics
[.NET] Test and fix exports diagnostics
2024-02-21 07:43:08 +01:00
Paul Joannon
88ad4e6c24
Add tests and fix exports diagnostics
- Add tests for the following diagnostics: GD0101, GD0102, GD0103, GD0104, GD0105, GD0106, GD0107.
- Fix GD0101 not being reported any more (was filtering static classes before reporting).
- Fix GD0107 not preventing `Node` members from being exported from not-`Node` types.
2024-02-20 11:24:41 +01:00
Raul Santos
f685c69bd4
C#: Add analyzer release tracking
Fixes diagnostic RS2008.
2024-02-19 19:47:40 +01:00
Raul Santos
fe280ef9ae
C#: Various fixes to generic scripts
- Report a diagnostic when there are multiple classes that match the script file name in the same script since that will result in a duplicate path key in the bimap and it's not allowed.
- Fix InspectorPlugin to handle empty paths in case the project was built with a previous version of Godot that used empty paths for generic scripts.
- Add tests for the new diagnostic GD0003.
2024-02-19 06:33:13 +01:00
Paul Joannon
5981886fb7
Clean diagnostic rules
Move the following diagnostics into static readonly fields: GD0101, GD0102, GD0103, GD0104, GD0105, GD0106, GD0107, GD0201, GD0202, GD0203, GD0301, GD0302, GD0303, GD0401, GD0402.

To be more consistent, the titles for the following diagnostics were modified: GD0101, GD0105, GD0106, GD0302, GD0303, GD0401, GD0402. A subsequent update of the documentation repo is needed.

Tests for the following diagnostics were created: GD0201, GD0202, GD0203.
2024-02-18 16:47:20 +01:00
Raul Santos
7b348708e8
C#: Use SymbolEqualityComparer
Use `SymbolEqualityComparer` to compare symbols and fix `RS1024` warning.
2024-02-14 17:33:06 +01:00
Raul Santos
5815d1c8c8
Improve handling of generic C# types
- Create CSharpScript for generic C# types.
  - `ScriptPathAttributeGenerator` registers the path for the generic type definition.
  - `ScriptManagerBridge` lookup uses the generic type definition that was registered by the generator.
  - Constructed generic types use a virtual `csharp://` path so they can be registered in the map and loaded as if there was a different file for each constructed type, even though they all share the same real path.
  - This allows getting the base type for a C# type that derives from a generic type.
- Shows base scripts in the _Add Node_ and _Create Resource_ dialogs even when they are generic types.
  - `get_global_class_name` implementation was moved to C# and now always returns the base type even if the script is not a global class (this behavior matches GDScript).
- Create `CSharpScript::TypeInfo` struct to hold all the type information about the C# type that corresponds to the `CSharpScript`, and use it as the parameter in `UpdateScriptClassInfo` to avoid adding more parameters.
2024-02-08 18:31:13 +01:00
Rémi Verschelde
85b2c947b2
Merge pull request #87518 from paulloz/dotnet/fix-warnings
Clean a number of C# warnings
2024-01-26 11:46:37 +01:00
Paul Joannon
46b3096570
Clean a bunch of C# warnings
- `[Obsolete]` tag generated in the middle of documentation comments
- Potential `null` values in generators
- Obsolete call to `GetEditorInterface()`
- We don't want `Godot.Collections.Array` to end with `Collection`
- A few culture specifications and use of `AsSpan` instead of `SubString` in `StringExtensions`
- Disable CA1716 in GodotSharp
2024-01-26 09:38:33 +01:00
Alberto Vilches
692412562d C#: Fix to allow usage of [MustBeVariant] in generic typed attributes 2024-01-21 22:29:29 +01:00
Yuri Sizov
7351b5704a Merge pull request #86528 from avilches/must-be-variant-tests
Add unit tests for C# diagnostic analyzers
2024-01-17 18:52:45 +01:00
Alberto Vilches
7a90c56c00 C# Add test suite for Diagnostic Analyzers: GlobalClass and MustBeVariant 2024-01-15 11:31:12 +01:00
Mikael Klasson
a2b183067c fix: use correct number in GD0103 link 2023-12-27 20:30:59 +09:00