rbs_protobuf 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/Gemfile.lock +2 -2
- data/README.md +36 -16
- data/bin/setup +0 -9
- data/exe/protoc-gen-rbs +18 -0
- data/lib/rbs_protobuf/rbs_factory.rb +1 -0
- data/lib/rbs_protobuf/translator/base.rb +71 -6
- data/lib/rbs_protobuf/translator/protobuf_gem.rb +103 -9
- data/lib/rbs_protobuf/version.rb +1 -1
- data/rbs_collection.lock.yaml +1 -1
- data/sig/rbs_protobuf/rbs_factory.rbs +1 -1
- data/sig/rbs_protobuf/translator/base.rbs +14 -2
- data/sig/rbs_protobuf/translator/protobuf_gem.rbs +2 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bcaf6201c92331c28b9fa7d1791711def79ccb4803d81692a220b60d08e640a6
|
4
|
+
data.tar.gz: 93651dffc7e86d657f5ed5298b3ab43042a7e663fd07a502b25fe968ede6cef2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '09835d51dd74b278a376dc721bbde2527f6e501596dd5239b29a0da5aa96af69cfc08831e2dafc7b6ac67491ef3e5c35b2ec2dca536fbc66864291b3a2109e6a'
|
7
|
+
data.tar.gz: 42b4c2d53a767f7b8732f8d4ee7a74d724ba334280cf006326a1ebfcd5f1dc4031d44404d149ee63e8c66f46da5dee2f519eaa6539d7789fb8b9b5e5a9dfb863
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## 1.2.0 (2023-09-06)
|
4
|
+
|
5
|
+
* Add `RBS_PROTOBUF_CONCAT_LEVEL` option ([#38](https://github.com/square/rbs_protobuf/pull/38))
|
6
|
+
* Generate rpc method types and interfaces ([#37](https://github.com/square/rbs_protobuf/pull/37))
|
7
|
+
* Generate `record` type of each proto message ([#36](https://github.com/square/rbs_protobuf/pull/36))
|
8
|
+
* Add filter ([#34](https://github.com/square/rbs_protobuf/pull/34))
|
9
|
+
|
3
10
|
## 1.1.0 (2023-08-16)
|
4
11
|
|
5
12
|
* Support optional fields in proto3 ([\#32](https://github.com/square/rbs_protobuf/pull/32))
|
data/Gemfile.lock
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rbs_protobuf (1.
|
4
|
+
rbs_protobuf (1.2.0)
|
5
5
|
activesupport (>= 4.0)
|
6
6
|
rbs (>= 2.2.0)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
activesupport (7.0.7)
|
11
|
+
activesupport (7.0.7.2)
|
12
12
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
13
13
|
i18n (>= 1.6, < 2)
|
14
14
|
minitest (>= 5.1)
|
data/README.md
CHANGED
@@ -82,21 +82,6 @@ Run `protoc` with `--rbs_out` option.
|
|
82
82
|
|
83
83
|
You may need `bundle exec protoc ...` to let bundler set up PATH.
|
84
84
|
|
85
|
-
## Type checking
|
86
|
-
|
87
|
-
To type check the output, you need to configure your tools to import [gem_rbs_collection](https://github.com/ruby/gem_rbs_collection) with `rbs collection` command.
|
88
|
-
|
89
|
-
```yaml
|
90
|
-
# Add the dependency in rbs_collection.yaml
|
91
|
-
gems:
|
92
|
-
- name: rbs_protobuf
|
93
|
-
```
|
94
|
-
|
95
|
-
We assume that you don't type check the generated `.pb.rb` code.
|
96
|
-
If you want to type check them, you need the definition of `Google::Protobuf`, which can be generated from [`descriptor.proto`](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/descriptor.proto).
|
97
|
-
|
98
|
-
Note: `rbs_protobuf` generates RBS files assuming some types added in [this PR](https://github.com/ruby/gem_rbs_collection/pull/145). Make sure you are using one of the newer versions of `rbs_gem_collection` definitions.
|
99
|
-
|
100
85
|
### Options
|
101
86
|
|
102
87
|
* `RBS_PROTOBUF_BACKEND` specifies the Ruby code generator gem. Supported value is `protobuf`. (We will add `google-protobuf` for `google-protobuf` gem.)
|
@@ -104,6 +89,20 @@ Note: `rbs_protobuf` generates RBS files assuming some types added in [this PR](
|
|
104
89
|
* `RBS_PROTOBUF_NO_NESTED_NAMESPACE` is to make the RBS declarations flat.
|
105
90
|
* `RBS_PROTOBUF_EXTENSION` specifies what to do for extensions.
|
106
91
|
* `RBS_PROTOBUF_ACCEPT_NIL_ATTR_WRITER` is to allow passing `nil` to required fields.
|
92
|
+
* `RBS_PROTOBUF_FILTERS` contains filter Ruby script paths separated by `File::PATH_SEPARATOR`
|
93
|
+
* `RBS_PROTOBUF_CONCAT_LEVEL` contains the number of dir levels that groups generated RBS files to concat
|
94
|
+
|
95
|
+
## Type checking
|
96
|
+
|
97
|
+
To type check the output, make sure your type checker configuration loads type definitions of `protobuf` gem.
|
98
|
+
|
99
|
+
```ruby
|
100
|
+
# Declare in Gemfile and load it with rbs-collection
|
101
|
+
gem 'protobuf'
|
102
|
+
```
|
103
|
+
|
104
|
+
We assume that you don't type check the generated `.pb.rb` code.
|
105
|
+
If you want to type check them, you need the definition of `Google::Protobuf`, which can be generated from [`descriptor.proto`](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/descriptor.proto).
|
107
106
|
|
108
107
|
## Supported features
|
109
108
|
|
@@ -118,7 +117,7 @@ Note: `rbs_protobuf` generates RBS files assuming some types added in [this PR](
|
|
118
117
|
| Services | Only generates classes |
|
119
118
|
| Oneof | No support in `protobuf` gem |
|
120
119
|
|
121
|
-
|
120
|
+
## Extensions
|
122
121
|
|
123
122
|
Adding extensions may cause problems if the name of new attribute conflicts.
|
124
123
|
|
@@ -144,6 +143,27 @@ You can control the behavior with `RBS_PROTOBUF_EXTENSION` environment variable.
|
|
144
143
|
* Any value else: Generates RBS for extensions.
|
145
144
|
* undefined: Ignores extensions but print messages to ask you to specify a value.
|
146
145
|
|
146
|
+
## Filters
|
147
|
+
|
148
|
+
You can apply filters that modifies generated RBS files.
|
149
|
+
|
150
|
+
A filter is a proc object with type of `^(String rbs_name, String rbs_content, untyped proto_file) -> [String, String]`:
|
151
|
+
It receives the file name of RBS file, the content of RBS file, the source protobuf object, and returns a pair of RBS file name and content.
|
152
|
+
|
153
|
+
```ruby
|
154
|
+
# example_fitler.rb: It adds a warning comment at the top of the RBS content.
|
155
|
+
->(rbs_name, rbs_content, _proto_file) {
|
156
|
+
[
|
157
|
+
rbs_name,
|
158
|
+
"# Don't modify this file. This is generated with rbs_protobuf.\n\n" + rbs_content
|
159
|
+
]
|
160
|
+
}
|
161
|
+
```
|
162
|
+
|
163
|
+
You can apply filters by setting `RBS_PROTOBUF_FILTERS` environment variable.
|
164
|
+
|
165
|
+
$ RBS_PROTOBUF_BACKEND=protobuf RBS_PROTOBUF_FILTERS=example_filter.rb protoc ...
|
166
|
+
|
147
167
|
## Development
|
148
168
|
|
149
169
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test example:typecheck` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/bin/setup
CHANGED
@@ -9,13 +9,4 @@ echo ">>> Checking if protoc is available... 👀"
|
|
9
9
|
protoc --version
|
10
10
|
|
11
11
|
echo ">>> Setting up gem_rbs_collection... 💎"
|
12
|
-
REPODIR=$(cd $(dirname $0)/..; pwd)/tmp/rbs/gem_rbs_collection
|
13
|
-
if [ -e $REPODIR ]; then
|
14
|
-
echo " ${REPODIR} exists"
|
15
|
-
else
|
16
|
-
echo " Cloning git repo into ${REPODIR}..."
|
17
|
-
mkdir -p $REPODIR/..
|
18
|
-
git clone https://github.com/ruby/gem_rbs_collection.git ${REPODIR}
|
19
|
-
fi
|
20
|
-
|
21
12
|
bundle exec rbs collection install
|
data/exe/protoc-gen-rbs
CHANGED
@@ -13,6 +13,20 @@ unless backend
|
|
13
13
|
exit 1
|
14
14
|
end
|
15
15
|
|
16
|
+
filters = []
|
17
|
+
|
18
|
+
if string = ENV["RBS_PROTOBUF_FILTERS"]
|
19
|
+
string.split(File::PATH_SEPARATOR).each do |file|
|
20
|
+
filter = Module.new.instance_eval(File.read(file), file)
|
21
|
+
|
22
|
+
if filter.respond_to?(:call)
|
23
|
+
filters << filter
|
24
|
+
else
|
25
|
+
raise "A filter `#{file}` returns `#{filter.inspect}`, but a proc object of type `^(String rbs_name, String rbs_content, untyped proto_file) -> [String, String]` is expected"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
16
30
|
input = Google::Protobuf::Compiler::CodeGeneratorRequest.decode(STDIN.read)
|
17
31
|
|
18
32
|
translator = case backend
|
@@ -34,6 +48,7 @@ translator = case backend
|
|
34
48
|
|
35
49
|
RBSProtobuf::Translator::ProtobufGem.new(
|
36
50
|
input,
|
51
|
+
filters,
|
37
52
|
upcase_enum: upcase_enum,
|
38
53
|
nested_namespace: !no_nested_namespace,
|
39
54
|
extension: extension,
|
@@ -43,6 +58,9 @@ translator = case backend
|
|
43
58
|
raise NotImplementedError
|
44
59
|
end
|
45
60
|
|
61
|
+
if level = ENV["RBS_PROTOBUF_CONCAT_LEVEL"]
|
62
|
+
translator.rbs_concat_level = level.to_i
|
63
|
+
end
|
46
64
|
translator.generate_rbs!
|
47
65
|
|
48
66
|
response = translator.response
|
@@ -3,10 +3,19 @@ module RBSProtobuf
|
|
3
3
|
class Base
|
4
4
|
FieldDescriptorProto = Google::Protobuf::FieldDescriptorProto
|
5
5
|
|
6
|
-
attr_reader :input
|
6
|
+
attr_reader :input, :filters
|
7
7
|
|
8
|
-
|
8
|
+
attr_accessor :rbs_concat_level
|
9
|
+
|
10
|
+
def initialize(input, filters = [])
|
9
11
|
@input = input
|
12
|
+
@filters = filters
|
13
|
+
end
|
14
|
+
|
15
|
+
def apply_filter(rbs_name, rbs_content, proto_files)
|
16
|
+
filters.inject([rbs_name, rbs_content]) do |(rbs_name, rbs_content), filter| #$ [String, String]
|
17
|
+
filter[rbs_name, rbs_content, proto_files] or return
|
18
|
+
end
|
10
19
|
end
|
11
20
|
|
12
21
|
def factory
|
@@ -18,14 +27,61 @@ module RBSProtobuf
|
|
18
27
|
end
|
19
28
|
|
20
29
|
def generate_rbs!
|
30
|
+
rbs_decls = {} #: Hash[Pathname, [Array[RBS::AST::Declarations::t], untyped]]
|
31
|
+
|
21
32
|
input.proto_file.each do |file|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
33
|
+
path = Pathname(file.name).sub_ext(".rbs")
|
34
|
+
decls = rbs_content(file)
|
35
|
+
rbs_decls[path] = [decls, file]
|
36
|
+
end
|
37
|
+
|
38
|
+
rbs_contents = {} #: Hash[Pathname, [String, Array[untyped]]]
|
39
|
+
|
40
|
+
if (level = rbs_concat_level)&.nonzero?
|
41
|
+
groups = rbs_decls.each_key.group_by do |path|
|
42
|
+
path.sub_ext("").to_s.split(File::SEPARATOR).take(level).join(File::SEPARATOR)
|
43
|
+
end
|
44
|
+
|
45
|
+
groups.each do |prefix, paths|
|
46
|
+
path = Pathname(prefix).sub_ext(".rbs")
|
47
|
+
|
48
|
+
decls = [] #: Array[RBS::AST::Declarations::t]
|
49
|
+
files = [] #: Array[untyped]
|
50
|
+
|
51
|
+
paths.each do |path|
|
52
|
+
ds, file = rbs_decls.fetch(path)
|
53
|
+
decls.concat(ds)
|
54
|
+
files.push(file)
|
55
|
+
end
|
56
|
+
|
57
|
+
rbs_contents[path] = [
|
58
|
+
format_rbs(decls: decls),
|
59
|
+
files
|
60
|
+
]
|
61
|
+
end
|
62
|
+
else
|
63
|
+
rbs_decls.each do |path, (decls, file)|
|
64
|
+
content = format_rbs(decls: decls)
|
65
|
+
rbs_contents[path] = [content, [file]]
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
rbs_contents.each do |path, (content, files)|
|
70
|
+
if (name, content = apply_filter(path.to_s, content, files))
|
71
|
+
response.file << Google::Protobuf::Compiler::CodeGeneratorResponse::File.new(
|
72
|
+
name: name,
|
73
|
+
content: content
|
74
|
+
)
|
75
|
+
end
|
26
76
|
end
|
27
77
|
end
|
28
78
|
|
79
|
+
def format_rbs(dirs: [], decls: [])
|
80
|
+
StringIO.new.tap do |io|
|
81
|
+
RBS::Writer.new(out: io).write(dirs + decls)
|
82
|
+
end.string
|
83
|
+
end
|
84
|
+
|
29
85
|
def rbs_name(proto_name)
|
30
86
|
dirname = File.dirname(proto_name)
|
31
87
|
basename = File.basename(proto_name, File.extname(proto_name))
|
@@ -120,6 +176,15 @@ module RBSProtobuf
|
|
120
176
|
)
|
121
177
|
)
|
122
178
|
end
|
179
|
+
|
180
|
+
def optional_type(type)
|
181
|
+
case type
|
182
|
+
when RBS::Types::Optional
|
183
|
+
type
|
184
|
+
else
|
185
|
+
RBS::Types::Optional.new(type: type, location: nil)
|
186
|
+
end
|
187
|
+
end
|
123
188
|
end
|
124
189
|
end
|
125
190
|
end
|
@@ -19,8 +19,8 @@ module RBSProtobuf
|
|
19
19
|
|
20
20
|
attr_reader :accept_nil_writer
|
21
21
|
|
22
|
-
def initialize(input, upcase_enum:, nested_namespace:, extension:, accept_nil_writer:, stderr: STDERR)
|
23
|
-
super(input)
|
22
|
+
def initialize(input, filters=[], upcase_enum:, nested_namespace:, extension:, accept_nil_writer:, stderr: STDERR)
|
23
|
+
super(input, filters)
|
24
24
|
@upcase_enum = upcase_enum
|
25
25
|
@nested_namespace = nested_namespace
|
26
26
|
@extension = extension
|
@@ -49,7 +49,7 @@ module RBSProtobuf
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def rbs_content(file)
|
52
|
-
decls = []
|
52
|
+
decls = [] #: Array[RBS::AST::Declarations::t]
|
53
53
|
|
54
54
|
source_code_info = file.source_code_info
|
55
55
|
|
@@ -127,9 +127,7 @@ module RBSProtobuf
|
|
127
127
|
end
|
128
128
|
end
|
129
129
|
|
130
|
-
|
131
|
-
RBS::Writer.new(out: io).write(decls)
|
132
|
-
end.string
|
130
|
+
decls
|
133
131
|
end
|
134
132
|
|
135
133
|
def message_to_decl(message, prefix:, message_path:, source_code_info:, path:)
|
@@ -200,7 +198,17 @@ module RBSProtobuf
|
|
200
198
|
),
|
201
199
|
annotations: []
|
202
200
|
),
|
203
|
-
|
201
|
+
unless field_types.empty?
|
202
|
+
RBS::AST::Members::MethodDefinition::Overload.new(
|
203
|
+
method_type: factory.method_type(
|
204
|
+
type: factory.function().update(
|
205
|
+
required_positionals: [factory.param(factory.alias_type("record"))]
|
206
|
+
)
|
207
|
+
),
|
208
|
+
annotations: []
|
209
|
+
)
|
210
|
+
end,
|
211
|
+
].compact,
|
204
212
|
annotations: [],
|
205
213
|
comment: nil,
|
206
214
|
location: nil,
|
@@ -352,7 +360,11 @@ module RBSProtobuf
|
|
352
360
|
class_decl.members << RBS::AST::Declarations::TypeAlias.new(
|
353
361
|
name: TypeName("init"),
|
354
362
|
type_params: [],
|
355
|
-
type: factory.union_type(
|
363
|
+
type: factory.union_type(
|
364
|
+
class_instance_type,
|
365
|
+
TO_PROTO[],
|
366
|
+
field_types.empty? ? nil : factory.alias_type("record")
|
367
|
+
),
|
356
368
|
annotations: [],
|
357
369
|
comment: RBS::AST::Comment.new(string: "The type of `#initialize` parameter.", location: nil),
|
358
370
|
location: nil
|
@@ -403,6 +415,18 @@ module RBSProtobuf
|
|
403
415
|
comment: nil,
|
404
416
|
location: nil
|
405
417
|
)
|
418
|
+
|
419
|
+
class_decl.members << RBS::AST::Declarations::TypeAlias.new(
|
420
|
+
name: TypeName("record"),
|
421
|
+
type_params: [],
|
422
|
+
type: RBS::Types::Record.new(
|
423
|
+
fields: field_types.transform_values {|_, _, type| optional_type(type) },
|
424
|
+
location: nil
|
425
|
+
),
|
426
|
+
annotations: [],
|
427
|
+
location: nil,
|
428
|
+
comment: nil
|
429
|
+
)
|
406
430
|
end
|
407
431
|
end
|
408
432
|
|
@@ -896,11 +920,81 @@ module RBSProtobuf
|
|
896
920
|
def service_to_decl(service, prefix:, source_code_info:, path:)
|
897
921
|
service_name = ActiveSupport::Inflector.camelize(service.name)
|
898
922
|
|
923
|
+
members = [] #: Array[RBS::AST::Declarations::Class::member]
|
924
|
+
|
925
|
+
service.method.each do |method|
|
926
|
+
method_name = ActiveSupport::Inflector.underscore(method.name).to_sym #: Symbol
|
927
|
+
|
928
|
+
interface_name = "_#{ActiveSupport::Inflector.camelize(method.name)}Method"
|
929
|
+
|
930
|
+
members << RBS::AST::Declarations::Interface.new(
|
931
|
+
name: factory.type_name(interface_name),
|
932
|
+
type_params: [],
|
933
|
+
members: [
|
934
|
+
RBS::AST::Members::MethodDefinition.new(
|
935
|
+
name: :request,
|
936
|
+
kind: :instance,
|
937
|
+
overloads: [
|
938
|
+
RBS::AST::Members::MethodDefinition::Overload.new(
|
939
|
+
method_type: factory.method_type(type: factory.function(message_type(method.input_type))),
|
940
|
+
annotations: []
|
941
|
+
)
|
942
|
+
],
|
943
|
+
annotations: [],
|
944
|
+
location: nil,
|
945
|
+
comment: nil,
|
946
|
+
overloading: false,
|
947
|
+
visibility: nil
|
948
|
+
),
|
949
|
+
RBS::AST::Members::MethodDefinition.new(
|
950
|
+
name: :respond_with,
|
951
|
+
kind: :instance,
|
952
|
+
overloads: [
|
953
|
+
RBS::AST::Members::MethodDefinition::Overload.new(
|
954
|
+
method_type: factory.method_type(
|
955
|
+
type: factory.function().update(
|
956
|
+
required_positionals: [
|
957
|
+
factory.param(message_init_type(message_type(method.output_type)))
|
958
|
+
]
|
959
|
+
)
|
960
|
+
),
|
961
|
+
annotations: []
|
962
|
+
)
|
963
|
+
],
|
964
|
+
annotations: [],
|
965
|
+
location: nil,
|
966
|
+
comment: nil,
|
967
|
+
overloading: false,
|
968
|
+
visibility: nil
|
969
|
+
)
|
970
|
+
],
|
971
|
+
annotations: [],
|
972
|
+
location: nil,
|
973
|
+
comment: nil
|
974
|
+
)
|
975
|
+
|
976
|
+
members << RBS::AST::Members::MethodDefinition.new(
|
977
|
+
name: method_name,
|
978
|
+
kind: :instance,
|
979
|
+
overloads: [
|
980
|
+
RBS::AST::Members::MethodDefinition::Overload.new(
|
981
|
+
method_type: factory.method_type(type: factory.function()),
|
982
|
+
annotations: []
|
983
|
+
)
|
984
|
+
],
|
985
|
+
annotations: [],
|
986
|
+
location: nil,
|
987
|
+
comment: nil,
|
988
|
+
overloading: false,
|
989
|
+
visibility: nil
|
990
|
+
)
|
991
|
+
end
|
992
|
+
|
899
993
|
RBS::AST::Declarations::Class.new(
|
900
994
|
name: RBS::TypeName.new(name: service_name.to_sym, namespace: prefix),
|
901
995
|
super_class: service_base_class,
|
902
996
|
type_params: factory.module_type_params(),
|
903
|
-
members:
|
997
|
+
members: members,
|
904
998
|
comment: comment_for_path(source_code_info, path, options: nil),
|
905
999
|
location: nil,
|
906
1000
|
annotations: []
|
data/lib/rbs_protobuf/version.rb
CHANGED
data/rbs_collection.lock.yaml
CHANGED
@@ -10,7 +10,7 @@ module RBSProtobuf
|
|
10
10
|
|
11
11
|
def singleton_type: (String | RBS::TypeName name) -> RBS::Types::ClassSingleton
|
12
12
|
|
13
|
-
def union_type: (RBS::Types::t `type`, *RBS::Types::t types) -> RBS::Types::t
|
13
|
+
def union_type: (RBS::Types::t `type`, *RBS::Types::t? types) -> RBS::Types::t
|
14
14
|
|
15
15
|
def nil_type: (?location: RBS::Location[untyped, untyped]?) -> RBS::Types::Bases::Nil
|
16
16
|
|
@@ -5,7 +5,15 @@ module RBSProtobuf
|
|
5
5
|
|
6
6
|
attr_reader input: untyped
|
7
7
|
|
8
|
-
|
8
|
+
type filter = ^(String rbs_name, String rbs_content, Array[untyped] proto_files) -> [String, String]?
|
9
|
+
|
10
|
+
attr_reader filters: Array[filter]
|
11
|
+
|
12
|
+
attr_accessor rbs_concat_level: Integer?
|
13
|
+
|
14
|
+
def initialize: (untyped input, ?Array[filter] filters) -> void
|
15
|
+
|
16
|
+
def apply_filter: (String rbs_name, String rbs_content, Array[untyped] proto_file) -> [String, String]?
|
9
17
|
|
10
18
|
@factory: RBSFactory
|
11
19
|
|
@@ -21,7 +29,9 @@ module RBSProtobuf
|
|
21
29
|
|
22
30
|
def rbs_suffix: () -> ::String
|
23
31
|
|
24
|
-
def
|
32
|
+
def format_rbs: (?dirs: Array[RBS::AST::Directives::t], ?decls: Array[RBS::AST::Declarations::t]) -> String
|
33
|
+
|
34
|
+
def rbs_content: (String file) -> Array[RBS::AST::Declarations::t]
|
25
35
|
|
26
36
|
def comment_for_path: (untyped source_code_info, Array[Integer] path, options: untyped) -> RBS::AST::Comment?
|
27
37
|
|
@@ -30,6 +40,8 @@ module RBSProtobuf
|
|
30
40
|
def base_type: (untyped `type`) -> RBS::Types::t
|
31
41
|
|
32
42
|
def message_type: (String) -> RBS::Types::ClassInstance
|
43
|
+
|
44
|
+
def optional_type: (RBS::Types::t) -> RBS::Types::Optional
|
33
45
|
end
|
34
46
|
end
|
35
47
|
end
|
@@ -28,6 +28,7 @@ module RBSProtobuf
|
|
28
28
|
|
29
29
|
def initialize: (
|
30
30
|
untyped input,
|
31
|
+
?Array[Base::filter] filters,
|
31
32
|
upcase_enum: bool,
|
32
33
|
nested_namespace: bool,
|
33
34
|
extension: bool | :print | nil,
|
@@ -63,7 +64,7 @@ module RBSProtobuf
|
|
63
64
|
# The entry point.
|
64
65
|
# Generate RBS declarations from the `file` and returns the string representation of the declarations.
|
65
66
|
#
|
66
|
-
def rbs_content: (untyped file) ->
|
67
|
+
def rbs_content: (untyped file) -> Array[RBS::AST::Declarations::t]
|
67
68
|
|
68
69
|
# Returns the class declaration for given message.
|
69
70
|
#
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbs_protobuf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Soutaro Matsumoto
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-09-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rbs
|