Skip to content

Commit 07d844f

Browse files
committed
more coherent solution
1 parent 7db67f6 commit 07d844f

File tree

1 file changed

+22
-19
lines changed

1 file changed

+22
-19
lines changed

modules/codegen/src/smithy4s/codegen/internals/Renderer.scala

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,17 @@ private[internals] object Renderer {
8181
def apply(unit: CompilationUnit): List[Result] = {
8282
val r = new Renderer(unit)
8383

84-
val pack = Result(
85-
unit.namespace,
86-
"package",
87-
r.renderPackageContents.list
88-
.map(_.segments.toList.map(_.show).mkString)
89-
.mkString(
90-
System.lineSeparator()
91-
)
92-
)
84+
val packageObjectFile = r.renderPackageContents.map { packageLines =>
85+
Result(
86+
unit.namespace,
87+
"package",
88+
packageLines.list
89+
.map(_.segments.toList.map(_.show).mkString)
90+
.mkString(
91+
System.lineSeparator()
92+
)
93+
)
94+
}
9395

9496
val classes = unit.declarations.map { decl =>
9597
val renderResult = r.renderDecl(decl) ++ newline
@@ -161,13 +163,7 @@ private[internals] object Renderer {
161163
Result(unit.namespace, decl.name, content)
162164
}
163165

164-
val packageApplicableDecls = unit.declarations.filter {
165-
case _: TypeAlias | _: ValidatedTypeAlias | _: Service => true
166-
case _ => false
167-
}
168-
169-
if (packageApplicableDecls.isEmpty) classes
170-
else pack :: classes
166+
packageObjectFile.toList ::: classes
171167
}
172168

173169
}
@@ -271,7 +267,7 @@ private[internals] class Renderer(compilationUnit: CompilationUnit) { self =>
271267
}
272268
}
273269

274-
def renderPackageContents: Lines = {
270+
def renderPackageContents: Option[Lines] = {
275271
val typeAliases = compilationUnit.declarations
276272
.collect {
277273
case TypeAlias(_, name, _, _, _, hints) =>
@@ -288,24 +284,31 @@ private[internals] class Renderer(compilationUnit: CompilationUnit) { self =>
288284
)
289285
}
290286

287+
val serviceAliases =
288+
compilationUnit.declarations.map(renderDeclPackageContents)
289+
291290
val blk =
292291
block(
293292
line"package object ${compilationUnit.namespace.split('.').last}"
294293
)(
295-
compilationUnit.declarations.map(renderDeclPackageContents),
294+
serviceAliases,
296295
newline,
297296
typeAliases,
298297
newline
299298
)
300299

301300
val parts = compilationUnit.namespace.split('.').filter(_.nonEmpty)
302-
if (parts.size > 1) {
301+
val withParentPackage = if (parts.size > 1) {
303302
lines(
304303
line"package ${parts.dropRight(1).mkString(".")}",
305304
newline,
306305
blk
307306
)
308307
} else blk
308+
309+
Some(typeAliases ++ serviceAliases)
310+
.filterNot(_.combineAll.isEmpty)
311+
.as(withParentPackage)
309312
}
310313

311314
private def renderDeclPackageContents(decl: Decl): Lines = decl match {

0 commit comments

Comments
 (0)