Giter VIP home page Giter VIP logo

rbi's People

Contributors

andyw8 avatar bitwise-aiden avatar cursedcoder avatar dependabot[bot] avatar egiurleo avatar github-actions[bot] avatar jeffcarbs avatar jenshenny avatar kaanozkan avatar mojanjz avatar morriar avatar mutecipher avatar mwudka avatar p-linnane avatar paracycle avatar petergoldstein avatar rafaelfranca avatar services-db[bot] avatar shopify-codedb[bot] avatar st0012 avatar vinistock avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rbi's Issues

Rake dependency

When updating Tapioca to 0.5.0, I noticed this new gem pulls in a Rake dependency. Is this a necessary runtime dependency or can it be add_development_dependency? It doesn't appear to be used here outside of tests (similar to Tapioca, which didn't have the dependency at all before).

Fails to run `tapioca init` with error: `Cannot extract source from uninitialized Source::Buffer`

On a Rails 6.1.7 codebase, with the following Sorbet gems:

    sorbet (0.5.10201)
      sorbet-static (= 0.5.10201)
    sorbet-runtime (0.5.10201)
    sorbet-static (0.5.10201-universal-darwin-14)
    sorbet-static (0.5.10201-universal-darwin-15)
    sorbet-static (0.5.10201-universal-darwin-16)
    sorbet-static (0.5.10201-universal-darwin-17)
    sorbet-static (0.5.10201-universal-darwin-18)
    sorbet-static (0.5.10201-universal-darwin-19)
    sorbet-static (0.5.10201-universal-darwin-20)
    sorbet-static (0.5.10201-universal-darwin-21)
    sorbet-static (0.5.10201-universal-darwin-22)
    sorbet-static (0.5.10201-x86_64-linux)
    sorbet-struct-comparable (1.2.0)
      sorbet-runtime (>= 0.5)

    ast (2.4.2)
    parser (3.2.2.1)
      ast (~> 2.4.1)

Trying to install tapioca v0.11.6 and then running tapioca init results in:

/usr/local/rvm/gems/ruby-2.7.5/gems/parser-2.7.1.2/lib/parser/source/buffer.rb:146:in `source': Cannot extract source from uninitialized Source::Buffer (RBI::UnexpectedParserError)

It appears that this was due to tapioca expecting a newer version of parser, because running bundle update parser, led to the following versions:

    parser (3.2.2.1)
      ast (~> 2.4.1)

Which then led me to #139, and following the steps in there to bump unparser has allowed tapioca init to work correctly.

Full stacktrace
bundle exec tapioca init
        skip  sorbet/config
      create  sorbet/tapioca/config.yml
      create  sorbet/tapioca/require.rb
      create  bin/tapioca
Retrieving index from central repository... Done
Listing gems from Gemfile.lock... Done
Removing annotations for gems that have been removed...  Nothing to do
Fetching gem annotations from central repository...

##################################
### RBI::Parser internal error ###
##################################

There was an internal parser error while processing this source.

Error: Cannot extract source from uninitialized Source::Buffer while parsing -::-::

<no source>

Please open an issue at https://github.com/Shopify/rbi/issues/new.

##################################

Traceback (most recent call last):
        54: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/bin/ruby_executable_hooks:22:in `<main>'
        53: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/bin/ruby_executable_hooks:22:in `eval'
        52: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/bin/tapioca:23:in `<main>'
        51: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/bin/tapioca:23:in `load'
        50: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/exe/tapioca:25:in `<top (required)>'
        49: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/thor-1.2.1/lib/thor/base.rb:485:in `start'
        48: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
        47: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
        46: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
        45: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/cli.rb:29:in `init'
        44: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `block in _on_method_added'
        43: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `bind_call'
        42: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/runtime/trackers.rb:26:in `with_trackers_enabled'
        41: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/cli.rb:31:in `block in init'
        40: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/thor-1.2.1/lib/thor/invocation.rb:116:in `invoke'
        39: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
        38: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
        37: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
        36: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/cli.rb:328:in `annotations'
        35: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `block in _on_method_added'
        34: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `bind_call'
        33: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca.rb:22:in `silence_warnings'
        32: from /Users/jamietanna/.rvm/rubies/ruby-2.7.5/lib/ruby/2.7.0/rubygems/user_interaction.rb:47:in `use_ui'
        31: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca.rb:23:in `block in silence_warnings'
        30: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/cli.rb:329:in `block in annotations'
        29: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `block in _on_method_added'
        28: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `bind_call'
        27: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/commands/annotations.rb:40:in `execute'
        26: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `block in _on_method_added'
        25: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `bind_call'
        24: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/commands/annotations.rb:126:in `fetch_annotations'
        23: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/commands/annotations.rb:126:in `select'
        22: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/commands/annotations.rb:126:in `block in fetch_annotations'
        21: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `block in _on_method_added'
        20: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `bind_call'
        19: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/commands/annotations.rb:137:in `fetch_annotation'
        18: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `block in _on_method_added'
        17: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `bind_call'
        16: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/commands/annotations.rb:228:in `merge_files'
        15: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/commands/annotations.rb:228:in `each'
        14: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/commands/annotations.rb:229:in `block in merge_files'
        13: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `block in _on_method_added'
        12: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `bind_call'
        11: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/rbi-0.0.16/lib/rbi/parser.rb:71:in `parse_string'
        10: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `block in _on_method_added'
         9: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `bind_call'
         8: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/rbi-0.0.16/lib/rbi/parser.rb:87:in `parse_string'
         7: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `block in _on_method_added'
         6: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `bind_call'
         5: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/rbi-0.0.16/lib/rbi/parser.rb:105:in `parse'
         4: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/unparser-0.5.5/lib/unparser.rb:108:in `parse_with_comments'
         3: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/parser-2.7.1.2/lib/parser/base.rb:206:in `parse_with_comments'
         2: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/parser-2.7.1.2/lib/parser/base.rb:186:in `parse'
         1: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/parser-2.7.1.2/lib/parser/lexer.rb:10890:in `source_buffer='
/Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/parser-2.7.1.2/lib/parser/source/buffer.rb:146:in `source': Cannot extract source from uninitialized Source::Buffer (RuntimeError)
        54: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/bin/ruby_executable_hooks:22:in `<main>'
        53: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/bin/ruby_executable_hooks:22:in `eval'
        52: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/bin/tapioca:23:in `<main>'
        51: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/bin/tapioca:23:in `load'
        50: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/exe/tapioca:25:in `<top (required)>'
        49: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/thor-1.2.1/lib/thor/base.rb:485:in `start'
        48: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
        47: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
        46: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
        45: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/cli.rb:29:in `init'
        44: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `block in _on_method_added'
        43: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `bind_call'
        42: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/runtime/trackers.rb:26:in `with_trackers_enabled'
        41: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/cli.rb:31:in `block in init'
        40: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/thor-1.2.1/lib/thor/invocation.rb:116:in `invoke'
        39: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
        38: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
        37: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
        36: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/cli.rb:328:in `annotations'
        35: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `block in _on_method_added'
        34: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `bind_call'
        33: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca.rb:22:in `silence_warnings'
        32: from /Users/jamietanna/.rvm/rubies/ruby-2.7.5/lib/ruby/2.7.0/rubygems/user_interaction.rb:47:in `use_ui'
        31: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca.rb:23:in `block in silence_warnings'
        30: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/cli.rb:329:in `block in annotations'
        29: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `block in _on_method_added'
        28: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `bind_call'
        27: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/commands/annotations.rb:40:in `execute'
        26: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `block in _on_method_added'
        25: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `bind_call'
        24: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/commands/annotations.rb:126:in `fetch_annotations'
        23: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/commands/annotations.rb:126:in `select'
        22: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/commands/annotations.rb:126:in `block in fetch_annotations'
        21: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `block in _on_method_added'
        20: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `bind_call'
        19: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/commands/annotations.rb:137:in `fetch_annotation'
        18: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `block in _on_method_added'
        17: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `bind_call'
        16: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/commands/annotations.rb:228:in `merge_files'
        15: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/commands/annotations.rb:228:in `each'
        14: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/tapioca-0.11.6/lib/tapioca/commands/annotations.rb:229:in `block in merge_files'
        13: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `block in _on_method_added'
        12: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `bind_call'
        11: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/rbi-0.0.16/lib/rbi/parser.rb:71:in `parse_string'
        10: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `block in _on_method_added'
         9: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `bind_call'
         8: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/rbi-0.0.16/lib/rbi/parser.rb:87:in `parse_string'
         7: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `block in _on_method_added'
         6: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/sorbet-runtime-0.5.10201/lib/types/private/methods/_methods.rb:272:in `bind_call'
         5: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/rbi-0.0.16/lib/rbi/parser.rb:105:in `parse'
         4: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/unparser-0.5.5/lib/unparser.rb:108:in `parse_with_comments'
         3: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/parser-2.7.1.2/lib/parser/base.rb:206:in `parse_with_comments'
         2: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/parser-2.7.1.2/lib/parser/base.rb:186:in `parse'
         1: from /Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/parser-2.7.1.2/lib/parser/lexer.rb:10890:in `source_buffer='
/Users/jamietanna/.rvm/gems/ruby-2.7.5/gems/parser-2.7.1.2/lib/parser/source/buffer.rb:146:in `source': Cannot extract source from uninitialized Source::Buffer (RBI::UnexpectedParserError)

Set Repo Description

Set Repo Description

TL;DR

Set a description for your service in Slack with spy: spy github set description :repo *description

Why is this being asked?

A repo description makes your service more discoverable in Services DB, especially when it comes to differing internal and external project names.

What will happen if it doesn't get done within the expected timeframe?

This is mandatory. If this is not done your service will not be easily discoverable in Services DB.

This doesn't apply to my service. What do I do?

First, leave a comment explaining why it doesn't apply. Then, leave another comment as /not_applicable, and close the issue.
If you change your mind, make sure to comment any reason and reopen the issue. Once you've fixed it, services-db will close the issue for you next day.

I have questions/concerns about this

Please contact the Production Excellence team using Slack at #production-excellence-team.

Your service: rbi/production

`sort_nodes!` changes method privacy

I think that the SortNodes rewriter doesn't preserve the position of private and protected, causing it to change the privacy of methods. For example, I would expect this input:

rbi = RBI::Tree.new
rbi << RBI::Method.new("c")
rbi << RBI::Private.new
rbi << RBI::Method.new("a")
rbi << RBI::Protected.new
rbi << RBI::Method.new("b")
rbi.sort_nodes!
puts rbi.string

to produce

def c; end
private
def a; end
protected
def b; end

but it sorts everything and produces

def a; end
def b; end
def c; end
private
protected

So that method b which should be private has become public, and c which should be protected is also public.

If my understanding is correct, the problem is in the node.nodes.sort! call in the SortNodes visitor, which currently sorts all the nodes. I think it needs to first segment the nodes into public, private, and protected ranges and sort those ranges individually. Would a PR to fix this be helpful?

Add CHANGELOG.md file

Problem

Users can not easily discover what changes were made in Rbi, because this project does not have a CHANGELOG.md file.

Proposed solution

Add a CHANGELOG.md file that lists each released version and details the changes that were made.
This is a standard in Ruby Gems, and will automatically be picked up by rubygems.org and other sites

Parse visibility modifiers as trees

#142 showed that parsing visibility modifiers as simple nodes causes problems when sorting.

Instead we should parse the visibility modifiers as a composite node of nodes so we can maintain their content when sorting.

To do this we could change Visibility to inherit Tree then open the tree when we find the visibility modifier and finally close the tree when we encounter another visibility modifier or the end of the current scope.

The trees would look like this:

class Foo
  public # start of the public tree: because we encountered a visibility modifier: `public`
  
  def foo; end
  def bar; end

  # end of the public tree: because we encountered a visibility modifier: `private`

  private # start of the private tree: because we encountered a visibility modifier: `private`

  def baz; end

  # end of the private tree: because we encountered the end of the current scope
end

This would simplify the sorting mechanism since sorting the properties inside of a visibility tree would just be a recursive call to sort! on the visibility tree.

v0.0.7 incompatible with tapioca?

After upgrading to the recently-released v0.0.7, srb tc fails with the following:

sorbet/rbi/gems/[email protected]:159: Method RBI::Tree#merge redefined without matching argument count. Expected: 4, got: 1 https://srb.help/4010
     159 |  def merge(other); end
            ^^^^^^^^^^^^^^^^
    sorbet/rbi/gems/[email protected]:1308: Previous definition
    1308 |  def merge(other, left_name: T.unsafe(nil), right_name: T.unsafe(nil), keep: T.unsafe(nil)); end

As there is no changelog and no migration steps posted for this gem, I assume there aren't any steps I'm supposed to take to resolve this issue myself.

Fails to run tapioca init with error - No emitter for node: :kwargs while parsing

We are using rails :
gem 'rails', '6.1.4.7'
ruby : ruby "2.7.6"

bundler : bundler 2.1.4

We do use rails engine extensively and were trying to add type check to one of the engines to start with.

Dependencies - w.r.t sorbet

Using yard-sorbet 0.6.1
Using tapioca 0.9.4
Using sorbet 0.5.10323
Using sorbet-static-and-runtime 0.5.10323
Using sorbet-runtime 0.5.10323
Using tapioca 0.9.4
Using rbi 0.0.15
Using unparser 0.4.7

Output

$ bundle exec tapioca init
      create  sorbet/config
      create  sorbet/tapioca/config.yml
      create  sorbet/tapioca/require.rb
      create  bin/tapioca
Retrieving index from central repository... /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/json-1.8.6/lib/json/common.rb:155: warning: Using the last argument as keyword parameters is deprecated
Done
Listing gems from Gemfile.lock... Done
Removing annotations for gems that have been removed...  Nothing to do
Fetching gem annotations from central repository... 
warning: parser/current is loading parser/ruby27, which recognizes2.7.5-compliant syntax, but you are running 2.7.6.
Please see https://github.com/whitequark/parser#compatibility-with-ruby-mri.

  Fetched aasm
      create  sorbet/rbi/annotations/aasm.rbi

  Fetched actionmailer
      create  sorbet/rbi/annotations/actionmailer.rbi

##################################
### RBI::Parser internal error ###
##################################

There was an internal parser error while processing this source.

Error: No emitter for node: :kwargs while parsing -:45:2-50:5:

<no source>

Please open an issue at https://github.com/Shopify/rbi/issues/new.

##################################

bundler: failed to load command: tapioca (/Users/xx/.rbenv/versions/2.7.6/bin/tapioca)
Traceback (most recent call last):
	163: from /Users/xx/.rbenv/versions/2.7.6/bin/bundle:23:in `<main>'
	162: from /Users/xx/.rbenv/versions/2.7.6/bin/bundle:23:in `load'
	161: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/exe/bundle:37:in `<top (required)>'
	160: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/friendly_errors.rb:130:in `with_friendly_errors'
	159: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/exe/bundle:49:in `block in <top (required)>'
	158: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/cli.rb:24:in `start'
	157: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
	156: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/cli.rb:30:in `dispatch'
	155: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
	154: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
	153: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
	152: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/cli.rb:494:in `exec'
	151: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/cli/exec.rb:28:in `run'
	150: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/cli/exec.rb:63:in `kernel_load'
	149: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/cli/exec.rb:63:in `load'
	148: from /Users/xx/.rbenv/versions/2.7.6/bin/tapioca:23:in `<top (required)>'
	147: from /Users/xx/.rbenv/versions/2.7.6/bin/tapioca:23:in `load'
	146: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/tapioca-0.9.4/exe/tapioca:23:in `<top (required)>'
	145: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor/base.rb:485:in `start'
	144: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
	143: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
	142: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
	141: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/tapioca-0.9.4/lib/tapioca/cli.rb:27:in `init'
	140: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor/invocation.rb:116:in `invoke'
	139: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
	138: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
	137: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
	136: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/tapioca-0.9.4/lib/tapioca/cli.rb:317:in `annotations'
	135: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/sorbet-runtime-0.5.10323/lib/types/private/methods/_methods.rb:272:in `block in _on_method_added'
	134: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/sorbet-runtime-0.5.10323/lib/types/private/methods/_methods.rb:272:in `bind_call'
	133: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/tapioca-0.9.4/lib/tapioca/commands/annotations.rb:40:in `execute'
	132: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/sorbet-runtime-0.5.10323/lib/types/private/methods/_methods.rb:272:in `block in _on_method_added'
	131: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/sorbet-runtime-0.5.10323/lib/types/private/methods/_methods.rb:272:in `bind_call'
	130: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/tapioca-0.9.4/lib/tapioca/commands/annotations.rb:126:in `fetch_annotations'
	129: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/tapioca-0.9.4/lib/tapioca/commands/annotations.rb:126:in `select'
	128: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/tapioca-0.9.4/lib/tapioca/commands/annotations.rb:126:in `block in fetch_annotations'
	127: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/tapioca-0.9.4/lib/tapioca/commands/annotations.rb:137:in `fetch_annotation'
	126: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/tapioca-0.9.4/lib/tapioca/commands/annotations.rb:226:in `merge_files'
	125: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/tapioca-0.9.4/lib/tapioca/commands/annotations.rb:226:in `each'
	124: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/tapioca-0.9.4/lib/tapioca/commands/annotations.rb:227:in `block in merge_files'
	123: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:71:in `parse_string'
	122: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:87:in `parse_string'
	121: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:108:in `parse'
	120: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:220:in `visit'
	119: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `visit_all'
	118: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `each'
	117: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `block in visit_all'
	116: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:202:in `visit'
	115: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `visit_all'
	114: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `each'
	113: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `block in visit_all'
	112: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:220:in `visit'
	111: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `visit_all'
	110: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `each'
	109: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `block in visit_all'
	108: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:212:in `visit'
	107: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:407:in `parse_block'
	106: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:480:in `parse_sig'
	105: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:641:in `build'
	104: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `visit_all'
	103: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `each'
	102: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `block in visit_all'
	101: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:659:in `visit'
	100: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:665:in `visit_send'
	 99: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:659:in `visit'
	 98: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:687:in `visit_send'
	 97: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:687:in `each'
	 96: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:689:in `block in visit_send'
	 95: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:152:in `parse_expr'
	 94: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser.rb:35:in `unparse'
	 93: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:116:in `block (2 levels) in create_memoized_method'
	 92: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:60:in `fetch'
	 91: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 90: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `block in fetch'
	 89: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `synchronize'
	 88: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:62:in `block (2 levels) in fetch'
	 87: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 86: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:63:in `block (3 levels) in fetch'
	 85: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `block (3 levels) in create_memoized_method'
	 84: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `call'
	 83: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:103:in `write_to_buffer'
	 82: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send.rb:31:in `dispatch'
	 81: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:116:in `block (2 levels) in create_memoized_method'
	 80: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:60:in `fetch'
	 79: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 78: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `block in fetch'
	 77: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `synchronize'
	 76: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:62:in `block (2 levels) in fetch'
	 75: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 74: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:63:in `block (3 levels) in fetch'
	 73: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `block (3 levels) in create_memoized_method'
	 72: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `call'
	 71: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:103:in `write_to_buffer'
	 70: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send/regular.rb:21:in `dispatch'
	 69: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send.rb:165:in `emit_arguments'
	 68: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send.rb:176:in `normal_arguments'
	 67: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:174:in `parentheses'
	 66: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send.rb:177:in `block in normal_arguments'
	 65: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:258:in `delimited_plain'
	 64: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:274:in `delimited'
	 63: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:188:in `visit_plain'
	 62: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:116:in `block (2 levels) in create_memoized_method'
	 61: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:60:in `fetch'
	 60: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 59: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `block in fetch'
	 58: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `synchronize'
	 57: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:62:in `block (2 levels) in fetch'
	 56: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 55: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:63:in `block (3 levels) in fetch'
	 54: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `block (3 levels) in create_memoized_method'
	 53: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `call'
	 52: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:103:in `write_to_buffer'
	 51: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send.rb:31:in `dispatch'
	 50: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:116:in `block (2 levels) in create_memoized_method'
	 49: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:60:in `fetch'
	 48: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 47: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `block in fetch'
	 46: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `synchronize'
	 45: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:62:in `block (2 levels) in fetch'
	 44: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 43: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:63:in `block (3 levels) in fetch'
	 42: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `block (3 levels) in create_memoized_method'
	 41: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `call'
	 40: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:103:in `write_to_buffer'
	 39: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send/regular.rb:19:in `dispatch'
	 38: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send/regular.rb:33:in `emit_receiver'
	 37: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:201:in `visit'
	 36: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:233:in `conditional_parentheses'
	 35: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:202:in `block in visit'
	 34: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:116:in `block (2 levels) in create_memoized_method'
	 33: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:60:in `fetch'
	 32: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 31: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `block in fetch'
	 30: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `synchronize'
	 29: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:62:in `block (2 levels) in fetch'
	 28: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 27: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:63:in `block (3 levels) in fetch'
	 26: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `block (3 levels) in create_memoized_method'
	 25: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `call'
	 24: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:103:in `write_to_buffer'
	 23: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send.rb:31:in `dispatch'
	 22: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:116:in `block (2 levels) in create_memoized_method'
	 21: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:60:in `fetch'
	 20: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 19: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `block in fetch'
	 18: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `synchronize'
	 17: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:62:in `block (2 levels) in fetch'
	 16: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 15: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:63:in `block (3 levels) in fetch'
	 14: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `block (3 levels) in create_memoized_method'
	 13: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `call'
	 12: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:103:in `write_to_buffer'
	 11: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send/regular.rb:21:in `dispatch'
	 10: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send.rb:165:in `emit_arguments'
	  9: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send.rb:176:in `normal_arguments'
	  8: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:174:in `parentheses'
	  7: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send.rb:177:in `block in normal_arguments'
	  6: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:258:in `delimited_plain'
	  5: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:274:in `delimited'
	  4: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:187:in `visit_plain'
	  3: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:246:in `emitter'
	  2: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:118:in `emitter'
	  1: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:118:in `fetch'
/Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:119:in `block in emitter': No emitter for node: :kwargs (ArgumentError)
	163: from /Users/xx/.rbenv/versions/2.7.6/bin/bundle:23:in `<main>'
	162: from /Users/xx/.rbenv/versions/2.7.6/bin/bundle:23:in `load'
	161: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/exe/bundle:37:in `<top (required)>'
	160: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/friendly_errors.rb:130:in `with_friendly_errors'
	159: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/exe/bundle:49:in `block in <top (required)>'
	158: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/cli.rb:24:in `start'
	157: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
	156: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/cli.rb:30:in `dispatch'
	155: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
	154: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
	153: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
	152: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/cli.rb:494:in `exec'
	151: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/cli/exec.rb:28:in `run'
	150: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/cli/exec.rb:63:in `kernel_load'
	149: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/cli/exec.rb:63:in `load'
	148: from /Users/xx/.rbenv/versions/2.7.6/bin/tapioca:23:in `<top (required)>'
	147: from /Users/xx/.rbenv/versions/2.7.6/bin/tapioca:23:in `load'
	146: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/tapioca-0.9.4/exe/tapioca:23:in `<top (required)>'
	145: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor/base.rb:485:in `start'
	144: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
	143: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
	142: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
	141: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/tapioca-0.9.4/lib/tapioca/cli.rb:27:in `init'
	140: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor/invocation.rb:116:in `invoke'
	139: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
	138: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
	137: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
	136: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/tapioca-0.9.4/lib/tapioca/cli.rb:317:in `annotations'
	135: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/sorbet-runtime-0.5.10323/lib/types/private/methods/_methods.rb:272:in `block in _on_method_added'
	134: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/sorbet-runtime-0.5.10323/lib/types/private/methods/_methods.rb:272:in `bind_call'
	133: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/tapioca-0.9.4/lib/tapioca/commands/annotations.rb:40:in `execute'
	132: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/sorbet-runtime-0.5.10323/lib/types/private/methods/_methods.rb:272:in `block in _on_method_added'
	131: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/sorbet-runtime-0.5.10323/lib/types/private/methods/_methods.rb:272:in `bind_call'
	130: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/tapioca-0.9.4/lib/tapioca/commands/annotations.rb:126:in `fetch_annotations'
	129: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/tapioca-0.9.4/lib/tapioca/commands/annotations.rb:126:in `select'
	128: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/tapioca-0.9.4/lib/tapioca/commands/annotations.rb:126:in `block in fetch_annotations'
	127: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/tapioca-0.9.4/lib/tapioca/commands/annotations.rb:137:in `fetch_annotation'
	126: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/tapioca-0.9.4/lib/tapioca/commands/annotations.rb:226:in `merge_files'
	125: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/tapioca-0.9.4/lib/tapioca/commands/annotations.rb:226:in `each'
	124: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/tapioca-0.9.4/lib/tapioca/commands/annotations.rb:227:in `block in merge_files'
	123: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:71:in `parse_string'
	122: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:87:in `parse_string'
	121: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:108:in `parse'
	120: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:220:in `visit'
	119: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `visit_all'
	118: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `each'
	117: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `block in visit_all'
	116: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:202:in `visit'
	115: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `visit_all'
	114: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `each'
	113: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `block in visit_all'
	112: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:220:in `visit'
	111: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `visit_all'
	110: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `each'
	109: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `block in visit_all'
	108: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:212:in `visit'
	107: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:407:in `parse_block'
	106: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:480:in `parse_sig'
	105: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:641:in `build'
	104: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `visit_all'
	103: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `each'
	102: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:137:in `block in visit_all'
	101: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:659:in `visit'
	100: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:665:in `visit_send'
	 99: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:659:in `visit'
	 98: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:687:in `visit_send'
	 97: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:687:in `each'
	 96: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:689:in `block in visit_send'
	 95: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/rbi-0.0.15/lib/rbi/parser.rb:152:in `parse_expr'
	 94: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser.rb:35:in `unparse'
	 93: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:116:in `block (2 levels) in create_memoized_method'
	 92: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:60:in `fetch'
	 91: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 90: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `block in fetch'
	 89: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `synchronize'
	 88: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:62:in `block (2 levels) in fetch'
	 87: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 86: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:63:in `block (3 levels) in fetch'
	 85: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `block (3 levels) in create_memoized_method'
	 84: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `call'
	 83: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:103:in `write_to_buffer'
	 82: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send.rb:31:in `dispatch'
	 81: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:116:in `block (2 levels) in create_memoized_method'
	 80: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:60:in `fetch'
	 79: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 78: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `block in fetch'
	 77: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `synchronize'
	 76: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:62:in `block (2 levels) in fetch'
	 75: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 74: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:63:in `block (3 levels) in fetch'
	 73: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `block (3 levels) in create_memoized_method'
	 72: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `call'
	 71: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:103:in `write_to_buffer'
	 70: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send/regular.rb:21:in `dispatch'
	 69: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send.rb:165:in `emit_arguments'
	 68: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send.rb:176:in `normal_arguments'
	 67: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:174:in `parentheses'
	 66: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send.rb:177:in `block in normal_arguments'
	 65: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:258:in `delimited_plain'
	 64: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:274:in `delimited'
	 63: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:188:in `visit_plain'
	 62: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:116:in `block (2 levels) in create_memoized_method'
	 61: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:60:in `fetch'
	 60: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 59: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `block in fetch'
	 58: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `synchronize'
	 57: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:62:in `block (2 levels) in fetch'
	 56: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 55: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:63:in `block (3 levels) in fetch'
	 54: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `block (3 levels) in create_memoized_method'
	 53: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `call'
	 52: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:103:in `write_to_buffer'
	 51: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send.rb:31:in `dispatch'
	 50: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:116:in `block (2 levels) in create_memoized_method'
	 49: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:60:in `fetch'
	 48: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 47: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `block in fetch'
	 46: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `synchronize'
	 45: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:62:in `block (2 levels) in fetch'
	 44: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 43: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:63:in `block (3 levels) in fetch'
	 42: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `block (3 levels) in create_memoized_method'
	 41: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `call'
	 40: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:103:in `write_to_buffer'
	 39: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send/regular.rb:19:in `dispatch'
	 38: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send/regular.rb:33:in `emit_receiver'
	 37: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:201:in `visit'
	 36: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:233:in `conditional_parentheses'
	 35: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:202:in `block in visit'
	 34: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:116:in `block (2 levels) in create_memoized_method'
	 33: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:60:in `fetch'
	 32: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 31: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `block in fetch'
	 30: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `synchronize'
	 29: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:62:in `block (2 levels) in fetch'
	 28: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 27: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:63:in `block (3 levels) in fetch'
	 26: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `block (3 levels) in create_memoized_method'
	 25: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `call'
	 24: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:103:in `write_to_buffer'
	 23: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send.rb:31:in `dispatch'
	 22: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:116:in `block (2 levels) in create_memoized_method'
	 21: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:60:in `fetch'
	 20: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 19: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `block in fetch'
	 18: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:61:in `synchronize'
	 17: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:62:in `block (2 levels) in fetch'
	 16: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/thread_safe-0.3.6/lib/thread_safe/cache.rb:56:in `fetch'
	 15: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/memory.rb:63:in `block (3 levels) in fetch'
	 14: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `block (3 levels) in create_memoized_method'
	 13: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117:in `call'
	 12: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:103:in `write_to_buffer'
	 11: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send/regular.rb:21:in `dispatch'
	 10: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send.rb:165:in `emit_arguments'
	  9: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send.rb:176:in `normal_arguments'
	  8: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:174:in `parentheses'
	  7: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter/send.rb:177:in `block in normal_arguments'
	  6: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:258:in `delimited_plain'
	  5: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:274:in `delimited'
	  4: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:187:in `visit_plain'
	  3: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:246:in `emitter'
	  2: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:118:in `emitter'
	  1: from /Users/xx/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/unparser-0.4.7/lib/unparser/emitter.rb:118:in `fetch'

Your service has missing or invalid owners

Your service has missing or invalid owners

TL;DR

Make sure you have at least one owner listed in your service.yml and that every owner points to a valid GitHub team slug or user login.

Why is this being asked?

As we work toward revamping the way ownership works here, we need to ensure we have a good picture of the current state of affairs. For most services this is obvious (ServicesDB is owned by Shopify/production-excellence, which maps to a Production Excellence team in Vault). For some services however, it is very much not obvious, as they have no entries or invalid entries in their service.yml, making it difficult to determine the best path forward.

What will happen if it doesn't get done within the expected timeframe?

As we attempt to infer the correct owner, we may end up misclassifying things by putting ownership of a service onto the wrong team. It would be easily remedied, but still wouldn't be the optimal experience.

This doesn't apply to my service. What do I do?

First, leave a comment explaining why it doesn't apply. Then, leave another comment as /not_applicable, and close the issue.
If you change your mind, make sure to comment any reason and reopen the issue. Once you've fixed it, services-db will close the issue for you next day.

Detailed description

For more information about why we're making this change, please see this project brief here: https://docs.google.com/document/d/1KKosigiJhy2DGmc22jJ8l3-Tumkl53dzvgt1Tuw1TRw/edit.

I have questions/concerns about this

Please contact the Production Excellence team using #core-build-manage.

Your service: rbi/production

Relax prism version constraint

Right now, we have an upper-bound version constraint on Prism here:

spec.add_dependency("prism", ">= 0.18.0", "< 0.22")

It looks like the original reason for this was to prevent a breaking change from affecting RBI in 2abfa69. In practice, this works well in the moment, but when applications need to specify a new version of Prism, they can't (because RBI is being strict for seemingly no reason).

This seems to have caused more strain on maintainers of RBI to release a new version for every version bump of a dependency, and that doesn't make sense. Can we relax this dependency to either:

  • Remove the upper-bound entirely, and expect maintainers of Prism to fix unintended breaking changes with subsequent releases.
  • Restrict to the next major version (1.0), and trust Prism to introduce breaking changes intentionally with a major version bump.

I'm asking because I got bit by this while testing a patch on Packwerk that's attempting to use Prism.

Produce `.rbs` files from `.rbi` files

(Moving from Shopify/rbs_parser#19)

It would be nice for a tool to exist that could translate Sorbet's .rbi files into best-effort .rbs files.

An example use-case is a gem author who wishes to develop with Sorbet and expose .rbs files as well as .rbi to their users.

In general, this could be quite useful in moving the Ruby community forward together around types, by leveraging existing production-grade tools (Sorbet) to support the long-term health of the ecosystem.

According to @Morriar , an easy way to do this might be write a new printer that would output RBS rather than RBI.

Is this a tool you might be willing to build, or to build the underlying API for?

(I might be willing to produce an rbs2rbi CLI package on top of the the API if you like, but I don't think I'd be able to maintain the printer).

Thanks!

Define Slack Channels

Define Slack Channels

TL;DR

Associating a team's Slack channel(s) to their services and components makes it easier to find the right people to answer questions about those services. Please add your team's Slack channel(s) to your service.yml file, old/archived channel names must be updated.

Define your team's Slack channel(s) in your service.yml file as follows:

slack_channels:
- your-slack-channel

Why is this being asked?

The first value is also used by spy and other services to announce maintenance periods or incidents to service and component owners.

What will happen if it doesn't get done within the expected timeframe?

This is mandatory. If this is not done you won't be able to promote this service to the next tier, and it might be reverted to Tier 4 otherwise.

This doesn't apply to my service. What do I do?

First, leave a comment explaining why it doesn't apply. Then, leave another comment as /not_applicable, and close the issue.
If you change your mind, make sure to comment any reason and reopen the issue. Once you've fixed it, services-db will close the issue for you next day.

I have questions/concerns about this

Please contact the Production Excellence team using Slack at #production-excellence-team.

Your service: rbi/production

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.