feat(RES-57): Add visibility to control scope of generated code (#18)
All checks were successful
gitea-openium/resgen.swift/pipeline/head This commit looks good

Add visibility parameter: public, package, internal, private
Impacted command: analytics, colors, fonts, images, strings, tags

Reviewed-on: #18
This commit is contained in:
2025-07-21 16:56:05 +02:00
parent beca2c6b2b
commit 5ad219ae89
62 changed files with 1526 additions and 794 deletions

View File

@@ -251,7 +251,8 @@ enum StringsFileGenerator {
inputFilename: String,
extensionName: String,
extensionFilePath: String,
extensionSuffix: String
extensionSuffix: String,
visibility: ExtensionVisibility
) {
// Get extension content
let extensionFileContent = Self.getExtensionContent(
@@ -261,7 +262,8 @@ enum StringsFileGenerator {
staticVar: staticVar,
inputFilename: inputFilename,
extensionName: extensionName,
extensionSuffix: extensionSuffix
extensionSuffix: extensionSuffix,
visibility: visibility
)
// Write content
@@ -284,7 +286,8 @@ enum StringsFileGenerator {
staticVar: Bool,
inputFilename: String,
extensionName: String,
extensionSuffix: String
extensionSuffix: String,
visibility: ExtensionVisibility
) -> String {
[
Self.getHeader(
@@ -295,13 +298,15 @@ enum StringsFileGenerator {
sections: sections,
tags: tags,
extensionClassname: extensionName,
extensionSuffix: extensionSuffix
extensionSuffix: extensionSuffix,
visibility: visibility
),
Self.getProperties(
sections: sections,
defaultLang: lang,
tags: tags,
staticVar: staticVar
staticVar: staticVar,
visibility: visibility
),
Self.getFooter()
]
@@ -326,9 +331,10 @@ enum StringsFileGenerator {
sections: [Section],
tags: [String],
extensionClassname: String,
extensionSuffix: String
extensionSuffix: String,
visibility: ExtensionVisibility
) -> String {
var enumDefinition = "\n enum Key\(extensionSuffix.uppercasedFirst()): String {\n"
var enumDefinition = "\n \(visibility) enum Key\(extensionSuffix.uppercasedFirst()): String {\n"
// Enum
sections.forEach { section in
@@ -347,7 +353,7 @@ enum StringsFileGenerator {
// KeyPath accessors
enumDefinition += "\n"
enumDefinition += " var keyPath: KeyPath<\(extensionClassname), String> {\n"
enumDefinition += " \(visibility) var keyPath: KeyPath<\(extensionClassname), String> {\n"
enumDefinition += " switch self {\n"
sections.forEach { section in
// Check that at least one string will be generated
@@ -369,7 +375,13 @@ enum StringsFileGenerator {
return enumDefinition
}
private static func getProperties(sections: [Section], defaultLang lang: String, tags: [String], staticVar: Bool) -> String {
private static func getProperties(
sections: [Section],
defaultLang lang: String,
tags: [String],
staticVar: Bool,
visibility: ExtensionVisibility
) -> String {
sections.compactMap { section in
// Check that at least one string will be generated
guard section.hasOneOrMoreMatchingTags(tags: tags) else {
@@ -382,10 +394,21 @@ enum StringsFileGenerator {
return nil // Go to next definition
}
if staticVar {
return "\n\(definition.getNSLocalizedStringStaticProperty(forLang: lang))"
}
return "\n\(definition.getNSLocalizedStringProperty(forLang: lang))"
let property: String = {
if staticVar {
definition.getNSLocalizedStringStaticProperty(
forLang: lang,
visibility: visibility
)
} else {
definition.getNSLocalizedStringProperty(
forLang: lang,
visibility: visibility
)
}
}()
return "\n\(property)"
}
.joined(separator: "\n")
return res

View File

@@ -17,7 +17,8 @@ enum TagsGenerator {
tags: [String],
staticVar: Bool,
extensionName: String,
extensionFilePath: String
extensionFilePath: String,
visibility: ExtensionVisibility
) {
// Get extension content
let extensionFileContent = Self.getExtensionContent(
@@ -25,7 +26,8 @@ enum TagsGenerator {
lang: lang,
tags: tags,
staticVar: staticVar,
extensionName: extensionName
extensionName: extensionName,
visibility: visibility
)
// Write content
@@ -46,7 +48,8 @@ enum TagsGenerator {
lang: String,
tags: [String],
staticVar: Bool,
extensionName: String
extensionName: String,
visibility: ExtensionVisibility
) -> String {
[
Self.getHeader(
@@ -57,7 +60,8 @@ enum TagsGenerator {
sections: sections,
lang: lang,
tags: tags,
staticVar: staticVar
staticVar: staticVar,
visibility: visibility
),
Self.getFooter()
]
@@ -80,7 +84,8 @@ enum TagsGenerator {
sections: [Section],
lang: String,
tags: [String],
staticVar: Bool
staticVar: Bool,
visibility: ExtensionVisibility
) -> String {
sections
.compactMap { section in
@@ -96,9 +101,9 @@ enum TagsGenerator {
}
if staticVar {
res += "\n\n\(definition.getStaticProperty(forLang: lang))"
res += "\n\n\(definition.getStaticProperty(forLang: lang, visibility: visibility))"
} else {
res += "\n\n\(definition.getProperty(forLang: lang))"
res += "\n\n\(definition.getProperty(forLang: lang, visibility: visibility))"
}
}
return res