Skip to content

Commit e70ead3

Browse files
authored
bugfix: Detect rules name instead of assuming a specific version (#8265)
Fixes #8242 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved Bazel Scala rule detection by scanning project config files for rule identifiers instead of using version checks, yielding more reliable rule selection across projects. * Ensures Scala rule detection falls back to a default when no match is found and preserves inclusion of Java/JVM rules for consistent build behavior. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
1 parent 34e6251 commit e70ead3

File tree

1 file changed

+22
-6
lines changed

1 file changed

+22
-6
lines changed

metals/src/main/scala/scala/meta/internal/builds/BazelBuildTool.scala

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import scala.meta.internal.metals.Embedded
44
import scala.meta.internal.metals.JavaBinary
55
import scala.meta.internal.metals.MetalsEnrichments._
66
import scala.meta.internal.metals.UserConfiguration
7-
import scala.meta.internal.semver.SemVer
87
import scala.meta.io.AbsolutePath
98

109
import coursier.Dependency
@@ -84,10 +83,27 @@ object BazelBuildTool {
8483
}
8584
}
8685

87-
def getScalaRulesName(projectRoot: AbsolutePath): String = {
88-
val version = resolveBazelVersion(projectRoot)
89-
if (SemVer.isLaterVersion("8.0.0", version)) "rules_scala"
90-
else "io_bazel_rules_scala"
86+
def getScalaRulesName(projectRoot: AbsolutePath): Option[String] = {
87+
val candidates = {
88+
for {
89+
relative <- List(
90+
"MODULE.bazel",
91+
"WORKSPACE",
92+
"WORKSPACE.bazel",
93+
).iterator
94+
file = projectRoot.resolve(relative)
95+
if file.isFile
96+
content <- file.readTextOpt
97+
ruleName <-
98+
if (content.contains("io_bazel_rules_scala"))
99+
Some("io_bazel_rules_scala")
100+
else if (content.contains("rules_scala")) Some("rules_scala")
101+
else None
102+
} yield {
103+
ruleName
104+
}
105+
}
106+
candidates.headOption
91107
}
92108

93109
val mainClass = "org.jetbrains.bsp.bazel.install.Install"
@@ -105,7 +121,7 @@ object BazelBuildTool {
105121

106122
def enabledRules(projectRoot: AbsolutePath): List[String] = {
107123
val scalaRules = getScalaRulesName(projectRoot)
108-
List(scalaRules, "rules_java", "rules_jvm")
124+
List(scalaRules.getOrElse("rules_scala"), "rules_java", "rules_jvm")
109125
}
110126

111127
def fallbackProjectView: String = {

0 commit comments

Comments
 (0)