Commit Graph

885 Commits

Author SHA1 Message Date
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
Thaddeus Crews 3b3e2374c9
clang-tidy: Enforce `modernize-use-nullptr` 2024-03-12 10:59:53 -05:00
Paul Joannon 7290e7d7a5
C#: Fix warnings
- Fix most CS0108 in generated glue
- Suppress CA1001 on `Variant`
2024-03-09 17:05:23 +01:00
Rémi Verschelde 6315429999
Merge pull request #89007 from paulloz/dotnet/fix-interpolated-string-scriptpropertydefval
[.NET] Fix interpolated strings in ScriptPropertyDefVal
2024-03-04 13:33:25 +01:00
Rémi Verschelde 5d3369e095
Merge pull request #85153 from Repiteo/scons-improve-logs
SCons: Add two new `COMSTR` environment variables
2024-03-04 13:32:38 +01:00
Rémi Verschelde 1598af5668
Merge pull request #83504 from Repiteo/c#-generator-langword-check
C#: Bindings generator langword check
2024-03-04 13:32:34 +01:00
Thaddeus Crews 0ce9b6fd1d
Add two new COMSTR environment variables 2024-03-01 12:44:03 -06:00
Paul Joannon 42233284b1
Fix interpolated strings in ScriptPropertyDefVal 2024-03-01 11:24:46 +01:00
Rémi Verschelde a64cb8eff3
Merge pull request #88570 from paulloz/dotnet/warnings-editorconfig-cleanup
[.NET] Better `.editorconfig` setup in `modules/mono/`
2024-02-27 21:23:03 +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
Thaddeus Crews be7019de0f
C#: Only check for empty deprecation message if deprecated 2024-02-27 10:22:32 -06:00
Rémi Verschelde 730ef374b4
Merge pull request #88652 from RobProductions/fix-hover-margin
Fix editor hover style margins when Draw Extra Borders is enabled
2024-02-27 10:17:34 +01:00
Raul Santos 40b7dd0cf3
C#: Add deprecated message to generated bindings
Uses the `DocData` deprecated message in the C# `[Obsolete]` attribute added to deprecated members.
2024-02-23 20:30:36 +01:00
Matt Enad f75cffcd46 Fix hover style margin with extra borders enabled
The content margins for FlatMenuButton and RunBarButton are now handled correctly when the "Draw Extra Borders" user option is enabled
2024-02-21 21:36:48 -05: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
Rémi Verschelde 00f6c97610
Merge pull request #80343 from raulsntos/dotnet/warnings/RS2008
C#: Add analyzer release tracking
2024-02-20 23:59:39 +01:00
Rémi Verschelde 1aab6e96b9
Merge pull request #87133 from Repiteo/dotnet/enforce-globalization-rules
C#: Enforce globalization code quality rules
2024-02-20 20:04:30 +01:00
Rémi Verschelde 9e9dcdbba4
Merge pull request #86378 from RobProductions/update-hover-styling
Add hover highlight to main editor buttons
2024-02-20 19:34:40 +01:00
Thaddeus Crews 000d12d237
C#: Enforce Globalization code quality rules 2024-02-20 11:15:12 -06: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
Ivan Shakhov 703c34a788 Bump Rider.PathLocator nuget version, which provides a fix for detecting Rider installations 2024-02-19 21:04:28 +03: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
Rémi Verschelde 9f48330c3f
Merge pull request #88469 from paulloz/dotnet/cleaner-diagnostic-rules
[.NET] Clean diagnostic rules
2024-02-19 00:08:30 +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 dcb411daee
C#: Fix building OpenVisualStudio executable
Since moving the TFM to .NET Core we need to add some configuration to cross-compile a Windows executable from Linux.
2024-02-18 05:40:06 +01:00
Rémi Verschelde ccd9cefa8e
Merge pull request #87137 from /dotnet/nullable-godot-tools 2024-02-17 18:31:37 +01:00
Matt Enad 5b5de0e167 Add hover highlight to main editor buttons
Updates styling of the editor run bar, plugin, bottom panel, icon buttons, and main menu buttons for accessibility.
2024-02-16 14:49:44 -05:00
Raul Santos 7b348708e8
C#: Use SymbolEqualityComparer
Use `SymbolEqualityComparer` to compare symbols and fix `RS1024` warning.
2024-02-14 17:33:06 +01:00
Thaddeus Crews 3314f8cc65
C#: Enable nullable environment for `GodotTools` 2024-02-13 12:24:53 -06:00
Rémi Verschelde 7d89f557f3
Merge pull request #88238 from shana/cs-export-fix-output-files
C#: Fix processing exclusions during export
2024-02-12 23:29:47 +01:00
Andreia Gaita 2f10f7bed4 Fix processing exclusions during export 2024-02-12 11:51:05 +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
Paul Joannon 9d283063a0
Fix C# "out of sync" notice with external editors
Change what triggers our re-evaluation of the last valid build datetime stored internally.
Move that datetime in `BuildManager`.
2024-02-07 21:26:32 +01:00
Rémi Verschelde acde2a81ff
Merge pull request #84640 from aaronfranke/gravity-get
Expose a method to get gravity for any physics body
2024-02-05 14:48:31 +01:00
Nông Văn Tình d81c9c32c5 Fix incorrect condition for error filtering
Fixes: #87643

The original condition stopped immediately after checking for 'searchText' in the 'Message' field, resulting in premature termination of subsequent checks. This fix ensures that all relevant conditions are appropriately evaluated before determining the filtering outcome.

Additionally, accompanying changes include improved code readability for better comprehension. This adjustment enhances the maintainability of the error filtering mechanism, contributing to a more robust codebase overall.
2024-01-31 23:01:37 +07:00
Aaron Franke aed5ea9460
Expose a method to get gravity for any physics body 2024-01-30 23:57:38 -06:00
Rémi Verschelde 736696b533
Merge pull request #87679 from raulsntos/dotnet/remove-unused
C#: Remove unused code
2024-01-30 17:48:07 +01:00
Raul Santos 82380ec700
C#: Remove unused code
- Remove `AotBuilder` that was used for MonoAOT in 3.x.
- Remove `PlaySettings` that was used for IDE support in 3.x.
- Remove `ApiAssembliesInfo` that was used for Project generation in 3.x.
- Remove pieces of the old iOS support from 3.x.
2024-01-28 16:09:59 +01:00
Rémi Verschelde 563e385810
Merge pull request #87526 from zaevi/fix_csharp_gc
C#: Fix incorrect GC handle for non-instantiable types.
2024-01-26 11:47:25 +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
Zae 201e946741 C#: Fix incorrect GC handle for non-instantiable types. 2024-01-25 02:40:08 +08: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 c027aecc2e Merge pull request #86676 from rune-scape/sparse-script-reload
GDScript: Hot-reload changed scripts only
2024-01-17 18:52:54 +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
Yuri Sizov 95b27fe8c7 Reorganize code related to editor theming
This change introduces a new EditorThemeManager class
to abstract theme generatio and its subroutines.

Logic related to EditorTheme, EditorColorMap, and editor
icons has been extracted into their respective files with
includes cleaned up.

All related files have been moved to a separate folder to
better scope them in the project. This includes relevant
generated files as well.
2024-01-16 11:57:45 +01:00
Alberto Vilches 7a90c56c00 C# Add test suite for Diagnostic Analyzers: GlobalClass and MustBeVariant 2024-01-15 11:31:12 +01:00
Rémi Verschelde 3dcf9059ae
Merge pull request #86454 from Repiteo/c#-upgrade-TFMs
C#: Upgrade TFM for `net472` and some `netstandard2.0` projects
2024-01-11 17:37:19 +01:00
Rémi Verschelde ba96dbb49a
Merge pull request #85460 from van800/master
Bump the `JetBrains.Rider.PathLocator` PackageReference to 1.0.8
2024-01-11 17:36:04 +01:00
Rémi Verschelde 8a6debd71e
Merge pull request #86592 from emklasson/fix_gd0103_link
Fix typo in GD0103 error link
2024-01-10 12:03:29 +01:00
Thaddeus Crews 7a06390552
C#: Upgrade TFM for `net472` and some `netstandard2.0` projects 2024-01-06 09:14:33 -06:00
Rémi Verschelde 11d1844e66
Merge pull request #85869 from paulloz/dotnet-warning-out-of-date-properties
.NET: Add a warning in the inspector when properties might be out of sync
2024-01-03 15:43:41 +01:00
rune-scape cde478bda6 Hot-reload only changed scripts 2024-01-02 17:56:52 -08:00
Mikael Klasson a2b183067c fix: use correct number in GD0103 link 2023-12-27 20:30:59 +09:00
Paul Joannon 0818d015db
Inspector ⚠️ when C# props might be out of date 2023-12-22 23:27:13 +01:00
Yuri Sizov c8d0325a93 Merge pull request #82955 from paulloz/testing-source-generators
Add unit tests for C# source generators
2023-12-19 20:32:26 +01:00
Paul Joannon b352bdc8cb
Add tests for source generators
- Bootstrap xUnit project to test source generators
- Implement source generator tests
- Better tests structure (put test data in cs files)
- Enable `ScriptSerializationGeneratorTests`
- Enable `ScriptPathAttributeGeneratorTests`
- Fix `NesterClass` -> `NestedClass`
- Use `Path.Combine` when dealing with paths
- Copy test data to the output directory
2023-12-19 18:26:52 +01:00
Thaddeus Crews a0db88335a
Implement function to throw on null pointers
• Specifically: checks if ptr == IntPtr.Zero
2023-12-17 08:52:20 -06:00
Rémi Verschelde d76c1d0e51
Bump version to 4.3-dev
The essential doesn't change.

-- Samuel Beckett, Waiting for Godot
2023-11-29 23:00:27 +01:00
Ivan Shakhov 7f63f4a6bf bump the PackageReference "JetBrains.Rider.PathLocator" to 1.0.8 2023-11-28 11:13:30 +01:00
bruvzg a92511fec3
[iOS] Fix dotnet export. 2023-11-16 15:05:44 +02:00
Yuri Sizov b04b546092 Fix node names of submenu items across the editor
Also removes some programmer remarks and fixes some docs.
2023-11-08 14:42:42 +01:00
Rémi Verschelde 67941551ca
Merge pull request #83809 from raulsntos/dotnet/free-dialogs
C#: Free dialogs when exiting the editor
2023-10-30 16:26:15 +01:00
Rémi Verschelde bf41c6bd34
Merge pull request #82918 from raulsntos/dotnet/only-node-can-export-node
C#: Report diagnostic for Node exports in a type that doesn't derive from Node
2023-10-27 11:36:33 +02:00
Rémi Verschelde 398b254f27
Merge pull request #83325 from raulsntos/dotnet/find-latest-sdk
C#: Fallback to the latest SDK
2023-10-24 10:54:04 +02:00
Raul Santos 48edcc3b34
C#: Free dialogs when exiting the editor 2023-10-23 02:10:06 +02:00
Raul Santos fe078219fc
C#: Fix generated nested class order 2023-10-18 03:37:57 +02:00
Rémi Verschelde ca09afd530
Merge pull request #80489 from raulsntos/dotnet/diagnostics
C#: Improve diagnostic messages and add help link
2023-10-17 23:59:17 +02:00
Raul Santos aa4dba5b56
C#: Improve diagnostic messages and add help link
- Reword diagnostic messages.
- Add help link to diagnostics.
2023-10-17 19:45:09 +02:00
Thaddeus Crews 0935a99bf9
C# - bindings generator langword check 2023-10-17 08:51:24 -05:00
Raul Santos be1dfd3b3a
C#: Allow exporting games without C#
When exporting a game that contains a C# solution, a feature is added so the exported game can check if it should initialize the .NET module. Otherwise, the module initialization is skipped so games without C# won't check for the assemblies and won't show alerts when they're missing.
2023-10-16 05:07:11 +02:00
Raul Santos a186343abd
C#: Fallback to the latest SDK 2023-10-14 14:21:48 +02:00
Raul Santos cea77d0b48
C#: Add checks to Android export
- Add .NET 7.0 TFM when the platform is Anroid to the created csproj.
- Prevent exporting to Android when the architecture is not supported.
2023-10-10 00:35:08 +02:00
Rémi Verschelde 4a5801b44a
Merge pull request #82729 from shana/shana/ios-csharp
Add C# iOS support
2023-10-09 23:23:11 +02:00
Andreia Gaita ee9a735c26 Add C# iOS support
This support is experimental and requires .NET 8

Known issues:
- Requires macOS due to use of lipo and xcodebuild
- arm64 simulator templates are not currently included
  in the official packaging
2023-10-09 18:22:56 +02:00
Raul Santos bfe1a93023
C#: Report diagnostic for Node exports in a type that doesn't derive from Node 2023-10-06 19:03:18 +02:00
Rémi Verschelde 1e544505be
Merge pull request #82691 from YuriSizov/rst-validate-with-exceptions
Validate `code` tags for class and member references
2023-10-04 15:42:42 +02:00
Yuri Sizov cc0eebd9d8 Validate `code` tags for class and member references
This commit also adds means to manually disable warnings
in `code` tags where it's a false positive with the new
`skip-lint` attribute.

Warnings are now enabled on CI to prevent future errors.
2023-10-03 15:48:31 +02:00
Raul Santos 404fd0b2dc
Fix C# editor dialogs
- Use `EditorInterface` to open C# editor dialogs.
- Ensure C# editor dialogs are open after `EditorProgress` finishes.
2023-10-02 17:50:33 +02:00
Raul Santos f19694a8d6
C#: Redesign MSBuild panel
- Redesign panel to look closer to the look of other Godot panels such as Output and Debugger.
- Moved list of problems and output log to separate tabs instead of using a HSplit.
- Added Tree/List layouts to the problems tab.
- Added search box to filter problems tab.
- Added `FileTree` icon, made from `FileList`. Both are used for the button that toggles the Tree/List layouts.
2023-09-27 02:53:27 +02:00
Rémi Verschelde 4410b0b0e1
Merge pull request #67304 from wscalf/master
Allow readonly and writeonly C# properties to be accessed from GDScript
2023-09-26 16:36:33 +02:00
Rémi Verschelde 017541bcec
Merge pull request #80527 from raulsntos/dotnet/generate-compat-methods-from-classdb
C#: Generate and use compat methods
2023-09-26 13:44:52 +02:00
Rémi Verschelde d65d379d22
Merge pull request #81802 from Nomad1/vs2022_mac_fix
Fixed VS 2022 Mac compatibility
2023-09-22 22:04:46 +02:00
Nomad1 a119365d4e Fixed VS 2022 Mac compatibility
Visual Studio 2022 on Mac marks the project as invalid if the project Guid is set. Easiest way to fix it is to remove outdated 'EnableGodotProjectTypeGuid' and other Guid references
2023-09-21 15:30:10 -02:30
Rémi Verschelde 5fd8506e19
Merge pull request #81847 from crazyStewie/dotnet_editor_project_fix
Implemented {project} placeholder for external dotnet editor
2023-09-20 18:55:13 +02:00
Rémi Verschelde ce0fa4c691
Merge pull request #81783 from zaevi/fix-csharp-static-method
C#: make C# static methods accessible.
2023-09-20 18:55:10 +02:00
Zae 67e1373e5a C#: make C# static methods accessible. 2023-09-20 22:49:33 +08:00
crazyStewie c01a47867b Implemented {project} placeholder for external dotnet editor
Implements the {project} placeholder, available when setting an external editor
in the project settings, via Editor > Editor Settings > Text Editor > External
for the c# external editor, under Editor > Editor Settings > Dotnet > Editor,

This allows passing the project folder as a command line argument when using a
custom external editor that isn't one of the available options.

Fixes #81845
2023-09-20 10:20:45 -03:00
Raul Santos 5f6082a96b
C#: Generate and use compat methods
- Implements `ClassDB::get_method_list_with_compatibility` to retrieve all methods from a class including compat methods.
- C# bindings generator now also generates compat methods.
- All generated C# methods now use `ClassDB::get_method_with_compatibility`.
2023-09-19 20:35:11 +02:00
Rémi Verschelde 793c382fa7
Merge pull request #81703 from Repiteo/c#-binding-warnings-to-editorconfig
C# - `bindings_generator` warnings to `.editorconfig`
2023-09-18 10:38:12 +02:00
Thaddeus Crews e43b63ab98
C# - bindings_generator warnings to .editorconfig 2023-09-16 11:55:04 -05:00
Yuri Sizov 5f1e56ff26 Merge pull request #81690 from raulsntos/dotnet/hide-hostfxr-error
C#: Hide hostfxr not found error
2023-09-15 19:48:48 +02:00
Yuri Sizov df6cd37a69 Merge pull request #81516 from YuriSizov/editor-theme-access-the-success
Fix accessing editor theme items throughout the UI
2023-09-15 19:48:14 +02:00
Yuri Sizov 8ecc0c4f47 Fix accessing editor theme items throughout the UI
This also exposes `EditorInterface::get_editor_theme`.
2023-09-15 14:51:01 +02:00
Raul Santos 394c0eb225
C#: Hide hostfxr not found error
Godot tries to find hostfxr in two locations, the method that tries
to retrieve the location printed an error when it was not found.
So when the first location fails it was printing an error, even if
the second location succeeded, and users were left confused thinking
there was something wrong with their installation.

Now the error will only be printed when stdout verbose is enabled.
Users will still get an error later if hostfxr is not found in any
of the two locations.
2023-09-15 14:12:01 +02:00
Raul Santos 5f6524ad44
C#: Check if JetBrains Rider editor path is empty 2023-09-14 01:55:51 +02:00
Rémi Verschelde cfd292939c
Haiku: Remove remnants of past WIP platform port
The Haiku platform port was never finalized, and moved to a separate repo in
Godot 3.2 days: https://github.com/godotengine/godot-platform-haiku

Sadly it didn't garner more interest there and is bitrotting. It was never
ported to Godot 4 so the bits of Haiku support left in Mono aren't useful.
2023-09-07 16:37:51 +02:00