I couldn't find a tool that enforces it, so I went the manual route:
```
find -name "thirdparty" -prune \
-o -name "*.cpp" -o -name "*.h" -o -name "*.m" -o -name "*.mm" \
-o -name "*.glsl" > files
perl -0777 -pi -e 's/\n}\n([^#])/\n}\n\n\1/g' $(cat files)
misc/scripts/fix_style.sh -c
```
This adds a newline after all `}` on the first column, unless they
are followed by `#` (typically `#endif`). This leads to having lots
of places with two lines between function/class definitions, but
clang-format then fixes it as we enforce max one line of separation.
This doesn't fix potential occurrences of function definitions which
are indented (e.g. for a helper class defined in a .cpp), but it's
better than nothing. Also can't be made to run easily on CI/hooks so
we'll have to be careful with new code.
Part of #33027.
Which means that reduz' beloved style which we all became used to
will now be changed automatically to remove the first empty line.
This makes us lean closer to 1TBS (the one true brace style) instead
of hybridating it with some Allman-inspired spacing.
There's still the case of braces around single-statement blocks that
needs to be addressed (but clang-format can't help with that, but
clang-tidy may if we agree about it).
Part of #33027.
Those were problematic as they call a method of their parent class,
but callable_mp does not allow that unless it's public.
To solve it, we declare a local class that calls the parent class'
method, which now needs to be protected to be accessible in the
derived class.
Remove now unnecessary bindings of signal callbacks in the public API.
There might be some false positives that need rebinding if they were
meant to be public.
No regular expressions were harmed in the making of this commit.
(Nah, just kidding.)
This seems to have been left dangling during 3.0 development and was
never finished.
Hiding for now until it can be completed, otherwise we'll have to drop
it.
See #22394.
Happy new year to the wonderful Godot community!
We're starting a new decade with a well-established, non-profit, free
and open source game engine, and tons of further improvements in the
pipeline from hundreds of contributors.
Godot will keep getting better, and we're looking forward to all the
games that the community will keep developing and releasing with it.
If the target directory does not exist, it will be recursively created.
Export paths are now saved as a relative to the projects base directory
Renamed relative_to function to final_path_from_relative which takes a relative path and outputs the final path from a string that represents a directory.
Added relative_path_from_final which takes in a final path and outputs a relative path if possible. If not possible it outputs the relative path that represents the current directory.
If the target directory does not exist when exporting the project, then it is recursively created.
Removed final_path_from_relative function
Changed DirAccess into DirAccessRef for automatic object destruction
It's still not enough and we need better validation/error checking,
but it should help with people assume corrupted templates when it's
their config which is invalid.
This swaps out the CheckButton with a CheckBox, which has two benefits:
- The checkbox icon appears to the left of the text, which moves it
closer from the text. This makes it more easily noticeable, as
it also appears below the "File:" text now.
- It follows the UI convention of using checkboxes for options that
do not bear an immediate effect, unlike CheckButtons which are
expected to have an immediate effect when toggled.
This closes#25170.
Retrieved working implementation from 2.1 branch and adapted to
existing export preset system.
Added Script tab in export preset to export script as raw text,
compiled, or encrypted (same as in 2.1). The script encryption key is
visually validated. The script export mode and the key is saved per
per preset in `export_presets.cfg`, so it makes sense to ignore this
file in version control system.
Each custom exporting procedure can retrieve an export preset set
during project exporting. Refactored project export dialog a bit to
allow easier code comprehension.