Skip to content

Commit 7370dd6

Browse files
authored
Merge pull request tethys-json#312 from dos65/ci_fmt
enforce fmt checks on ci
2 parents 3676515 + 88a6cf8 commit 7370dd6

File tree

81 files changed

+7203
-2267
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

81 files changed

+7203
-2267
lines changed

Diff for: .github/workflows/scala.yml

+13
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,19 @@ jobs:
2626

2727
- name: Test
2828
run: sbt ++${{matrix.scala}} test
29+
30+
fmt:
31+
name: Fmt
32+
runs-on: ubuntu-latest
33+
steps:
34+
- uses: actions/checkout@v4
35+
- uses: actions/setup-java@v4
36+
with:
37+
distribution: temurin
38+
java-version: 17
39+
40+
- name: Fmt
41+
run: sbt "scalafmtCheckAll;scalafmtSbtCheck"
2942

3043
publish:
3144
name: Publish Artifacts

Diff for: modules/circe/src/main/scala/io.circe/JsonNumberHack.scala

+15-14
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import tethys.writers.tokens.TokenWriter
44

55
trait JsonNumberHack {
66
protected def writeNumber(number: JsonNumber, writer: TokenWriter): Unit = {
7-
if(JsonNumberHack.isHackCompatible) {
7+
if (JsonNumberHack.isHackCompatible) {
88
number match {
99
case value: JsonDecimal =>
1010
writer.writeRawJson(value.toString)
@@ -27,17 +27,18 @@ trait JsonNumberHack {
2727
}
2828

2929
object JsonNumberHack {
30-
private val isHackCompatible: Boolean = try {
31-
val loader = getClass.getClassLoader
32-
loader.loadClass("io.circe.BiggerDecimalJsonNumber")
33-
loader.loadClass("io.circe.JsonDecimal")
34-
loader.loadClass("io.circe.JsonBiggerDecimal")
35-
loader.loadClass("io.circe.JsonBigDecimal")
36-
loader.loadClass("io.circe.JsonLong")
37-
loader.loadClass("io.circe.JsonDouble")
38-
loader.loadClass("io.circe.JsonFloat")
39-
true
40-
} catch {
41-
case _: ClassNotFoundException => false
42-
}
30+
private val isHackCompatible: Boolean =
31+
try {
32+
val loader = getClass.getClassLoader
33+
loader.loadClass("io.circe.BiggerDecimalJsonNumber")
34+
loader.loadClass("io.circe.JsonDecimal")
35+
loader.loadClass("io.circe.JsonBiggerDecimal")
36+
loader.loadClass("io.circe.JsonBigDecimal")
37+
loader.loadClass("io.circe.JsonLong")
38+
loader.loadClass("io.circe.JsonDouble")
39+
loader.loadClass("io.circe.JsonFloat")
40+
true
41+
} catch {
42+
case _: ClassNotFoundException => false
43+
}
4344
}

Diff for: modules/circe/src/main/scala/tethys/circe/ast/CirceSupport.scala

+58-42
Original file line numberDiff line numberDiff line change
@@ -8,59 +8,73 @@ import tethys.{JsonObjectWriter, JsonReader, JsonWriter}
88
import tethys.writers.tokens.TokenWriter
99

1010
trait CirceSupport {
11-
implicit lazy val circeJsonObjectWriter: JsonWriter[JsonObject] = new JsonObjectWriter[JsonObject] {
12-
def writeValues(value: JsonObject, writer: TokenWriter): Unit = {
13-
val folder = new TethysJsonFolder(writer)
14-
val it = value.toIterable.iterator
15-
while (it.hasNext) {
16-
val (k, v) = it.next()
17-
18-
writer.writeFieldName(k)
19-
v.foldWith(folder)
11+
implicit lazy val circeJsonObjectWriter: JsonWriter[JsonObject] =
12+
new JsonObjectWriter[JsonObject] {
13+
def writeValues(value: JsonObject, writer: TokenWriter): Unit = {
14+
val folder = new TethysJsonFolder(writer)
15+
val it = value.toIterable.iterator
16+
while (it.hasNext) {
17+
val (k, v) = it.next()
18+
19+
writer.writeFieldName(k)
20+
v.foldWith(folder)
21+
}
2022
}
2123
}
22-
}
2324

2425
implicit lazy val circeJsonWriter: JsonWriter[Json] = new JsonWriter[Json] {
25-
def write(value: Json, writer: TokenWriter): Unit = value.foldWith(new TethysJsonFolder(writer))
26+
def write(value: Json, writer: TokenWriter): Unit =
27+
value.foldWith(new TethysJsonFolder(writer))
2628
}
2729

28-
implicit lazy val circeJsonObjectReader: JsonReader[JsonObject] = new JsonReader[JsonObject] {
29-
def read(it: TokenIterator)(implicit fieldName: FieldName): JsonObject =
30-
if (!it.currentToken().isObjectStart) ReaderError.wrongJson(s"Expected object start but found: ${it.currentToken()}")
31-
else {
32-
it.next()
33-
34-
var builder = ArrayBuffer.newBuilder[(String, Json)]
35-
while (!it.currentToken().isObjectEnd) {
36-
val token = it.currentToken()
37-
if (token.isFieldName) {
38-
val name = it.fieldName()
39-
val value = circeJsonReader.read(it.next())(fieldName.appendFieldName(name))
40-
41-
builder += ((name, value))
30+
implicit lazy val circeJsonObjectReader: JsonReader[JsonObject] =
31+
new JsonReader[JsonObject] {
32+
def read(it: TokenIterator)(implicit fieldName: FieldName): JsonObject =
33+
if (!it.currentToken().isObjectStart)
34+
ReaderError.wrongJson(
35+
s"Expected object start but found: ${it.currentToken()}"
36+
)
37+
else {
38+
it.next()
39+
40+
var builder = ArrayBuffer.newBuilder[(String, Json)]
41+
while (!it.currentToken().isObjectEnd) {
42+
val token = it.currentToken()
43+
if (token.isFieldName) {
44+
val name = it.fieldName()
45+
val value =
46+
circeJsonReader.read(it.next())(fieldName.appendFieldName(name))
47+
48+
builder += ((name, value))
49+
} else
50+
ReaderError.wrongJson(
51+
s"Expect end of object or field name but '$token' found"
52+
)(fieldName)
4253
}
43-
else ReaderError.wrongJson(s"Expect end of object or field name but '$token' found")(fieldName)
44-
}
45-
it.next()
54+
it.next()
4655

47-
JsonObject.fromIterable(builder.result)
48-
}
49-
}
56+
JsonObject.fromIterable(builder.result)
57+
}
58+
}
5059

5160
implicit lazy val circeJsonReader: JsonReader[Json] = new JsonReader[Json] {
5261
def read(it: TokenIterator)(implicit fieldName: FieldName): Json = {
5362
val token = it.currentToken()
5463

55-
if (token.isObjectStart) Json.fromJsonObject(circeJsonObjectReader.read(it))
56-
else if (token.isArrayStart) Json.fromValues(JsonReader[Vector[Json]].read(it))
57-
else if (token.isStringValue) Json.fromString(JsonReader.stringReader.read(it))
58-
else if (token.isBooleanValue) Json.fromBoolean(JsonReader.booleanReader.read(it))
59-
else if (token.isNumberValue) JsonReader.numberReader.read(it) match {
60-
case x@(_: java.lang.Byte | _: java.lang.Short | _: java.lang.Long) => Json.fromLong(x.longValue)
61-
case x: java.lang.Integer => Json.fromInt(x)
62-
case x: java.lang.Float => Json.fromFloatOrNull(x)
63-
case x: java.lang.Double => Json.fromDoubleOrNull(x)
64+
if (token.isObjectStart)
65+
Json.fromJsonObject(circeJsonObjectReader.read(it))
66+
else if (token.isArrayStart)
67+
Json.fromValues(JsonReader[Vector[Json]].read(it))
68+
else if (token.isStringValue)
69+
Json.fromString(JsonReader.stringReader.read(it))
70+
else if (token.isBooleanValue)
71+
Json.fromBoolean(JsonReader.booleanReader.read(it))
72+
else if (token.isNumberValue) JsonReader.numberReader.read(it) match {
73+
case x @ (_: java.lang.Byte | _: java.lang.Short | _: java.lang.Long) =>
74+
Json.fromLong(x.longValue)
75+
case x: java.lang.Integer => Json.fromInt(x)
76+
case x: java.lang.Float => Json.fromFloatOrNull(x)
77+
case x: java.lang.Double => Json.fromDoubleOrNull(x)
6478

6579
case x: java.math.BigInteger => Json.fromBigInt(x)
6680
case x: BigInt => Json.fromBigInt(x)
@@ -69,12 +83,14 @@ trait CirceSupport {
6983
case x: BigDecimal => Json.fromBigDecimal(x)
7084
case x => Json.fromBigDecimal(x.doubleValue)
7185
}
72-
else if (token.isNullValue) { it.next(); Json.Null }
86+
else if (token.isNullValue) { it.next(); Json.Null }
7387
else ReaderError.wrongJson(s"Unexpected token found: $token")(fieldName)
7488
}
7589
}
7690

77-
private[this] class TethysJsonFolder(writer: TokenWriter) extends Json.Folder[Unit] with JsonNumberHack {
91+
private[this] class TethysJsonFolder(writer: TokenWriter)
92+
extends Json.Folder[Unit]
93+
with JsonNumberHack {
7894
def onNull: Unit = writer.writeNull()
7995
def onBoolean(value: Boolean): Unit = writer.writeBoolean(value)
8096
def onNumber(value: JsonNumber): Unit = writeNumber(value, writer)

Diff for: modules/circe/src/test/scala/tethys/circe/CirceSupportTest.scala

+29-17
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,17 @@ class CirceSupportTest extends AnyFlatSpec with Matchers {
2323
}
2424

2525
it should "parse Double" in {
26-
token(100.0D).tokensAs[Json] shouldBe Json.fromDoubleOrNull(100.0D)
26+
token(100.0d).tokensAs[Json] shouldBe Json.fromDoubleOrNull(100.0d)
2727
}
2828

2929
it should "parse BigInt" in {
3030
token(BigInt(100L)).tokensAs[Json] shouldBe Json.fromBigInt(BigInt(100L))
3131
}
3232

3333
it should "parse BigDecimal" in {
34-
token(BigDecimal(100.0D)).tokensAs[Json] shouldBe Json.fromBigDecimal(100.0D)
34+
token(BigDecimal(100.0d)).tokensAs[Json] shouldBe Json.fromBigDecimal(
35+
100.0d
36+
)
3537
}
3638

3739
it should "parse String" in {
@@ -52,7 +54,9 @@ class CirceSupportTest extends AnyFlatSpec with Matchers {
5254

5355
it should "parse Array" in {
5456
arr(1, 2L, 3).tokensAs[Json] shouldBe
55-
Json.fromValues(List(Json.fromLong(1L), Json.fromLong(2L), Json.fromLong(3L)))
57+
Json.fromValues(
58+
List(Json.fromLong(1L), Json.fromLong(2L), Json.fromLong(3L))
59+
)
5660
}
5761

5862
it should "parse JsonObject" in {
@@ -72,13 +76,15 @@ class CirceSupportTest extends AnyFlatSpec with Matchers {
7276
}
7377

7478
it should "parse Array of JsonObject" in {
75-
arr(obj("a" -> "b"), obj("c" -> "d")).tokensAs[Json] shouldBe Json.fromValues(List(
76-
Json.fromJsonObject(JsonObject("a" -> Json.fromString("b"))),
77-
Json.fromJsonObject(JsonObject("c" -> Json.fromString("d")))
78-
))
79+
arr(obj("a" -> "b"), obj("c" -> "d"))
80+
.tokensAs[Json] shouldBe Json.fromValues(
81+
List(
82+
Json.fromJsonObject(JsonObject("a" -> Json.fromString("b"))),
83+
Json.fromJsonObject(JsonObject("c" -> Json.fromString("d")))
84+
)
85+
)
7986
}
8087

81-
8288
behavior of "Circe ast JsonWriter"
8389

8490
it should "write Int" in {
@@ -94,19 +100,21 @@ class CirceSupportTest extends AnyFlatSpec with Matchers {
94100
}
95101

96102
it should "write Double" in {
97-
Json.fromDouble(100.0D).asTokenList shouldBe token(100.0D)
103+
Json.fromDouble(100.0d).asTokenList shouldBe token(100.0d)
98104
}
99105

100106
it should "write BigInt" in {
101107
Json.fromBigInt(BigInt("10000000000")).asTokenList match {
102108
case DoubleValueNode(d) :: Nil => d shouldBe 1.0e10 // 2.11 only behavior
103-
case LongValueNode(l) :: Nil => l shouldBe 10000000000L
104-
case _ => fail()
109+
case LongValueNode(l) :: Nil => l shouldBe 10000000000L
110+
case _ => fail()
105111
}
106112
}
107113

108114
it should "write BigDecimal" in {
109-
Json.fromBigDecimal(BigDecimal(100.0D)).asTokenList shouldBe token(BigDecimal(100.0D))
115+
Json.fromBigDecimal(BigDecimal(100.0d)).asTokenList shouldBe token(
116+
BigDecimal(100.0d)
117+
)
110118
}
111119

112120
it should "write String" in {
@@ -126,11 +134,15 @@ class CirceSupportTest extends AnyFlatSpec with Matchers {
126134
}
127135

128136
it should "write Array" in {
129-
Json.fromValues(List(
130-
Json.fromInt(1),
131-
Json.fromInt(2),
132-
Json.fromInt(3)
133-
)).asTokenList shouldBe arr(1L, 2L, 3L)
137+
Json
138+
.fromValues(
139+
List(
140+
Json.fromInt(1),
141+
Json.fromInt(2),
142+
Json.fromInt(3)
143+
)
144+
)
145+
.asTokenList shouldBe arr(1L, 2L, 3L)
134146
}
135147

136148
it should "write JsonObject" in {

Diff for: modules/core/src/main/scala-3/tethys/FieldStyle.scala

+19-14
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package tethys
22

33
import java.util.regex.Pattern
44

5-
65
enum FieldStyle {
76
case Capitalize, Uncapitalize, LowerCase, UpperCase
87

@@ -11,36 +10,42 @@ enum FieldStyle {
1110
case SnakeCase, LowerSnakeCase, UpperSnakeCase, CapitalizedSnakeCase
1211
}
1312

14-
private[tethys]
15-
object FieldStyle:
13+
private[tethys] object FieldStyle:
1614
private val regexp1: Pattern = Pattern.compile("([A-Z]+)([A-Z][a-z])")
1715
private val regexp2: Pattern = Pattern.compile("([a-z\\d])([A-Z])")
1816
private val replacement: String = "$1_$2"
1917
private val snakeCase: String => String = splitName(_).mkString("_")
2018
private val kebabcase: String => String = splitName(_).mkString("-")
2119
private val capitalize: String => String = _.capitalize
22-
private val uncapitalize: String => String = (field: String) => field.updated(0, field.charAt(0).toLower)
20+
private val uncapitalize: String => String = (field: String) =>
21+
field.updated(0, field.charAt(0).toLower)
2322
private val lowercase: String => String = _.toLowerCase()
2423
private val uppercase: String => String = _.toUpperCase()
2524

2625
def applyStyle(string: String, style: FieldStyle): String =
2726
style match
28-
case FieldStyle.Capitalize => capitalize(string)
27+
case FieldStyle.Capitalize => capitalize(string)
2928
case FieldStyle.Uncapitalize => uncapitalize(string)
30-
case FieldStyle.LowerCase => lowercase(string)
31-
case FieldStyle.UpperCase => uppercase(string)
29+
case FieldStyle.LowerCase => lowercase(string)
30+
case FieldStyle.UpperCase => uppercase(string)
3231

33-
case FieldStyle.KebabCase => kebabcase(string)
32+
case FieldStyle.KebabCase => kebabcase(string)
3433
case FieldStyle.LowerKebabCase => (kebabcase andThen lowercase)(string)
3534
case FieldStyle.UpperKebabCase => (kebabcase andThen uppercase)(string)
36-
case FieldStyle.CapitalizedKebabCase => (kebabcase andThen capitalize)(string)
35+
case FieldStyle.CapitalizedKebabCase =>
36+
(kebabcase andThen capitalize)(string)
3737

38-
case FieldStyle.SnakeCase => snakeCase(string)
38+
case FieldStyle.SnakeCase => snakeCase(string)
3939
case FieldStyle.LowerSnakeCase => (snakeCase andThen lowercase)(string)
4040
case FieldStyle.UpperSnakeCase => (snakeCase andThen uppercase)(string)
41-
case FieldStyle.CapitalizedSnakeCase => (snakeCase andThen capitalize)(string)
42-
41+
case FieldStyle.CapitalizedSnakeCase =>
42+
(snakeCase andThen capitalize)(string)
4343

4444
private def splitName(name: String): List[String] =
45-
val first = FieldStyle.regexp1.matcher(name).replaceAll(FieldStyle.replacement)
46-
FieldStyle.regexp2.matcher(first).replaceAll(FieldStyle.replacement).split("_").toList
45+
val first =
46+
FieldStyle.regexp1.matcher(name).replaceAll(FieldStyle.replacement)
47+
FieldStyle.regexp2
48+
.matcher(first)
49+
.replaceAll(FieldStyle.replacement)
50+
.split("_")
51+
.toList

Diff for: modules/core/src/main/scala-3/tethys/OrdinalEnumJsonReader.scala

+3-1
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,6 @@ object OrdinalEnumJsonReader:
1717
case ex: NoSuchElementException =>
1818
ReaderError.wrongJson(s"Unknown enum ordinal: $res")
1919
else
20-
ReaderError.wrongJson(s"Expected int value but found: ${it.currentToken()}")
20+
ReaderError.wrongJson(
21+
s"Expected int value but found: ${it.currentToken()}"
22+
)

Diff for: modules/core/src/main/scala-3/tethys/OrdinalEnumJsonWriter.scala

+5-3
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@ package tethys
22

33
import tethys.writers.tokens.TokenWriter
44

5-
65
trait OrdinalEnumJsonWriter[A] extends JsonWriter[A]
76

87
object OrdinalEnumJsonWriter:
98
inline def derived[A <: scala.reflect.Enum]: OrdinalEnumJsonWriter[A] =
10-
(value: A, tokenWriter: TokenWriter) => tokenWriter.writeNumber(value.ordinal)
9+
(value: A, tokenWriter: TokenWriter) =>
10+
tokenWriter.writeNumber(value.ordinal)
1111

12-
inline def withLabel[A <: scala.reflect.Enum](label: String): JsonObjectWriter[A] =
12+
inline def withLabel[A <: scala.reflect.Enum](
13+
label: String
14+
): JsonObjectWriter[A] =
1315
(value: A, tokenWriter: writers.tokens.TokenWriter) =>
1416
tokenWriter.writeFieldName(label)
1517
tokenWriter.writeNumber(value.ordinal)

0 commit comments

Comments
 (0)