Skip to content

Commit 86a9a4e

Browse files
committed
feat: working directive
1 parent 5b2c47c commit 86a9a4e

File tree

7 files changed

+109
-35
lines changed

7 files changed

+109
-35
lines changed

modules/build/src/main/scala/scala/build/Build.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -866,7 +866,7 @@ object Build {
866866
if (options.useBuildServer.getOrElse(true)) None
867867
else releaseFlag(options, compilerJvmVersionOpt, logger).map(_.toString)
868868

869-
val hardcodedSource = options.generateSource
869+
val hardcodedSource = options.sourceGeneratorOptions.generatorConfig
870870

871871
val scalaCompilerParamsOpt = artifacts.scalaOpt match {
872872
case Some(scalaArtifacts) =>

modules/build/src/main/scala/scala/build/Project.scala

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import java.nio.charset.StandardCharsets
1010
import java.nio.file.Path
1111
import java.util.Arrays
1212

13-
import scala.build.options.{ScalacOpt, Scope, ShadowingSeq}
13+
import scala.build.options.{GeneratorConfig, ScalacOpt, Scope, ShadowingSeq}
1414

1515
final case class Project(
1616
workspace: os.Path,
@@ -29,7 +29,7 @@ final case class Project(
2929
javaHomeOpt: Option[os.Path],
3030
scope: Scope,
3131
javacOptions: List[String],
32-
generateSource: Option[Boolean]
32+
generateSource: Option[GeneratorConfig]
3333
) {
3434

3535
import Project._
@@ -52,22 +52,48 @@ final case class Project(
5252
)
5353
}
5454

55-
val sourceGen: BloopConfig.SourceGenerator = {
56-
val command = "/Users/kiki/Kerja/scala-cli/testing-a/source-generator.py"
57-
val sourceGlobs = BloopConfig.SourcesGlobs(
58-
(os.root / "Users" / "kiki" / "Kerja" / "scala-cli" / "testing-a" / "generator-inputs").toNIO,
59-
None,
60-
List("glob:test.in"),
61-
Nil
62-
)
55+
val sourceGen0: Option[List[BloopConfig.SourceGenerator]] =
56+
generateSource.map(config =>
57+
println(os.pwd)
58+
println(config.commandFilePath)
59+
println(config.inputDir)
60+
println(config.glob)
61+
val command0 = s"${os.pwd}/testing-a/${config.commandFilePath}"
62+
val sourceGlobs0 = BloopConfig.SourcesGlobs(
63+
(os.pwd / "testing-a" / config.inputDir).toNIO,
64+
None,
65+
config.glob,
66+
Nil
67+
)
68+
69+
val sourceGen = BloopConfig.SourceGenerator(
70+
List(sourceGlobs0),
71+
(os.pwd / "testing-a" / "source-generator-output").toNIO,
72+
List("python3", command0)
73+
// Nil
74+
)
6375

64-
BloopConfig.SourceGenerator(
65-
List(sourceGlobs),
66-
(os.root / "Users" / "kiki" / "Kerja" / "scala-cli" / "testing-a" / "source-generator-a").toNIO,
67-
List("python3",command)
68-
// Nil
76+
List(sourceGen)
6977
)
70-
}
78+
79+
// val sourceGen: BloopConfig.SourceGenerator = {
80+
// val command = s"${os.pwd}/${generateSource.commandFilePath}"
81+
// val sourceGlobs = BloopConfig.SourcesGlobs(
82+
// (os.pwd / generateSource.inputDir).toNIO,
83+
// None,
84+
// List(generateSource.glob),
85+
// Nil
86+
// )
87+
88+
// BloopConfig.SourceGenerator(
89+
// List(sourceGlobs),
90+
// (os.pwd / "testing-a" / "source-generator-output").toNIO,
91+
// List("python3", command)
92+
// // Nil
93+
// )
94+
// }
95+
96+
7197

7298
baseBloopProject(
7399
projectName,
@@ -85,7 +111,7 @@ final case class Project(
85111
`scala` = scalaConfigOpt,
86112
java = Some(BloopConfig.Java(javacOptions)),
87113
resolution = resolution,
88-
sourceGenerators = if (generateSource.getOrElse(false)) Some(List(sourceGen)) else None
114+
sourceGenerators = sourceGen0
89115
)
90116
}
91117

modules/build/src/main/scala/scala/build/preprocessing/DirectivesPreprocessor.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,15 +124,13 @@ case class DirectivesPreprocessor(
124124
logger: Logger
125125
): Either[BuildException, ProcessedDirective[T]] =
126126
if !allowRestrictedFeatures && (handler.isRestricted || handler.isExperimental) then
127-
print("Reached Error Flow")
128127
Left(DirectiveErrors(
129128
::(WarningMessages.powerDirectiveUsedInSip(scopedDirective, handler), Nil),
130129
Seq(scopedDirective.directive.position(scopedDirective.maybePath))
131130
))
132131
else
133132
if handler.isExperimental && !shouldSuppressExperimentalFeatures then
134133
logger.experimentalWarning(scopedDirective.directive.toString, FeatureType.Directive)
135-
print("Reached Here")
136134
handler.handleValues(scopedDirective, logger)
137135

138136
val handlersMap = handlers

modules/directives/src/main/scala/scala/build/preprocessing/directives/SourceGenerator.scala

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,39 @@
11
package scala.build.preprocessing.directives
22

3-
import scala.build.directives.*
4-
import scala.build.errors.BuildException
5-
import scala.build.options.BuildOptions
63
import scala.cli.commands.SpecificationLevel
4+
import scala.build.directives.*
5+
import scala.build.EitherCps.{either, value}
6+
import scala.build.Ops.*
7+
import scala.build.errors.{BuildException, CompositeBuildException}
8+
import scala.build.options.{BuildOptions, SourceGeneratorOptions, GeneratorConfig}
9+
import scala.build.options.GeneratorConfig
10+
import scala.build.{Positioned, options}
711

8-
@DirectiveExamples("//> using generator")
9-
@DirectiveUsage("//> using generator", "`//> using generator`")
12+
@DirectiveUsage("//> using sourceGenerator", "`//> using sourceGenerator`")
1013
@DirectiveDescription("Generate code using Source Generator")
1114
@DirectiveLevel(SpecificationLevel.EXPERIMENTAL)
12-
final case class SourceGenerator (
13-
placeHolderGenerator: Boolean = false
15+
final case class SourceGenerator(
16+
sourceGenerator: Option[Positioned[String]] = None
1417
) extends HasBuildOptions {
15-
def buildOptions: Either[BuildException, BuildOptions] = {
16-
val buildOpt = BuildOptions(
17-
generateSource = Some(placeHolderGenerator)
18-
)
19-
Right(buildOpt)
18+
def buildOptions: Either[BuildException, BuildOptions] = either {
19+
val maybeGenerateSource = sourceGenerator
20+
.map(GeneratorConfig.parse)
21+
.sequence
22+
23+
// val buildOpt = BuildOptions(
24+
// generateSource = Some(generateSource0)
25+
// )
26+
27+
val generateSource = maybeGenerateSource match {
28+
case Left(buildException) => throw buildException
29+
case Right(config) => config
2030
}
21-
}
2231

32+
BuildOptions(sourceGeneratorOptions =
33+
SourceGeneratorOptions(generatorConfig = generateSource)
34+
)
35+
}
36+
}
2337

2438
object SourceGenerator {
2539
val handler: DirectiveHandler[SourceGenerator] = DirectiveHandler.derive

modules/options/src/main/scala/scala/build/options/BuildOptions.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ final case class BuildOptions(
4747
notForBloopOptions: PostBuildOptions = PostBuildOptions(),
4848
sourceGeneratorOptions: SourceGeneratorOptions = SourceGeneratorOptions(),
4949
useBuildServer: Option[Boolean] = None,
50-
generateSource: Option[Boolean] = None
5150
) {
5251

5352
import BuildOptions.JavaHomeInfo
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package scala.build.options
2+
3+
import scala.build.Positioned
4+
import scala.build.errors.{BuildException, MalformedInputError}
5+
6+
final case class GeneratorConfig(
7+
inputDir: String,
8+
glob: List[String],
9+
commandFilePath: String
10+
)
11+
12+
object GeneratorConfig {
13+
14+
def parse(input: Positioned[String]): Either[BuildException, GeneratorConfig] =
15+
input.value.split("\\|", 3) match {
16+
case Array(inputDir, glob, commandFilePath) =>
17+
Right(GeneratorConfig(inputDir, List(glob), commandFilePath))
18+
case _ =>
19+
Left(
20+
new MalformedInputError(
21+
"sourceGenerator",
22+
input.value,
23+
"inputDir|glob|commandFilePath",
24+
input.positions
25+
)
26+
)
27+
}
28+
29+
// def formatPath(
30+
// inputDir: String,
31+
// glob: String,
32+
// commandFilePath: String,
33+
// ): GeneratorConfig = {
34+
35+
// }
36+
}

modules/options/src/main/scala/scala/build/options/SourceGeneratorOptions.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ package scala.build.options
33
final case class SourceGeneratorOptions(
44
useBuildInfo: Option[Boolean] = None,
55
projectVersion: Option[String] = None,
6-
computeVersion: Option[ComputeVersion] = None
6+
computeVersion: Option[ComputeVersion] = None,
7+
generatorConfig: Option[GeneratorConfig] = None
78
)
89

910
object SourceGeneratorOptions {

0 commit comments

Comments
 (0)