Skip to content

Commit 9bea22f

Browse files
authored
Refactor scala_library.go with --plugins option (#263)
* {proto,grpc}_scala_library: add --partition_services flag * Checkpoint WIP * Refactor scala_library.go with --plugins option * Cleanup * Fix golden example integration test * fix unit test * Fix more label changes * Add back file filter * Match plugin name rather than plugin implementation name * add distinct configiration for grpc vs. non-grpc * Fix resolution of file imports
1 parent 4deca78 commit 9bea22f

17 files changed

Lines changed: 241 additions & 133 deletions

File tree

docs/scala.md

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,13 @@ permalink: examples/scala
55
parent: Examples
66
---
77

8-
98
# scala example
109

1110
`bazel test //example/golden:scala_test`
1211

13-
1412
## `BUILD.bazel` (after gazelle)
1513

16-
~~~python
14+
```python
1715
load("@rules_proto//proto:defs.bzl", "proto_library")
1816
load("@build_stack_rules_proto//rules/scala:grpc_scala_library.bzl", "grpc_scala_library")
1917
load("@build_stack_rules_proto//rules:proto_compile.bzl", "proto_compile")
@@ -54,7 +52,7 @@ grpc_scala_library(
5452
"@maven_scala//:io_grpc_grpc_api",
5553
"@maven_scala//:io_grpc_grpc_protobuf",
5654
"@maven_scala//:io_grpc_grpc_stub",
57-
"@scalaapis//scalapb:scalapb_scala_library",
55+
"@scalaapis//scalapb:scalapb_proto_scala_library",
5856
],
5957
)
6058

@@ -71,18 +69,16 @@ proto_compile(
7169
],
7270
proto = "syntax_proto",
7371
)
74-
~~~
75-
72+
```
7673

7774
## `BUILD.bazel` (before gazelle)
7875

79-
~~~python
80-
~~~
81-
76+
```python
77+
```
8278

8379
## `WORKSPACE`
8480

85-
~~~python
81+
```python
8682
# ----------------------------------------------------
8783
# scala
8884
# ----------------------------------------------------
@@ -159,5 +155,4 @@ proto_repository(
159155
type = "zip",
160156
urls = ["https://codeload.github.com/scalapb/ScalaPB/zip/a4e0e02c0f5b160877d5f97f6902dbec4c633afe"],
161157
)
162-
~~~
163-
158+
```
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
exports_files(["config.yaml"])
22

33
# gazelle:proto_language scala enabled true
4+
# gazelle:proto_rule proto_scala_library option --plugins=protoc-gen-scala
5+
# gazelle:proto_rule grpc_scala_library option --plugins=protoc-gen-akka-grpc
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
exports_files(["config.yaml"])
22

33
# gazelle:proto_language scala enabled true
4+
# gazelle:proto_rule proto_scala_library option --plugins=protoc-gen-scala
5+
# gazelle:proto_rule grpc_scala_library option --plugins=protoc-gen-akka-grpc

example/golden/testdata/scala/config.yaml

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,46 @@
11
plugins:
22
- name: protoc-gen-scala
33
implementation: scalapb:scalapb:protoc-gen-scala
4+
- name: protoc-gen-scala-grpc
5+
implementation: scalapb:scalapb:protoc-gen-scala
6+
label: "@build_stack_rules_proto//plugin/scalapb/scalapb:protoc-gen-scala-grpc"
47
options:
58
- grpc
6-
deps:
7-
- "@com_google_protobuf//:protobuf_java"
8-
- "@maven_scala//:com_thesamet_scalapb_lenses_2_12"
9-
- "@maven_scala//:com_thesamet_scalapb_scalapb_runtime_2_12"
10-
- "@maven_scala//:com_thesamet_scalapb_scalapb_runtime_grpc_2_12"
11-
- "@maven_scala//:io_grpc_grpc_api"
12-
- "@maven_scala//:io_grpc_grpc_stub"
13-
- "@maven_scala//:io_grpc_grpc_protobuf"
149
- name: protoc-gen-akka-grpc
1510
implementation: akka:akka-grpc:protoc-gen-akka-grpc
16-
deps:
17-
- "@maven_akka//:com_lightbend_akka_grpc_akka_grpc_runtime_2_12"
18-
- "@maven_akka//:com_typesafe_akka_akka_actor_2_12"
19-
- "@maven_akka//:com_typesafe_akka_akka_http_core_2_12"
20-
- "@maven_akka//:com_typesafe_akka_akka_stream_2_12"
2111
rules:
2212
- name: proto_compile
2313
implementation: stackb:rules_proto:proto_compile
2414
- name: proto_scala_library
2515
implementation: stackb:rules_proto:proto_scala_library
2616
visibility:
2717
- //visibility:public
18+
deps:
19+
- "@com_google_protobuf//:protobuf_java"
20+
- "@maven_scala//:com_thesamet_scalapb_lenses_2_12"
21+
- "@maven_scala//:com_thesamet_scalapb_scalapb_runtime_2_12"
2822
- name: grpc_scala_library
2923
implementation: stackb:rules_proto:grpc_scala_library
3024
visibility:
3125
- //visibility:public
26+
deps:
27+
- "@com_google_protobuf//:protobuf_java"
28+
- "@maven_akka//:com_lightbend_akka_grpc_akka_grpc_runtime_2_12"
29+
- "@maven_akka//:com_typesafe_akka_akka_actor_2_12"
30+
- "@maven_akka//:com_typesafe_akka_akka_http_core_2_12"
31+
- "@maven_akka//:com_typesafe_akka_akka_stream_2_12"
32+
- "@maven_scala//:com_thesamet_scalapb_lenses_2_12"
33+
- "@maven_scala//:com_thesamet_scalapb_scalapb_runtime_2_12"
34+
- "@maven_scala//:com_thesamet_scalapb_scalapb_runtime_grpc_2_12"
35+
- "@maven_scala//:io_grpc_grpc_api"
36+
- "@maven_scala//:io_grpc_grpc_protobuf"
37+
- "@maven_scala//:io_grpc_grpc_stub"
3238
languages:
3339
- name: scala
3440
plugins:
35-
- protoc-gen-akka-grpc
3641
- protoc-gen-scala
42+
- protoc-gen-scala-grpc
43+
- protoc-gen-akka-grpc
3744
rules:
3845
- proto_compile
3946
- proto_scala_library
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
proto,proto,scalapb/scalapb.proto,@scalaapis//scalapb:scalapb_proto
2-
protobuf,scala,scalapb/scalapb.proto,@scalaapis//scalapb:scalapb_scala_library
2+
protobuf,scala,scalapb/scalapb.proto,@scalaapis//scalapb:scalapb_proto_scala_library
33
protobuf,scala,lib.WithSnapshot,//lib:scala

example/golden/testdata/scala/lib/BUILD.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ scala_library(
55
srcs = ["WithSnapshot.scala"],
66
visibility = ["//visibility:public"],
77
deps = [
8-
"//proto:proto_scala_library",
8+
"//proto:proto_proto_scala_library",
99
"@maven_scala//:com_thesamet_scalapb_lenses_2_12",
1010
"@maven_scala//:com_thesamet_scalapb_scalapb_runtime_2_12",
1111
],

example/golden/testdata/scala/lib/BUILD.out

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ scala_library(
55
srcs = ["WithSnapshot.scala"],
66
visibility = ["//visibility:public"],
77
deps = [
8-
"//proto:proto_scala_library",
8+
"//proto:proto_proto_scala_library",
99
"@maven_scala//:com_thesamet_scalapb_lenses_2_12",
1010
"@maven_scala//:com_thesamet_scalapb_scalapb_runtime_2_12",
1111
],

example/golden/testdata/scala/proto/BUILD.out

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,25 @@ proto_library(
1010

1111
proto_compile(
1212
name = "proto_scala_compile",
13-
outputs = ["proto_scala.srcjar"],
14-
plugins = ["@build_stack_rules_proto//plugin/scalapb/scalapb:protoc-gen-scala"],
13+
options = {"@build_stack_rules_proto//plugin/scalapb/scalapb:protoc-gen-scala-grpc": ["grpc"]},
14+
outputs = [
15+
"proto_scala.srcjar",
16+
"proto_scala_grpc.srcjar",
17+
],
18+
plugins = [
19+
"@build_stack_rules_proto//plugin/scalapb/scalapb:protoc-gen-scala",
20+
"@build_stack_rules_proto//plugin/scalapb/scalapb:protoc-gen-scala-grpc",
21+
],
1522
proto = "proto_proto",
1623
)
1724

1825
proto_scala_library(
19-
name = "proto_scala_library",
26+
name = "proto_proto_scala_library",
2027
srcs = ["proto_scala.srcjar"],
2128
visibility = ["//visibility:public"],
2229
deps = [
2330
"@com_google_protobuf//:protobuf_java",
2431
"@maven_scala//:com_thesamet_scalapb_lenses_2_12",
2532
"@maven_scala//:com_thesamet_scalapb_scalapb_runtime_2_12",
26-
"@maven_scala//:com_thesamet_scalapb_scalapb_runtime_grpc_2_12",
27-
"@maven_scala//:io_grpc_grpc_api",
28-
"@maven_scala//:io_grpc_grpc_protobuf",
29-
"@maven_scala//:io_grpc_grpc_stub",
3033
],
3134
)

example/golden/testdata/scala/syntax/BUILD.out

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
load("@rules_proto//proto:defs.bzl", "proto_library")
22
load("@build_stack_rules_proto//rules/scala:grpc_scala_library.bzl", "grpc_scala_library")
3+
load("@build_stack_rules_proto//rules/scala:proto_scala_library.bzl", "proto_scala_library")
34
load("@build_stack_rules_proto//rules:proto_compile.bzl", "proto_compile")
45

56
proto_library(
@@ -18,15 +19,12 @@ proto_library(
1819
)
1920

2021
grpc_scala_library(
21-
name = "syntax_scala_library",
22-
srcs = [
23-
"syntax_akka_grpc.srcjar",
24-
"syntax_scala.srcjar",
25-
],
22+
name = "syntax_grpc_scala_library",
23+
srcs = ["syntax_akka_grpc.srcjar"],
2624
visibility = ["//visibility:public"],
2725
deps = [
28-
"//lib:scala",
29-
"//proto:proto_scala_library",
26+
":syntax_proto_scala_library",
27+
"//proto:proto_proto_scala_library",
3028
"@com_google_protobuf//:protobuf_java",
3129
"@maven_akka//:com_lightbend_akka_grpc_akka_grpc_runtime_2_12",
3230
"@maven_akka//:com_typesafe_akka_akka_actor_2_12",
@@ -38,20 +36,36 @@ grpc_scala_library(
3836
"@maven_scala//:io_grpc_grpc_api",
3937
"@maven_scala//:io_grpc_grpc_protobuf",
4038
"@maven_scala//:io_grpc_grpc_stub",
41-
"@scalaapis//scalapb:scalapb_scala_library",
39+
"@scalaapis//scalapb:scalapb_proto_scala_library",
4240
],
4341
)
4442

4543
proto_compile(
4644
name = "syntax_scala_compile",
47-
options = {"@build_stack_rules_proto//plugin/scalapb/scalapb:protoc-gen-scala": ["grpc"]},
45+
options = {"@build_stack_rules_proto//plugin/scalapb/scalapb:protoc-gen-scala-grpc": ["grpc"]},
4846
outputs = [
4947
"syntax_akka_grpc.srcjar",
5048
"syntax_scala.srcjar",
49+
"syntax_scala_grpc.srcjar",
5150
],
5251
plugins = [
5352
"@build_stack_rules_proto//plugin/akka/akka-grpc:protoc-gen-akka-grpc",
5453
"@build_stack_rules_proto//plugin/scalapb/scalapb:protoc-gen-scala",
54+
"@build_stack_rules_proto//plugin/scalapb/scalapb:protoc-gen-scala-grpc",
5555
],
5656
proto = "syntax_proto",
5757
)
58+
59+
proto_scala_library(
60+
name = "syntax_proto_scala_library",
61+
srcs = ["syntax_scala.srcjar"],
62+
visibility = ["//visibility:public"],
63+
deps = [
64+
"//lib:scala",
65+
"//proto:proto_proto_scala_library",
66+
"@com_google_protobuf//:protobuf_java",
67+
"@maven_scala//:com_thesamet_scalapb_lenses_2_12",
68+
"@maven_scala//:com_thesamet_scalapb_scalapb_runtime_2_12",
69+
"@scalaapis//scalapb:scalapb_proto_scala_library",
70+
],
71+
)

pkg/plugin/scalapb/scalapb/protoc_gen_scala.go

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,16 @@ func (p *ProtocGenScalaPlugin) Name() string {
2323

2424
// Configure implements part of the Plugin interface.
2525
func (p *ProtocGenScalaPlugin) Configure(ctx *protoc.PluginContext) *protoc.PluginConfiguration {
26-
srcjar := ctx.ProtoLibrary.BaseName() + "_scala.srcjar"
27-
if ctx.Rel != "" {
28-
srcjar = path.Join(ctx.Rel, srcjar)
29-
}
3026
options := ctx.PluginConfig.GetOptions()
27+
hasGrpc := containsOption(options, "grpc")
3128

32-
// if the plugin has 'grpc' statically configured, but the proto_library
33-
// does not contain services, remove it.
34-
if filtered, ok := removeAll(options, "grpc"); ok {
35-
if !protoc.HasServices(ctx.ProtoLibrary.Files()...) {
36-
options = filtered
37-
}
29+
srcjar := ctx.ProtoLibrary.BaseName() + "_scala"
30+
if hasGrpc {
31+
srcjar += "_grpc"
32+
}
33+
srcjar += ".srcjar"
34+
if ctx.Rel != "" {
35+
srcjar = path.Join(ctx.Rel, srcjar)
3836
}
3937

4038
return &protoc.PluginConfiguration{
@@ -44,17 +42,13 @@ func (p *ProtocGenScalaPlugin) Configure(ctx *protoc.PluginContext) *protoc.Plug
4442
}
4543
}
4644

47-
// removeAll returns a copy of the slice will all elements matching 'key'
45+
// containsOption returns a copy of the slice will all elements matching 'key'
4846
// removed. If at least item was removed, return true.
49-
func removeAll(src []string, key string) ([]string, bool) {
50-
dst := make([]string, 0)
51-
found := false
47+
func containsOption(src []string, key string) bool {
5248
for _, item := range src {
5349
if item == key {
54-
found = true
55-
continue
50+
return true
5651
}
57-
dst = append(dst, item)
5852
}
59-
return dst, found
53+
return false
6054
}

0 commit comments

Comments
 (0)