Skip to content

Commit dd49706

Browse files
Add Remove instances for Set and Map
1 parent 878250e commit dd49706

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

main-settings/src/main/scala/sbt/Remove.scala

+10
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,14 @@ object Remove {
3434
def removeValue(a: Seq[T], b: Option[T]): Seq[T] = b.fold(a)(a filterNot _.==)
3535
def removeValues(a: Seq[T], b: Option[T]): Seq[T] = b.fold(a)(a filterNot _.==)
3636
}
37+
implicit def removeSet[T, V <: T]: Sequence[Set[T], Set[V], V] =
38+
new Sequence[Set[T], Set[V], V] {
39+
def removeValue(a: Set[T], b: V): Set[T] = a - b
40+
def removeValues(a: Set[T], b: Set[V]): Set[T] = a diff (b.toSeq: Seq[T]).toSet
41+
}
42+
implicit def removeMap[A, B, X <: A]: Sequence[Map[A, B], Seq[X], X] =
43+
new Sequence[Map[A, B], Seq[X], X] {
44+
def removeValue(a: Map[A, B], b: X): Map[A, B] = a - b
45+
def removeValues(a: Map[A, B], b: Seq[X]): Map[A, B] = a -- b
46+
}
3747
}

sbt-app/src/sbt-test/project/remove/build.sbt

+12
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
val intsTask = taskKey[Seq[Int]]("A seq of ints task")
22
val intsSetting = settingKey[Seq[Int]]("A seq of ints setting")
33
val intsFromScalaV = settingKey[Seq[Int]]("a seq of ints from scalaVersion")
4+
val intsSetSetting = settingKey[Set[Int]]("A set of ints setting")
5+
val stringIntMapSetting = settingKey[Map[String, Int]]("A map of string to int setting")
46

57
scalaVersion := "2.11.6"
68

@@ -22,9 +24,19 @@ intsFromScalaV --= { if (scalaVersion.value == "2.11.6") Seq(1, 2) else Seq(4) }
2224
intsFromScalaV -= { if (scalaVersion.value == "2.11.6") Option(6) else None }
2325
intsFromScalaV --= { if (scalaVersion.value == "2.11.6") Option(7) else None }
2426

27+
intsSetSetting := Set(1, 2, 3, 4, 5, 6, 7)
28+
intsSetSetting -= 3
29+
intsSetSetting --= Set(1, 2)
30+
31+
stringIntMapSetting := Map("a" -> 1, "b" -> 2 , "c" -> 3, "d" -> 4, "e" -> 5)
32+
stringIntMapSetting -= "c"
33+
stringIntMapSetting --= Seq("a", "b")
34+
2535
val check = taskKey[Unit]("Runs the check")
2636
check := {
2737
assert(intsTask.value == Seq(4, 5), s"intsTask should be Seq(4, 5) but is ${intsTask.value}")
2838
assert(intsSetting.value == Seq(4, 5), s"intsSetting should be Seq(4, 5) but is ${intsSetting.value}")
2939
assert(intsFromScalaV.value == Seq(4, 5), s"intsFromScalaV should be Seq(4, 5) but is ${intsFromScalaV.value}")
40+
assert(intsSetSetting.value == Set(4, 5, 6, 7), s"intsSetSetting should be Set(4, 5, 6, 7) but is ${intsSetSetting.value}")
41+
assert(stringIntMapSetting.value == Map("d" -> 4, "e" -> 5), s"stringIntMapSetting should be Map(d -> 4, e -> 5) but is ${stringIntMapSetting.value}")
3042
}

0 commit comments

Comments
 (0)