From 53c6299c9477986b5f957db70b8e0cab6d95c0a6 Mon Sep 17 00:00:00 2001 From: Dale Wijnand Date: Sun, 27 Jan 2019 16:45:24 +0000 Subject: [PATCH] Implement Append for Function1 --- main-settings/src/main/scala/sbt/Append.scala | 9 ++++++ .../src/test/scala/sbt/AppendSpec.scala | 31 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 main-settings/src/test/scala/sbt/AppendSpec.scala diff --git a/main-settings/src/main/scala/sbt/Append.scala b/main-settings/src/main/scala/sbt/Append.scala index 52c1727a2..fc404d9ad 100644 --- a/main-settings/src/main/scala/sbt/Append.scala +++ b/main-settings/src/main/scala/sbt/Append.scala @@ -101,4 +101,13 @@ object Append { def appendValues(a: Seq[Source], b: Seq[File]): Seq[Source] = a ++ b.map(new Source(_, AllPassFilter, NothingFilter)) } + + implicit def appendFunction[A, B]: Value[A => A, A => A] = _.andThen(_) + + implicit def appendSideEffectToFunc[A, B]: Value[A => B, () => Unit] = (f, sideEffect) => { + f.andThen { b => + sideEffect() + b + } + } } diff --git a/main-settings/src/test/scala/sbt/AppendSpec.scala b/main-settings/src/test/scala/sbt/AppendSpec.scala new file mode 100644 index 000000000..a9c0e035e --- /dev/null +++ b/main-settings/src/test/scala/sbt/AppendSpec.scala @@ -0,0 +1,31 @@ +/* + * sbt + * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2008 - 2010, Mark Harrah + * Licensed under Apache License 2.0 (see LICENSE) + */ + +package sbt + +object AppendSpec { + val onLoad = SettingKey[State => State]("onLoad") + + import Scope.Global + import SlashSyntax0._ + + def doSideEffect(): Unit = () + + Global / onLoad := (Global / onLoad).value.andThen { s => + doSideEffect() + s + } + + Global / onLoad += { (s: State) => + doSideEffect() + s + } + + Global / onLoad += doSideEffect _ + Global / onLoad += (() => doSideEffect()) + Global / onLoad += (() => println("foo")) +}