Fix NodePath autocompletion to ensure paths are quoted when required

Every component of the path is now checked to be a valid identifier,
so that node names that start with a digit always require the full
path to be quoted.
This commit is contained in:
Hugo Locurcio 2024-02-07 18:50:58 +01:00
parent 36e943b6b2
commit 1238b60b22
No known key found for this signature in database
GPG key ID: 39E8F8BE30B0A49C

View file

@ -3303,9 +3303,17 @@ static void _find_call_arguments(GDScriptParser::CompletionContext &p_context, c
opt = opt.substr(1);
}
// The path needs quotes if it's not a valid identifier (with an exception
// for "/" as path separator, which also doesn't require quotes).
if (!opt.replace("/", "_").is_valid_identifier()) {
// The path needs quotes if at least one of its components (excluding `/` separations)
// is not a valid identifier.
bool path_needs_quote = false;
for (const String &part : opt.split("/")) {
if (!part.is_valid_identifier()) {
path_needs_quote = true;
break;
}
}
if (path_needs_quote) {
// Ignore quote_style and just use double quotes for paths with apostrophes.
// Double quotes don't need to be checked because they're not valid in node and property names.
opt = opt.quote(opt.contains("'") ? "\"" : quote_style); // Handle user preference.