Skip to content

Commit 3d30e9e

Browse files
author
Jaden Peterson
committed
fixup! 24e4665 Don't use a separate regex for each adjusted option
1 parent 24e4665 commit 3d30e9e

File tree

2 files changed

+31
-18
lines changed

2 files changed

+31
-18
lines changed

rules/private/phases/phase_semanticdb.bzl

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,16 @@ load(
66
)
77

88
def _semanticdb_directory_from_file(file):
9-
return file.path[:file.path.find("META-INF") - 1]
9+
"""
10+
This is janky, but we're limited in what we can do in this function. From the
11+
[documentation](https://bazel.build/rules/lib/builtins/Args#add_all) on `Args#add_all`:
12+
13+
To avoid unintended retention of large analysis-phase data structures into the execution phase,
14+
the `map_each` function must be declared by a top-level `def` statement; it may not be a
15+
nested function closure by default.
16+
"""
17+
18+
return "{}/{}".format(file.root.path, file.short_path[:file.short_path.find("META-INF") - 1])
1019

1120
#
1221
# PHASE: semanticdb
@@ -40,18 +49,20 @@ def phase_semanticdb(ctx, g):
4049

4150
if scala_configuration.version.startswith("2"):
4251
arguments.add("--compiler_option=-P:semanticdb:failures:error")
52+
arguments.add("--compiler_option_referencing_path=-P:semanticdb:sourceroot:${workDir}")
4353
arguments.add_all(
4454
[outputs[0]],
45-
format_each = "--compiler_option_referencing_path=-P:semanticdb:targetroot:%s",
55+
format_each = "--compiler_option_referencing_path=-P:semanticdb:targetroot:${path} %s",
4656
map_each = _semanticdb_directory_from_file,
4757
)
4858
else:
4959
arguments.add_all(
5060
[outputs[0]],
51-
format_each = "--compiler_option_referencing_path=-semanticdb-target:%s",
61+
format_each = "--compiler_option_referencing_path=-semanticdb-target:${path} %s",
5262
map_each = _semanticdb_directory_from_file,
5363
)
5464

65+
arguments.add("--compiler_option_referencing_path=-sourceroot:${workDir}")
5566
arguments.add("--compiler_option=-Ysemanticdb")
5667

5768
g.out.providers.append(

src/main/scala/higherkindness/rules_scala/workers/common/CommonArguments.scala

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import common.sandbox.SandboxUtil
77
import net.sourceforge.argparse4j.impl.{Arguments => ArgumentsImpl}
88
import net.sourceforge.argparse4j.inf.{Argument, ArgumentParser, ArgumentType, Namespace}
99
import java.util.{Collections, List as JList}
10+
import scala.annotation.nowarn
1011
import scala.collection.mutable.Buffer
1112
import scala.jdk.CollectionConverters.*
1213
import java.io.File
@@ -61,22 +62,23 @@ object Analysis {
6162
}
6263

6364
object CommonArguments {
64-
private val scala2SemanticDbTargetRootRegex = """-P:semanticdb:targetroot:(.*)""".r
65-
private val scala3SemanticDbTargetRootRegex = """-semanticdb-target:(.*)""".r
66-
67-
private def adjustCompilerOptions(workDir: Path, options: List[String]) = {
68-
def adjustStringPath(path: String) =
69-
SandboxUtil.getSandboxPath(workDir, Paths.get(path)).toString
70-
71-
options.flatMap {
72-
case scala2SemanticDbTargetRootRegex(path) =>
73-
List(s"-P:semanticdb:sourceroot:${workDir.toString}", s"-P:semanticdb:targetroot:${adjustStringPath(path)}")
74-
75-
case scala3SemanticDbTargetRootRegex(path) =>
76-
List(s"-semanticdb-target:${adjustStringPath(path)}", s"-sourceroot:${workDir.toString}")
77-
78-
case option => List(option)
65+
private val pathPlaceholderRegex = """\$\{path\}""".r
66+
private def adjustCompilerOptions(workDir: Path, options: List[String]) = options.map { option =>
67+
val i = option.lastIndexOf(' ')
68+
val withPathReplaced = if (i == -1) {
69+
option
70+
} else {
71+
val template = option.slice(0, i)
72+
val path = option.slice(i + 1, option.length)
73+
74+
template.replace(
75+
"${path}": @nowarn("cat=lint-missing-interpolator"),
76+
SandboxUtil.getSandboxPath(workDir, Paths.get(path)).toString,
77+
)
7978
}
79+
80+
withPathReplaced
81+
.replace("${workDir}": @nowarn("cat=lint-missing-interpolator"), workDir.toString)
8082
}
8183

8284
/**

0 commit comments

Comments
 (0)