Skip to content

Commit 5a52323

Browse files
author
Leif Battermann
committed
scalafmt
1 parent 73e5bbc commit 5a52323

29 files changed

+289
-305
lines changed

.scalafmt.conf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
style = defaultWithAlign
2+
maxColumn = 160
3+
newlines.penalizeSingleSelectMultiArgList = false
4+
project.excludeFilters = [
5+
target/
6+
]

project/plugins.sbt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "2.3")
22
addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.0")
33
addSbtPlugin("org.lyranthe.sbt" % "partial-unification" % "1.1.0")
4-
addSbtPlugin("io.get-coursier" % "sbt-coursier" % "1.0.1")
4+
addSbtPlugin("io.get-coursier" % "sbt-coursier" % "1.0.1")
5+
addSbtPlugin("com.lucidchart" % "sbt-scalafmt" % "1.15")

src/main/scala/json2caseclass/CaseClassGenerator.scala

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,16 @@ import json2caseclass.model.Types._
99

1010
object CaseClassGenerator {
1111

12-
def generate(conf: Config)(
13-
jsonString: JsonString,
14-
rootTypeName: RootTypeName,
15-
optionals: Seq[(ClassName, ClassFieldName)] = Nil): Either[CaseClassGenerationFailure, CaseClassSource] = {
12+
def generate(conf: Config)(jsonString: JsonString,
13+
rootTypeName: RootTypeName,
14+
optionals: Seq[(ClassName, ClassFieldName)] = Nil): Either[CaseClassGenerationFailure, CaseClassSource] = {
1615

1716
val generate = for {
18-
jsValue <- ? <~ JsonParser.parse(jsonString)
19-
schema <- SchemaExtractor.extractSchemaFromJsonRoot(rootTypeName, jsValue)
17+
jsValue <- ? <~ JsonParser.parse(jsonString)
18+
schema <- SchemaExtractor.extractSchemaFromJsonRoot(rootTypeName, jsValue)
2019
caseClasses <- ? <~ SchemaToCaseClassConverter.convert(schema)
21-
renamed = CaseClassOperations.renameAmbiguous(makeUnique, caseClasses)
22-
withOptionals = CaseClassOperations.addOptionals(renamed, optionals)
20+
renamed = CaseClassOperations.renameAmbiguous(makeUnique, caseClasses)
21+
withOptionals = CaseClassOperations.addOptionals(renamed, optionals)
2322
caseClassSource = conf.interpreter(withOptionals)
2423
} yield caseClassSource
2524

src/main/scala/json2caseclass/implementation/CaseClassNameGenerator.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ import json2caseclass.model.CaseClass._
44

55
object CaseClassNameGenerator {
66
def makeUnique(takenClassNames: Set[String], name: ClassName): Option[ClassName] = {
7-
val suffixes = "" #:: Stream.from(1).map(_.toString)
7+
val suffixes = "" #:: Stream.from(1).map(_.toString)
88
val namesWithSuffix = suffixes.map(suffix => s"$name$suffix")
9-
namesWithSuffix.find(nameWithSuffix => !takenClassNames.contains(nameWithSuffix))
9+
namesWithSuffix
10+
.find(nameWithSuffix => !takenClassNames.contains(nameWithSuffix))
1011
.map(_.toClassName)
1112
}
1213
}

src/main/scala/json2caseclass/implementation/CaseClassOperations.scala

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -13,24 +13,20 @@ object CaseClassOperations {
1313
}
1414

1515
def addOptionals(caseClasses: Seq[CaseClass], optionals: Seq[(ClassName, ClassFieldName)]): Seq[CaseClass] = {
16-
caseClasses.map { case o@CaseClass(_, name, fields) =>
17-
val withOptionals =
18-
fields.map {
19-
case (fName, scalaType) if optionals.contains(name -> fName) =>
20-
(fName, ScalaOption(scalaType))
21-
case other => other
22-
}
23-
o.copy(fields = withOptionals)
16+
caseClasses.map {
17+
case o @ CaseClass(_, name, fields) =>
18+
val withOptionals =
19+
fields.map {
20+
case (fName, scalaType) if optionals.contains(name -> fName) =>
21+
(fName, ScalaOption(scalaType))
22+
case other => other
23+
}
24+
o.copy(fields = withOptionals)
2425
}
2526
}
2627

27-
private def findAlternativeNames(
28-
makeUnique: (Set[String], ClassName) => Option[ClassName],
29-
caseClasses: Seq[CaseClass]): Map[Int, ClassName] = {
30-
def alternativeNamesRec(
31-
ccs: Seq[CaseClass],
32-
alreadyTakenNames: Set[String],
33-
acc: Map[Int, ClassName]): Map[Int, ClassName] = {
28+
private def findAlternativeNames(makeUnique: (Set[String], ClassName) => Option[ClassName], caseClasses: Seq[CaseClass]): Map[Int, ClassName] = {
29+
def alternativeNamesRec(ccs: Seq[CaseClass], alreadyTakenNames: Set[String], acc: Map[Int, ClassName]): Map[Int, ClassName] = {
3430

3531
ccs match {
3632
case Nil => acc
@@ -50,7 +46,7 @@ object CaseClassOperations {
5046
private def rename(caseClasses: Seq[CaseClass], alternativeNames: Map[Int, ClassName]): Seq[CaseClass] = {
5147
def renameFieldTypes(fields: Seq[(ClassFieldName, ScalaType)]) = {
5248
fields.map {
53-
case f@(fName, ScalaObject(id, _)) =>
49+
case f @ (fName, ScalaObject(id, _)) =>
5450
alternativeNames
5551
.get(id)
5652
.map(altName => (fName, ScalaObject(id, altName.toScalaObjectName)))
@@ -59,12 +55,13 @@ object CaseClassOperations {
5955
}
6056
}
6157

62-
caseClasses.map { case o@CaseClass(id, _, fields) =>
63-
alternativeNames
64-
.get(id)
65-
.map(altName => o.copy(name = altName))
66-
.getOrElse(o)
67-
.copy(fields = renameFieldTypes(fields))
58+
caseClasses.map {
59+
case o @ CaseClass(id, _, fields) =>
60+
alternativeNames
61+
.get(id)
62+
.map(altName => o.copy(name = altName))
63+
.getOrElse(o)
64+
.copy(fields = renameFieldTypes(fields))
6865
}
6966
}
7067
}

src/main/scala/json2caseclass/implementation/CaseClassToStringInterpreter.scala

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,20 @@ import json2caseclass.model.{ScalaType, _}
77
object CaseClassToStringInterpreter {
88

99
implicit class InterpreterOptions(interpreter: Interpreter) {
10-
def withPlayJsonFormats = CaseClassToStringInterpreter.withPlayJsonFormats(interpreter)
10+
def withPlayJsonFormats =
11+
CaseClassToStringInterpreter.withPlayJsonFormats(interpreter)
1112
}
1213

13-
def withPlayJsonFormats: Interpreter => Interpreter = {
14-
interpreter => {
15-
caseClasses =>
16-
s"""${interpreter(caseClasses)}
14+
def withPlayJsonFormats: Interpreter => Interpreter = { interpreter =>
15+
{ caseClasses =>
16+
s"""${interpreter(caseClasses)}
1717
|${createCompanionObjectWithPlayJsonFormats(caseClasses)}
18-
|"""
19-
.stripMargin
20-
.toCaseClassSource
18+
|""".stripMargin.toCaseClassSource
2119
}
2220
}
2321

24-
def plainCaseClasses: Interpreter = {
25-
caseClasses => {
22+
def plainCaseClasses: Interpreter = { caseClasses =>
23+
{
2624
val caseClassSource = caseClasses
2725
.map(interpret)
2826
.mkString("\n\n") + "\n"
@@ -51,7 +49,7 @@ object CaseClassToStringInterpreter {
5149
val CaseClass(_, _, fields) = caseClass
5250

5351
fields.forall {
54-
case o@(_, ScalaObject(_, _)) =>
52+
case o @ (_, ScalaObject(_, _)) =>
5553
typeExistsInUnresolvedDeps(alreadyDefined, o._2)
5654
case (_, ScalaSeq(t)) =>
5755
typeExistsInUnresolvedDeps(alreadyDefined, t)
@@ -75,7 +73,6 @@ object CaseClassToStringInterpreter {
7573
}
7674
}
7775

78-
7976
private def createCompanionObjectWithPlayJsonFormats(caseClasses: Seq[CaseClass]): String = {
8077
val formats =
8178
sortForPlayJsonFormats(caseClasses)
@@ -92,8 +89,9 @@ object CaseClassToStringInterpreter {
9289
private def interpret(caseClass: CaseClass): String = {
9390
val CaseClass(_, name, fields) = caseClass
9491

95-
val members = fields.map { case (fieldName, fieldType) =>
96-
s"$fieldName: ${typeName(fieldType)}"
92+
val members = fields.map {
93+
case (fieldName, fieldType) =>
94+
s"$fieldName: ${typeName(fieldType)}"
9795
}
9896

9997
s"case class $name(${members.map(m => s"\n $m").mkString(",")}\n)"
@@ -102,12 +100,11 @@ object CaseClassToStringInterpreter {
102100
private def typeName(scalaType: ScalaType): String = {
103101
scalaType match {
104102
case ScalaOption(optionType) => s"Option[${typeName(optionType)}]"
105-
case ScalaString => "String"
106-
case ScalaDouble => "Double"
107-
case ScalaBoolean => "Boolean"
108-
case ScalaSeq(seqType) => s"Seq[${typeName(seqType)}]"
109-
case ScalaObject(_, name) => name
103+
case ScalaString => "String"
104+
case ScalaDouble => "Double"
105+
case ScalaBoolean => "Boolean"
106+
case ScalaSeq(seqType) => s"Seq[${typeName(seqType)}]"
107+
case ScalaObject(_, name) => name
110108
}
111109
}
112110
}
113-

src/main/scala/json2caseclass/implementation/NameTransformer.scala

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ object NameTransformer {
1313
)
1414

1515
def makeSafeFieldName(fieldName: String): SchemaFieldName = {
16-
if (reservedWords.contains(fieldName.toLowerCase)|| containsInvalidChars(fieldName)) {
16+
if (reservedWords.contains(fieldName.toLowerCase) || containsInvalidChars(fieldName)) {
1717
s"`$fieldName`".toSchemaFieldName
1818
} else {
1919
fieldName.toSchemaFieldName
@@ -25,8 +25,9 @@ object NameTransformer {
2525
}
2626

2727
def normalizeName(suffix: Suffix)(objectName: String): String = {
28-
if (reservedWords.contains(objectName.toLowerCase) || scalaTypes.map(_.toLowerCase).contains(
29-
objectName.toLowerCase)) {
28+
if (reservedWords.contains(objectName.toLowerCase) || scalaTypes
29+
.map(_.toLowerCase)
30+
.contains(objectName.toLowerCase)) {
3031
s"${objectName.capitalize}$suffix"
3132
} else {
3233
objectName
@@ -39,7 +40,7 @@ object NameTransformer {
3940
}
4041

4142
def containsInvalidChars(name: String): Boolean = {
42-
val invalidChars = "[^a-zA-Z0-9_]"
43+
val invalidChars = "[^a-zA-Z0-9_]"
4344
val invalidFirstChar = "^[^a-zA-Z_]"
4445
Pattern.compile(invalidChars).matcher(name).find() ||
4546
Pattern.compile(invalidFirstChar).matcher(name).find()

src/main/scala/json2caseclass/implementation/SchemaExtractor.scala

Lines changed: 13 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,14 @@ package json2caseclass.implementation
33
import cats.data.ReaderWriterStateT._
44
import cats.implicits._
55
import json2caseclass.model.Schema._
6-
import json2caseclass.model.Types.{
7-
ErrorOr,
8-
ErrorRWSOr,
9-
JsValueFilter,
10-
RootTypeName
11-
}
6+
import json2caseclass.model.Types.{ErrorOr, ErrorRWSOr, JsValueFilter, RootTypeName}
127
import json2caseclass.model._
138
import play.api.libs.json._
149
import scala.language.existentials
1510

1611
object SchemaExtractor {
1712

18-
def extractSchemaFromJsonRoot(rootTypeName: RootTypeName,
19-
value: JsValue): ErrorRWSOr[Schema] = {
13+
def extractSchemaFromJsonRoot(rootTypeName: RootTypeName, value: JsValue): ErrorRWSOr[Schema] = {
2014
value match {
2115
case JsObject(fields) =>
2216
extractSchemaFromJsObjectFields(rootTypeName, fields.toList)
@@ -27,9 +21,7 @@ object SchemaExtractor {
2721
}
2822
}
2923

30-
private def extractSchemaFromJsObjectFields(
31-
name: String,
32-
fields: List[(String, JsValue)]): ErrorRWSOr[Schema] = {
24+
private def extractSchemaFromJsObjectFields(name: String, fields: List[(String, JsValue)]): ErrorRWSOr[Schema] = {
3325
for {
3426
env <- ask[ErrorOr, Environment, Unit, Int]
3527
fieldSchemas <- fields
@@ -47,9 +39,7 @@ object SchemaExtractor {
4739
} yield schema
4840
}
4941

50-
private def extractSchemaFromJsValue(
51-
name: String,
52-
value: JsValue): ErrorRWSOr[(String, Schema)] = {
42+
private def extractSchemaFromJsValue(name: String, value: JsValue): ErrorRWSOr[(String, Schema)] = {
5343
val schemaOrError = value match {
5444
case JsNull =>
5545
? <~ Left(ValueIsNull(name))
@@ -74,9 +64,7 @@ object SchemaExtractor {
7464
}
7565
}
7666

77-
private def extractSchemaFromArray(
78-
name: String,
79-
values: List[JsValue]): ErrorRWSOr[Schema] = {
67+
private def extractSchemaFromArray(name: String, values: List[JsValue]): ErrorRWSOr[Schema] = {
8068
for {
8169
env <- ask[ErrorOr, Environment, Unit, Int]
8270
schemas <- values
@@ -87,8 +75,7 @@ object SchemaExtractor {
8775
schemaErrorRWSOr = if (schemas forall (haveSameStructure(_, first))) {
8876
? <~ Right(SchemaArray(first))
8977
} else if (schemas forall isObject) {
90-
mkSchemaObject(env.nameTransformer.makeSafeCamelCaseClassName(name),
91-
unify(schemas))
78+
mkSchemaObject(env.nameTransformer.makeSafeCamelCaseClassName(name), unify(schemas))
9279
.map(SchemaArray)
9380
} else {
9481
? <~ Left(ArrayTypeNotConsistent(name))
@@ -97,11 +84,10 @@ object SchemaExtractor {
9784
} yield schema
9885
}
9986

100-
private def mkSchemaObject(name: SchemaObjectName,
101-
fields: Seq[(SchemaFieldName, Schema)]) = {
87+
private def mkSchemaObject(name: SchemaObjectName, fields: Seq[(SchemaFieldName, Schema)]) = {
10288
for {
10389
id <- get[ErrorOr, Environment, Unit, Int]
104-
_ <- modify[ErrorOr, Environment, Unit, Int]((_: Int) + 1)
90+
_ <- modify[ErrorOr, Environment, Unit, Int]((_: Int) + 1)
10591
} yield
10692
SchemaObject(
10793
id,
@@ -114,8 +100,7 @@ object SchemaExtractor {
114100
def containsField(t: Schema, field: (String, Schema)) = {
115101
t match {
116102
case SchemaObject(_, _, xs) =>
117-
xs.exists(x =>
118-
x._1 == field._1 && Schema.haveSameStructure(x._2, field._2))
103+
xs.exists(x => x._1 == field._1 && Schema.haveSameStructure(x._2, field._2))
119104
case _ => false
120105
}
121106
}
@@ -125,16 +110,12 @@ object SchemaExtractor {
125110
case _ => Nil
126111
}
127112

128-
def filterDuplicates(list: List[(SchemaFieldName, Schema)])
129-
: List[(SchemaFieldName, Schema)] = {
130-
def filterRec(list: List[(SchemaFieldName, Schema)],
131-
acc: List[(SchemaFieldName, Schema)])
132-
: List[(SchemaFieldName, Schema)] = {
113+
def filterDuplicates(list: List[(SchemaFieldName, Schema)]): List[(SchemaFieldName, Schema)] = {
114+
def filterRec(list: List[(SchemaFieldName, Schema)], acc: List[(SchemaFieldName, Schema)]): List[(SchemaFieldName, Schema)] = {
133115
list match {
134116
case Nil => acc
135117
case h :: t =>
136-
if (acc.exists(
137-
x => x._1 == h._1 && Schema.haveSameStructure(x._2, h._2))) {
118+
if (acc.exists(x => x._1 == h._1 && Schema.haveSameStructure(x._2, h._2))) {
138119
filterRec(t, acc)
139120
} else {
140121
filterRec(t, h :: acc)
@@ -146,8 +127,7 @@ object SchemaExtractor {
146127

147128
val (required, optionals) =
148129
filterDuplicates(allFields)
149-
.partition(field =>
150-
schemas.forall(schema => containsField(schema, field)))
130+
.partition(field => schemas.forall(schema => containsField(schema, field)))
151131

152132
val combinedFields = required ++ optionals.map {
153133
case (n, s) => (n, SchemaOption(s))

0 commit comments

Comments
 (0)