Skip to content

Commit ba40020

Browse files
authored
Add extra configuration for .codacy.json file (#15)
* Add extra configuration for .codacy.json file * Change options to Option Format and error log * Update build.sbt * Remove debug log
1 parent daae50a commit ba40020

File tree

6 files changed

+61
-21
lines changed

6 files changed

+61
-21
lines changed

build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ resolvers += "Bintray Typesafe Repo" at "http://dl.bintray.com/typesafe/maven-re
1919
libraryDependencies ++= Seq(
2020
"com.typesafe.play" %% "play-json" % "2.4.8",
2121
"org.scalatest" %% "scalatest" % "2.2.4" % "test",
22-
"com.codacy" %% "codacy-plugins-api" % "1.0.8" withSources(),
22+
"com.codacy" %% "codacy-plugins-api" % "1.0.10" withSources(),
2323
"com.github.pathikrit" %% "better-files" % "2.17.1" withSources()
2424
)
2525

src/main/scala/codacy/docker/api/BackwardsCompatability.scala renamed to src/main/scala/codacy/docker/api/BackwardsCompatibility.scala

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,21 @@ package codacy.docker.api
22

33
import java.nio.file.Paths
44

5-
import codacy.docker.api.JsonApi._
5+
import codacy.docker.api.Pattern.Definition
6+
import codacy.docker.api.Source.{Directory, File}
7+
import codacy.docker.api.Tool.Specification
68
import codacy.dockerApi
79
import codacy.dockerApi.{ParameterDef, ParameterName, ParameterSpec, PatternDef, PatternId, PatternSpec, Spec, ToolName}
810
import play.api.libs.json._
911

1012
import scala.util.Try
1113

12-
trait BackwardsCompatability {
14+
trait BackwardsCompatibility {
1315

1416
implicit class AsTool(tool: dockerApi.Tool) extends Tool {
15-
override def apply(source: Source.Directory, configuration: Option[List[Pattern.Definition]],
16-
files: Option[Set[Source.File]])(implicit specification: Tool.Specification): Try[List[Result]] = {
17+
override def apply(source: Directory, configuration: Option[List[Definition]],
18+
files: Option[Set[File]], options: Map[Configuration.Key, Configuration.Value])
19+
(implicit specification: Specification): Try[List[Result]] = {
1720
tool.apply(
1821
path = Paths.get(source.path),
1922
conf = configuration.map(_.map(toPatternDef)),

src/main/scala/codacy/docker/api/JsonApi.scala

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
11
package codacy.docker.api
22

33
import play.api.libs.json._
4+
45
import scala.language.implicitConversions
56

67
private[api] case class ParamValue(value: JsValue) extends AnyVal with Parameter.Value
78

9+
private[api] case class ConfigurationValue(value: JsValue) extends AnyVal with Configuration.Value
10+
811
trait JsonApi {
912

1013
def enumWrites[E <: Enumeration#Value]: Writes[E] = Writes((e: E) => Json.toJson(e.toString))
1114

1215
def enumReads[E <: Enumeration](e: E): Reads[e.Value] = {
13-
Reads.StringReads.flatMap { case value => Reads((_: JsValue) =>
14-
e.values.collectFirst { case enumValue if enumValue.toString == value =>
15-
JsSuccess(enumValue)
16-
}.getOrElse(JsError(s"Invalid enumeration value $value"))
17-
)
16+
Reads.StringReads.flatMap { value =>
17+
Reads((_: JsValue) =>
18+
e.values.collectFirst { case enumValue if enumValue.toString == value =>
19+
JsSuccess(enumValue)
20+
}.getOrElse(JsError(s"Invalid enumeration value $value"))
21+
)
1822
}
1923
}
2024

@@ -30,6 +34,18 @@ trait JsonApi {
3034
Writes(paramValueToJsValue)
3135
)
3236

37+
implicit def configurationValueToJsValue(configValue: Configuration.Value): JsValue = {
38+
configValue match {
39+
case ConfigurationValue(v) => v
40+
case _ => JsNull
41+
}
42+
}
43+
44+
implicit lazy val configurationValueFormat: Format[Configuration.Value] = Format(
45+
implicitly[Reads[JsValue]].map(Configuration.Value),
46+
Writes(configurationValueToJsValue)
47+
)
48+
3349
implicit lazy val resultLevelFormat = Format(
3450
enumReads(Result.Level),
3551
enumWrites[Result.Level]
@@ -81,6 +97,19 @@ trait JsonApi {
8197
implicit lazy val patternSpecificationFormat = Json.format[Pattern.Specification]
8298
implicit lazy val toolConfigurationFormat = Json.format[Tool.Configuration]
8399
implicit lazy val specificationFormat = Json.format[Tool.Specification]
100+
implicit lazy val configurationOptionsKeyFormat = Json.format[Configuration.Key]
101+
implicit lazy val configurationOptionsFormat = Format[Map[Configuration.Key, Configuration.Value]](
102+
Reads { (json: JsValue) =>
103+
JsSuccess(
104+
json.asOpt[Map[String, JsValue]].fold(Map.empty[Configuration.Key, Configuration.Value]) {
105+
_.map { case (k, v) =>
106+
Configuration.Key(k) -> Configuration.Value(v)
107+
}
108+
}
109+
)
110+
},
111+
Writes(m => JsObject(m.map { case (k, v: ConfigurationValue) => k.value -> v.value }))
112+
)
84113
implicit lazy val configurationFormat = Json.format[Configuration]
85114
implicit lazy val parameterDescriptionFormat = Json.format[Parameter.Description]
86115
implicit lazy val patternDescriptionFormat = Json.format[Pattern.Description]
@@ -130,4 +159,4 @@ trait JsonApi {
130159
}
131160
}
132161

133-
object JsonApi extends JsonApi
162+
object JsonApi extends JsonApi
Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
11
package codacy.docker
22

3-
import play.api.libs.json.{JsNull, JsString, JsValue, Json}
3+
import play.api.libs.json.{JsString, JsValue, Json}
44

55
import scala.util.Try
66

7-
package object api extends JsonApi{
7+
package object api extends JsonApi {
88

9-
implicit class ParameterExtensions(param:Parameter.type){
10-
def Value(jsValue:JsValue):Parameter.Value = ParamValue(jsValue)
11-
def Value(raw:String):Parameter.Value = Value(Try(Json.parse(raw)).getOrElse(JsString(raw)))
9+
implicit class ParameterExtensions(param: Parameter.type) {
10+
def Value(jsValue: JsValue): Parameter.Value = ParamValue(jsValue)
11+
12+
def Value(raw: String): Parameter.Value = Value(Try(Json.parse(raw)).getOrElse(JsString(raw)))
13+
}
14+
15+
implicit class ConfigurationExtensions(config: Configuration.type) {
16+
def Value(jsValue: JsValue): Configuration.Value = ConfigurationValue(jsValue)
17+
18+
def Value(raw: String): Configuration.Value = Value(Try(Json.parse(raw)).getOrElse(JsString(raw)))
1219
}
1320

14-
}
21+
}

src/main/scala/codacy/dockerApi/DockerEngine.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package codacy.dockerApi
22

33
import java.nio.file.Paths
44

5-
import codacy.docker.api.{Source, Result => NewResult}
5+
import codacy.docker.api.{Configuration, Source, Result => NewResult}
66
import codacy.dockerApi.DockerEnvironment._
77
import codacy.dockerApi.utils.Delayed
88
import play.api.libs.json.{Json, Writes}
@@ -61,7 +61,8 @@ abstract class DockerEngine(Tool: codacy.docker.api.Tool) extends Delayed {
6161
Tool.apply(
6262
source = Source.Directory(sourcePath.toString()),
6363
configuration = patternsOpt,
64-
files = filesOpt
64+
files = filesOpt,
65+
options = configOpt.flatMap(_.options).getOrElse(Map.empty)
6566
)(spec)
6667
} catch {
6768
case t: Throwable =>

src/main/scala/codacy/dockerApi/package.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package codacy
22

33
import java.nio.file.Path
44

5-
import codacy.docker.api.{BackwardsCompatability, JsonApi}
5+
import codacy.docker.api.{BackwardsCompatibility, JsonApi}
66
import play.api.libs.json.{JsValue, Reads, Writes, _}
77

88
import scala.language.reflectiveCalls
@@ -109,7 +109,7 @@ package dockerApi {
109109

110110
}
111111

112-
package object dockerApi extends BackwardsCompatability with JsonApi {
112+
package object dockerApi extends BackwardsCompatibility with JsonApi {
113113

114114
implicit class ResultExtension[A](val result: JsResult[A]) extends AnyVal {
115115
def asTry = result.fold(

0 commit comments

Comments
 (0)