From 8379cc85aad36c6224a7eb163773fe25ca3c811b Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Wed, 6 Nov 2024 14:58:37 +0100 Subject: [PATCH] Warn on unknown command line arguments This eases troubleshooting when working with command line arguments. Warnings are only printed if the argument does not exist as a file or directory path (relative or absolute). This allows positional arguments to keep working as they are now, without printing warnings when a project reads positional arguments to perform operations on files (e.g. when drag-and-dropping a file onto a project executable). This now prints a warning: godot --non-existent-argument This still doesn't print a warning, as it's an user argument: godot -- --non-existent-argument This doesn't print a warning if the file/folder path exists: godot /path/to/file.txt A warning is still printed if the file/folder doesn't exist. Drag-and-drop associations always refer to existing files/folders, so that scenario was unlikely to be encountered. --- main/main.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/main/main.cpp b/main/main.cpp index e8086db9d3..fb21ee502f 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1801,6 +1801,13 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph } else if (arg == "--" || arg == "++") { adding_user_args = true; } else { + if (!FileAccess::exists(arg) && !DirAccess::exists(arg)) { + // Warn if the argument isn't recognized by Godot *and* the file/folder + // specified by a positional argument doesn't exist. + // This allows projects to read file or folder paths as a positional argument + // without printing a warning, as this scenario can't make use of user command line arguments. + WARN_PRINT(vformat("Unknown command line argument \"%s\". User arguments should be passed after a -- or ++ separator, e.g. \"-- %s\".", arg, arg)); + } main_args.push_back(arg); }