davetron5000 / gli

Make awesome command-line applications the easy way
http://davetron5000.github.io/gli
Apache License 2.0
1.26k stars 102 forks source link

Multiple warnings on require / circular dependency #247

Closed fornellas closed 3 years ago

fornellas commented 8 years ago

It seems a simple require of gli-2.14.0, results in a circular dependency and a lot of warnings.

$ irb -w
>> require 'gli'
/home/fornellas/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/gli-2.14.0/lib/gli/command_support.rb:163: warning: shadowing outer local variable - arguments
/home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55: warning: loading in progress, circular require considered harmful - /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/cgi/util.rb
    from /home/fornellas/.rbenv/versions/2.3.1/bin/irb:11:in  `<main>'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:394:in  `start'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:394:in  `catch'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:395:in  `block in start'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:485:in  `eval_input'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:231:in  `each_top_level_statement'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:231:in  `catch'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:232:in  `block in each_top_level_statement'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:232:in  `loop'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:246:in  `block (2 levels) in each_top_level_statement'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:486:in  `block in eval_input'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:623:in  `signal_status'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:489:in  `block (2 levels) in eval_input'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/context.rb:380:in  `evaluate'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/workspace.rb:87:in  `evaluate'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/workspace.rb:87:in  `eval'
    from (irb):1:in  `irb_binding'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:40:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in  `rescue in require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/gli-2.14.0/lib/gli.rb:19:in  `<top (required)>'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/gli-2.14.0/lib/gli/commands/help.rb:1:in  `<top (required)>'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/erb.rb:15:in  `<top (required)>'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/cgi/util.rb:2:in  `<top (required)>'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/cgi.rb:294:in  `<top (required)>'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/cgi/cookie.rb:2:in  `<top (required)>'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
/home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55: warning: loading in progress, circular require considered harmful - /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/cgi/util.rb
    from /home/fornellas/.rbenv/versions/2.3.1/bin/irb:11:in  `<main>'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:394:in  `start'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:394:in  `catch'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:395:in  `block in start'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:485:in  `eval_input'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:231:in  `each_top_level_statement'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:231:in  `catch'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:232:in  `block in each_top_level_statement'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:232:in  `loop'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:246:in  `block (2 levels) in each_top_level_statement'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:486:in  `block in eval_input'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:623:in  `signal_status'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:489:in  `block (2 levels) in eval_input'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/context.rb:380:in  `evaluate'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/workspace.rb:87:in  `evaluate'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/workspace.rb:87:in  `eval'
    from (irb):1:in  `irb_binding'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:40:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in  `rescue in require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/gli-2.14.0/lib/gli.rb:19:in  `<top (required)>'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/gli-2.14.0/lib/gli/commands/help.rb:1:in  `<top (required)>'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/erb.rb:15:in  `<top (required)>'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/cgi/util.rb:2:in  `<top (required)>'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/cgi.rb:295:in  `<top (required)>'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
/home/fornellas/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/gli-2.14.0/lib/gli/commands/help_modules/text_wrapper.rb:48: warning: character class has duplicated range: /[\n\s]*\Z/
/home/fornellas/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/gli-2.14.0/lib/gli/commands/help_modules/global_help_format.rb:14: warning: assigned but unused variable - program_desc
/home/fornellas/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/gli-2.14.0/lib/gli/commands/help_modules/global_help_format.rb:28: warning: assigned but unused variable - commands
/home/fornellas/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/gli-2.14.0/lib/gli/commands/help_modules/global_help_format.rb:30: warning: assigned but unused variable - global_option_descriptions
/home/fornellas/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/gli-2.14.0/lib/gli/commands/help_modules/command_help_format.rb:16: warning: assigned but unused variable - command_wrapper
/home/fornellas/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/gli-2.14.0/lib/gli/commands/help_modules/command_help_format.rb:17: warning: assigned but unused variable - wrapper
/home/fornellas/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/gli-2.14.0/lib/gli/commands/help_modules/command_help_format.rb:19: warning: assigned but unused variable - options_description
/home/fornellas/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/gli-2.14.0/lib/gli/commands/help_modules/command_help_format.rb:20: warning: assigned but unused variable - commands_description
/home/fornellas/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/gli-2.14.0/lib/gli/commands/help_modules/command_help_format.rb:22: warning: assigned but unused variable - synopses
/home/fornellas/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/gli-2.14.0/lib/gli/commands/help_modules/full_synopsis_formatter.rb:29: warning: assigned but unused variable - sub_options_doc
/home/fornellas/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/gli-2.14.0/lib/gli/commands/help_modules/full_synopsis_formatter.rb:92: warning: assigned but unused variable - synopses
/home/fornellas/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/gli-2.14.0/lib/gli/commands/compound_command.rb:16: warning: shadowing outer local variable - name
/home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55: warning: loading in progress, circular require considered harmful - /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/gli-2.14.0/lib/gli.rb
    from /home/fornellas/.rbenv/versions/2.3.1/bin/irb:11:in  `<main>'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:394:in  `start'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:394:in  `catch'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:395:in  `block in start'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:485:in  `eval_input'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:231:in  `each_top_level_statement'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:231:in  `catch'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:232:in  `block in each_top_level_statement'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:232:in  `loop'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:246:in  `block (2 levels) in each_top_level_statement'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:486:in  `block in eval_input'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:623:in  `signal_status'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:489:in  `block (2 levels) in eval_input'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/context.rb:380:in  `evaluate'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/workspace.rb:87:in  `evaluate'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/workspace.rb:87:in  `eval'
    from (irb):1:in  `irb_binding'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:40:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in  `rescue in require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/gli-2.14.0/lib/gli.rb:21:in  `<top (required)>'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/gli-2.14.0/lib/gli/commands/initconfig.rb:1:in  `<top (required)>'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
    from /home/fornellas/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
/home/fornellas/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/gli-2.14.0/lib/gli/commands/doc.rb:145: warning: assigned but unused variable - ex
=> true
>> 
davetron5000 commented 8 years ago

Some of these are gonna be hard to remove, as the assertion of some of the unused variables is wrong. Many are used in an ERB template, but I guess -w can't see that? Is there a better way of doing that?

fornellas commented 8 years ago

Removing the cyclic require at lib/gli/commands/initconfig.rb seems to solve half of them. I can look into working on a pull request, for this, and other cases, if you are willing to consider a merge.

davetron5000 commented 8 years ago

Yes, please do! I doubt that circular dependency was intentional, and the lib has good test coverage.

davetron5000 commented 3 years ago

Closing as old. initconfig.rb has moved and I'm not sure this exists as a problem. Please re-open if you still see this problem