Skip to content

Commit

Permalink
Make invoke data an implicit parameter for inputs functions
Browse files Browse the repository at this point in the history
  • Loading branch information
MaciejG604 committed Feb 6, 2023
1 parent ff50ac8 commit 41123be
Show file tree
Hide file tree
Showing 22 changed files with 62 additions and 115 deletions.
23 changes: 10 additions & 13 deletions modules/build/src/main/scala/scala/build/input/Inputs.scala
Expand Up @@ -266,18 +266,16 @@ object Inputs {
programInvokeData: ScalaCliInvokeData
): Seq[Either[String, Seq[Element]]] = args.zipWithIndex.map {
case (arg, idx) =>
lazy val path = os.Path(arg, cwd)
lazy val dir = path / os.up
lazy val subPath = path.subRelativeTo(dir)
lazy val stdinOpt0 = stdinOpt
lazy val content = os.read.bytes(path)
val (isRunWithShebang, isRunWithDefault) = programInvokeData.subCommand match
case SubCommand.Shebang => (true, false)
case SubCommand.Default => (false, true)
case _ => (false, false)
lazy val path = os.Path(arg, cwd)
lazy val dir = path / os.up
lazy val subPath = path.subRelativeTo(dir)
lazy val stdinOpt0 = stdinOpt
lazy val content = os.read.bytes(path)
val isRunWithShebang = programInvokeData.subCommand == SubCommand.Shebang
val isRunWithDefault = programInvokeData.subCommand == SubCommand.Default
lazy val fullProgramCall = programInvokeData.progName +
s"${if isRunWithDefault then "" else s" ${programInvokeData.subCommandName}"}"
lazy val progName = os.Path(programInvokeData.progName, cwd).baseName
lazy val progName = programInvokeData.progName

if (arg == "-.scala" || arg == "_" || arg == "_.scala") && stdinOpt0.nonEmpty then
Right(Seq(VirtualScalaFile(stdinOpt0.get, "<stdin>-scala-file")))
Expand Down Expand Up @@ -404,9 +402,8 @@ object Inputs {
forcedWorkspace: Option[os.Path] = None,
enableMarkdown: Boolean = false,
allowRestrictedFeatures: Boolean,
extraClasspathWasPassed: Boolean,
programInvokeData: ScalaCliInvokeData
): Either[BuildException, Inputs] =
extraClasspathWasPassed: Boolean
)(implicit programInvokeData: ScalaCliInvokeData): Either[BuildException, Inputs] =
if (
args.isEmpty && scriptSnippetList.isEmpty && scalaSnippetList.isEmpty && javaSnippetList.isEmpty &&
markdownSnippetList.isEmpty && !extraClasspathWasPassed
Expand Down
Expand Up @@ -44,9 +44,8 @@ final case class TestInputs(
tmpDir,
forcedWorkspace = forcedWorkspaceOpt.map(_.resolveFrom(tmpDir)),
allowRestrictedFeatures = true,
extraClasspathWasPassed = false,
ScalaCliInvokeData("", "", SubCommand.Other)
)
extraClasspathWasPassed = false
)(ScalaCliInvokeData("", "", SubCommand.Other))
res match {
case Left(err) => throw new Exception(err)
case Right(inputs) => f(tmpDir, inputs)
Expand Down
Expand Up @@ -14,6 +14,7 @@ import scala.annotation.tailrec
import scala.build.EitherCps.{either, value}
import scala.build.compiler.SimpleScalaCompiler
import scala.build.errors.BuildException
import scala.build.input.{ScalaCliInvokeData, SubCommand}
import scala.build.internal.{Constants, Runner}
import scala.build.options.{BuildOptions, ScalacOpt, Scope}
import scala.build.{Artifacts, Logger, Positioned, ReplArtifacts}
Expand Down Expand Up @@ -69,6 +70,9 @@ abstract class ScalaCommand[T <: HasLoggingOptions](implicit myParser: Parser[T]
protected def actualFullCommand: String =
if actualCommandName.nonEmpty then s"$progName $actualCommandName" else progName

protected implicit def invokeData: ScalaCliInvokeData =
ScalaCliInvokeData(progName, actualCommandName, SubCommand.Other)

override def error(message: Error): Nothing = {
System.err.println(
s"""${message.message}
Expand Down
8 changes: 2 additions & 6 deletions modules/cli/src/main/scala/scala/cli/commands/bsp/Bsp.scala
Expand Up @@ -7,7 +7,7 @@ import scala.build.EitherCps.{either, value}
import scala.build.*
import scala.build.bsp.{BspReloadableOptions, BspThreads}
import scala.build.errors.BuildException
import scala.build.input.{Inputs, ScalaCliInvokeData, SubCommand}
import scala.build.input.Inputs
import scala.build.internal.CustomCodeWrapper
import scala.build.options.BuildOptions
import scala.cli.CurrentParams
Expand Down Expand Up @@ -40,11 +40,7 @@ object Bsp extends ScalaCommand[BspOptions] {
argsSeq =>
either {
val sharedOptions = getSharedOptions()
val initialInputs = value(sharedOptions.inputs(
argsSeq,
ScalaCliInvokeData(progName, actualCommandName, SubCommand.Other),
() => Inputs.default()
))
val initialInputs = value(sharedOptions.inputs(argsSeq, () => Inputs.default()))

if (sharedOptions.logging.verbosity >= 3)
pprint.err.log(initialInputs)
Expand Down
Expand Up @@ -2,7 +2,7 @@ package scala.cli.commands.clean

import caseapp.*

import scala.build.input.{Inputs, ScalaCliInvokeData, SubCommand}
import scala.build.input.Inputs
import scala.build.internal.Constants
import scala.build.{Logger, Os}
import scala.cli.commands.ScalaCommand
Expand All @@ -21,8 +21,7 @@ object Clean extends ScalaCommand[CleanOptions] {
defaultInputs = () => Inputs.default(),
forcedWorkspace = options.workspace.forcedWorkspaceOpt,
allowRestrictedFeatures = ScalaCli.allowRestrictedFeatures,
extraClasspathWasPassed = false,
ScalaCliInvokeData(progName, actualCommandName, SubCommand.Other)
extraClasspathWasPassed = false
) match {
case Left(message) =>
System.err.println(message)
Expand Down
Expand Up @@ -4,7 +4,6 @@ import caseapp.*

import java.io.File

import scala.build.input.{ScalaCliInvokeData, SubCommand}
import scala.build.options.{BuildOptions, Scope}
import scala.build.{Build, BuildThreads, Builds, Logger, Os}
import scala.cli.CurrentParams
Expand All @@ -25,10 +24,7 @@ object Compile extends ScalaCommand[CompileOptions] with BuildCommandHelpers {

override def runCommand(options: CompileOptions, args: RemainingArgs, logger: Logger): Unit = {
val buildOptions = buildOptionsOrExit(options)
val inputs = options.shared.inputs(
args.all,
ScalaCliInvokeData(progName, actualCommandName, SubCommand.Other)
).orExit(logger)
val inputs = options.shared.inputs(args.all).orExit(logger)
CurrentParams.workspaceOpt = Some(inputs.workspace)
SetupIde.runSafe(
options.shared,
Expand Down
Expand Up @@ -42,6 +42,9 @@ class Default(

private[cli] var rawArgs = Array.empty[String]

override def invokeData: ScalaCliInvokeData =
super.invokeData.copy(subCommand = SubCommand.Default)

override def runCommand(options: DefaultOptions, args: RemainingArgs, logger: Logger): Unit =
// can't fully re-parse and redirect to Version because of --cli-version and --scala-version clashing
if options.version then Version.runCommand(VersionOptions(options.shared.logging), args, logger)
Expand All @@ -61,6 +64,6 @@ class Default(
runOptions,
args,
logger,
ScalaCliInvokeData(progName, actualCommandName, SubCommand.Default)
invokeData
)
}
Expand Up @@ -4,7 +4,6 @@ import caseapp.*

import scala.build.actionable.ActionableDependencyHandler
import scala.build.actionable.ActionableDiagnostic.ActionableDependencyUpdateDiagnostic
import scala.build.input.{ScalaCliInvokeData, SubCommand}
import scala.build.internal.CustomCodeWrapper
import scala.build.options.{BuildOptions, Scope}
import scala.build.{CrossSources, Logger, Position, Sources}
Expand All @@ -25,10 +24,7 @@ object DependencyUpdate extends ScalaCommand[DependencyUpdateOptions] {
val verbosity = options.shared.logging.verbosity
val buildOptions = buildOptionsOrExit(options)

val inputs = options.shared.inputs(
args.all,
ScalaCliInvokeData(progName, actualCommandName, SubCommand.Other)
).orExit(logger)
val inputs = options.shared.inputs(args.all).orExit(logger)

val (crossSources, _) =
CrossSources.forInputs(
Expand Down
6 changes: 1 addition & 5 deletions modules/cli/src/main/scala/scala/cli/commands/doc/Doc.scala
Expand Up @@ -9,7 +9,6 @@ import scala.build.EitherCps.{either, value}
import scala.build.*
import scala.build.compiler.{ScalaCompilerMaker, SimpleScalaCompilerMaker}
import scala.build.errors.BuildException
import scala.build.input.{ScalaCliInvokeData, SubCommand}
import scala.build.interactive.InteractiveFileOps
import scala.build.internal.Runner
import scala.build.options.BuildOptions
Expand All @@ -30,10 +29,7 @@ object Doc extends ScalaCommand[DocOptions] {

override def runCommand(options: DocOptions, args: RemainingArgs, logger: Logger): Unit = {
val initialBuildOptions = buildOptionsOrExit(options)
val inputs = options.shared.inputs(
args.remaining,
ScalaCliInvokeData(progName, actualCommandName, SubCommand.Other)
).orExit(logger)
val inputs = options.shared.inputs(args.remaining).orExit(logger)
CurrentParams.workspaceOpt = Some(inputs.workspace)
val threads = BuildThreads.create()

Expand Down
Expand Up @@ -7,7 +7,7 @@ import coursier.util.{Artifact, Task}
import scala.build.EitherCps.{either, value}
import scala.build.*
import scala.build.errors.BuildException
import scala.build.input.{Inputs, ScalaCliInvokeData, SubCommand}
import scala.build.input.Inputs
import scala.build.internal.{Constants, CustomCodeWrapper}
import scala.build.options.{BuildOptions, Scope}
import scala.cli.CurrentParams
Expand Down Expand Up @@ -103,10 +103,7 @@ object Export extends ScalaCommand[ExportOptions] {
val buildToolName = if (shouldExportToMill) "mill" else "sbt"
System.out.println(s"Exporting to a $buildToolName project...")

val inputs = options.shared.inputs(
args.all,
ScalaCliInvokeData(progName, actualCommandName, SubCommand.Other)
).orExit(logger)
val inputs = options.shared.inputs(args.all).orExit(logger)
CurrentParams.workspaceOpt = Some(inputs.workspace)
val baseOptions =
initialBuildOptions.copy(mainClass = options.mainClass.mainClass.filter(_.nonEmpty))
Expand Down
7 changes: 2 additions & 5 deletions modules/cli/src/main/scala/scala/cli/commands/fmt/Fmt.scala
Expand Up @@ -3,7 +3,7 @@ package scala.cli.commands.fmt
import caseapp.*
import dependency.*

import scala.build.input.{Inputs, ScalaCliInvokeData, Script, SourceScalaFile, SubCommand}
import scala.build.input.{Inputs, Script, SourceScalaFile}
import scala.build.internal.{Constants, ExternalBinaryParams, FetchExternalBinary, Runner}
import scala.build.options.BuildOptions
import scala.build.{Logger, Sources}
Expand All @@ -30,10 +30,7 @@ object Fmt extends ScalaCommand[FmtOptions] {
if (args.all.isEmpty)
(Seq(os.pwd), os.pwd, None)
else {
val i = options.shared.inputs(
args.all,
ScalaCliInvokeData(progName, actualCommandName, SubCommand.Other)
).orExit(logger)
val i = options.shared.inputs(args.all).orExit(logger)
val s = i.sourceFiles().collect {
case sc: Script => sc.path
case sc: SourceScalaFile => sc.path
Expand Down
Expand Up @@ -5,7 +5,6 @@ import dependency.*

import java.io.File

import scala.build.input.{ScalaCliInvokeData, SubCommand}
import scala.build.internal.{Constants, ExternalBinaryParams, FetchExternalBinary, Runner}
import scala.build.options.BuildOptions
import scala.build.{Build, BuildThreads, Logger, Positioned}
Expand Down Expand Up @@ -60,10 +59,7 @@ object Metabrowse extends ScalaCommand[MetabrowseOptions] {

override def runCommand(options: MetabrowseOptions, args: RemainingArgs, logger: Logger): Unit = {
val initialBuildOptions = buildOptionsOrExit(options)
val inputs = options.shared.inputs(
args.all,
ScalaCliInvokeData(progName, actualCommandName, SubCommand.Other)
).orExit(logger)
val inputs = options.shared.inputs(args.all).orExit(logger)
CurrentParams.workspaceOpt = Some(inputs.workspace)
val threads = BuildThreads.create()

Expand Down
Expand Up @@ -21,7 +21,6 @@ import scala.build.EitherCps.{either, value}
import scala.build.Ops.*
import scala.build.*
import scala.build.errors.*
import scala.build.input.{ScalaCliInvokeData, SubCommand}
import scala.build.interactive.InteractiveFileOps
import scala.build.internal.Util.*
import scala.build.internal.resource.NativeResourceMapper
Expand All @@ -31,7 +30,7 @@ import scala.cli.CurrentParams
import scala.cli.commands.OptionsHelper.*
import scala.cli.commands.doc.Doc
import scala.cli.commands.packaging.Spark
import scala.cli.commands.publish.ConfigUtil.*
import scala.cli.commands.publish.ConfigUtil._
import scala.cli.commands.run.Run.orPythonDetectionError
import scala.cli.commands.shared.{MainClassOptions, SharedOptions}
import scala.cli.commands.util.BuildCommandHelpers
Expand All @@ -50,10 +49,7 @@ object Package extends ScalaCommand[PackageOptions] with BuildCommandHelpers {
override def buildOptions(options: PackageOptions): Option[BuildOptions] =
Some(options.baseBuildOptions.orExit(options.shared.logger))
override def runCommand(options: PackageOptions, args: RemainingArgs, logger: Logger): Unit = {
val inputs = options.shared.inputs(
args.remaining,
ScalaCliInvokeData(progName, actualCommandName, SubCommand.Other)
).orExit(logger)
val inputs = options.shared.inputs(args.remaining).orExit(logger)
CurrentParams.workspaceOpt = Some(inputs.workspace)

// FIXME mainClass encoding has issues with special chars, such as '-'
Expand Down
Expand Up @@ -27,7 +27,7 @@ import scala.build.Ops.*
import scala.build.*
import scala.build.compiler.ScalaCompilerMaker
import scala.build.errors.{BuildException, CompositeBuildException, NoMainClassFoundError, Severity}
import scala.build.input.{Inputs, ScalaCliInvokeData, SubCommand}
import scala.build.input.Inputs
import scala.build.internal.Util
import scala.build.internal.Util.ScalaDependencyOps
import scala.build.options.publish.{ComputeVersion, Developer, License, Signer => PSigner, Vcs}
Expand All @@ -39,7 +39,7 @@ import scala.build.options.{
Scope
}
import scala.cli.CurrentParams
import scala.cli.commands.package0.Package as PackageCmd
import scala.cli.commands.package0.{Package => PackageCmd}
import scala.cli.commands.pgp.{PgpExternalCommand, PgpScalaSigningOptions}
import scala.cli.commands.publish.ConfigUtil.*
import scala.cli.commands.publish.{PublishParamsOptions, PublishRepositoryOptions}
Expand Down Expand Up @@ -179,10 +179,7 @@ object Publish extends ScalaCommand[PublishOptions] with BuildCommandHelpers {
maybePrintChecksumsAndExit(options.sharedPublish)

val baseOptions = buildOptionsOrExit(options)
val inputs = options.shared.inputs(
args.all,
ScalaCliInvokeData(progName, actualCommandName, SubCommand.Other)
).orExit(logger)
val inputs = options.shared.inputs(args.all).orExit(logger)
CurrentParams.workspaceOpt = Some(inputs.workspace)

val initialBuildOptions = mkBuildOptions(
Expand Down
Expand Up @@ -2,7 +2,6 @@ package scala.cli.commands.publish

import caseapp.core.RemainingArgs

import scala.build.input.{ScalaCliInvokeData, SubCommand}
import scala.build.options.BuildOptions
import scala.build.{BuildThreads, Logger}
import scala.cli.CurrentParams
Expand Down Expand Up @@ -30,10 +29,7 @@ object PublishLocal extends ScalaCommand[PublishLocalOptions] {
Publish.maybePrintChecksumsAndExit(options.sharedPublish)

val baseOptions = buildOptionsOrExit(options)
val inputs = options.shared.inputs(
args.all,
ScalaCliInvokeData(progName, actualCommandName, SubCommand.Other)
).orExit(logger)
val inputs = options.shared.inputs(args.all).orExit(logger)
CurrentParams.workspaceOpt = Some(inputs.workspace)

val initialBuildOptions = Publish.mkBuildOptions(
Expand Down
Expand Up @@ -7,7 +7,6 @@ import java.nio.charset.StandardCharsets

import scala.build.Ops.*
import scala.build.errors.CompositeBuildException
import scala.build.input.{ScalaCliInvokeData, SubCommand}
import scala.build.internal.CustomCodeWrapper
import scala.build.options.{BuildOptions, InternalOptions, Scope}
import scala.build.{CrossSources, Logger, Sources}
Expand Down Expand Up @@ -58,8 +57,7 @@ object PublishSetup extends ScalaCommand[PublishSetupOptions] {
Nil,
Nil,
Nil,
Nil,
ScalaCliInvokeData(progName, actualCommandName, SubCommand.Other)
Nil
)
maybeInputs match {
case Left(error) =>
Expand Down
8 changes: 2 additions & 6 deletions modules/cli/src/main/scala/scala/cli/commands/repl/Repl.scala
Expand Up @@ -9,7 +9,7 @@ import dependency.*
import scala.build.EitherCps.{either, value}
import scala.build.*
import scala.build.errors.{BuildException, CantDownloadAmmoniteError, FetchingDependenciesError}
import scala.build.input.{Inputs, ScalaCliInvokeData, SubCommand}
import scala.build.input.Inputs
import scala.build.internal.{Constants, Runner}
import scala.build.options.{BuildOptions, JavaOpt, MaybeScalaVersion, Scope}
import scala.cli.CurrentParams
Expand Down Expand Up @@ -97,11 +97,7 @@ object Repl extends ScalaCommand[ReplOptions] {
Inputs.empty(Os.pwd, options.shared.markdown.enableMarkdown)
}
val inputs =
options.shared.inputs(
args.remaining,
ScalaCliInvokeData(progName, actualCommandName, SubCommand.Other),
defaultInputs = () => Some(default)
).orExit(logger)
options.shared.inputs(args.remaining, defaultInputs = () => Some(default)).orExit(logger)
val programArgs = args.unparsed
CurrentParams.workspaceOpt = Some(inputs.workspace)

Expand Down

0 comments on commit 41123be

Please sign in to comment.