Skip to content
This repository was archived by the owner on Jun 28, 2022. It is now read-only.

Commit 53a7d18

Browse files
committed
Add Scala 2.13 support
This project now compiles with Scala 2.13 by default, while still cross-compiling to Scala 2.12. Issues addressed with this upgrade: ### Underscore (`_`) is no longer a valid identifer for `val`s Using underscore like this is no longer allowed... ``` implicit val _ = ... ``` ...we have to give the `val` a valid name (even if it's just `v`): ``` implicit val v = ... ``` See also: * scala/bug#10384 * scala/bug#7691 * scala/scala#6218 ### `Map.mapValues()` now returns a `MapView` rather than a `Map` We usually want a `Map`, so we can just add in a `.toMap` to the end of the expression - it's harmless in Scala 2.12, and allows the code to compile in Scala 2.13. `Map.mapValues()` itself is deprecated in Scala 2.13, but using the new recommended alternative doesn't work in Scala 2.12. https://docs.scala-lang.org/overviews/core/collections-migration-213.html#what-are-the-breaking-changes See also: * scala/bug#10919 * scala/scala#7014 ### `.to` can no longer infer what resulting collection type you want This is all part of `CanBuildFrom` going away in Scala 2.13: https://www.scala-lang.org/blog/2018/06/13/scala-213-collections.html#life-without-canbuildfrom
1 parent 30923b5 commit 53a7d18

File tree

5 files changed

+9
-8
lines changed

5 files changed

+9
-8
lines changed

build.sbt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ enablePlugins(GhpagesPlugin, SiteScaladocPlugin)
55
name := "twitter4s"
66
version := "6.2-SNAPSHOT"
77

8-
scalaVersion := "2.12.4"
8+
scalaVersion := "2.13.1"
99

1010
resolvers ++= Seq(
1111
Resolver.sonatypeRepo("releases"),
@@ -53,7 +53,7 @@ lazy val standardSettings = Seq(
5353
ScmInfo(url("https://github.com/DanielaSfregola/twitter4s"),
5454
"scm:git:[email protected]:DanielaSfregola/twitter4s.git")),
5555
apiURL := Some(url("http://DanielaSfregola.github.io/twitter4s/latest/api/")),
56-
crossScalaVersions := Seq("2.12.4", "2.11.12"),
56+
crossScalaVersions := Seq("2.12.10", "2.11.12"),
5757
pomExtra := (
5858
<developers>
5959
<developer>

src/main/scala/com/danielasfregola/twitter4s/http/clients/Client.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ trait Client extends OAuthClient {
1818
protected def sendAndReceive[T](request: HttpRequest, f: HttpResponse => Future[T])(
1919
implicit system: ActorSystem,
2020
materializer: Materializer): Future[T] = {
21-
implicit val _ = request
21+
implicit val r: HttpRequest = request
2222
val requestStartTime = System.currentTimeMillis
2323

2424
if (withLogRequest) logRequest

src/main/scala/com/danielasfregola/twitter4s/http/marshalling/BodyEncoder.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,6 @@ trait BodyEncoder {
4242

4343
// TODO - improve performance with Macros?
4444
private def asMap(cc: Product): Map[String, Any] =
45-
cc.getClass.getDeclaredFields.map(_.getName).zip(cc.productIterator.to).toMap
45+
cc.getClass.getDeclaredFields.map(_.getName).zip(cc.productIterator.toSeq).toMap
4646

4747
}

src/main/scala/com/danielasfregola/twitter4s/http/oauth/OAuth1Provider.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ private[twitter4s] class OAuth1Provider(consumerToken: ConsumerToken, accessToke
3030
val params = basicOAuth2Params(callback)
3131
for {
3232
signature <- oauth1Signature(params)
33-
} yield (params + signature).mapValues(_.urlEncoded)
33+
} yield (params + signature).mapValues(_.urlEncoded).toMap
3434
}
3535

3636
def oauth1Signature(oauth2Params: Map[String, String])(implicit request: HttpRequest, materializer: Materializer) = {
@@ -67,7 +67,7 @@ private[twitter4s] class OAuth1Provider(consumerToken: ConsumerToken, accessToke
6767
val method = request.method.name.urlEncoded
6868
val baseUrl = request.uri.endpoint.urlEncoded
6969
val oauthParams = oauth2Params.map {
70-
case (k, v) =>
70+
case (k: String, v: String) =>
7171
if (k == "oauth_callback") k -> v.urlEncoded
7272
else k -> v
7373
}
@@ -90,7 +90,8 @@ private[twitter4s] class OAuth1Provider(consumerToken: ConsumerToken, accessToke
9090
}
9191
}
9292

93-
def queryParams(implicit request: HttpRequest) = request.uri.query().toMap.mapValues(_.urlEncoded)
93+
def queryParams(implicit request: HttpRequest): Map[String, String] =
94+
request.uri.query().toMap.mapValues(_.urlEncoded).toMap
9495

9596
private def encodeParams(params: Map[String, String]) =
9697
params.keySet.toList.sorted

src/main/scala/com/danielasfregola/twitter4s/http/serializers/StreamingMessageFormats.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ private[twitter4s] object StreamingMessageFormats extends FormatsComposer {
2121
private val tweetUnmarshaller = FieldSerializer[Tweet](deserializer = FieldSerializer.renameFrom("full_text", "text"))
2222

2323
private def withCustomUnmarshaller[T <: StreamingMessage: Manifest](json: JValue, formatter: Formats): Option[T] = {
24-
implicit val _: Formats = formatter
24+
implicit val formats: Formats = formatter
2525
Extraction.extractOpt[T](json)
2626
}
2727

0 commit comments

Comments
 (0)