rbs_protobuf 0.3.0 → 1.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9efd6a721c3cb1a7b88eb3281087e1ead753b4412976417734522f0418e91127
4
- data.tar.gz: c4182e3be30b8882b8f706e0885d6dbfc0bbb218655056bea90a6753311b05bf
3
+ metadata.gz: 36689cc81f238ec33c07f1485ab4ff50f73fe365c1e84fcb925d34b0159859d3
4
+ data.tar.gz: a149120654ab2387721383d723bf3c54923385a66feff3a755ebce1056bf014c
5
5
  SHA512:
6
- metadata.gz: 4d2183fb59feb4511635bf5fd85801721ecb120dd10a0fa7bd0757bfeed71a047ec6a849e96c66cfdc07101bf396f98d4e8d965c968fc379ccf3fc92ea2ab541
7
- data.tar.gz: f865435271dcf8fc3c9945400e932c84f32da998d56625c5039912ab9256bcc01b8801906e4a008be0788fa1e0153b76f61994712f346d2eeb5e3a865561a23a
6
+ metadata.gz: f2bc3a51198e70d9617edf6df9c40e9fbfbac8061d3b849d6cf2ec21b839bd379bea6bf94d5a63dc134af173c773338f7b937b53597906e1bb3e85dd6c965c3c
7
+ data.tar.gz: 349c294046f6c7665dad74a0461311bf4c7edb58d9c8f804bd70b6c6ed11442d295086a59b9990465d478195c87c96e54180237e8fdd1a73c202e48ffde73b60
@@ -12,12 +12,13 @@ jobs:
12
12
  strategy:
13
13
  matrix:
14
14
  container_tag:
15
- - 2.7-bionic
16
- - 3.0-focal
17
- - 3.1-focal
15
+ - 3.0-dev-focal
16
+ - 3.1-dev-jammy
17
+ - 3.2-dev-jammy
18
18
  protoc_version:
19
- - 3.18.2
20
- - 3.19.4
19
+ - "3.18.2"
20
+ - "3.19.4"
21
+ - "24.0"
21
22
  container:
22
23
  image: rubylang/ruby:${{ matrix.container_tag }}
23
24
  steps:
@@ -30,7 +31,10 @@ jobs:
30
31
  unzip protoc-${{ matrix.protoc_version }}-linux-x86_64.zip
31
32
  mv bin/protoc /usr/local/bin/protoc
32
33
  protoc --version
33
- - uses: actions/checkout@v1
34
+ - uses: actions/checkout@v3
35
+ - name: Set up git safe.directory
36
+ run: |
37
+ git config --global --add safe.directory /__w/rbs_protobuf/rbs_protobuf
34
38
  - name: Run test
35
39
  run: |
36
40
  ruby -v
data/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 1.1.0 (2023-08-16)
4
+
5
+ * Support optional fields in proto3 ([\#32](https://github.com/square/rbs_protobuf/pull/32))
6
+ * Update Steep to 1.5 and RBS to 3.1 ([\#30](https://github.com/square/rbs_protobuf/pull/30))
7
+
8
+ ## 1.0.0 (2022-04-25)
9
+
10
+ This is version 1.0.0. 🎉
11
+
12
+ It includes changes on `nil` handling on required fields. Passing `nil` to required fields is prohibited by default, but there is an option to allow it, define `$RBS_PROTOBUF_ACCEPT_NIL_ATTR_WRITER` env var.
13
+
14
+ * Stop accepting `nil` to required fields ([\#16](https://github.com/square/rbs_protobuf/pull/16))
15
+ * Add an option to let required fields accept `nil` ([\#27](https://github.com/square/rbs_protobuf/pull/27))
16
+ * Fix extension generator ([\#21](https://github.com/square/rbs_protobuf/pull/21))
17
+ * Use overload for field write types ([\#22](https://github.com/square/rbs_protobuf/pull/22))
18
+ * Generate helper types and use them ([\#24](https://github.com/square/rbs_protobuf/pull/24))
19
+
3
20
  ## 0.3.0 (2022-04-05)
4
21
 
5
22
  * Put protobuf _options_ in RBS comment ([\#15](https://github.com/square/rbs_protobuf/pull/15))
data/Gemfile CHANGED
@@ -5,7 +5,7 @@ gemspec
5
5
 
6
6
  gem "rake", "~> 12.0"
7
7
  gem "minitest", "~> 5.0"
8
- gem "steep"
9
- gem "rbs"
8
+ gem "steep", require: false
9
+ gem "rbs", "~> 3.1"
10
10
 
11
11
  gem "protobuf", "~> 3.10"
data/Gemfile.lock CHANGED
@@ -1,59 +1,72 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rbs_protobuf (0.3.0)
4
+ rbs_protobuf (1.1.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.2.3)
11
+ activesupport (7.0.7)
12
12
  concurrent-ruby (~> 1.0, >= 1.0.2)
13
13
  i18n (>= 1.6, < 2)
14
14
  minitest (>= 5.1)
15
15
  tzinfo (~> 2.0)
16
16
  ast (2.4.2)
17
- concurrent-ruby (1.1.10)
17
+ concurrent-ruby (1.2.2)
18
+ csv (3.2.7)
18
19
  ffi (1.15.5)
19
- i18n (1.10.0)
20
+ fileutils (1.7.1)
21
+ i18n (1.14.1)
20
22
  concurrent-ruby (~> 1.0)
21
- language_server-protocol (3.16.0.3)
22
- listen (3.7.1)
23
+ json (2.6.3)
24
+ language_server-protocol (3.17.0.3)
25
+ listen (3.8.0)
23
26
  rb-fsevent (~> 0.10, >= 0.10.3)
24
27
  rb-inotify (~> 0.9, >= 0.9.10)
28
+ logger (1.5.3)
25
29
  middleware (0.1.0)
26
- minitest (5.15.0)
27
- parallel (1.22.1)
28
- parser (3.1.1.0)
30
+ minitest (5.19.0)
31
+ parser (3.2.2.3)
29
32
  ast (~> 2.4.1)
33
+ racc
30
34
  protobuf (3.10.5)
31
35
  activesupport (>= 3.2)
32
36
  middleware
33
37
  thor
34
38
  thread_safe
39
+ racc (1.7.1)
35
40
  rainbow (3.1.1)
36
41
  rake (12.3.3)
37
- rb-fsevent (0.11.1)
42
+ rb-fsevent (0.11.2)
38
43
  rb-inotify (0.10.1)
39
44
  ffi (~> 1.0)
40
- rbs (2.3.1)
41
- steep (0.52.0)
45
+ rbs (3.1.3)
46
+ securerandom (0.2.2)
47
+ steep (1.5.3)
42
48
  activesupport (>= 5.1)
49
+ concurrent-ruby (>= 1.1.10)
50
+ csv (>= 3.0.9)
51
+ fileutils (>= 1.1.0)
52
+ json (>= 2.1.0)
43
53
  language_server-protocol (>= 3.15, < 4.0)
44
54
  listen (~> 3.0)
45
- parallel (>= 1.0.0)
46
- parser (>= 3.0)
55
+ logger (>= 1.3.0)
56
+ parser (>= 3.1)
47
57
  rainbow (>= 2.2.2, < 4.0)
48
- rbs (>= 2.3.0)
58
+ rbs (>= 3.1.0)
59
+ securerandom (>= 0.1)
60
+ strscan (>= 1.0.0)
49
61
  terminal-table (>= 2, < 4)
62
+ strscan (3.0.6)
50
63
  terminal-table (3.0.2)
51
64
  unicode-display_width (>= 1.1.1, < 3)
52
65
  thor (1.2.1)
53
66
  thread_safe (0.3.6)
54
- tzinfo (2.0.4)
67
+ tzinfo (2.0.6)
55
68
  concurrent-ruby (~> 1.0)
56
- unicode-display_width (2.1.0)
69
+ unicode-display_width (2.4.2)
57
70
 
58
71
  PLATFORMS
59
72
  ruby
@@ -62,9 +75,9 @@ DEPENDENCIES
62
75
  minitest (~> 5.0)
63
76
  protobuf (~> 3.10)
64
77
  rake (~> 12.0)
65
- rbs
78
+ rbs (~> 3.1)
66
79
  rbs_protobuf!
67
80
  steep
68
81
 
69
82
  BUNDLED WITH
70
- 2.1.4
83
+ 2.3.11
data/README.md CHANGED
@@ -95,12 +95,15 @@ gems:
95
95
  We assume that you don't type check the generated `.pb.rb` code.
96
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
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
+
98
100
  ### Options
99
101
 
100
102
  * `RBS_PROTOBUF_BACKEND` specifies the Ruby code generator gem. Supported value is `protobuf`. (We will add `google-protobuf` for `google-protobuf` gem.)
101
103
  * `PB_UPCASE_ENUMS` is for `protobuf` gem support. Specify the environment variable to make enum value constants upper case.
102
104
  * `RBS_PROTOBUF_NO_NESTED_NAMESPACE` is to make the RBS declarations flat.
103
105
  * `RBS_PROTOBUF_EXTENSION` specifies what to do for extensions.
106
+ * `RBS_PROTOBUF_ACCEPT_NIL_ATTR_WRITER` is to allow passing `nil` to required fields.
104
107
 
105
108
  ## Supported features
106
109
 
data/Rakefile CHANGED
@@ -27,7 +27,8 @@ namespace :example do
27
27
  "-I#{proto_path}",
28
28
  "example/a.proto",
29
29
  "example/b.proto",
30
- "example/c.proto"
30
+ "example/c.proto",
31
+ "example/d.proto"
31
32
  )
32
33
  sh(
33
34
  { "RBS_PROTOBUF_BACKEND" => "protobuf", "RBS_PROTOBUF_EXTENSION" => "true" },
@@ -35,7 +36,8 @@ namespace :example do
35
36
  "--rbs_out=example/protobuf-gem",
36
37
  "-Iexample",
37
38
  "example/a.proto",
38
- "example/b.proto"
39
+ "example/b.proto",
40
+ "example/d.proto"
39
41
  )
40
42
  sh(
41
43
  { "RBS_PROTOBUF_BACKEND" => "protobuf", "RBS_PROTOBUF_EXTENSION" => "true", "RUBYOPT" => "-rbundler/setup -Iexample/protobuf-gem -rc.pb" },
@@ -7,5 +7,7 @@ require "rbs_protobuf"
7
7
  input = STDIN.read()
8
8
  File.write(ENV["PROTOC_DUMPER_OUT"] || "a.pb.out", input)
9
9
 
10
- response = Google::Protobuf::Compiler::CodeGeneratorResponse.new
10
+ response = Google::Protobuf::Compiler::CodeGeneratorResponse.new(
11
+ :supported_features => ::Google::Protobuf::Compiler::CodeGeneratorResponse::Feature::FEATURE_PROTO3_OPTIONAL.to_i
12
+ )
11
13
  print Google::Protobuf::Compiler::CodeGeneratorResponse.encode(response)
data/bin/steep CHANGED
@@ -1,15 +1,17 @@
1
- #!/bin/sh
1
+ #!/usr/bin/env bash
2
2
 
3
- REPO_ROOT=$(cd $(dirname $0); pwd)/..
3
+ BINSTUB_DIR=$(cd $(dirname $0); pwd)
4
+ GEMFILE=$(readlink -f ${BINSTUB_DIR}/../Gemfile)
5
+ ROOT_DIR=$(readlink -f ${BINSTUB_DIR}/..)
4
6
 
5
- STEEP="bundle exec steep"
7
+ STEEP="bundle exec --gemfile=${GEMFILE} steep"
6
8
 
7
9
  if type "rbenv" > /dev/null 2>&1; then
8
10
  STEEP="rbenv exec ${STEEP}"
9
11
  else
10
12
  if type "rvm" > /dev/null 2>&1; then
11
- STEEP="rvm ${REPO_ROOT} do ${STEEP}"
13
+ STEEP="rvm ${ROOT_DIR} do ${STEEP}"
12
14
  fi
13
15
  fi
14
16
 
15
- exec $STEEP $*
17
+ exec $STEEP $@
data/example/Steepfile CHANGED
@@ -4,6 +4,7 @@ target :lib do
4
4
  collection_config "../rbs_collection.yaml"
5
5
 
6
6
  signature "protobuf-gem"
7
+ signature "../vendor/gem_rbs_collection/gems/protobuf"
7
8
  check "protobuf_gem_example.rb"
8
9
 
9
10
  configure_code_diagnostics do |hash|
data/example/d.proto ADDED
@@ -0,0 +1,6 @@
1
+ syntax = "proto3";
2
+
3
+ message Foo {
4
+ string bar = 2;
5
+ optional string baz = 1;
6
+ }
data/exe/protoc-gen-rbs CHANGED
@@ -30,11 +30,14 @@ translator = case backend
30
30
  true
31
31
  end
32
32
 
33
+ accept_nil_writer = ENV.key?("RBS_PROTOBUF_ACCEPT_NIL_ATTR_WRITER")
34
+
33
35
  RBSProtobuf::Translator::ProtobufGem.new(
34
36
  input,
35
37
  upcase_enum: upcase_enum,
36
38
  nested_namespace: !no_nested_namespace,
37
- extension: extension
39
+ extension: extension,
40
+ accept_nil_writer: accept_nil_writer
38
41
  )
39
42
  when "google-protobuf"
40
43
  raise NotImplementedError
@@ -0,0 +1,68 @@
1
+ module RBSProtobuf
2
+ module Name
3
+ class Class
4
+ attr_reader :name
5
+
6
+ def initialize(name)
7
+ raise unless name.class?
8
+ @name = name
9
+ end
10
+
11
+ def instance_type(*args)
12
+ RBS::Types::ClassInstance.new(name: name, args: args, location: nil)
13
+ end
14
+
15
+ alias [] instance_type
16
+
17
+ def singleton_type
18
+ RBS::Types::ClassSingleton.new(name: name, location: nil)
19
+ end
20
+
21
+ def instance_type?(t)
22
+ t.is_a?(RBS::Types::ClassInstance) && t.name == name
23
+ end
24
+
25
+ def singleton_type?(t)
26
+ t.is_a?(RBS::Types::ClassSingleton) && t.name == name
27
+ end
28
+
29
+ def super_class(*args)
30
+ RBS::AST::Declarations::Class::Super.new(name: name, args: args, location: nil)
31
+ end
32
+ end
33
+
34
+ class Alias
35
+ attr_reader :name
36
+
37
+ def initialize(name)
38
+ raise unless name.alias?
39
+ @name = name
40
+ end
41
+
42
+ def [](*args)
43
+ RBS::Types::Alias.new(name: name, args: args, location: nil)
44
+ end
45
+
46
+ def type?(t)
47
+ t.is_a?(RBS::Types::Alias) && t.name == name
48
+ end
49
+ end
50
+
51
+ class Interface
52
+ attr_reader :name
53
+
54
+ def initialize(name)
55
+ raise unless name.interface?
56
+ @name = name
57
+ end
58
+
59
+ def [](*args)
60
+ RBS::Types::Interface.new(name: name, args: args, location: nil)
61
+ end
62
+
63
+ def type?(t)
64
+ t.is_a?(RBS::Types::Interface) && t.name == name
65
+ end
66
+ end
67
+ end
68
+ end
@@ -14,7 +14,7 @@ module RBSProtobuf
14
14
  end
15
15
 
16
16
  def response
17
- @response ||= Google::Protobuf::Compiler::CodeGeneratorResponse.new
17
+ @response ||= Google::Protobuf::Compiler::CodeGeneratorResponse.new(:supported_features => ::Google::Protobuf::Compiler::CodeGeneratorResponse::Feature::FEATURE_PROTO3_OPTIONAL.to_i)
18
18
  end
19
19
 
20
20
  def generate_rbs!