Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,7 @@ output/
.vscode
out/
/.bsp/
.bloop
/project/.bloop
/project/project/
/project/metals.sbt
18 changes: 9 additions & 9 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,21 @@ lazy val main = (project in file("sjsonnet"))
Test / javaOptions += "-Xss100m",
Test / baseDirectory := (ThisBuild / baseDirectory).value,
libraryDependencies ++= Seq(
"com.lihaoyi" %% "fastparse" % "2.3.3",
"com.lihaoyi" %% "pprint" % "0.6.6",
"com.lihaoyi" %% "ujson" % "1.3.15",
"com.lihaoyi" %% "scalatags" % "0.9.4",
"com.lihaoyi" %% "os-lib" % "0.7.8",
"com.lihaoyi" %% "mainargs" % "0.2.5",
"com.lihaoyi" %% "fastparse" % "3.1.1",
"com.lihaoyi" %% "pprint" % "0.9.0",
"com.lihaoyi" %% "ujson" % "4.1.0",
"com.lihaoyi" %% "scalatags" % "0.13.1",
"com.lihaoyi" %% "os-lib" % "0.11.4",
"com.lihaoyi" %% "mainargs" % "0.7.6",
"org.lz4" % "lz4-java" % "1.8.0",
"org.json" % "json" % "20250107",
"org.scala-lang.modules" %% "scala-collection-compat" % "2.11.0",
"org.scala-lang.modules" %% "scala-collection-compat" % "2.13.0",
"org.tukaani" % "xz" % "1.10",
"org.yaml" % "snakeyaml" % "1.33",
"org.yaml" % "snakeyaml" % "2.0",
"com.google.re2j" % "re2j" % "1.8",
),
libraryDependencies ++= Seq(
"com.lihaoyi" %% "utest" % "0.8.2",
"com.lihaoyi" %% "utest" % "0.8.5",
).map(_ % "test"),
testFrameworks += new TestFramework("utest.runner.Framework"),
(Compile / unmanagedSourceDirectories) := Seq(
Expand Down
20 changes: 10 additions & 10 deletions build.sc
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ trait SjsonnetCrossModule extends CrossScalaModule with PublishModule {
def artifactName = "sjsonnet"

def ivyDeps = Agg(
ivy"com.lihaoyi::fastparse::2.3.3",
ivy"com.lihaoyi::pprint::0.6.6",
ivy"com.lihaoyi::ujson::1.3.15",
ivy"com.lihaoyi::scalatags::0.9.4",
ivy"org.scala-lang.modules::scala-collection-compat::2.11.0"
ivy"com.lihaoyi::fastparse::3.1.1",
ivy"com.lihaoyi::pprint::0.9.0",
ivy"com.lihaoyi::ujson::4.1.0",
ivy"com.lihaoyi::scalatags::0.13.1",
ivy"org.scala-lang.modules::scala-collection-compat::2.13.0"
)
def publishVersion = sjsonnetVersion

Expand All @@ -42,14 +42,14 @@ trait SjsonnetCrossModule extends CrossScalaModule with PublishModule {
)
)
trait CrossTests extends ScalaModule with TestModule.Utest {
def ivyDeps = Agg(ivy"com.lihaoyi::utest::0.8.2")
def ivyDeps = Agg(ivy"com.lihaoyi::utest::0.8.5")
}
}

trait SjsonnetJvmNative extends ScalaModule {
def ivyDeps = super.ivyDeps() ++ Agg(
ivy"com.lihaoyi::os-lib::0.7.8",
ivy"com.lihaoyi::mainargs::0.2.5"
ivy"com.lihaoyi::os-lib::0.11.4",
ivy"com.lihaoyi::mainargs::0.7.6"
)
}

Expand Down Expand Up @@ -116,7 +116,7 @@ object sjsonnet extends Module {
object native extends Cross[SjsonnetNativeModule](scalaVersions)
trait SjsonnetNativeModule extends SjsonnetCrossModule with ScalaNativeModule with SjsonnetJvmNative {
def millSourcePath = super.millSourcePath / os.up
def scalaNativeVersion = "0.4.17"
def scalaNativeVersion = "0.5.7"
def sources = T.sources(
this.millSourcePath / "src",
this.millSourcePath / "src-native",
Expand Down Expand Up @@ -150,7 +150,7 @@ object sjsonnet extends Module {
ivy"org.json:json:20250107",
ivy"org.tukaani:xz::1.10",
ivy"org.lz4:lz4-java::1.8.0",
ivy"org.yaml:snakeyaml::1.33",
ivy"org.yaml:snakeyaml::2.0",
ivy"com.google.re2j:re2j:1.8",
)
def scalacOptions = Seq("-opt:l:inline", "-opt-inline-from:sjsonnet.*,sjsonnet.**")
Expand Down
5 changes: 4 additions & 1 deletion sjsonnet/src/sjsonnet/BaseCharRenderer.scala
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ class BaseCharRenderer[T <: upickle.core.CharOps.Output]
indent: Int = -1,
escapeUnicode: Boolean = false,
newline: Array[Char] = Array('\n')) extends JsVisitor[T, T]{

override def visitJsonableObject(length: Int, index: Int): ObjVisitor[T,T] = visitObject(length, index)

protected[this] val elemBuilder = new upickle.core.CharBuilder
def flushCharBuilder(): Unit = {
elemBuilder.writeOutToIfLongerThan(out, if (depth == 0) 0 else 1000)
Expand Down Expand Up @@ -154,7 +157,7 @@ class BaseCharRenderer[T <: upickle.core.CharOps.Output]

private def visitNonNullString(s: CharSequence, index: Int) = {
flushBuffer()
upickle.core.RenderUtils.escapeChar(null, elemBuilder, s, escapeUnicode)
upickle.core.RenderUtils.escapeChar(null, elemBuilder, s, escapeUnicode = escapeUnicode, wrapQuotes = true)
flushCharBuilder()
out
}
Expand Down
3 changes: 3 additions & 0 deletions sjsonnet/src/sjsonnet/BaseRenderer.scala
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ class BaseRenderer[T <: java.io.Writer]
(out: T,
indent: Int = -1,
escapeUnicode: Boolean = false) extends ujson.JsVisitor[T, T]{

override def visitJsonableObject(length: Int, index: Int): ObjVisitor[T,T] = visitObject(length, index)

var depth: Int = 0
val colonSnippet = if (indent == -1) ":" else ": "

Expand Down
2 changes: 1 addition & 1 deletion sjsonnet/src/sjsonnet/Materializer.scala
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ abstract class Materializer {
case obj: Val.Obj =>
storePos(obj.pos)
obj.triggerAllAsserts(obj)
val objVisitor = visitor.visitObject(obj.visibleKeyNames.length , -1)
val objVisitor = visitor.visitObject(obj.visibleKeyNames.length , jsonableKeys = true, -1)
val sort = !evaluator.settings.preserveOrder
var prevKey: String = null
obj.foreachElement(sort, evaluator.emptyMaterializeFileScopePos) { (k, v) =>
Expand Down
3 changes: 3 additions & 0 deletions sjsonnet/src/sjsonnet/PrettyYamlRenderer.scala
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ class PrettyYamlRenderer(out: Writer = new java.io.StringWriter(),
indent: Int,
idealWidth: Int = 80,
getCurrentPosition: () => Position) extends BaseRenderer[Writer](out, indent){

override def visitJsonableObject(length: Int, index: Int) = visitObject(length, index)

var newlineBuffered = false
var dashBuffered = false
var afterColon = false
Expand Down
4 changes: 2 additions & 2 deletions sjsonnet/src/sjsonnet/TomlRenderer.scala
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ class TomlRenderer(out: StringWriter = new java.io.StringWriter(), cumulatedInde
visitNull(index)
} else {
val charBuilder = new CharBuilder()
upickle.core.RenderUtils.escapeChar(null, charBuilder, s, unicode = true)
upickle.core.RenderUtils.escapeChar(null, charBuilder, s, escapeUnicode = true, wrapQuotes = true)
out.write(charBuilder.makeString())
flush
}
Expand Down Expand Up @@ -91,7 +91,7 @@ class TomlRenderer(out: StringWriter = new java.io.StringWriter(), cumulatedInde
}
}

override def visitObject(length: Int, index: Int): ObjVisitor[StringWriter, StringWriter] = new ObjVisitor[StringWriter, StringWriter] {
override def visitObject(length: Int, jsonableKeys: Boolean, index: Int): ObjVisitor[StringWriter, StringWriter] = new ObjVisitor[StringWriter, StringWriter] {
private var addComma = false
depth += 1
out.write("{ ")
Expand Down
5 changes: 4 additions & 1 deletion sjsonnet/src/sjsonnet/ValVisitor.scala
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ import scala.collection.mutable

/** Parse JSON directly into a literal `Val` */
class ValVisitor(pos: Position) extends JsVisitor[Val, Val] { self =>

override def visitJsonableObject(length: Int, index: Int): ObjVisitor[Val,Val] = visitObject(length, index)

def visitArray(length: Int, index: Int): ArrVisitor[Val, Val] = new ArrVisitor[Val, Val] {
val a = new mutable.ArrayBuilder.ofRef[Lazy]
def subVisitor: Visitor[_, _] = self
Expand Down Expand Up @@ -39,7 +42,7 @@ class ValVisitor(pos: Position) extends JsVisitor[Val, Val] { self =>
def visitFloat64StringParts(s: CharSequence, decIndex: Int, expIndex: Int, index: Int): Val =
Val.Num(pos,
if (decIndex != -1 || expIndex != -1) s.toString.toDouble
else upickle.core.Util.parseIntegralNum(s, decIndex, expIndex, index)
else upickle.core.ParseUtils.parseIntegralNum(s, decIndex, expIndex, index)
)

def visitString(s: CharSequence, index: Int): Val = Val.Str(pos, s.toString)
Expand Down
4 changes: 2 additions & 2 deletions sjsonnet/src/sjsonnet/YamlRenderer.scala
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class YamlRenderer(_out: StringWriter = new java.io.StringWriter(), indentArrayI
override def visitString(s: CharSequence, index: Int): StringWriter = {
YamlRenderer.this.flushBuffer()
if (quoteKeys || !YamlRenderer.isSafeBareKey(s.toString)) {
upickle.core.RenderUtils.escapeChar(null, YamlRenderer.this.elemBuilder, s, unicode = true)
upickle.core.RenderUtils.escapeChar(null, YamlRenderer.this.elemBuilder, s, escapeUnicode = true, wrapQuotes = true)
} else {
YamlRenderer.this.appendString(s.toString)
}
Expand Down Expand Up @@ -58,7 +58,7 @@ class YamlRenderer(_out: StringWriter = new java.io.StringWriter(), indentArrayI
}
depth -= 1
} else {
upickle.core.RenderUtils.escapeChar(null, elemBuilder, s, unicode=true)
upickle.core.RenderUtils.escapeChar(null, elemBuilder, s, escapeUnicode=true, wrapQuotes = true)
}
flushCharBuilder()
_out
Expand Down