@@ -7,12 +7,11 @@ import com.github.plokhotnyuk.jsoniter_scala.macros.JsonCodecMaker
77import com .google .gson .GsonBuilder
88
99import java .nio .charset .{Charset , StandardCharsets }
10-
1110import scala .build .EitherCps .{either , value }
1211import scala .build .*
1312import scala .build .bsp .IdeInputs
1413import scala .build .errors .{BuildException , WorkspaceError }
15- import scala .build .input .{ModuleInputs , OnDisk , Virtual , WorkspaceOrigin }
14+ import scala .build .input .{InputsComposer , ModuleInputs , OnDisk , Virtual , WorkspaceOrigin }
1615import scala .build .internal .Constants
1716import scala .build .options .{BuildOptions , Scope }
1817import scala .cli .CurrentParams
@@ -67,12 +66,12 @@ object SetupIde extends ScalaCommand[SetupIdeOptions] {
6766
6867 override def runCommand (options : SetupIdeOptions , args : RemainingArgs , logger : Logger ): Unit = {
6968 val buildOptions = buildOptionsOrExit(options)
70- val inputs = options.shared.inputs (args.all).orExit(logger)
71- CurrentParams .workspaceOpt = Some (inputs .workspace)
69+ val moduleInputs = options.shared.composeInputs (args.all).orExit(logger)
70+ CurrentParams .workspaceOpt = Some (moduleInputs.head .workspace)
7271
7372 val bspPath = writeBspConfiguration(
7473 options,
75- inputs ,
74+ moduleInputs ,
7675 buildOptions,
7776 previousCommandName = None ,
7877 args = args.all
@@ -91,7 +90,7 @@ object SetupIde extends ScalaCommand[SetupIdeOptions] {
9190 ): Unit =
9291 writeBspConfiguration(
9392 SetupIdeOptions (shared = options),
94- inputs,
93+ Seq ( inputs) ,
9594 buildOptions,
9695 previousCommandName,
9796 args
@@ -105,13 +104,13 @@ object SetupIde extends ScalaCommand[SetupIdeOptions] {
105104
106105 private def writeBspConfiguration (
107106 options : SetupIdeOptions ,
108- inputs : ModuleInputs ,
107+ moduleInputs : Seq [ ModuleInputs ] ,
109108 buildOptions : BuildOptions ,
110109 previousCommandName : Option [String ],
111110 args : Seq [String ]
112111 ): Either [BuildException , Option [os.Path ]] = either {
113112
114- val virtualInputs = inputs. elements.collect {
113+ val virtualInputs = moduleInputs.flatMap(_. elements) .collect {
115114 case v : Virtual => v
116115 }
117116 if (virtualInputs.nonEmpty)
@@ -124,23 +123,24 @@ object SetupIde extends ScalaCommand[SetupIdeOptions] {
124123 val logger = options.shared.logger
125124
126125 if (buildOptions.classPathOptions.allExtraDependencies.toSeq.nonEmpty)
127- value(downloadDeps(
128- inputs,
129- buildOptions,
130- logger
131- ))
132-
133- val (bspName, bspJsonDestination) = bspDetails(inputs.workspace, options.bspFile)
134- val scalaCliBspJsonDestination =
135- inputs.workspace / Constants .workspaceDirName / " ide-options-v2.json"
136- val scalaCliBspLauncherOptsJsonDestination =
137- inputs.workspace / Constants .workspaceDirName / " ide-launcher-options.json"
138- val scalaCliBspInputsJsonDestination =
139- inputs.workspace / Constants .workspaceDirName / " ide-inputs.json"
140- val scalaCliBspEnvsJsonDestination =
141- inputs.workspace / Constants .workspaceDirName / " ide-envs.json"
142-
143- val inputArgs = inputs.elements.collect { case d : OnDisk => d.path.toString }
126+ for (module <- moduleInputs) do value(downloadDeps(module, buildOptions, logger))
127+
128+ val workspace = moduleInputs.head.workspace
129+
130+ val (bspName, bspJsonDestination) = bspDetails(workspace, options.bspFile)
131+ val scalaCliBspJsonDestination = workspace / Constants .workspaceDirName / " ide-options-v2.json"
132+ val scalaCliBspLauncherOptsJsonDestination = workspace / Constants .workspaceDirName / " ide-launcher-options.json"
133+ val scalaCliBspInputsJsonDestination = workspace / Constants .workspaceDirName / " ide-inputs.json"
134+ val scalaCliBspEnvsJsonDestination = workspace / Constants .workspaceDirName / " ide-envs.json"
135+
136+ // FIXME single modules can also be defined with module config toml file
137+ val inputArgs = if moduleInputs.size > 1 then
138+ InputsComposer .findModuleConfig(args, Os .pwd)
139+ .orExit(logger)
140+ .fold(args)(p => Seq (p.toString))
141+ else
142+ moduleInputs.head.elements
143+ .collect { case d : OnDisk => d.path.toString }
144144
145145 val ideInputs = IdeInputs (
146146 options.shared.validateInputArgs(args)
@@ -187,7 +187,7 @@ object SetupIde extends ScalaCommand[SetupIdeOptions] {
187187 val scalaCliBspInputsJson = writeToArray(ideInputs)
188188 val scalaCliBspEnvsJson = writeToArray(sys.env)
189189
190- if (inputs .workspaceOrigin.contains(WorkspaceOrigin .HomeDir ))
190+ if (moduleInputs.head .workspaceOrigin.contains(WorkspaceOrigin .HomeDir ))
191191 value(Left (new WorkspaceError (
192192 s """ $baseRunnerName can not determine where to write its BSP configuration.
193193 |Set an explicit BSP directory path via `--bsp-directory`.
0 commit comments