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