@@ -236,7 +236,48 @@ object Izumi {
236
236
237
237
final val crossScalaSources = Defaults .CrossScalaPlusSources
238
238
239
- final val topLevelSettings = Seq ()
239
+ final val topLevelSettings = Seq (
240
+ " Keys.commands" .in(
241
+ SettingScope .Raw (" Global" )
242
+ ) ~= """ {
243
+ | // Workaround for Intellij "Open cross-compiled projects as Scala 2" option pending upstream merge of https://github.com/JetBrains/sbt-structure/pull/73
244
+ | xs =>
245
+ | def numbersOf(version: String): (Int, Int, Int) = {
246
+ | val prefix = version.split('.').filter(s => s.nonEmpty && s.forall(_.isDigit)).map(_.toInt).take(3)
247
+ | val xs = prefix ++ Seq.fill(3 - prefix.length)(0)
248
+ | (xs(0), xs(1), xs(2))
249
+ | }
250
+ |
251
+ | val preferScala2: Command = Command.command("preferScala2") { state =>
252
+ | val (structure, data) = {
253
+ | val extracted = Project.extract(state)
254
+ | (extracted.structure, extracted.structure.data)
255
+ | }
256
+ |
257
+ | val scala3Projects = structure.allProjectRefs.filter { project =>
258
+ | (project / Keys.scalaVersion).get(data).exists(_.startsWith("3."))
259
+ | }
260
+ |
261
+ | val (scala2Versions, crossScala2And3ProjectsCount) = scala3Projects.foldLeft((Set.empty[String], 0)) {
262
+ | case ((scala2Versions, crossCount), project) =>
263
+ | val projectScala2Versions = (project / Keys.crossScalaVersions).get(data).getOrElse(Seq.empty).filter(_.startsWith("2."))
264
+ | (scala2Versions ++ projectScala2Versions, crossCount + (if (projectScala2Versions.nonEmpty) 1 else 0))
265
+ | }
266
+ |
267
+ | // We can only do this when all sbt projects cross-compile to Scala 2 & Scala 3
268
+ | // See https://youtrack.jetbrains.com/issue/SCL-22619/
269
+ | val canSetScala2VersionGlobally = crossScala2And3ProjectsCount > 0 &&
270
+ | scala3Projects.length == crossScala2And3ProjectsCount
271
+ | if (canSetScala2VersionGlobally) {
272
+ | "++" + scala2Versions.maxBy(numbersOf) :: state
273
+ | } else {
274
+ | state
275
+ | }
276
+ | }
277
+ |
278
+ | xs.filterNot(_.nameOption.contains("preferScala2")) :+ preferScala2
279
+ |}""" .stripMargin.raw
280
+ )
240
281
241
282
final val sharedAggSettings = outOfSource ++ Seq (
242
283
""" SettingKey[Boolean]("ide-skip-project")""" := true ,
0 commit comments