rbs_protobuf 0.1.0 → 0.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/.github/workflows/test.yml +3 -3
- data/.gitignore +0 -1
- data/CHANGELOG.md +9 -0
- data/Gemfile.lock +69 -0
- data/README.md +37 -17
- data/Rakefile +1 -1
- data/Steepfile +21 -0
- data/bin/steep +15 -0
- data/exe/protoc-gen-rbs +12 -1
- data/lib/rbs_protobuf/rbs_factory.rb +10 -10
- data/lib/rbs_protobuf/translator/base.rb +3 -2
- data/lib/rbs_protobuf/translator/protobuf_gem.rb +45 -10
- data/lib/rbs_protobuf/version.rb +1 -1
- data/rbs_protobuf.gemspec +2 -2
- data/sig/rbs_protobuf/rbs_factory.rbs +41 -0
- data/sig/rbs_protobuf/translator/base.rbs +33 -0
- data/sig/rbs_protobuf/translator/protobuf_gem.rbs +53 -0
- data/sig/rbs_protobuf/version.rbs +3 -0
- data/sig/rbs_protobuf.rbs +5 -0
- data/sig/stub/_activesupport.rbs +7 -0
- metadata +16 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 56ace4b5dcb20700d6a42b22cac53d5a2fd7a73db0ce0817352c19ac02653aa1
|
4
|
+
data.tar.gz: cbb834ca61e52d95574a4136332ceccfae623a64d438e3fec552dfc9d8250190
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d652ba346051a94d4b3364047cbe3b6d02048a3dd5bcc911eb6041480d7b2f24f94fd4eaf306fad73e199066da4aafc18b745045da4025d11dec8854924b2aee
|
7
|
+
data.tar.gz: 61660f34ee55a04ed35b2f05f94b9f6ffcbacc93abc1666185f06ba66dd9079a6fdbc47f626b51fb859cfaa57d85b55267b222271d7903a60c6afd50d006620a
|
data/.github/workflows/test.yml
CHANGED
@@ -12,12 +12,12 @@ jobs:
|
|
12
12
|
strategy:
|
13
13
|
matrix:
|
14
14
|
container_tag:
|
15
|
-
- 2.6-bionic
|
16
15
|
- 2.7-bionic
|
17
16
|
- 3.0-focal
|
17
|
+
- 3.1-focal
|
18
18
|
protoc_version:
|
19
|
-
- 3.
|
20
|
-
- 3.
|
19
|
+
- 3.18.2
|
20
|
+
- 3.19.4
|
21
21
|
container:
|
22
22
|
image: rubylang/ruby:${{ matrix.container_tag }}
|
23
23
|
steps:
|
data/.gitignore
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
# CHANGELOG
|
2
|
+
|
3
|
+
## 0.2.0 (2022-03-18)
|
4
|
+
|
5
|
+
This is a maintenance release to support the latest version of RBS.
|
6
|
+
|
7
|
+
* Update to the latest RBS ([#11](https://github.com/square/rbs_protobuf/pull/11))
|
8
|
+
* Type check with Steep ([#11](https://github.com/square/rbs_protobuf/pull/11))
|
9
|
+
* Drop Ruby 2.6 support ([#11](https://github.com/square/rbs_protobuf/pull/11))
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
rbs_protobuf (0.2.0)
|
5
|
+
activesupport (>= 4.0)
|
6
|
+
rbs (>= 2.2.0)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
activesupport (7.0.2.3)
|
12
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
13
|
+
i18n (>= 1.6, < 2)
|
14
|
+
minitest (>= 5.1)
|
15
|
+
tzinfo (~> 2.0)
|
16
|
+
ast (2.4.2)
|
17
|
+
concurrent-ruby (1.1.9)
|
18
|
+
ffi (1.15.5)
|
19
|
+
i18n (1.10.0)
|
20
|
+
concurrent-ruby (~> 1.0)
|
21
|
+
language_server-protocol (3.16.0.3)
|
22
|
+
listen (3.7.1)
|
23
|
+
rb-fsevent (~> 0.10, >= 0.10.3)
|
24
|
+
rb-inotify (~> 0.9, >= 0.9.10)
|
25
|
+
middleware (0.1.0)
|
26
|
+
minitest (5.15.0)
|
27
|
+
parallel (1.21.0)
|
28
|
+
parser (3.1.1.0)
|
29
|
+
ast (~> 2.4.1)
|
30
|
+
protobuf (3.10.5)
|
31
|
+
activesupport (>= 3.2)
|
32
|
+
middleware
|
33
|
+
thor
|
34
|
+
thread_safe
|
35
|
+
rainbow (3.1.1)
|
36
|
+
rake (12.3.3)
|
37
|
+
rb-fsevent (0.11.1)
|
38
|
+
rb-inotify (0.10.1)
|
39
|
+
ffi (~> 1.0)
|
40
|
+
rbs (2.2.2)
|
41
|
+
steep (0.49.1)
|
42
|
+
activesupport (>= 5.1)
|
43
|
+
language_server-protocol (>= 3.15, < 4.0)
|
44
|
+
listen (~> 3.0)
|
45
|
+
parallel (>= 1.0.0)
|
46
|
+
parser (>= 3.0)
|
47
|
+
rainbow (>= 2.2.2, < 4.0)
|
48
|
+
rbs (>= 2.2.0)
|
49
|
+
terminal-table (>= 2, < 4)
|
50
|
+
terminal-table (3.0.2)
|
51
|
+
unicode-display_width (>= 1.1.1, < 3)
|
52
|
+
thor (1.2.1)
|
53
|
+
thread_safe (0.3.6)
|
54
|
+
tzinfo (2.0.4)
|
55
|
+
concurrent-ruby (~> 1.0)
|
56
|
+
unicode-display_width (2.1.0)
|
57
|
+
|
58
|
+
PLATFORMS
|
59
|
+
ruby
|
60
|
+
|
61
|
+
DEPENDENCIES
|
62
|
+
minitest (~> 5.0)
|
63
|
+
protobuf (~> 3.10)
|
64
|
+
rake (~> 12.0)
|
65
|
+
rbs_protobuf!
|
66
|
+
steep
|
67
|
+
|
68
|
+
BUNDLED WITH
|
69
|
+
2.1.4
|
data/README.md
CHANGED
@@ -20,7 +20,7 @@ message SearchRequest {
|
|
20
20
|
}
|
21
21
|
```
|
22
22
|
|
23
|
-
rbs_protobuf will generate the following RBS file including method definitions for each attribute with correct types.
|
23
|
+
rbs_protobuf will generate the following RBS file including method definitions for each attribute with correct types.
|
24
24
|
|
25
25
|
```rbs
|
26
26
|
module Protobuf
|
@@ -84,28 +84,23 @@ You may need `bundle exec protoc ...` to let bundler set up PATH.
|
|
84
84
|
|
85
85
|
## Type checking
|
86
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).
|
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
88
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
$ rbs --repo=vendor/rbs/gem_rbs_collection/gems -rprotobuf validate
|
94
|
-
|
95
|
-
If you want to type check your Ruby program using Steep, add `repo_path` and `library` calls in your `Steepfile`.
|
96
|
-
|
97
|
-
```ruby
|
98
|
-
target :app do
|
99
|
-
repo_path "vendor/rbs/gem_rbs_collection/gems"
|
100
|
-
library "protobuf"
|
101
|
-
end
|
89
|
+
```yaml
|
90
|
+
# Add the dependency in rbs_collection.yaml
|
91
|
+
gems:
|
92
|
+
- name: rbs_protobuf
|
102
93
|
```
|
103
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
|
+
|
104
98
|
### Options
|
105
99
|
|
106
100
|
* `RBS_PROTOBUF_BACKEND` specifies the Ruby code generator gem. Supported value is `protobuf`. (We will add `google-protobuf` for `google-protobuf` gem.)
|
107
101
|
* `PB_UPCASE_ENUMS` is for `protobuf` gem support. Specify the environment variable to make enum value constants upper case.
|
108
102
|
* `RBS_PROTOBUF_NO_NESTED_NAMESPACE` is to make the RBS declarations flat.
|
103
|
+
* `RBS_PROTOBUF_EXTENSION` specifies what to do for extensions.
|
109
104
|
|
110
105
|
## Supported features
|
111
106
|
|
@@ -116,10 +111,36 @@ end
|
|
116
111
|
| Packages | ✓ |
|
117
112
|
| Nested messages | ✓ |
|
118
113
|
| Maps | ✓ |
|
119
|
-
| Extensions |
|
114
|
+
| Extensions | Read next section |
|
120
115
|
| Services | Only generates classes |
|
121
116
|
| Oneof | No support in `protobuf` gem |
|
122
117
|
|
118
|
+
### Extensions
|
119
|
+
|
120
|
+
Adding extensions may cause problems if the name of new attribute conflicts.
|
121
|
+
|
122
|
+
```proto
|
123
|
+
extend SearchRequest {
|
124
|
+
// This extension defines an attribute.
|
125
|
+
optional string option = 100;
|
126
|
+
}
|
127
|
+
|
128
|
+
extend SearchRequest {
|
129
|
+
// Another extension defines another attribute with same name.
|
130
|
+
optional string option = 101;
|
131
|
+
}
|
132
|
+
```
|
133
|
+
|
134
|
+
In this case, defining two `option` attributes in RBS causes an error.
|
135
|
+
So, rbs_protobuf allows ignoring extensions for this case.
|
136
|
+
|
137
|
+
You can control the behavior with `RBS_PROTOBUF_EXTENSION` environment variable.
|
138
|
+
|
139
|
+
* `false`: Ignores extensions.
|
140
|
+
* `print`: Prints RBS for extensions instead of writing them to files. You can copy or modify the printed RBS, and put them in some RBS files.
|
141
|
+
* Any value else: Generates RBS for extensions.
|
142
|
+
* undefined: Ignores extensions but print messages to ask you to specify a value.
|
143
|
+
|
123
144
|
## Development
|
124
145
|
|
125
146
|
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.
|
@@ -132,7 +153,6 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
132
153
|
|
133
154
|
Bug reports and pull requests are welcome on GitHub at https://github.com/square/rbs_protobuf.
|
134
155
|
|
135
|
-
|
136
156
|
## License
|
137
157
|
|
138
158
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/Rakefile
CHANGED
data/Steepfile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
D = Steep::Diagnostic
|
2
|
+
|
3
|
+
target :lib do
|
4
|
+
signature "sig"
|
5
|
+
check "lib"
|
6
|
+
|
7
|
+
library "rbs"
|
8
|
+
library "monitor"
|
9
|
+
library "logger"
|
10
|
+
library "set"
|
11
|
+
library "json"
|
12
|
+
library "tsort"
|
13
|
+
library "pathname"
|
14
|
+
library "optparse"
|
15
|
+
library "rubygems"
|
16
|
+
|
17
|
+
configure_code_diagnostics do |hash|
|
18
|
+
hash[D::Ruby::FallbackAny] = :hint
|
19
|
+
hash[D::Ruby::MethodDefinitionMissing] = :hint
|
20
|
+
end
|
21
|
+
end
|
data/bin/steep
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
REPO_ROOT=$(cd $(dirname $0); pwd)/..
|
4
|
+
|
5
|
+
STEEP="bundle exec steep"
|
6
|
+
|
7
|
+
if type "rbenv" > /dev/null 2>&1; then
|
8
|
+
STEEP="rbenv exec ${STEEP}"
|
9
|
+
else
|
10
|
+
if type "rvm" > /dev/null 2>&1; then
|
11
|
+
STEEP="rvm ${REPO_ROOT} do ${STEEP}"
|
12
|
+
fi
|
13
|
+
fi
|
14
|
+
|
15
|
+
exec $STEEP $*
|
data/exe/protoc-gen-rbs
CHANGED
@@ -19,11 +19,22 @@ translator = case backend
|
|
19
19
|
when "protobuf"
|
20
20
|
upcase_enum = ENV.key?("PB_UPCASE_ENUMS")
|
21
21
|
no_nested_namespace = ENV.key?("RBS_PROTOBUF_NO_NESTED_NAMESPACE")
|
22
|
+
extension = case ENV["RBS_PROTOBUF_EXTENSION"]
|
23
|
+
when "false"
|
24
|
+
false
|
25
|
+
when nil
|
26
|
+
nil
|
27
|
+
when "print"
|
28
|
+
:print
|
29
|
+
else
|
30
|
+
true
|
31
|
+
end
|
22
32
|
|
23
33
|
RBSProtobuf::Translator::ProtobufGem.new(
|
24
34
|
input,
|
25
35
|
upcase_enum: upcase_enum,
|
26
|
-
nested_namespace: !no_nested_namespace
|
36
|
+
nested_namespace: !no_nested_namespace,
|
37
|
+
extension: extension
|
27
38
|
)
|
28
39
|
when "google-protobuf"
|
29
40
|
raise NotImplementedError
|
@@ -8,7 +8,7 @@ module RBSProtobuf
|
|
8
8
|
*path, name = string.delete_prefix("::").split("::").map(&:to_sym)
|
9
9
|
|
10
10
|
TypeName.new(
|
11
|
-
name: name,
|
11
|
+
name: name || raise,
|
12
12
|
namespace: Namespace.new(path: path, absolute: absolute)
|
13
13
|
)
|
14
14
|
end
|
@@ -72,7 +72,7 @@ module RBSProtobuf
|
|
72
72
|
type_name(name)
|
73
73
|
end
|
74
74
|
|
75
|
-
Types::Alias.new(name: type_name, location: nil)
|
75
|
+
Types::Alias.new(name: type_name, args: [], location: nil)
|
76
76
|
end
|
77
77
|
|
78
78
|
def function(return_type = Types::Bases::Void.new(location: nil))
|
@@ -87,7 +87,7 @@ module RBSProtobuf
|
|
87
87
|
end
|
88
88
|
|
89
89
|
def block(function, required: true)
|
90
|
-
|
90
|
+
Types::Block.new(
|
91
91
|
type: function,
|
92
92
|
required: required
|
93
93
|
)
|
@@ -98,8 +98,12 @@ module RBSProtobuf
|
|
98
98
|
end
|
99
99
|
|
100
100
|
def method_type(params: [], type:, block: nil, location: nil)
|
101
|
+
type_params = params.map do |name|
|
102
|
+
AST::TypeParam.new(name: name, variance: :invariant, upper_bound: nil, location: nil)
|
103
|
+
end
|
104
|
+
|
101
105
|
MethodType.new(
|
102
|
-
type_params:
|
106
|
+
type_params: type_params,
|
103
107
|
type: type,
|
104
108
|
block: block,
|
105
109
|
location: location
|
@@ -128,12 +132,8 @@ module RBSProtobuf
|
|
128
132
|
end
|
129
133
|
|
130
134
|
def module_type_params(*params)
|
131
|
-
params.
|
132
|
-
|
133
|
-
name: param,
|
134
|
-
variance: :invariant,
|
135
|
-
skip_validation: false
|
136
|
-
))
|
135
|
+
params.map do |name|
|
136
|
+
AST::TypeParam.new(name: name, variance: :invariant, upper_bound: nil, location: nil)
|
137
137
|
end
|
138
138
|
end
|
139
139
|
|
@@ -76,8 +76,7 @@ module RBSProtobuf
|
|
76
76
|
when FieldDescriptorProto::Type::TYPE_DOUBLE, FieldDescriptorProto::Type::TYPE_FLOAT
|
77
77
|
RBS::BuiltinNames::Float.instance_type
|
78
78
|
when FieldDescriptorProto::Type::TYPE_BOOL
|
79
|
-
factory.
|
80
|
-
factory.literal_type(false))
|
79
|
+
factory.bool_type()
|
81
80
|
else
|
82
81
|
raise "Unknown base type: #{type}"
|
83
82
|
end
|
@@ -88,6 +87,8 @@ module RBSProtobuf
|
|
88
87
|
|
89
88
|
*path, name = string.delete_prefix(".").split(".").map {|s| ActiveSupport::Inflector.upcase_first(s).to_sym }
|
90
89
|
|
90
|
+
name or raise
|
91
|
+
|
91
92
|
factory.instance_type(
|
92
93
|
RBS::TypeName.new(
|
93
94
|
name: name,
|
@@ -1,10 +1,26 @@
|
|
1
1
|
module RBSProtobuf
|
2
2
|
module Translator
|
3
3
|
class ProtobufGem < Base
|
4
|
-
|
4
|
+
attr_reader :stderr
|
5
|
+
|
6
|
+
def initialize(input, upcase_enum:, nested_namespace:, extension:, stderr: STDERR)
|
5
7
|
super(input)
|
6
8
|
@upcase_enum = upcase_enum
|
7
9
|
@nested_namespace = nested_namespace
|
10
|
+
@extension = extension
|
11
|
+
@stderr = stderr
|
12
|
+
end
|
13
|
+
|
14
|
+
def ignore_extension?
|
15
|
+
!@extension
|
16
|
+
end
|
17
|
+
|
18
|
+
def print_extension_message?
|
19
|
+
@extension == nil
|
20
|
+
end
|
21
|
+
|
22
|
+
def print_extension?
|
23
|
+
@extension == :print
|
8
24
|
end
|
9
25
|
|
10
26
|
def upcase_enum?
|
@@ -75,11 +91,27 @@ module RBSProtobuf
|
|
75
91
|
end
|
76
92
|
|
77
93
|
file.extension.group_by(&:extendee).each.with_index do |(name, extensions), index|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
94
|
+
if ignore_extension?
|
95
|
+
if print_extension_message?
|
96
|
+
stderr.puts "Extension for `#{name}` ignored in `#{file.name}`; Set RBS_PROTOBUF_EXTENSION env var to generate RBS for extensions."
|
97
|
+
end
|
98
|
+
else
|
99
|
+
exts = extension_to_decl(name,
|
100
|
+
extensions,
|
101
|
+
prefix: RBS::Namespace.root,
|
102
|
+
source_code_info: source_code_info,
|
103
|
+
path: [7, index])
|
104
|
+
|
105
|
+
if print_extension?
|
106
|
+
stderr.puts "#=========================================================="
|
107
|
+
stderr.puts "# Printing RBS for extensions from #{file.name}"
|
108
|
+
stderr.puts "#"
|
109
|
+
RBS::Writer.new(out: stderr).write(exts)
|
110
|
+
stderr.puts
|
111
|
+
else
|
112
|
+
decls.push(*exts)
|
113
|
+
end
|
114
|
+
end
|
83
115
|
end
|
84
116
|
|
85
117
|
StringIO.new.tap do |io|
|
@@ -108,12 +140,11 @@ module RBSProtobuf
|
|
108
140
|
|
109
141
|
def message_to_decl(message, prefix:, message_path:, source_code_info:, path:)
|
110
142
|
class_name = ActiveSupport::Inflector.upcase_first(message.name)
|
111
|
-
decl_namespace = prefix.append(class_name.to_sym)
|
112
143
|
|
113
144
|
RBS::AST::Declarations::Class.new(
|
114
145
|
name: RBS::TypeName.new(name: class_name.to_sym, namespace: prefix),
|
115
146
|
super_class: message_base_class,
|
116
|
-
type_params:
|
147
|
+
type_params: [],
|
117
148
|
location: nil,
|
118
149
|
comment: comment_for_path(source_code_info, path),
|
119
150
|
members: [],
|
@@ -401,6 +432,7 @@ module RBSProtobuf
|
|
401
432
|
|
402
433
|
enum_decl.members << RBS::AST::Declarations::Alias.new(
|
403
434
|
name: factory.type_name("names"),
|
435
|
+
type_params: [],
|
404
436
|
type: factory.union_type(*names),
|
405
437
|
location: nil,
|
406
438
|
comment: nil,
|
@@ -409,6 +441,7 @@ module RBSProtobuf
|
|
409
441
|
|
410
442
|
enum_decl.members << RBS::AST::Declarations::Alias.new(
|
411
443
|
name: factory.type_name("strings"),
|
444
|
+
type_params: [],
|
412
445
|
type: factory.union_type(*strings),
|
413
446
|
location: nil,
|
414
447
|
comment: nil,
|
@@ -417,6 +450,7 @@ module RBSProtobuf
|
|
417
450
|
|
418
451
|
enum_decl.members << RBS::AST::Declarations::Alias.new(
|
419
452
|
name: factory.type_name("tags"),
|
453
|
+
type_params: [],
|
420
454
|
type: factory.union_type(*tags),
|
421
455
|
location: nil,
|
422
456
|
comment: nil,
|
@@ -425,6 +459,7 @@ module RBSProtobuf
|
|
425
459
|
|
426
460
|
enum_decl.members << RBS::AST::Declarations::Alias.new(
|
427
461
|
name: factory.type_name("values"),
|
462
|
+
type_params: [],
|
428
463
|
type: factory.union_type(
|
429
464
|
factory.alias_type("names"),
|
430
465
|
factory.alias_type("strings"),
|
@@ -460,7 +495,7 @@ module RBSProtobuf
|
|
460
495
|
|
461
496
|
enum_decl.members << RBS::AST::Declarations::Constant.new(
|
462
497
|
name: factory.type_name(enum_name(v.name).to_s),
|
463
|
-
type: RBS::TypeName.new(name: enum_name.to_sym, namespace: prefix),
|
498
|
+
type: factory.instance_type(RBS::TypeName.new(name: enum_name.to_sym, namespace: prefix)),
|
464
499
|
comment: comment,
|
465
500
|
location: nil
|
466
501
|
)
|
@@ -477,7 +512,7 @@ module RBSProtobuf
|
|
477
512
|
RBS::AST::Declarations::Class.new(
|
478
513
|
name: class_name,
|
479
514
|
super_class: nil,
|
480
|
-
type_params:
|
515
|
+
type_params: [],
|
481
516
|
location: nil,
|
482
517
|
comment: nil,
|
483
518
|
members: [],
|
data/lib/rbs_protobuf/version.rb
CHANGED
data/rbs_protobuf.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.description = "Generate RBS files from .proto files"
|
11
11
|
spec.homepage = "https://github.com/square/rbs_protobuf"
|
12
12
|
spec.license = "MIT"
|
13
|
-
spec.required_ruby_version = Gem::Requirement.new(">= 2.
|
13
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
|
14
14
|
|
15
15
|
spec.metadata["homepage_uri"] = spec.homepage
|
16
16
|
spec.metadata["source_code_uri"] = "https://github.com/square/rbs_protobuf"
|
@@ -25,6 +25,6 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
26
26
|
spec.require_paths = ["lib"]
|
27
27
|
|
28
|
-
spec.add_runtime_dependency "rbs", ">=
|
28
|
+
spec.add_runtime_dependency "rbs", ">=2.2.0"
|
29
29
|
spec.add_runtime_dependency "activesupport", ">=4.0"
|
30
30
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module RBSProtobuf
|
2
|
+
class RBSFactory
|
3
|
+
include RBS
|
4
|
+
|
5
|
+
def type_name: (String) -> RBS::TypeName
|
6
|
+
|
7
|
+
def namespace: (String) -> RBS::Namespace
|
8
|
+
|
9
|
+
def instance_type: (String | RBS::TypeName name, *RBS::Types::t args) -> RBS::Types::ClassInstance
|
10
|
+
|
11
|
+
def singleton_type: (String | RBS::TypeName name) -> RBS::Types::ClassSingleton
|
12
|
+
|
13
|
+
def union_type: (RBS::Types::t `type`, *RBS::Types::t types) -> RBS::Types::t
|
14
|
+
|
15
|
+
def nil_type: (?location: RBS::Location[untyped, untyped]?) -> RBS::Types::Bases::Nil
|
16
|
+
|
17
|
+
def bool_type: (?location: RBS::Location[untyped, untyped]?) -> RBS::Types::Bases::Bool
|
18
|
+
|
19
|
+
def alias_type: (String | RBS::TypeName name, ?location: RBS::Location[untyped, untyped]?) -> RBS::Types::Alias
|
20
|
+
|
21
|
+
def function: (?RBS::Types::t return_type) -> RBS::Types::Function
|
22
|
+
|
23
|
+
def param: (RBS::Types::t type, ?name: Symbol?) -> RBS::Types::Function::Param
|
24
|
+
|
25
|
+
def block: (RBS::Types::Function function, ?required: bool) -> RBS::Types::Block
|
26
|
+
|
27
|
+
def untyped: (?location: RBS::Location[untyped, untyped]?) -> RBS::Types::Bases::Any
|
28
|
+
|
29
|
+
def method_type: (?params: Array[Symbol], type: RBS::Types::Function, ?block: RBS::Types::Block?, ?location: RBS::Location[untyped, untyped]?) -> RBS::MethodType
|
30
|
+
|
31
|
+
def literal_type: (RBS::Types::Literal::literal) -> RBS::Types::Literal
|
32
|
+
|
33
|
+
def optional_type: (RBS::Types::t, ?location: RBS::Location[untyped, untyped]?) -> RBS::Types::Optional
|
34
|
+
|
35
|
+
def type_var: (Symbol name, ?location: RBS::Location[untyped, untyped]?) -> RBS::Types::Variable
|
36
|
+
|
37
|
+
def module_type_params: (*Symbol params) -> Array[RBS::AST::TypeParam]
|
38
|
+
|
39
|
+
def unwrap_optional: (RBS::Types::t) -> RBS::Types::t
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module RBSProtobuf
|
2
|
+
module Translator
|
3
|
+
class Base
|
4
|
+
FieldDescriptorProto: untyped
|
5
|
+
|
6
|
+
attr_reader input: untyped
|
7
|
+
|
8
|
+
def initialize: (untyped input) -> void
|
9
|
+
|
10
|
+
@factory: RBSFactory
|
11
|
+
|
12
|
+
def factory: () -> RBSFactory
|
13
|
+
|
14
|
+
@response: untyped
|
15
|
+
|
16
|
+
def response: () -> untyped
|
17
|
+
|
18
|
+
def generate_rbs!: () -> void
|
19
|
+
|
20
|
+
def rbs_name: (String proto_name) -> String
|
21
|
+
|
22
|
+
def rbs_suffix: () -> ::String
|
23
|
+
|
24
|
+
def rbs_content: (String file) -> String
|
25
|
+
|
26
|
+
def comment_for_path: (untyped source_code_info, Array[Integer] path) -> RBS::AST::Comment?
|
27
|
+
|
28
|
+
def base_type: (untyped `type`) -> RBS::Types::t
|
29
|
+
|
30
|
+
def message_type: (String) -> RBS::Types::ClassInstance
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module RBSProtobuf
|
2
|
+
module Translator
|
3
|
+
class ProtobufGem < Base
|
4
|
+
attr_reader stderr: IO
|
5
|
+
|
6
|
+
def initialize: (
|
7
|
+
untyped input,
|
8
|
+
upcase_enum: bool,
|
9
|
+
nested_namespace: bool,
|
10
|
+
extension: bool | :print | nil,
|
11
|
+
?stderr: IO
|
12
|
+
) -> void
|
13
|
+
|
14
|
+
@upcase_enum: bool
|
15
|
+
|
16
|
+
@pnested_namespace: bool
|
17
|
+
|
18
|
+
@extension: bool | :print | nil
|
19
|
+
|
20
|
+
def ignore_extension?: () -> bool
|
21
|
+
|
22
|
+
def print_extension_message?: () -> bool
|
23
|
+
|
24
|
+
def print_extension?: () -> bool
|
25
|
+
|
26
|
+
def upcase_enum?: () -> bool
|
27
|
+
|
28
|
+
def nested_namespace?: () -> bool
|
29
|
+
|
30
|
+
def rbs_content: (untyped file) -> String
|
31
|
+
|
32
|
+
def message_base_class: () -> RBS::AST::Declarations::Class::Super
|
33
|
+
|
34
|
+
def repeated_field_type: (RBS::Types::t `type`, ?RBS::Types::t wtype) -> RBS::Types::ClassInstance
|
35
|
+
|
36
|
+
def message_to_decl: (untyped message, prefix: RBS::Namespace, message_path: untyped, source_code_info: untyped, path: Array[Integer]) -> RBS::AST::Declarations::Class
|
37
|
+
|
38
|
+
def field_type: (untyped field, Hash[String, [RBS::Types::t, RBS::Types::t]] maps) -> [RBS::Types::t, RBS::Types::t]
|
39
|
+
|
40
|
+
def enum_base_class: () -> RBS::AST::Declarations::Class::Super
|
41
|
+
|
42
|
+
def enum_name: (String name) -> Symbol
|
43
|
+
|
44
|
+
def enum_type_to_decl: (untyped enum_type, prefix: RBS::Namespace, source_code_info: untyped, path: Array[Integer]) -> RBS::AST::Declarations::Class
|
45
|
+
|
46
|
+
def extension_to_decl: (String extendee_name, Array[untyped] extensions, prefix: RBS::Namespace, source_code_info: untyped, path: Array[Integer]) -> Array[RBS::AST::Declarations::Class]
|
47
|
+
|
48
|
+
def service_base_class: () -> RBS::AST::Declarations::Class::Super
|
49
|
+
|
50
|
+
def service_to_decl: (untyped service, prefix: RBS::Namespace, source_code_info: untyped, path: Array[Integer]) -> RBS::AST::Declarations::Class
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
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: 0.
|
4
|
+
version: 0.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:
|
11
|
+
date: 2022-03-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rbs
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 2.2.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 2.2.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activesupport
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,15 +52,19 @@ files:
|
|
52
52
|
- ".protoc-version"
|
53
53
|
- ".rakeTasks"
|
54
54
|
- ".travis.yml"
|
55
|
+
- CHANGELOG.md
|
55
56
|
- Gemfile
|
57
|
+
- Gemfile.lock
|
56
58
|
- LICENSE.txt
|
57
59
|
- README.md
|
58
60
|
- Rakefile
|
61
|
+
- Steepfile
|
59
62
|
- bin/console
|
60
63
|
- bin/protoc-gen-dumper
|
61
64
|
- bin/protoc-gen-ruby
|
62
65
|
- bin/rpc_server
|
63
66
|
- bin/setup
|
67
|
+
- bin/steep
|
64
68
|
- example/Steepfile
|
65
69
|
- example/a.proto
|
66
70
|
- example/b.proto
|
@@ -72,6 +76,12 @@ files:
|
|
72
76
|
- lib/rbs_protobuf/translator/protobuf_gem.rb
|
73
77
|
- lib/rbs_protobuf/version.rb
|
74
78
|
- rbs_protobuf.gemspec
|
79
|
+
- sig/rbs_protobuf.rbs
|
80
|
+
- sig/rbs_protobuf/rbs_factory.rbs
|
81
|
+
- sig/rbs_protobuf/translator/base.rbs
|
82
|
+
- sig/rbs_protobuf/translator/protobuf_gem.rbs
|
83
|
+
- sig/rbs_protobuf/version.rbs
|
84
|
+
- sig/stub/_activesupport.rbs
|
75
85
|
homepage: https://github.com/square/rbs_protobuf
|
76
86
|
licenses:
|
77
87
|
- MIT
|
@@ -87,14 +97,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
87
97
|
requirements:
|
88
98
|
- - ">="
|
89
99
|
- !ruby/object:Gem::Version
|
90
|
-
version: 2.
|
100
|
+
version: 2.7.0
|
91
101
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
102
|
requirements:
|
93
103
|
- - ">="
|
94
104
|
- !ruby/object:Gem::Version
|
95
105
|
version: '0'
|
96
106
|
requirements: []
|
97
|
-
rubygems_version: 3.
|
107
|
+
rubygems_version: 3.3.3
|
98
108
|
signing_key:
|
99
109
|
specification_version: 4
|
100
110
|
summary: Generate RBS files from .proto files
|