Skip to content

Commit

Permalink
Improvements to GDScript identifier tokenization
Browse files Browse the repository at this point in the history
  • Loading branch information
AThousandShips committed Apr 26, 2023
1 parent e2e870c commit f68beeb
Showing 1 changed file with 19 additions and 13 deletions.
32 changes: 19 additions & 13 deletions modules/gdscript/gdscript_tokenizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -559,6 +559,24 @@ GDScriptTokenizer::Token GDScriptTokenizer::potential_identifier() {
return make_identifier(name);
}

if (!only_ascii) {
// Kept here in case the order with push_error matters.
Token id = make_identifier(name);

#ifdef DEBUG_ENABLED
// Additional checks for identifiers but only in debug and if it's available in TextServer.
if (TS->has_feature(TextServer::FEATURE_UNICODE_SECURITY)) {
int64_t confusable = TS->is_confusable(name, keyword_list);
if (confusable >= 0) {
push_error(vformat(R"(Identifier "%s" is visually similar to the GDScript keyword "%s" and thus not allowed.)", name, keyword_list[confusable]));
}
}
#endif // DEBUG_ENABLED

// Cannot be a keyword, as keywords are ASCII only.
return id;
}

// Define some helper macros for the switch case.
#define KEYWORD_GROUP_CASE(char) \
break; \
Expand Down Expand Up @@ -594,19 +612,7 @@ GDScriptTokenizer::Token GDScriptTokenizer::potential_identifier() {
}

// Not a keyword, so must be an identifier.
Token id = make_identifier(name);

#ifdef DEBUG_ENABLED
// Additional checks for identifiers but only in debug and if it's available in TextServer.
if (!only_ascii && TS->has_feature(TextServer::FEATURE_UNICODE_SECURITY)) {
int64_t confusable = TS->is_confusable(name, keyword_list);
if (confusable >= 0) {
push_error(vformat(R"(Identifier "%s" is visually similar to the GDScript keyword "%s" and thus not allowed.)", name, keyword_list[confusable]));
}
}
#endif // DEBUG_ENABLED

return id;
return make_identifier(name);

#undef KEYWORD_GROUP_CASE
#undef KEYWORD
Expand Down

0 comments on commit f68beeb

Please sign in to comment.