From 12ded36d6cce99791d817595a2575c7464428ff7 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Fri, 8 Feb 2019 12:25:59 +0100 Subject: [PATCH] Align docs and tests Add implied import entry to sidebar --- docs/docs/reference/contextual/conversions.md | 8 ++--- docs/docs/reference/contextual/query-types.md | 2 +- docs/sidebar.yml | 2 ++ tests/pos/postconditions.scala | 21 ++++++++++++++ tests/pos/reference/instances.scala | 29 ++++++++++++------- 5 files changed, 46 insertions(+), 16 deletions(-) create mode 100644 tests/pos/postconditions.scala diff --git a/docs/docs/reference/contextual/conversions.md b/docs/docs/reference/contextual/conversions.md index e838964a5144..63da00aa2dc7 100644 --- a/docs/docs/reference/contextual/conversions.md +++ b/docs/docs/reference/contextual/conversions.md @@ -54,15 +54,15 @@ object Completions { // these always come with CompletionArg // They can be invoked explicitly, e.g. // - // CompletionArg.from(statusCode) + // CompletionArg.fromStatusCode(statusCode) - implied from for Conversion[String, CompletionArg] { + implied fromString for Conversion[String, CompletionArg] { def apply(s: String) = CompletionArg.Error(s) } - implied from for Conversion[Future[HttpResponse], CompletionArg] { + implied fromFuture for Conversion[Future[HttpResponse], CompletionArg] { def apply(f: Future[HttpResponse]) = CompletionArg.Response(f) } - implied from for Conversion[Future[StatusCode], CompletionArg] { + implied fromStatusCode for Conversion[Future[StatusCode], CompletionArg] { def apply(code: Future[StatusCode]) = CompletionArg.Status(code) } } diff --git a/docs/docs/reference/contextual/query-types.md b/docs/docs/reference/contextual/query-types.md index 68adcb79b4d5..e903fdeedbc9 100644 --- a/docs/docs/reference/contextual/query-types.md +++ b/docs/docs/reference/contextual/query-types.md @@ -133,7 +133,7 @@ object PostConditions { } object Test { - import PostConditions.ensuring + import PostConditions.{ensuring, result} val s = List(1, 2, 3).sum.ensuring(result == 6) } ``` diff --git a/docs/sidebar.yml b/docs/sidebar.yml index 09cb58267911..f42ecf4598e4 100644 --- a/docs/sidebar.yml +++ b/docs/sidebar.yml @@ -47,6 +47,8 @@ sidebar: url: docs/reference/contextual/inferable-params.html - title: Context Bounds url: docs/reference/contextual/context-bounds.html + - title: Implied Imports + url: docs/reference/contextual/import-implied.html - title: Extension Methods url: docs/reference/contextual/extension-methods.html - title: Implementing Typeclasses diff --git a/tests/pos/postconditions.scala b/tests/pos/postconditions.scala new file mode 100644 index 000000000000..0ee5970f0d5a --- /dev/null +++ b/tests/pos/postconditions.scala @@ -0,0 +1,21 @@ +object PostConditions { + opaque type WrappedResult[T] = T + + private object WrappedResult { + def wrap[T](x: T): WrappedResult[T] = x + def unwrap[T](x: WrappedResult[T]): T = x + } + + def result[T] given (r: WrappedResult[T]): T = WrappedResult.unwrap(r) + + def (x: T) ensuring [T](condition: given WrappedResult[T] => Boolean): T = { + implied for WrappedResult[T] = WrappedResult.wrap(x) + assert(condition) + x + } +} + +object Test { + import PostConditions.{ensuring, result} + val s = List(1, 2, 3).sum.ensuring(result == 6) +} \ No newline at end of file diff --git a/tests/pos/reference/instances.scala b/tests/pos/reference/instances.scala index c376a3df2e3e..d5a838845af9 100644 --- a/tests/pos/reference/instances.scala +++ b/tests/pos/reference/instances.scala @@ -266,6 +266,24 @@ object Completions { case Response(f: Future[HttpResponse]) case Status(code: Future[StatusCode]) } + object CompletionArg { + + // conversions defining the possible arguments to pass to `complete` + // these always come with CompletionArg + // They can be invoked explicitly, e.g. + // + // CompletionArg.from(statusCode) + + implied fromString for Conversion[String, CompletionArg] { + def apply(s: String) = CompletionArg.Error(s) + } + implied fromFuture for Conversion[Future[HttpResponse], CompletionArg] { + def apply(f: Future[HttpResponse]) = CompletionArg.Response(f) + } + implied fromStatusCode for Conversion[Future[StatusCode], CompletionArg] { + def apply(code: Future[StatusCode]) = CompletionArg.Status(code) + } + } import CompletionArg._ def complete[T](arg: CompletionArg) = arg match { @@ -273,15 +291,4 @@ object Completions { case Response(f) => ??? case Status(code) => ??? } - - // conversions defining the possible arguments to pass to `complete` - implied stringArg for Conversion[String, CompletionArg] { - def apply(s: String) = CompletionArg.Error(s) - } - implied responseArg for Conversion[Future[HttpResponse], CompletionArg] { - def apply(f: Future[HttpResponse]) = CompletionArg.Response(f) - } - implied statusArg for Conversion[Future[StatusCode], CompletionArg] { - def apply(code: Future[StatusCode]) = CompletionArg.Status(code) - } } \ No newline at end of file