Skip to content

Commit 0aabe43

Browse files
committed
chore(idl): Check for case insensitive keywords
Most languages are not affected by this change. In PHP, some names such as Bool cannot be used because it is a reserved keyword for to the bool data type. The field `keywords_casing` in the configs enables checking all characters in lowercase against every keyword. This should be safe as flatbuffers does not allow non-ASCII characters in its grammar.
1 parent 2f59a03 commit 0aabe43

12 files changed

+28
-1
lines changed

include/codegen/namer.h

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,14 @@ class Namer {
9191
std::string keyword_prefix;
9292
// Suffix used to escape keywords. It is usually "_".
9393
std::string keyword_suffix;
94+
// The casing used for keywords when escaping. For most languages, keywords
95+
// are case sensitive. PHP is an instance where some keywords are case
96+
// insensitive.
97+
enum KeywordsCasing {
98+
CASE_SENSITIVE,
99+
CASE_INSENSITIVE,
100+
};
101+
KeywordsCasing keywords_casing;
94102

95103
// Files.
96104

@@ -205,7 +213,14 @@ class Namer {
205213
}
206214

207215
virtual std::string EscapeKeyword(const std::string &name) const {
208-
if (keywords_.find(name) == keywords_.end()) {
216+
std::string cased_name(name);
217+
218+
if (config_.keywords_casing == Config::KeywordsCasing::CASE_INSENSITIVE) {
219+
for (auto chr = cased_name.begin(); chr != cased_name.end(); chr++) {
220+
*chr = CharToLower(*chr);
221+
}
222+
}
223+
if (keywords_.find(cased_name) == keywords_.end()) {
209224
return name;
210225
} else {
211226
return config_.keyword_prefix + name + config_.keyword_suffix;

include/codegen/python.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ static const Namer::Config kConfig = {
2626
/*object_suffix=*/"T",
2727
/*keyword_prefix=*/"",
2828
/*keyword_suffix=*/"_",
29+
/*keywords_casing=*/Namer::Config::KeywordsCasing::CASE_SENSITIVE,
2930
/*filenames=*/Case::kKeep,
3031
/*directories=*/Case::kKeep,
3132
/*output_path=*/"",
@@ -49,6 +50,7 @@ static const Namer::Config kStubConfig = {
4950
/*object_suffix=*/"T",
5051
/*keyword_prefix=*/"",
5152
/*keyword_suffix=*/"_",
53+
/*keywords_casing=*/Namer::Config::KeywordsCasing::CASE_SENSITIVE,
5254
/*filenames=*/Case::kKeep,
5355
/*directories=*/Case::kKeep,
5456
/*output_path=*/"",

src/bfbs_gen_lua.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ Namer::Config LuaDefaultConfig() {
6161
/*object_suffix=*/"",
6262
/*keyword_prefix=*/"",
6363
/*keyword_suffix=*/"_",
64+
/*keywords_casing=*/Namer::Config::KeywordsCasing::CASE_SENSITIVE,
6465
/*filenames=*/Case::kKeep,
6566
/*directories=*/Case::kKeep,
6667
/*output_path=*/"",

src/bfbs_gen_nim.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ Namer::Config NimDefaultConfig() {
7070
/*object_suffix=*/"T",
7171
/*keyword_prefix=*/"",
7272
/*keyword_suffix=*/"_",
73+
/*keywords_casing=*/Namer::Config::KeywordsCasing::CASE_SENSITIVE,
7374
/*filenames=*/Case::kKeep,
7475
/*directories=*/Case::kKeep,
7576
/*output_path=*/"",

src/idl_gen_dart.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ static Namer::Config DartDefaultConfig() {
4848
/*object_suffix=*/"T",
4949
/*keyword_prefix=*/"$",
5050
/*keyword_suffix=*/"",
51+
/*keywords_casing=*/Namer::Config::KeywordsCasing::CASE_SENSITIVE,
5152
/*filenames=*/Case::kKeep,
5253
/*directories=*/Case::kKeep,
5354
/*output_path=*/"",

src/idl_gen_go.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ static Namer::Config GoDefaultConfig() {
7575
/*object_suffix=*/"T",
7676
/*keyword_prefix=*/"",
7777
/*keyword_suffix=*/"_",
78+
/*keywords_casing=*/Namer::Config::KeywordsCasing::CASE_SENSITIVE,
7879
/*filenames=*/Case::kKeep,
7980
/*directories=*/Case::kKeep,
8081
/*output_path=*/"",

src/idl_gen_java.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ static Namer::Config JavaDefaultConfig() {
4646
/*object_suffix=*/"T",
4747
/*keyword_prefix=*/"",
4848
/*keyword_suffix=*/"_",
49+
/*keywords_casing=*/Namer::Config::KeywordsCasing::CASE_SENSITIVE,
4950
/*filenames=*/Case::kKeep,
5051
/*directories=*/Case::kKeep,
5152
/*output_path=*/"",

src/idl_gen_kotlin.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ static Namer::Config KotlinDefaultConfig() {
6464
/*object_suffix=*/"T",
6565
/*keyword_prefix=*/"",
6666
/*keyword_suffix=*/"_",
67+
/*keywords_casing=*/Namer::Config::KeywordsCasing::CASE_SENSITIVE,
6768
/*filenames=*/Case::kKeep,
6869
/*directories=*/Case::kKeep,
6970
/*output_path=*/"",

src/idl_gen_kotlin_kmp.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ static Namer::Config KotlinDefaultConfig() {
6262
/*object_suffix=*/"T",
6363
/*keyword_prefix=*/"",
6464
/*keyword_suffix=*/"E",
65+
/*keywords_casing=*/Namer::Config::KeywordsCasing::CASE_SENSITIVE,
6566
/*filenames=*/Case::kUpperCamel,
6667
/*directories=*/Case::kLowerCamel,
6768
/*output_path=*/"",

src/idl_gen_rust.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ static Namer::Config RustDefaultConfig() {
4949
/*object_suffix=*/"T",
5050
/*keyword_prefix=*/"",
5151
/*keyword_suffix=*/"_",
52+
/*keywords_casing=*/Namer::Config::KeywordsCasing::CASE_SENSITIVE,
5253
/*filenames=*/Case::kSnake,
5354
/*directories=*/Case::kSnake,
5455
/*output_path=*/"",

src/idl_gen_swift.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ static Namer::Config SwiftDefaultConfig() {
4747
/*object_suffix=*/"T",
4848
/*keyword_prefix=*/"",
4949
/*keyword_suffix=*/"_",
50+
/*keywords_casing=*/Namer::Config::KeywordsCasing::CASE_SENSITIVE,
5051
/*filenames=*/Case::kKeep,
5152
/*directories=*/Case::kKeep,
5253
/*output_path=*/"",

src/idl_gen_ts.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ Namer::Config TypeScriptDefaultConfig() {
6767
/*object_suffix=*/"T",
6868
/*keyword_prefix=*/"",
6969
/*keyword_suffix=*/"_",
70+
/*keywords_casing=*/Namer::Config::KeywordsCasing::CASE_SENSITIVE,
7071
/*filenames=*/Case::kDasher,
7172
/*directories=*/Case::kDasher,
7273
/*output_path=*/"",

0 commit comments

Comments
 (0)