[TS] Fix generation of reserved words in object api (#7106) (#7115)

* Fix C/C++ Create<Type>Direct with sorted vectors

If a struct has a key the vector has to be sorted. To sort the vector
you can't use "const".

* Changes due to code review

* Improve code readability

* Add generate of JSON schema to string to lib

* option indent_step is supported

* Remove unused variables

* Fix break in test

* Fix style to be consistent with rest of the code

* [TS] Fix reserved words as arguments (#6955)

* [TS] Fix generation of reserved words in object api (#7106)
This commit is contained in:
tira-misu
2022-02-22 05:13:40 +01:00
committed by GitHub
parent 5d101afb52
commit 5ac0367ed3

View File

@@ -55,6 +55,7 @@ class TsGenerator : public BaseGenerator {
// https://github.com/microsoft/TypeScript/issues/2536 // https://github.com/microsoft/TypeScript/issues/2536
// One per line to ease comparisons to that list are easier // One per line to ease comparisons to that list are easier
static const char *const keywords[] = { static const char *const keywords[] = {
"argument",
"break", "break",
"case", "case",
"catch", "catch",
@@ -894,6 +895,7 @@ class TsGenerator : public BaseGenerator {
if (field.deprecated) continue; if (field.deprecated) continue;
const auto field_name = MakeCamel(field.name, false); const auto field_name = MakeCamel(field.name, false);
const auto field_name_escaped = EscapeKeyword(field_name);
const std::string field_binded_method = const std::string field_binded_method =
"this." + field_name + ".bind(this)"; "this." + field_name + ".bind(this)";
@@ -918,11 +920,11 @@ class TsGenerator : public BaseGenerator {
field_val = "this." + field_name + "()"; field_val = "this." + field_name + "()";
if (field.value.type.base_type != BASE_TYPE_STRING) { if (field.value.type.base_type != BASE_TYPE_STRING) {
field_offset_val = "this." + field_name; field_offset_val = "this." + field_name_escaped;
} else { } else {
field_offset_decl = GenNullCheckConditional( field_offset_decl = GenNullCheckConditional(
"this." + field_name, "this." + field_name_escaped,
"builder.createString(this." + field_name + "!)", "0"); "builder.createString(this." + field_name_escaped + "!)", "0");
} }
} }
@@ -934,11 +936,13 @@ class TsGenerator : public BaseGenerator {
const auto &sd = *field.value.type.struct_def; const auto &sd = *field.value.type.struct_def;
field_type += GetObjApiClassName(sd, parser.opts); field_type += GetObjApiClassName(sd, parser.opts);
const std::string field_accessor = "this." + field_name + "()"; const std::string field_accessor =
"this." + field_name_escaped + "()";
field_val = GenNullCheckConditional(field_accessor, field_val = GenNullCheckConditional(field_accessor,
field_accessor + "!.unpack()"); field_accessor + "!.unpack()");
auto packing = GenNullCheckConditional( auto packing = GenNullCheckConditional(
"this." + field_name, "this." + field_name + "!.pack(builder)", "this." + field_name_escaped,
"this." + field_name_escaped + "!.pack(builder)",
"0"); "0");
if (sd.fixed) { if (sd.fixed) {
@@ -970,7 +974,8 @@ class TsGenerator : public BaseGenerator {
if (sd.fixed) { if (sd.fixed) {
field_offset_decl = field_offset_decl =
"builder.createStructOffsetList(this." + field_name + "builder.createStructOffsetList(this." +
field_name_escaped +
", " + AddImport(imports, struct_def, struct_def) + ", " + AddImport(imports, struct_def, struct_def) +
".start" + MakeCamel(field_name) + "Vector)"; ".start" + MakeCamel(field_name) + "Vector)";
} else { } else {
@@ -978,7 +983,7 @@ class TsGenerator : public BaseGenerator {
AddImport(imports, struct_def, struct_def) + ".create" + AddImport(imports, struct_def, struct_def) + ".create" +
MakeCamel(field_name) + MakeCamel(field_name) +
"Vector(builder, builder.createObjectOffsetList(" + "Vector(builder, builder.createObjectOffsetList(" +
"this." + field_name + "))"; "this." + field_name_escaped + "))";
} }
break; break;
@@ -993,7 +998,7 @@ class TsGenerator : public BaseGenerator {
AddImport(imports, struct_def, struct_def) + ".create" + AddImport(imports, struct_def, struct_def) + ".create" +
MakeCamel(field_name) + MakeCamel(field_name) +
"Vector(builder, builder.createObjectOffsetList(" + "Vector(builder, builder.createObjectOffsetList(" +
"this." + field_name + "))"; "this." + field_name_escaped + "))";
break; break;
} }
@@ -1008,7 +1013,7 @@ class TsGenerator : public BaseGenerator {
AddImport(imports, struct_def, struct_def) + ".create" + AddImport(imports, struct_def, struct_def) + ".create" +
MakeCamel(field_name) + MakeCamel(field_name) +
"Vector(builder, builder.createObjectOffsetList(" + "Vector(builder, builder.createObjectOffsetList(" +
"this." + field_name + "))"; "this." + field_name_escaped + "))";
break; break;
} }
@@ -1026,7 +1031,8 @@ class TsGenerator : public BaseGenerator {
field_offset_decl = AddImport(imports, struct_def, struct_def) + field_offset_decl = AddImport(imports, struct_def, struct_def) +
".create" + MakeCamel(field_name) + ".create" + MakeCamel(field_name) +
"Vector(builder, this." + field_name + ")"; "Vector(builder, this." +
field_name_escaped + ")";
break; break;
} }
@@ -1041,7 +1047,7 @@ class TsGenerator : public BaseGenerator {
field_val = GenUnionValTS(imports, field_name, field.value.type); field_val = GenUnionValTS(imports, field_name, field.value.type);
field_offset_decl = field_offset_decl =
"builder.createObjectOffset(this." + field_name + ")"; "builder.createObjectOffset(this." + field_name_escaped + ")";
break; break;
} }
@@ -1054,14 +1060,15 @@ class TsGenerator : public BaseGenerator {
if (!field_offset_decl.empty()) { if (!field_offset_decl.empty()) {
field_offset_decl = field_offset_decl =
" const " + field_name + " = " + field_offset_decl + ";"; " const " + field_name_escaped + " = " + field_offset_decl + ";";
} }
if (field_offset_val.empty()) { field_offset_val = field_name; } if (field_offset_val.empty()) { field_offset_val = field_name_escaped; }
unpack_func += " " + field_val; unpack_func += " " + field_val;
unpack_to_func += " _o." + field_name + " = " + field_val + ";"; unpack_to_func += " _o." + field_name_escaped + " = " + field_val + ";";
constructor_func += " public " + field_name + ": " + field_type + " = " + constructor_func += " public " + field_name_escaped + ": " + field_type +
" = " +
field_default_val; field_default_val;
if (!struct_def.fixed) { if (!struct_def.fixed) {