Skip to content
This repository was archived by the owner on Sep 29, 2023. It is now read-only.

Commit e3abfe2

Browse files
author
jchapuis
committed
serializeJson returns JValue
1 parent f31670f commit e3abfe2

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name := "scala-parser-combinators-completion"
22
organization := "com.nexthink"
33
licenses += ("MIT", url("http://opensource.org/licenses/MIT"))
4-
version := "1.0.4"
4+
version := "1.0.5"
55
scalaVersion := "2.12.2"
66
bintrayRepository := "maven"
77
bintrayVcsUrl := Some("jchapuis@github.com:jchapuis/scala-parser-combinators-completion")

src/main/scala/com/nexthink/utils/parsing/combinator/completion/CompletionTypes.scala

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@
88
package com.nexthink.utils.parsing.combinator.completion
99

1010
import org.json4s
11+
import org.json4s.{JArray, JValue}
1112

1213
import scala.util.parsing.input.{NoPosition, Position}
1314
import org.json4s.JsonDSL._
1415
import org.json4s.native.JsonMethods._
16+
1517
import scala.collection.immutable
1618

1719
/** Collection of data types allowing definition of structured parser completions.
@@ -33,6 +35,7 @@ import scala.collection.immutable
3335
*/
3436
trait CompletionTypes {
3537
type Elem
38+
type Elems = Seq[Elem]
3639

3740
val DefaultCompletionTag = ""
3841
val DefaultCompletionScore = 0
@@ -57,7 +60,7 @@ trait CompletionTypes {
5760
}
5861

5962
override def toString: String = pretty(render(serializeJson))
60-
def toJson: String = compact(render(serializeJson))
63+
def toJson: JValue = serializeJson
6164
}
6265

6366
case object CompletionTag {
@@ -86,7 +89,7 @@ trait CompletionTypes {
8689
("tag" -> tag.serializeJson) ~ ("completions" -> entries.map(_.serializeJson).toList)
8790

8891
override def toString: String = pretty(render(serializeJson))
89-
def toJson: String = compact(render(serializeJson))
92+
def toJson: JValue = serializeJson
9093
}
9194

9295
case object CompletionSet {
@@ -119,9 +122,9 @@ trait CompletionTypes {
119122

120123
def apply(completions: Traversable[Elems]): CompletionSet =
121124
CompletionSet(CompletionTag.Default, completions.map(c => c -> Completion(c)).toSeq)
122-
}
123125

124-
type Elems = Seq[Elem]
126+
implicit def orderingByScoreAndThenAlphabetical: Ordering[CompletionSet] = Ordering.by(s => (-s.score, s.label))
127+
}
125128

126129
/** Completion entry
127130
* @param value entry value (e.g. string literal)
@@ -153,15 +156,15 @@ trait CompletionTypes {
153156
def isEmpty: Boolean = sets.isEmpty
154157
def nonEmpty: Boolean = !isEmpty
155158
def setWithTag(tag: String): Option[CompletionSet] = sets.get(tag)
156-
def allSets: Iterable[CompletionSet] = sets.values
159+
def allSets: Iterable[CompletionSet] = sets.values.toSeq.sorted
157160
def allCompletions: Iterable[Completion] = allSets.flatMap(_.sortedEntries)
158161
def defaultSet: Option[CompletionSet] = sets.get("")
159162

160163
private def serializeJson = ("position" -> (("line" -> position.line) ~ ("column" -> position.column))) ~ ("sets" -> allSets.map(_.serializeJson))
161164

162165
override def toString: String = pretty(render(serializeJson))
163-
def toJson: String = compact(render(serializeJson))
164-
166+
def toJson: JValue = serializeJson
167+
def setsToJson: JArray = allSets.map(_.serializeJson)
165168

166169
private def mergeMetaData(left: Option[String], right: Option[String]) = (left, right) match {
167170
case (Some(l), Some(r)) =>

0 commit comments

Comments
 (0)