tmm1 / ripper-tags

fast, accurate ctags generator for ruby source code using Ripper
MIT License
550 stars 43 forks source link

key not found: :name (KeyError) in emacs formatter #115

Closed Nowaker closed 7 months ago

Nowaker commented 7 months ago

Getting this error:

% ripper-tags -f TAGS -R --force --extra=q $(bundle show --paths)
/home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/emacs_formatter.rb:72:in `fetch': key not found: :name (KeyError)
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/emacs_formatter.rb:72:in `format'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/emacs_formatter.rb:37:in `write'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags.rb:237:in `block (2 levels) in run'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:160:in `block (2 levels) in each_tag'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:159:in `each'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:159:in `block in each_tag'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:66:in `resolve_file'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:61:in `block in resolve_file'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:86:in `block in each_in_directory'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:84:in `each'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:84:in `each_in_directory'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:59:in `resolve_file'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:61:in `block in resolve_file'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:86:in `block in each_in_directory'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:84:in `each'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:84:in `each_in_directory'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:59:in `resolve_file'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:61:in `block in resolve_file'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:86:in `block in each_in_directory'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:84:in `each'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:84:in `each_in_directory'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:59:in `resolve_file'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:99:in `block in each_file'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:112:in `each'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:112:in `each_input_file'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:98:in `each_file'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/data_reader.rb:150:in `each_tag'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags.rb:236:in `block in run'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/emacs_formatter.rb:27:in `block in with_output'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/default_formatter.rb:53:in `block in with_output'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/default_formatter.rb:52:in `open'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/default_formatter.rb:52:in `with_output'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags/emacs_formatter.rb:25:in `with_output'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags.rb:235:in `run'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags.rb:206:in `call'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags.rb:206:in `block in process_args'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags.rb:182:in `block in option_parser'
        from /home/nowaker/.rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/optparse.rb:1153:in `initialize'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags.rb:84:in `new'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags.rb:84:in `option_parser'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/lib/ripper-tags.rb:187:in `process_args'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/gems/ripper-tags-1.0.1/bin/ripper-tags:15:in `<top (required)>'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/bin/ripper-tags:25:in `load'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/bin/ripper-tags:25:in `<main>'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/bin/ruby_executable_hooks:22:in `eval'
        from /home/nowaker/.rvm/gems/ruby-3.3.0/bin/ruby_executable_hooks:22:in `<main>'

It doesn't say which gem or file causes it to fail. I had to use this to identify "broken" gems that ripper-tags can't analyze:

#!/bin/bash

# Get all paths from `bundle show --paths`
paths=$(bundle show --paths)

# Loop through each path and execute `ripper-tags` on it, suppressing standard output
for path in $paths; do
    # Execute ripper-tags and suppress standard output
    ripper-tags -f TAGS -R --force --extra=q "$path" >/dev/null 2>&1

    # Check if ripper-tags succeeded
    if [ $? -ne 0 ]; then
        # Only show error message if ripper-tags failed
        echo "Error: ripper-tags failed for $path"
    fi
    # Continue with the next path even if the current one fails
done

"Broken" gems: