From b2df1429b258922693cd43690266100996d1e0bc Mon Sep 17 00:00:00 2001 From: Devon Stewart Date: Sun, 13 Jan 2019 15:38:34 -0800 Subject: [PATCH 1/9] Removing unnecessary compiler flags --- build.sbt | 16 +++++++--------- .../guardrail/generators/AkkaHttpGenerator.scala | 1 + .../guardrail/generators/Http4sGenerator.scala | 1 + .../src/test/scala/scalatest/EitherTValues.scala | 1 + 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/build.sbt b/build.sbt index 320e22d726..f65f7f02f3 100644 --- a/build.sbt +++ b/build.sbt @@ -137,23 +137,20 @@ val codegenSettings = Seq( "org.typelevel" %% "cats-kernel" % catsVersion, "org.typelevel" %% "cats-macros" % catsVersion, "org.typelevel" %% "cats-free" % catsVersion - ) - // Dev - , + ), scalacOptions in ThisBuild ++= Seq( "-Ypartial-unification", - "-language:higherKinds", - "-Xexperimental", "-Ydelambdafy:method", - // "-Yno-adapted-args", - "-Xlint:_,-unused", "-feature", "-unchecked", "-deprecation", - "-target:jvm-1.8", "-encoding", "utf8" - ), + ) ++ (if (scalaVersion.value.startsWith("2.11.")) { + List("-Xexperimental", "-Xlint:_") + } else { + List("-Xlint:-unused,_") + }), parallelExecution in Test := true, fork := true ) @@ -169,6 +166,7 @@ lazy val codegen = (project in file("modules/codegen")) .settings( (name := "guardrail") +: codegenSettings, + scalacOptions += "-language:higherKinds", bintrayRepository := { if (isSnapshot.value) "snapshots" else "releases" diff --git a/modules/codegen/src/main/scala/com/twilio/guardrail/generators/AkkaHttpGenerator.scala b/modules/codegen/src/main/scala/com/twilio/guardrail/generators/AkkaHttpGenerator.scala index 4ee8e6da91..a9bd604266 100644 --- a/modules/codegen/src/main/scala/com/twilio/guardrail/generators/AkkaHttpGenerator.scala +++ b/modules/codegen/src/main/scala/com/twilio/guardrail/generators/AkkaHttpGenerator.scala @@ -39,6 +39,7 @@ object AkkaHttpGenerator { q"import cats.data.EitherT", q"import cats.implicits._", q"import scala.concurrent.{ExecutionContext, Future}", + q"import scala.language.higherKinds", q"import scala.language.implicitConversions", q"import java.io.File", q"import java.security.MessageDigest", diff --git a/modules/codegen/src/main/scala/com/twilio/guardrail/generators/Http4sGenerator.scala b/modules/codegen/src/main/scala/com/twilio/guardrail/generators/Http4sGenerator.scala index 1f1ba6c212..e94be5de07 100644 --- a/modules/codegen/src/main/scala/com/twilio/guardrail/generators/Http4sGenerator.scala +++ b/modules/codegen/src/main/scala/com/twilio/guardrail/generators/Http4sGenerator.scala @@ -40,6 +40,7 @@ object Http4sGenerator { q"import org.http4s.EntityDecoder._", q"import fs2.Stream", q"import io.circe.Json", + q"import scala.language.higherKinds", q"import scala.language.implicitConversions" ) ) diff --git a/modules/sample/src/test/scala/scalatest/EitherTValues.scala b/modules/sample/src/test/scala/scalatest/EitherTValues.scala index 33eb6efe31..5dcc7769bc 100644 --- a/modules/sample/src/test/scala/scalatest/EitherTValues.scala +++ b/modules/sample/src/test/scala/scalatest/EitherTValues.scala @@ -5,6 +5,7 @@ import cats.data.EitherT import org.scalactic.source import org.scalatest._ import org.scalatest.exceptions.{ StackDepthException, TestFailedException } +import scala.language.higherKinds import scala.language.implicitConversions trait EitherTValues { From ada5fb87baad7950fc0de0812eb84d046c6ff6cc Mon Sep 17 00:00:00 2001 From: Devon Stewart Date: Sun, 13 Jan 2019 15:52:59 -0800 Subject: [PATCH 2/9] Adding most recent releases into CHANGELOG --- CHANGELOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd97af5e44..4c6a8beaec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,19 @@ v0.42.0 - #165 http4s server generator handle root path - #152 Make akka-http clients handle all status codes and described entities (Breaking change, please see MIGRATING.md) +v0.41.5 +======= + +- #159 Making akka-http FormData return 413 instead of 500, delete failed files +- #158 Abstracting companion objects in preparation for java support + +v0.41.4 +======= + +- #150 Exposing helpful error messages +- #156 Bumping sbt-pgp +- #157 Bumping kind-projector + v0.41.3 ======= From 428d287cc0d30b52fd43f6910833f3c6744c08d8 Mon Sep 17 00:00:00 2001 From: Devon Stewart Date: Sun, 13 Jan 2019 21:03:35 -0800 Subject: [PATCH 3/9] Reducing imports --- .../main/scala/com/twilio/guardrail/SwaggerUtil.scala | 9 ++++----- .../com/twilio/guardrail/generators/syntax/Scala.scala | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/modules/codegen/src/main/scala/com/twilio/guardrail/SwaggerUtil.scala b/modules/codegen/src/main/scala/com/twilio/guardrail/SwaggerUtil.scala index 808c3d6c38..9acfc9e63f 100644 --- a/modules/codegen/src/main/scala/com/twilio/guardrail/SwaggerUtil.scala +++ b/modules/codegen/src/main/scala/com/twilio/guardrail/SwaggerUtil.scala @@ -3,14 +3,13 @@ package com.twilio.guardrail import _root_.io.swagger.models._ import _root_.io.swagger.models.parameters._ import _root_.io.swagger.models.properties._ -import cats.{ FlatMap, Foldable, MonadError } -import cats.data.{ EitherK, EitherT } +import cats.{ FlatMap, Foldable } import cats.free.Free import cats.implicits._ -import com.twilio.guardrail.terms.{ ScalaTerm, ScalaTerms, SwaggerTerm, SwaggerTerms } -import com.twilio.guardrail.terms.framework.{ FrameworkTerm, FrameworkTerms } +import com.twilio.guardrail.terms.{ ScalaTerms, SwaggerTerms } +import com.twilio.guardrail.terms.framework.FrameworkTerms import com.twilio.guardrail.extract.{ Default, ScalaType } -import com.twilio.guardrail.generators.{ AkkaHttpGenerator, Responses, ScalaGenerator, ScalaParameter, SwaggerGenerator } +import com.twilio.guardrail.generators.{ Responses, ScalaParameter } import com.twilio.guardrail.languages.LA import java.util.{ Map => JMap } import scala.language.reflectiveCalls diff --git a/modules/codegen/src/main/scala/com/twilio/guardrail/generators/syntax/Scala.scala b/modules/codegen/src/main/scala/com/twilio/guardrail/generators/syntax/Scala.scala index 76f02af970..1146051bea 100644 --- a/modules/codegen/src/main/scala/com/twilio/guardrail/generators/syntax/Scala.scala +++ b/modules/codegen/src/main/scala/com/twilio/guardrail/generators/syntax/Scala.scala @@ -2,7 +2,7 @@ package com.twilio.guardrail.generators.syntax import cats.data.NonEmptyList import com.twilio.guardrail.StaticDefns -import com.twilio.guardrail.generators._ +import com.twilio.guardrail.generators.{ RawParameterName, ScalaParameter } import com.twilio.guardrail.languages.ScalaLanguage import scala.meta._ From e553e109af5fdb2b10be8217f07bcd1c1369d7c0 Mon Sep 17 00:00:00 2001 From: Devon Stewart Date: Sun, 13 Jan 2019 21:13:10 -0800 Subject: [PATCH 4/9] Moving server* to modules/sample/src/main --- build.sbt | 16 ++++++++-------- .../src/{test => main}/resources/server1.yaml | 0 .../src/{test => main}/resources/server2.yaml | 0 3 files changed, 8 insertions(+), 8 deletions(-) rename modules/sample/src/{test => main}/resources/server1.yaml (100%) rename modules/sample/src/{test => main}/resources/server2.yaml (100%) diff --git a/build.sbt b/build.sbt index f65f7f02f3..93fb803ad8 100644 --- a/build.sbt +++ b/build.sbt @@ -46,14 +46,14 @@ fullRunTask( --server --specPath modules/sample/src/main/resources/contentType-textPlain.yaml --outputPath modules/sample/src/main/scala --packageName tests.contentTypes.textPlain.server.akkaHttp --framework akka-http --server --specPath modules/sample/src/main/resources/raw-response.yaml --outputPath modules/sample/src/main/scala --packageName raw.server.http4s --framework http4s --server --specPath modules/sample/src/main/resources/raw-response.yaml --outputPath modules/sample/src/main/scala --packageName raw.server.akkaHttp --framework akka-http - --server --specPath modules/sample/src/test/resources/server1.yaml --outputPath modules/sample/src/main/scala --packageName tracer.servers.http4s --tracing --framework http4s - --server --specPath modules/sample/src/test/resources/server1.yaml --outputPath modules/sample/src/main/scala --packageName tracer.servers.akkaHttp --tracing --framework akka-http - --client --specPath modules/sample/src/test/resources/server1.yaml --outputPath modules/sample/src/main/scala --packageName tracer.clients.http4s --tracing --framework http4s - --client --specPath modules/sample/src/test/resources/server1.yaml --outputPath modules/sample/src/main/scala --packageName tracer.clients.akkaHttp --tracing --framework akka-http - --server --specPath modules/sample/src/test/resources/server2.yaml --outputPath modules/sample/src/main/scala --packageName tracer.servers.http4s --tracing --framework http4s - --server --specPath modules/sample/src/test/resources/server2.yaml --outputPath modules/sample/src/main/scala --packageName tracer.servers.akkaHttp --tracing --framework akka-http - --client --specPath modules/sample/src/test/resources/server2.yaml --outputPath modules/sample/src/main/scala --packageName tracer.clients.http4s --tracing --framework http4s - --client --specPath modules/sample/src/test/resources/server2.yaml --outputPath modules/sample/src/main/scala --packageName tracer.clients.akkaHttp --tracing --framework akka-http + --server --specPath modules/sample/src/main/resources/server1.yaml --outputPath modules/sample/src/main/scala --packageName tracer.servers.http4s --tracing --framework http4s + --server --specPath modules/sample/src/main/resources/server1.yaml --outputPath modules/sample/src/main/scala --packageName tracer.servers.akkaHttp --tracing --framework akka-http + --client --specPath modules/sample/src/main/resources/server1.yaml --outputPath modules/sample/src/main/scala --packageName tracer.clients.http4s --tracing --framework http4s + --client --specPath modules/sample/src/main/resources/server1.yaml --outputPath modules/sample/src/main/scala --packageName tracer.clients.akkaHttp --tracing --framework akka-http + --server --specPath modules/sample/src/main/resources/server2.yaml --outputPath modules/sample/src/main/scala --packageName tracer.servers.http4s --tracing --framework http4s + --server --specPath modules/sample/src/main/resources/server2.yaml --outputPath modules/sample/src/main/scala --packageName tracer.servers.akkaHttp --tracing --framework akka-http + --client --specPath modules/sample/src/main/resources/server2.yaml --outputPath modules/sample/src/main/scala --packageName tracer.clients.http4s --tracing --framework http4s + --client --specPath modules/sample/src/main/resources/server2.yaml --outputPath modules/sample/src/main/scala --packageName tracer.clients.akkaHttp --tracing --framework akka-http --client --specPath modules/sample/src/main/resources/alias.yaml --outputPath modules/sample/src/main/scala --packageName alias.client.http4s --framework http4s --client --specPath modules/sample/src/main/resources/alias.yaml --outputPath modules/sample/src/main/scala --packageName alias.client.akkaHttp --framework akka-http --server --specPath modules/sample/src/main/resources/alias.yaml --outputPath modules/sample/src/main/scala --packageName alias.server.http4s --framework http4s diff --git a/modules/sample/src/test/resources/server1.yaml b/modules/sample/src/main/resources/server1.yaml similarity index 100% rename from modules/sample/src/test/resources/server1.yaml rename to modules/sample/src/main/resources/server1.yaml diff --git a/modules/sample/src/test/resources/server2.yaml b/modules/sample/src/main/resources/server2.yaml similarity index 100% rename from modules/sample/src/test/resources/server2.yaml rename to modules/sample/src/main/resources/server2.yaml From 41d4b3a60b1e761dfce13c0b77765434ce448a10 Mon Sep 17 00:00:00 2001 From: Devon Stewart Date: Sun, 13 Jan 2019 22:12:56 -0800 Subject: [PATCH 5/9] Adjusting generator example packages to be in the same structure --- build.sbt | 26 +++++++++---------- .../src/main/scala/support/PositiveLong.scala | 4 +-- .../AkkaHttp/AkkaHttpFullTracerTest.scala | 14 +++++----- .../core/AkkaHttp/AkkaHttpRoundTripTest.scala | 10 +++---- .../core/Http4s/Http4sFullTracerTest.scala | 14 +++++----- .../core/Http4s/Http4sRoundTripTest.scala | 8 +++--- .../src/test/scala/core/issues/Issue143.scala | 2 +- .../src/test/scala/swagger/Escaping.scala | 4 +-- 8 files changed, 41 insertions(+), 41 deletions(-) diff --git a/build.sbt b/build.sbt index 93fb803ad8..eccc801a8b 100644 --- a/build.sbt +++ b/build.sbt @@ -34,10 +34,10 @@ fullRunTask( --client --specPath modules/sample/src/main/resources/polymorphism.yaml --outputPath modules/sample/src/main/scala --packageName polymorphism.client.akkaHttp --framework akka-http --server --specPath modules/sample/src/main/resources/polymorphism.yaml --outputPath modules/sample/src/main/scala --packageName polymorphism.server.http4s --framework http4s --server --specPath modules/sample/src/main/resources/polymorphism.yaml --outputPath modules/sample/src/main/scala --packageName polymorphism.server.akkaHttp --framework akka-http - --client --specPath modules/sample/src/main/resources/petstore.json --outputPath modules/sample/src/main/scala --packageName clients.http4s --framework http4s - --client --specPath modules/sample/src/main/resources/petstore.json --outputPath modules/sample/src/main/scala --packageName clients.akkaHttp --framework akka-http - --server --specPath modules/sample/src/main/resources/petstore.json --outputPath modules/sample/src/main/scala --packageName servers.http4s --framework http4s - --server --specPath modules/sample/src/main/resources/petstore.json --outputPath modules/sample/src/main/scala --packageName servers.akkaHttp --framework akka-http + --client --specPath modules/sample/src/main/resources/petstore.json --outputPath modules/sample/src/main/scala --packageName examples.client.http4s --framework http4s + --client --specPath modules/sample/src/main/resources/petstore.json --outputPath modules/sample/src/main/scala --packageName examples.client.akkaHttp --framework akka-http + --server --specPath modules/sample/src/main/resources/petstore.json --outputPath modules/sample/src/main/scala --packageName examples.server.http4s --framework http4s + --server --specPath modules/sample/src/main/resources/petstore.json --outputPath modules/sample/src/main/scala --packageName examples.server.akkaHttp --framework akka-http --client --specPath modules/sample/src/main/resources/plain.json --outputPath modules/sample/src/main/scala --packageName tests.dtos.http4s --framework http4s --client --specPath modules/sample/src/main/resources/plain.json --outputPath modules/sample/src/main/scala --packageName tests.dtos.akkaHttp --framework akka-http --client --specPath modules/sample/src/main/resources/contentType-textPlain.yaml --outputPath modules/sample/src/main/scala --packageName tests.contentTypes.textPlain.client.http4s --framework http4s @@ -46,14 +46,14 @@ fullRunTask( --server --specPath modules/sample/src/main/resources/contentType-textPlain.yaml --outputPath modules/sample/src/main/scala --packageName tests.contentTypes.textPlain.server.akkaHttp --framework akka-http --server --specPath modules/sample/src/main/resources/raw-response.yaml --outputPath modules/sample/src/main/scala --packageName raw.server.http4s --framework http4s --server --specPath modules/sample/src/main/resources/raw-response.yaml --outputPath modules/sample/src/main/scala --packageName raw.server.akkaHttp --framework akka-http - --server --specPath modules/sample/src/main/resources/server1.yaml --outputPath modules/sample/src/main/scala --packageName tracer.servers.http4s --tracing --framework http4s - --server --specPath modules/sample/src/main/resources/server1.yaml --outputPath modules/sample/src/main/scala --packageName tracer.servers.akkaHttp --tracing --framework akka-http - --client --specPath modules/sample/src/main/resources/server1.yaml --outputPath modules/sample/src/main/scala --packageName tracer.clients.http4s --tracing --framework http4s - --client --specPath modules/sample/src/main/resources/server1.yaml --outputPath modules/sample/src/main/scala --packageName tracer.clients.akkaHttp --tracing --framework akka-http - --server --specPath modules/sample/src/main/resources/server2.yaml --outputPath modules/sample/src/main/scala --packageName tracer.servers.http4s --tracing --framework http4s - --server --specPath modules/sample/src/main/resources/server2.yaml --outputPath modules/sample/src/main/scala --packageName tracer.servers.akkaHttp --tracing --framework akka-http - --client --specPath modules/sample/src/main/resources/server2.yaml --outputPath modules/sample/src/main/scala --packageName tracer.clients.http4s --tracing --framework http4s - --client --specPath modules/sample/src/main/resources/server2.yaml --outputPath modules/sample/src/main/scala --packageName tracer.clients.akkaHttp --tracing --framework akka-http + --server --specPath modules/sample/src/main/resources/server1.yaml --outputPath modules/sample/src/main/scala --packageName tracer.server.http4s --tracing --framework http4s + --server --specPath modules/sample/src/main/resources/server1.yaml --outputPath modules/sample/src/main/scala --packageName tracer.server.akkaHttp --tracing --framework akka-http + --client --specPath modules/sample/src/main/resources/server1.yaml --outputPath modules/sample/src/main/scala --packageName tracer.client.http4s --tracing --framework http4s + --client --specPath modules/sample/src/main/resources/server1.yaml --outputPath modules/sample/src/main/scala --packageName tracer.client.akkaHttp --tracing --framework akka-http + --server --specPath modules/sample/src/main/resources/server2.yaml --outputPath modules/sample/src/main/scala --packageName tracer.server.http4s --tracing --framework http4s + --server --specPath modules/sample/src/main/resources/server2.yaml --outputPath modules/sample/src/main/scala --packageName tracer.server.akkaHttp --tracing --framework akka-http + --client --specPath modules/sample/src/main/resources/server2.yaml --outputPath modules/sample/src/main/scala --packageName tracer.client.http4s --tracing --framework http4s + --client --specPath modules/sample/src/main/resources/server2.yaml --outputPath modules/sample/src/main/scala --packageName tracer.client.akkaHttp --tracing --framework akka-http --client --specPath modules/sample/src/main/resources/alias.yaml --outputPath modules/sample/src/main/scala --packageName alias.client.http4s --framework http4s --client --specPath modules/sample/src/main/resources/alias.yaml --outputPath modules/sample/src/main/scala --packageName alias.client.akkaHttp --framework akka-http --server --specPath modules/sample/src/main/resources/alias.yaml --outputPath modules/sample/src/main/scala --packageName alias.server.http4s --framework http4s @@ -73,7 +73,7 @@ fullRunTask( --server --specPath modules/sample/src/main/resources/issues/issue121.yaml --outputPath modules/sample/src/main/scala --packageName issues.issue121.server.http4s --framework http4s --client --specPath modules/sample/src/main/resources/issues/issue121.yaml --outputPath modules/sample/src/main/scala --packageName issues.issue121.client.http4s --framework http4s --server --specPath modules/sample/src/main/resources/issues/issue127.yaml --outputPath modules/sample/src/main/scala --packageName issues.issue127 - --server --specPath modules/sample/src/main/resources/issues/issue143.yaml --outputPath modules/sample/src/main/scala --packageName issues.issue143 + --server --specPath modules/sample/src/main/resources/issues/issue143.yaml --outputPath modules/sample/src/main/scala --packageName issues.issue143.server.akkaHttp --client --specPath modules/sample/src/main/resources/issues/issue148.yaml --outputPath modules/sample/src/main/scala --packageName issues.issue148.client.http4s --framework http4s --client --specPath modules/sample/src/main/resources/issues/issue148.yaml --outputPath modules/sample/src/main/scala --packageName issues.issue148.client.akkaHttp --framework akka-http --server --specPath modules/sample/src/main/resources/issues/issue148.yaml --outputPath modules/sample/src/main/scala --packageName issues.issue148.server.http4s --framework http4s diff --git a/modules/sample/src/main/scala/support/PositiveLong.scala b/modules/sample/src/main/scala/support/PositiveLong.scala index 554ccc5186..02aaf73967 100644 --- a/modules/sample/src/main/scala/support/PositiveLong.scala +++ b/modules/sample/src/main/scala/support/PositiveLong.scala @@ -1,7 +1,7 @@ package support -import clients.akkaHttp.{ Implicits => AkkaImplicits } -import clients.http4s.{ Implicits => Http4sImplicits } +import examples.client.akkaHttp.{ Implicits => AkkaImplicits } +import examples.client.http4s.{ Implicits => Http4sImplicits } import io.circe.Decoder class PositiveLong private (val value: Long) extends AnyVal diff --git a/modules/sample/src/test/scala/core/AkkaHttp/AkkaHttpFullTracerTest.scala b/modules/sample/src/test/scala/core/AkkaHttp/AkkaHttpFullTracerTest.scala index 84d1f2525f..27c0082fe3 100644 --- a/modules/sample/src/test/scala/core/AkkaHttp/AkkaHttpFullTracerTest.scala +++ b/modules/sample/src/test/scala/core/AkkaHttp/AkkaHttpFullTracerTest.scala @@ -1,12 +1,12 @@ package core.AkkaHttp -import _root_.tracer.clients.akkaHttp.{ definitions => cdefs } -import _root_.tracer.servers.akkaHttp.addresses.{ AddressesHandler, AddressesResource } -import _root_.tracer.servers.akkaHttp.users.{ UsersHandler, UsersResource } -import _root_.tracer.servers.akkaHttp.{ definitions => sdefs } -import _root_.tracer.clients.akkaHttp.users.{ UsersClient, GetUserResponse } -import _root_.tracer.clients.akkaHttp.addresses.{ AddressesClient, GetAddressResponse } -import _root_.tracer.servers.akkaHttp.AkkaHttpImplicits.TraceBuilder +import _root_.tracer.client.akkaHttp.{ definitions => cdefs } +import _root_.tracer.server.akkaHttp.addresses.{ AddressesHandler, AddressesResource } +import _root_.tracer.server.akkaHttp.users.{ UsersHandler, UsersResource } +import _root_.tracer.server.akkaHttp.{ definitions => sdefs } +import _root_.tracer.client.akkaHttp.users.{ UsersClient, GetUserResponse } +import _root_.tracer.client.akkaHttp.addresses.{ AddressesClient, GetAddressResponse } +import _root_.tracer.server.akkaHttp.AkkaHttpImplicits.TraceBuilder import akka.http.scaladsl.model._ import akka.http.scaladsl.model.headers.RawHeader import akka.http.scaladsl.server._ diff --git a/modules/sample/src/test/scala/core/AkkaHttp/AkkaHttpRoundTripTest.scala b/modules/sample/src/test/scala/core/AkkaHttp/AkkaHttpRoundTripTest.scala index a8a06a49a0..9e9cca5958 100644 --- a/modules/sample/src/test/scala/core/AkkaHttp/AkkaHttpRoundTripTest.scala +++ b/modules/sample/src/test/scala/core/AkkaHttp/AkkaHttpRoundTripTest.scala @@ -1,10 +1,10 @@ package core.AkkaHttp -import _root_.clients.akkaHttp.AkkaHttpImplicits.IgnoredEntity -import _root_.clients.akkaHttp.pet.{ PetClient, DeletePetResponse, UploadFileResponse, AddPetResponse, FindPetsByStatusResponse, FindPetsByStatusEnumResponse } -import _root_.clients.akkaHttp.{ definitions => cdefs } -import _root_.servers.akkaHttp.pet.{ PetHandler, PetResource } -import _root_.servers.akkaHttp.{ definitions => sdefs } +import _root_.examples.client.akkaHttp.AkkaHttpImplicits.IgnoredEntity +import _root_.examples.client.akkaHttp.pet.{ PetClient, DeletePetResponse, UploadFileResponse, AddPetResponse, FindPetsByStatusResponse, FindPetsByStatusEnumResponse } +import _root_.examples.client.akkaHttp.{ definitions => cdefs } +import _root_.examples.server.akkaHttp.pet.{ PetHandler, PetResource } +import _root_.examples.server.akkaHttp.{ definitions => sdefs } import akka.http.scaladsl.model._ import akka.http.scaladsl.model.headers.RawHeader import akka.http.scaladsl.server._ diff --git a/modules/sample/src/test/scala/core/Http4s/Http4sFullTracerTest.scala b/modules/sample/src/test/scala/core/Http4s/Http4sFullTracerTest.scala index c19d4b44f6..6460bb8003 100644 --- a/modules/sample/src/test/scala/core/Http4s/Http4sFullTracerTest.scala +++ b/modules/sample/src/test/scala/core/Http4s/Http4sFullTracerTest.scala @@ -1,12 +1,12 @@ package core.Http4s -import _root_.tracer.clients.{ http4s => cdefs } -import _root_.tracer.servers.http4s.addresses.{ AddressesHandler, AddressesResource, GetAddressResponse, GetAddressesResponse } -import _root_.tracer.servers.http4s.users.{ GetUserResponse, UsersHandler, UsersResource } -import _root_.tracer.servers.{ http4s => sdefs } -import _root_.tracer.clients.http4s.users.UsersClient -import _root_.tracer.clients.http4s.addresses.AddressesClient -import _root_.tracer.servers.http4s.Http4sImplicits.TraceBuilder +import _root_.tracer.client.{ http4s => cdefs } +import _root_.tracer.server.http4s.addresses.{ AddressesHandler, AddressesResource, GetAddressResponse, GetAddressesResponse } +import _root_.tracer.server.http4s.users.{ GetUserResponse, UsersHandler, UsersResource } +import _root_.tracer.server.{ http4s => sdefs } +import _root_.tracer.client.http4s.users.UsersClient +import _root_.tracer.client.http4s.addresses.AddressesClient +import _root_.tracer.server.http4s.Http4sImplicits.TraceBuilder import cats.effect.IO import org.http4s.{Header, HttpRoutes, Request} import org.http4s.client.Client diff --git a/modules/sample/src/test/scala/core/Http4s/Http4sRoundTripTest.scala b/modules/sample/src/test/scala/core/Http4s/Http4sRoundTripTest.scala index a002d9d18f..606538e37f 100644 --- a/modules/sample/src/test/scala/core/Http4s/Http4sRoundTripTest.scala +++ b/modules/sample/src/test/scala/core/Http4s/Http4sRoundTripTest.scala @@ -3,10 +3,10 @@ package core.Http4s import java.security.MessageDigest import java.util.Locale.US -import _root_.clients.http4s.pet.PetClient -import _root_.clients.{ http4s => cdefs } -import _root_.servers.http4s.pet._ -import _root_.servers.{ http4s => sdefs } +import _root_.examples.client.http4s.pet.PetClient +import _root_.examples.client.{ http4s => cdefs } +import _root_.examples.server.http4s.pet._ +import _root_.examples.server.{ http4s => sdefs } import cats.effect.IO import cats.effect.IO._ import fs2.Stream diff --git a/modules/sample/src/test/scala/core/issues/Issue143.scala b/modules/sample/src/test/scala/core/issues/Issue143.scala index 513fbebd45..a655175e97 100644 --- a/modules/sample/src/test/scala/core/issues/Issue143.scala +++ b/modules/sample/src/test/scala/core/issues/Issue143.scala @@ -1,6 +1,6 @@ package core.issues -import _root_.issues.issue143.{ Handler, Resource } +import _root_.issues.issue143.server.akkaHttp.{ Handler, Resource } import akka.http.scaladsl.model._ import akka.http.scaladsl.server._ import akka.http.scaladsl.testkit.ScalatestRouteTest diff --git a/modules/sample/src/test/scala/swagger/Escaping.scala b/modules/sample/src/test/scala/swagger/Escaping.scala index 8b773eff79..7250ded76b 100644 --- a/modules/sample/src/test/scala/swagger/Escaping.scala +++ b/modules/sample/src/test/scala/swagger/Escaping.scala @@ -1,8 +1,8 @@ package swagger import org.scalatest.{ FunSuite, Matchers } -import clients.akkaHttp.Implicits -import clients.akkaHttp.AkkaHttpImplicits._ +import examples.client.akkaHttp.Implicits +import examples.client.akkaHttp.AkkaHttpImplicits._ class EscapingTest extends FunSuite with Matchers { test("Properly escape parameters") { From b55edace4d6311ae652c4ade45898d7593f17cde Mon Sep 17 00:00:00 2001 From: Devon Stewart Date: Sun, 13 Jan 2019 22:16:31 -0800 Subject: [PATCH 6/9] Consolidating generator args --- build.sbt | 96 +++++++++++++++++++++++++------------------------------ 1 file changed, 43 insertions(+), 53 deletions(-) diff --git a/build.sbt b/build.sbt index eccc801a8b..a34412c299 100644 --- a/build.sbt +++ b/build.sbt @@ -23,64 +23,54 @@ val scalatestVersion = "3.0.5" mainClass in assembly := Some("com.twilio.guardrail.CLI") +// (filename, prefix, tracing) +def sampleResource(name: String): java.io.File = file(s"modules/sample/src/main/resources/${name}") +val exampleCases: List[(java.io.File, String, Boolean, List[String])] = List( + (sampleResource("alias.yaml"), "alias", false, List.empty), + (sampleResource("contentType-textPlain.yaml"), "tests.contentTypes.textPlain", false, List.empty), + (sampleResource("custom-header-type.yaml"), "tests.customTypes.customHeader", false, List.empty), + (sampleResource("edgecases/defaults.yaml"), "edgecases.defaults", false, List.empty), + (sampleResource("formData.yaml"), "form", false, List.empty), + (sampleResource("issues/issue121.yaml"), "issues.issue121", false, List.empty), + (sampleResource("issues/issue127.yaml"), "issues.issue127", false, List.empty), + (sampleResource("issues/issue143.yaml"), "issues.issue143", false, List.empty), + (sampleResource("issues/issue148.yaml"), "issues.issue148", false, List.empty), + (sampleResource("issues/issue164.yaml"), "issues.issue148", false, List.empty), + (sampleResource("petstore.json"), "examples", false, List("--import", "support.PositiveLong")), + (sampleResource("plain.json"), "tests.dtos", false, List.empty), + (sampleResource("polymorphism.yaml"), "polymorphism", false, List.empty), + (sampleResource("raw-response.yaml"), "raw", false, List.empty), + (sampleResource("server1.yaml"), "tracer", true, List.empty), + (sampleResource("server2.yaml"), "tracer", true, List.empty) +) + +val exampleArgs: List[List[String]] = exampleCases + .foldLeft(List.empty[List[String]])({ + case (acc, (path, prefix, tracing, extra)) => + acc ++ (for { + kind <- List("client", "server") + frameworkPair <- List( + ("akka-http", "akkaHttp"), + ("http4s", "http4s") + ) + (frameworkName, frameworkPackage) = frameworkPair + tracingFlag = if (tracing) Option("--tracing") else Option.empty[String] + } yield + ( + List(s"--${kind}") ++ + List("--specPath", path.toString()) ++ + List("--outputPath", "modules/sample/src/main/scala") ++ + List("--packageName", s"${prefix}.${kind}.${frameworkPackage}") ++ + List("--framework", frameworkName) + ) ++ tracingFlag ++ extra) + }) + lazy val runScalaExample: TaskKey[Unit] = taskKey[Unit]("Run scala generator with example args") fullRunTask( runScalaExample, Test, "com.twilio.guardrail.CLI", - """ - --defaults --import support.PositiveLong - --client --specPath modules/sample/src/main/resources/polymorphism.yaml --outputPath modules/sample/src/main/scala --packageName polymorphism.client.http4s --framework http4s - --client --specPath modules/sample/src/main/resources/polymorphism.yaml --outputPath modules/sample/src/main/scala --packageName polymorphism.client.akkaHttp --framework akka-http - --server --specPath modules/sample/src/main/resources/polymorphism.yaml --outputPath modules/sample/src/main/scala --packageName polymorphism.server.http4s --framework http4s - --server --specPath modules/sample/src/main/resources/polymorphism.yaml --outputPath modules/sample/src/main/scala --packageName polymorphism.server.akkaHttp --framework akka-http - --client --specPath modules/sample/src/main/resources/petstore.json --outputPath modules/sample/src/main/scala --packageName examples.client.http4s --framework http4s - --client --specPath modules/sample/src/main/resources/petstore.json --outputPath modules/sample/src/main/scala --packageName examples.client.akkaHttp --framework akka-http - --server --specPath modules/sample/src/main/resources/petstore.json --outputPath modules/sample/src/main/scala --packageName examples.server.http4s --framework http4s - --server --specPath modules/sample/src/main/resources/petstore.json --outputPath modules/sample/src/main/scala --packageName examples.server.akkaHttp --framework akka-http - --client --specPath modules/sample/src/main/resources/plain.json --outputPath modules/sample/src/main/scala --packageName tests.dtos.http4s --framework http4s - --client --specPath modules/sample/src/main/resources/plain.json --outputPath modules/sample/src/main/scala --packageName tests.dtos.akkaHttp --framework akka-http - --client --specPath modules/sample/src/main/resources/contentType-textPlain.yaml --outputPath modules/sample/src/main/scala --packageName tests.contentTypes.textPlain.client.http4s --framework http4s - --client --specPath modules/sample/src/main/resources/contentType-textPlain.yaml --outputPath modules/sample/src/main/scala --packageName tests.contentTypes.textPlain.client.akkaHttp --framework akka-http - --server --specPath modules/sample/src/main/resources/contentType-textPlain.yaml --outputPath modules/sample/src/main/scala --packageName tests.contentTypes.textPlain.server.http4s --framework http4s - --server --specPath modules/sample/src/main/resources/contentType-textPlain.yaml --outputPath modules/sample/src/main/scala --packageName tests.contentTypes.textPlain.server.akkaHttp --framework akka-http - --server --specPath modules/sample/src/main/resources/raw-response.yaml --outputPath modules/sample/src/main/scala --packageName raw.server.http4s --framework http4s - --server --specPath modules/sample/src/main/resources/raw-response.yaml --outputPath modules/sample/src/main/scala --packageName raw.server.akkaHttp --framework akka-http - --server --specPath modules/sample/src/main/resources/server1.yaml --outputPath modules/sample/src/main/scala --packageName tracer.server.http4s --tracing --framework http4s - --server --specPath modules/sample/src/main/resources/server1.yaml --outputPath modules/sample/src/main/scala --packageName tracer.server.akkaHttp --tracing --framework akka-http - --client --specPath modules/sample/src/main/resources/server1.yaml --outputPath modules/sample/src/main/scala --packageName tracer.client.http4s --tracing --framework http4s - --client --specPath modules/sample/src/main/resources/server1.yaml --outputPath modules/sample/src/main/scala --packageName tracer.client.akkaHttp --tracing --framework akka-http - --server --specPath modules/sample/src/main/resources/server2.yaml --outputPath modules/sample/src/main/scala --packageName tracer.server.http4s --tracing --framework http4s - --server --specPath modules/sample/src/main/resources/server2.yaml --outputPath modules/sample/src/main/scala --packageName tracer.server.akkaHttp --tracing --framework akka-http - --client --specPath modules/sample/src/main/resources/server2.yaml --outputPath modules/sample/src/main/scala --packageName tracer.client.http4s --tracing --framework http4s - --client --specPath modules/sample/src/main/resources/server2.yaml --outputPath modules/sample/src/main/scala --packageName tracer.client.akkaHttp --tracing --framework akka-http - --client --specPath modules/sample/src/main/resources/alias.yaml --outputPath modules/sample/src/main/scala --packageName alias.client.http4s --framework http4s - --client --specPath modules/sample/src/main/resources/alias.yaml --outputPath modules/sample/src/main/scala --packageName alias.client.akkaHttp --framework akka-http - --server --specPath modules/sample/src/main/resources/alias.yaml --outputPath modules/sample/src/main/scala --packageName alias.server.http4s --framework http4s - --server --specPath modules/sample/src/main/resources/alias.yaml --outputPath modules/sample/src/main/scala --packageName alias.server.akkaHttp --framework akka-http - --client --specPath modules/sample/src/main/resources/edgecases/defaults.yaml --outputPath modules/sample/src/main/scala --packageName edgecases.defaults.http4s --framework http4s - --client --specPath modules/sample/src/main/resources/edgecases/defaults.yaml --outputPath modules/sample/src/main/scala --packageName edgecases.defaults.akkaHttp --framework akka-http - --client --specPath modules/sample/src/main/resources/custom-header-type.yaml --outputPath modules/sample/src/main/scala --packageName tests.customTypes.customHeader.client.http4s --framework http4s - --client --specPath modules/sample/src/main/resources/custom-header-type.yaml --outputPath modules/sample/src/main/scala --packageName tests.customTypes.customHeader.client.akkaHttp --framework akka-http - --server --specPath modules/sample/src/main/resources/custom-header-type.yaml --outputPath modules/sample/src/main/scala --packageName tests.customTypes.customHeader.server.http4s --framework http4s - --server --specPath modules/sample/src/main/resources/custom-header-type.yaml --outputPath modules/sample/src/main/scala --packageName tests.customTypes.customHeader.server.akkaHttp --framework akka-http - --client --specPath modules/sample/src/main/resources/formData.yaml --outputPath modules/sample/src/main/scala --packageName form.client.http4s --framework http4s - --client --specPath modules/sample/src/main/resources/formData.yaml --outputPath modules/sample/src/main/scala --packageName form.client.akkaHttp --framework akka-http - --server --specPath modules/sample/src/main/resources/formData.yaml --outputPath modules/sample/src/main/scala --packageName form.server.http4s --framework http4s - --server --specPath modules/sample/src/main/resources/formData.yaml --outputPath modules/sample/src/main/scala --packageName form.server.akkaHttp --framework akka-http - --server --specPath modules/sample/src/main/resources/issues/issue121.yaml --outputPath modules/sample/src/main/scala --packageName issues.issue121.server.akkaHttp --framework akka-http - --client --specPath modules/sample/src/main/resources/issues/issue121.yaml --outputPath modules/sample/src/main/scala --packageName issues.issue121.client.akkaHttp --framework akka-http - --server --specPath modules/sample/src/main/resources/issues/issue121.yaml --outputPath modules/sample/src/main/scala --packageName issues.issue121.server.http4s --framework http4s - --client --specPath modules/sample/src/main/resources/issues/issue121.yaml --outputPath modules/sample/src/main/scala --packageName issues.issue121.client.http4s --framework http4s - --server --specPath modules/sample/src/main/resources/issues/issue127.yaml --outputPath modules/sample/src/main/scala --packageName issues.issue127 - --server --specPath modules/sample/src/main/resources/issues/issue143.yaml --outputPath modules/sample/src/main/scala --packageName issues.issue143.server.akkaHttp - --client --specPath modules/sample/src/main/resources/issues/issue148.yaml --outputPath modules/sample/src/main/scala --packageName issues.issue148.client.http4s --framework http4s - --client --specPath modules/sample/src/main/resources/issues/issue148.yaml --outputPath modules/sample/src/main/scala --packageName issues.issue148.client.akkaHttp --framework akka-http - --server --specPath modules/sample/src/main/resources/issues/issue148.yaml --outputPath modules/sample/src/main/scala --packageName issues.issue148.server.http4s --framework http4s - --server --specPath modules/sample/src/main/resources/issues/issue148.yaml --outputPath modules/sample/src/main/scala --packageName issues.issue148.server.akkaHttp --framework akka-http - --client --specPath modules/sample/src/main/resources/issues/issue164.yaml --outputPath modules/sample/src/main/scala --packageName issues.issue164.client.http4s --framework http4s - --client --specPath modules/sample/src/main/resources/issues/issue164.yaml --outputPath modules/sample/src/main/scala --packageName issues.issue164.client.akkaHttp --framework akka-http -""".replaceAllLiterally("\n", " ").split(' ').filter(_.nonEmpty): _* + exampleArgs.flatten.filter(_.nonEmpty): _* ) artifact in (Compile, assembly) := { From d5771ecf594b36d7fe3dc1402f56d3ab4a9b78a0 Mon Sep 17 00:00:00 2001 From: Devon Stewart Date: Sun, 13 Jan 2019 23:08:04 -0800 Subject: [PATCH 7/9] Adding wartremover --- build.sbt | 4 +++- project/plugins.sbt | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index a34412c299..cd8dea430e 100644 --- a/build.sbt +++ b/build.sbt @@ -116,9 +116,11 @@ val testDependencies = Seq( "org.scalatest" %% "scalatest" % scalatestVersion % Test ) +val excludedWarts = Set(Wart.DefaultArguments, Wart.Product, Wart.Serializable) val codegenSettings = Seq( addCompilerPlugin("org.spire-math" %% "kind-projector" % "0.9.9"), - addCompilerPlugin("org.spire-math" % "kind-projector" % "0.9.9" cross CrossVersion.binary), + wartremoverWarnings in Compile ++= Warts.unsafe.filterNot(w => excludedWarts.exists(_.clazz == w.clazz)), + wartremoverWarnings in Test := List.empty, libraryDependencies ++= testDependencies ++ Seq( "org.scalameta" %% "scalameta" % "4.1.0", "io.swagger" % "swagger-parser" % "1.0.39", diff --git a/project/plugins.sbt b/project/plugins.sbt index e2efb7662d..b6b52f16fe 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -13,3 +13,5 @@ addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.2") addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "2.3") addSbtPlugin("ohnosequences" % "sbt-github-release" % "0.7.0") + +addSbtPlugin("org.wartremover" % "sbt-wartremover" % "2.3.7") From 92141c4ee75bfa7f8cfea007a4bea45108de739a Mon Sep 17 00:00:00 2001 From: Devon Stewart Date: Sun, 13 Jan 2019 23:07:50 -0800 Subject: [PATCH 8/9] Removing head/tail calls --- .../generators/CirceProtocolGenerator.scala | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/modules/codegen/src/main/scala/com/twilio/guardrail/generators/CirceProtocolGenerator.scala b/modules/codegen/src/main/scala/com/twilio/guardrail/generators/CirceProtocolGenerator.scala index ce30be6fc0..6047c72a2e 100644 --- a/modules/codegen/src/main/scala/com/twilio/guardrail/generators/CirceProtocolGenerator.scala +++ b/modules/codegen/src/main/scala/com/twilio/guardrail/generators/CirceProtocolGenerator.scala @@ -5,6 +5,7 @@ import _root_.io.swagger.models.{ ArrayModel, ComposedModel, Model, ModelImpl, R import _root_.io.swagger.models.properties._ import cats.implicits._ import cats.~> +import cats.data.NonEmptyList import com.twilio.guardrail.extract.{ Default, ScalaEmptyIsNull, ScalaType } import com.twilio.guardrail.terms import java.util.Locale @@ -366,10 +367,15 @@ object CirceProtocolGenerator { def allParents(model: Model): List[(String, Model, List[RefModel])] = (model match { case elem: ComposedModel => - definitions.collectFirst { - case (clsName, e) if elem.getInterfaces.asScala.headOption.exists(_.getSimpleRef == clsName) => - (clsName, e, elem.getInterfaces.asScala.tail.toList) - } + NonEmptyList + .fromList(elem.getInterfaces.asScala.toList) + .flatMap({ + case NonEmptyList(head, tail) => + definitions.collectFirst { + case (clsName, e) if head.getSimpleRef == clsName => + (clsName, e, tail.toList) + } + }) case _ => None }) match { case Some(x @ (_, el, _)) => x :: allParents(el) From 6156ce2fe1dcdafc40ebeb69e55fcd305d8d93d6 Mon Sep 17 00:00:00 2001 From: Devon Stewart Date: Mon, 14 Jan 2019 00:04:48 -0800 Subject: [PATCH 9/9] Catch and pretty-print exceptions --- .../guardrail/core/CoreTermInterp.scala | 48 +++++++++++++++---- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/modules/codegen/src/main/scala/com/twilio/guardrail/core/CoreTermInterp.scala b/modules/codegen/src/main/scala/com/twilio/guardrail/core/CoreTermInterp.scala index 42d1122d9c..1efbb6a4d9 100644 --- a/modules/codegen/src/main/scala/com/twilio/guardrail/core/CoreTermInterp.scala +++ b/modules/codegen/src/main/scala/com/twilio/guardrail/core/CoreTermInterp.scala @@ -1,17 +1,15 @@ package com.twilio.guardrail package core -import cats.data.NonEmptyList -import cats.instances.all._ -import cats.syntax.flatMap._ -import cats.syntax.either._ -import cats.syntax.traverse._ +import cats.data.{ NonEmptyList, State } +import cats.implicits._ import cats.{ FlatMap, ~> } import com.twilio.guardrail.languages.LA import com.twilio.guardrail.terms._ import java.nio.file.Paths import scala.io.AnsiColor import scala.meta._ +import scala.util.control.NonFatal object CoreTermInterp { def apply[L <: LA](defaultFramework: String, @@ -122,11 +120,41 @@ object CoreTermInterp { } yield { ReadSwagger( Paths.get(specPath), { swagger => - (for { - defs <- Common.prepareDefinitions[L, CodegenApplication[L, ?]](kind, context, swagger) - (proto, codegen) = defs - result <- Common.writePackage[L, CodegenApplication[L, ?]](proto, codegen, context)(Paths.get(outputPath), pkgName, dtoPackage, customImports) - } yield result).foldMap(targetInterpreter) + try { + (for { + defs <- Common.prepareDefinitions[L, CodegenApplication[L, ?]](kind, context, swagger) + (proto, codegen) = defs + result <- Common.writePackage[L, CodegenApplication[L, ?]](proto, codegen, context)(Paths.get(outputPath), pkgName, dtoPackage, customImports) + } yield result).foldMap(targetInterpreter) + } catch { + case NonFatal(ex) => + val stackTrace = + ex.getStackTrace() + .toList + .foldLeftM[State[Option[String], ?], List[String]](List.empty)({ + case (acc, next) => + for { + lastClassName <- State.get + _ <- State.set(Option(next.getClassName())) + } yield { + if (next.getClassName().startsWith("com.twilio")) { + acc :+ s" at ${next.toString()}" + } else { + if (lastClassName.exists(_.startsWith("com.twilio"))) { + acc :+ " ..." + } else acc + } + } + }) + .runA(Option.empty) + .value + Target.raiseError(s""" + |Error attempting to process ${specPath}: + | + |${ex.toString()} + |${stackTrace.mkString("\n")} + |""".stripMargin.trim) + } } ) }