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
         |