Skip to content

Commit b13325f

Browse files
cchepelovposlegm
andauthored
add sbt.ConcurrentRestrictions.Tag("scalafmt") + Tags.CPU on scalafmt tasks (#101)
* add sbt.ConcurrentRestrictions.Tag("scalafmt") + Tags.CPU on scalafmt tasks * Scaladoc fixed Co-authored-by: Mikhail Chugunkov <poslegm@gmail.com>
1 parent bf481bc commit b13325f

2 files changed

Lines changed: 45 additions & 11 deletions

File tree

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.scalafmt.sbt
2+
3+
trait ConcurrentRestrictionTags {
4+
import sbt.ConcurrentRestrictions.Tag
5+
6+
/**
7+
* This tag can be used to control the maximum number of parallel scalafmt tasks in large-scale build trees.
8+
*
9+
* Global / concurrentRestrictions += Tags.limit(org.scalafmt.sbt.ConcurrentRestrictionTags.Scalafmt, 3)
10+
*
11+
* would prevent SBT from spawning more than three simultaneous Scalafmt tasks
12+
*
13+
* @see https://www.scala-sbt.org/1.x/docs/Parallel-Execution.html
14+
*/
15+
val Scalafmt = Tag("scalafmt")
16+
}
17+
18+
object ConcurrentRestrictionTags extends ConcurrentRestrictionTags

plugin/src/main/scala/org/scalafmt/sbt/ScalafmtPlugin.scala

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import scala.util.Failure
1717
import scala.util.Success
1818
import scala.util.Try
1919
import org.scalafmt.interfaces.{Scalafmt, ScalafmtSessionFactory}
20+
import sbt.ConcurrentRestrictions.Tag
2021
import sbt.librarymanagement.MavenRepository
2122

2223
object ScalafmtPlugin extends AutoPlugin {
@@ -25,6 +26,9 @@ object ScalafmtPlugin extends AutoPlugin {
2526
object autoImport {
2627
val scalafmt = taskKey[Unit]("Format Scala sources with scalafmt.")
2728

29+
private[sbt] val ScalafmtTagPack =
30+
Seq(ConcurrentRestrictionTags.Scalafmt, Tags.CPU)
31+
2832
@deprecated("Use scalafmt instead.", "2.0.0")
2933
val scalafmtIncremental = taskKey[Unit](
3034
"Format Scala sources to be compiled incrementally with scalafmt (alias to scalafmt)."
@@ -317,8 +321,8 @@ object ScalafmtPlugin extends AutoPlugin {
317321
}
318322
}
319323

320-
lazy val scalafmtConfigSettings: Seq[Def.Setting[_]] = Seq(
321-
scalafmt := {
324+
private def scalafmtTask =
325+
Def.task {
322326
formatSources(
323327
streams.value.cacheStoreFactory,
324328
(unmanagedSources in scalafmt).value,
@@ -327,9 +331,10 @@ object ScalafmtPlugin extends AutoPlugin {
327331
outputStreamWriter(streams.value),
328332
fullResolvers.value
329333
)
330-
},
331-
scalafmtIncremental := scalafmt.value,
332-
scalafmtSbt := {
334+
} tag (ScalafmtTagPack: _*)
335+
336+
private def scalafmtSbtTask =
337+
Def.task {
333338
formatSources(
334339
sbtSources.value.toSet,
335340
sbtConfig.value,
@@ -344,8 +349,10 @@ object ScalafmtPlugin extends AutoPlugin {
344349
outputStreamWriter(streams.value),
345350
fullResolvers.value
346351
)
347-
},
348-
scalafmtCheck := {
352+
} tag (ScalafmtTagPack: _*)
353+
354+
private def scalafmtCheckTask =
355+
Def.task {
349356
val analysis = checkSources(
350357
(scalafmt / streams).value.cacheStoreFactory,
351358
(unmanagedSources in scalafmt).value,
@@ -355,8 +362,10 @@ object ScalafmtPlugin extends AutoPlugin {
355362
fullResolvers.value
356363
)
357364
trueOrBoom(analysis)
358-
},
359-
scalafmtSbtCheck := {
365+
} tag (ScalafmtTagPack: _*)
366+
367+
private def scalafmtSbtCheckTask =
368+
Def.task {
360369
trueOrBoom(
361370
checkSources(
362371
sbtSources.value,
@@ -375,10 +384,17 @@ object ScalafmtPlugin extends AutoPlugin {
375384
fullResolvers.value
376385
)
377386
)
378-
},
387+
} tag (ScalafmtTagPack: _*)
388+
389+
lazy val scalafmtConfigSettings: Seq[Def.Setting[_]] = Seq(
390+
scalafmt := scalafmtTask.value,
391+
scalafmtIncremental := scalafmt.value,
392+
scalafmtSbt := scalafmtSbtTask.value,
393+
scalafmtCheck := scalafmtCheckTask.value,
394+
scalafmtSbtCheck := scalafmtSbtCheckTask.value,
379395
scalafmtDoFormatOnCompile := Def.settingDyn {
380396
if (scalafmtOnCompile.value) {
381-
scalafmt in resolvedScoped.value.scope
397+
(scalafmt in resolvedScoped.value.scope)
382398
} else {
383399
Def.task(())
384400
}

0 commit comments

Comments
 (0)