Adds implementation flag for swift (#7202)

* Adds implementation flag for swift

Forces internal flag when using @_implementationOnly in swift

Fixes access type for verifier functions & encoder functions

Updates generated code

* Addresses PR comments & adds a code gen dir within the swift tests

* Adds test case for no-include

* Fixes code gen script

Removes prefix
This commit is contained in:
mustiikhalil
2022-04-06 22:31:38 +02:00
committed by GitHub
parent 14615699fa
commit 832c618f5f
10 changed files with 234 additions and 8 deletions

View File

@@ -167,8 +167,12 @@ class SwiftGenerator : public BaseGenerator {
code_ += "// " + std::string(FlatBuffersGeneratedWarning());
code_ += "// swiftlint:disable all";
code_ += "// swiftformat:disable all\n";
if (parser_.opts.include_dependence_headers || parser_.opts.generate_all)
if (parser_.opts.include_dependence_headers || parser_.opts.generate_all) {
if (parser_.opts.swift_implementation_only)
code_ += "@_implementationOnly \\";
code_ += "import FlatBuffers\n";
}
// Generate code for all the enum declarations.
for (auto it = parser_.enums_.vec.begin(); it != parser_.enums_.vec.end();
@@ -212,6 +216,7 @@ class SwiftGenerator : public BaseGenerator {
// Generates the reader for swift
void GenStructReader(const StructDef &struct_def) {
const bool is_private_access =
parser_.opts.swift_implementation_only ||
struct_def.attributes.Lookup("private") != nullptr;
code_.SetValue("ACCESS_TYPE", is_private_access ? "internal" : "public");
GenComment(struct_def.doc_comment);
@@ -286,7 +291,8 @@ class SwiftGenerator : public BaseGenerator {
}
code_ += "";
code_ +=
"public static func verify<T>(_ verifier: inout Verifier, at position: "
"{{ACCESS_TYPE}} static func verify<T>(_ verifier: inout Verifier, at "
"position: "
"Int, of type: T.Type) throws where T: Verifiable {";
Indent();
code_ +=
@@ -371,6 +377,7 @@ class SwiftGenerator : public BaseGenerator {
// Generates the create function for swift
void GenStructWriter(const StructDef &struct_def) {
const bool is_private_access =
parser_.opts.swift_implementation_only ||
struct_def.attributes.Lookup("private") != nullptr;
code_.SetValue("ACCESS_TYPE", is_private_access ? "internal" : "public");
code_.SetValue("STRUCTNAME", namer_.NamespacedType(struct_def));
@@ -440,6 +447,7 @@ class SwiftGenerator : public BaseGenerator {
// Generates the reader for swift
void GenTable(const StructDef &struct_def) {
const bool is_private_access =
parser_.opts.swift_implementation_only ||
struct_def.attributes.Lookup("private") != nullptr;
code_.SetValue("ACCESS_TYPE", is_private_access ? "internal" : "public");
GenObjectHeader(struct_def);
@@ -699,7 +707,7 @@ class SwiftGenerator : public BaseGenerator {
field.value.type.struct_def->fixed) &&
(IsVector(field.value.type) || IsArray(field.value.type))) {
const auto field_name = namer_.NamespacedType(*vectortype.struct_def);
code_ += "public static func " +
code_ += "{{ACCESS_TYPE}} static func " +
namer_.Method("start_vector_of", field_var) +
"(_ size: Int, in builder: inout "
"FlatBufferBuilder) {";
@@ -1054,7 +1062,7 @@ class SwiftGenerator : public BaseGenerator {
code_ += "";
if (struct_def.fields.vec.empty() == false) GenerateCodingKeys(struct_def);
code_ += "public func encode(to encoder: Encoder) throws {";
code_ += "{{ACCESS_TYPE}} func encode(to encoder: Encoder) throws {";
Indent();
if (struct_def.fields.vec.empty() == false) GenerateEncoderBody(struct_def);
Outdent();
@@ -1066,7 +1074,8 @@ class SwiftGenerator : public BaseGenerator {
void GenerateVerifier(const StructDef &struct_def) {
code_ +=
"public static func verify<T>(_ verifier: inout Verifier, at position: "
"{{ACCESS_TYPE}} static func verify<T>(_ verifier: inout Verifier, at "
"position: "
"Int, of type: T.Type) throws where T: Verifiable {";
Indent();
code_ += "var _v = try verifier.visitTable(at: position)";