From b75e9c1d40ed264de4f56104fe5a33cacc455077 Mon Sep 17 00:00:00 2001 From: xuwei-k <6b656e6a69@gmail.com> Date: Sat, 23 Mar 2024 16:22:37 +0900 Subject: [PATCH 1/2] add scalafixJGitCompletion key. reduce memory usage --- .../internal/sbt/ScalafixCompletions.scala | 4 ++-- .../scala/scalafix/sbt/ScalafixPlugin.scala | 18 +++++++++++++++--- .../internal/sbt/SbtCompletionsSuite.scala | 6 ++++-- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/main/scala/scalafix/internal/sbt/ScalafixCompletions.scala b/src/main/scala/scalafix/internal/sbt/ScalafixCompletions.scala index 0855c740..b6b9c5c3 100644 --- a/src/main/scala/scalafix/internal/sbt/ScalafixCompletions.scala +++ b/src/main/scala/scalafix/internal/sbt/ScalafixCompletions.scala @@ -14,7 +14,8 @@ class ScalafixCompletions( // depend on settings, while local rules classpath must be looked up via tasks loadedRules: () => Seq[ScalafixRule], terminalWidth: Option[Int], - allowedTargetFilesPrefixes: Seq[Path] // Nil means all values are valid + allowedTargetFilesPrefixes: Seq[Path], // Nil means all values are valid + jgitCompletion: JGitCompletion ) { private type P = Parser[String] @@ -116,7 +117,6 @@ class ScalafixCompletions( private val namedRule2: Parser[ShellArgs.Rule] = namedRule.map(s => ShellArgs.Rule(s)) private lazy val gitDiffParser: P = { - val jgitCompletion = new JGitCompletion(workingDirectory) token( NotQuoted, TokenCompletions.fixed((seen, _) => { diff --git a/src/main/scala/scalafix/sbt/ScalafixPlugin.scala b/src/main/scala/scalafix/sbt/ScalafixPlugin.scala index 69100f44..6355f45c 100644 --- a/src/main/scala/scalafix/sbt/ScalafixPlugin.scala +++ b/src/main/scala/scalafix/sbt/ScalafixPlugin.scala @@ -118,6 +118,13 @@ object ScalafixPlugin extends AutoPlugin { import autoImport._ + private val scalafixJGitCompletion: SettingKey[JGitCompletion] = + SettingKey( + "scalafixJGitCompletion", + "Implementation detail - do not use", + Invisible + ) + private val scalafixDummyTask: TaskKey[Unit] = TaskKey( "scalafixDummyTask", @@ -233,7 +240,10 @@ object ScalafixPlugin extends AutoPlugin { override def buildSettings: Seq[Def.Setting[_]] = Seq( - scalafixScalaBinaryVersion := "2.12" + scalafixScalaBinaryVersion := "2.12", + scalafixJGitCompletion := new JGitCompletion( + (ThisBuild / baseDirectory).value.toPath + ) ) lazy val stdoutLogger = ConsoleLogger(System.out) @@ -299,7 +309,8 @@ object ScalafixPlugin extends AutoPlugin { workingDirectory = (ThisBuild / baseDirectory).value.toPath, loadedRules = () => scalafixInterfaceProvider.value().availableRules(), terminalWidth = Some(JLineAccess.terminalWidth), - allowedTargetFilesPrefixes = Nil + allowedTargetFilesPrefixes = Nil, + jgitCompletion = (ThisBuild / scalafixJGitCompletion).value ) )(_.parser) // workaround https://github.com/sbt/sbt/issues/3572 by invoking directly what Def.inputTaskDyn would via macro @@ -352,7 +363,8 @@ object ScalafixPlugin extends AutoPlugin { loadedRules = () => scalafixInterfaceProvider.value().availableRules(), terminalWidth = Some(JLineAccess.terminalWidth), allowedTargetFilesPrefixes = - (scalafix / unmanagedSourceDirectories).value.map(_.toPath) + (scalafix / unmanagedSourceDirectories).value.map(_.toPath), + jgitCompletion = (ThisBuild / scalafixJGitCompletion).value ) )(_.parser) diff --git a/src/test/scala/scalafix/internal/sbt/SbtCompletionsSuite.scala b/src/test/scala/scalafix/internal/sbt/SbtCompletionsSuite.scala index 000f7e61..5fa9eec6 100644 --- a/src/test/scala/scalafix/internal/sbt/SbtCompletionsSuite.scala +++ b/src/test/scala/scalafix/internal/sbt/SbtCompletionsSuite.scala @@ -47,7 +47,8 @@ class SbtCompletionsSuite extends AnyFunSuite { workingDirectory = fs.workingDirectory.toAbsolutePath, loadedRules = () => loadedRules, terminalWidth = None, - allowedTargetFilesPrefixes = Seq(fs.workingDirectory.resolve("foo")) + allowedTargetFilesPrefixes = Seq(fs.workingDirectory.resolve("foo")), + jgitCompletion = new JGitCompletion(fs.workingDirectory.toAbsolutePath) ).parser def checkCompletion(name: String, testTags: Tag*)( @@ -268,7 +269,8 @@ class SbtCompletionsSuite extends AnyFunSuite { workingDirectory = fs.workingDirectory.toAbsolutePath, loadedRules = () => Nil, terminalWidth = None, - allowedTargetFilesPrefixes = Nil + allowedTargetFilesPrefixes = Nil, + jgitCompletion = new JGitCompletion(fs.workingDirectory.toAbsolutePath) ).parser )("--test --files=foo", SkipWindows) { args => assert(args == Left("""--files=foo From 13ab8b7c69e20604928899d0217607c140689cc0 Mon Sep 17 00:00:00 2001 From: kenji yoshida <6b656e6a69@gmail.com> Date: Sat, 23 Mar 2024 19:46:51 +0900 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: Brice Jaglin --- src/main/scala/scalafix/sbt/ScalafixPlugin.scala | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/scala/scalafix/sbt/ScalafixPlugin.scala b/src/main/scala/scalafix/sbt/ScalafixPlugin.scala index 6355f45c..6a43993d 100644 --- a/src/main/scala/scalafix/sbt/ScalafixPlugin.scala +++ b/src/main/scala/scalafix/sbt/ScalafixPlugin.scala @@ -241,9 +241,7 @@ object ScalafixPlugin extends AutoPlugin { override def buildSettings: Seq[Def.Setting[_]] = Seq( scalafixScalaBinaryVersion := "2.12", - scalafixJGitCompletion := new JGitCompletion( - (ThisBuild / baseDirectory).value.toPath - ) + scalafixJGitCompletion := new JGitCompletion(baseDirectory.value.toPath) ) lazy val stdoutLogger = ConsoleLogger(System.out) @@ -310,7 +308,7 @@ object ScalafixPlugin extends AutoPlugin { loadedRules = () => scalafixInterfaceProvider.value().availableRules(), terminalWidth = Some(JLineAccess.terminalWidth), allowedTargetFilesPrefixes = Nil, - jgitCompletion = (ThisBuild / scalafixJGitCompletion).value + jgitCompletion = scalafixJGitCompletion.value ) )(_.parser) // workaround https://github.com/sbt/sbt/issues/3572 by invoking directly what Def.inputTaskDyn would via macro @@ -364,7 +362,7 @@ object ScalafixPlugin extends AutoPlugin { terminalWidth = Some(JLineAccess.terminalWidth), allowedTargetFilesPrefixes = (scalafix / unmanagedSourceDirectories).value.map(_.toPath), - jgitCompletion = (ThisBuild / scalafixJGitCompletion).value + jgitCompletion = scalafixJGitCompletion.value ) )(_.parser)