Project

General

Profile

Feature #13922

Consider showing warning messages about same-named aliases - either directly or perhaps via the "did you mean gem"

Added by shevegen (Robert A. Heiler) almost 2 years ago. Updated almost 2 years ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:82886]

Description

I file here rather than at https://github.com/yuki24/did_you_mean because I am not sure
if the site by Yuki Nishijima may be appropriate, so I think first ruby core has to
decide on this.

Consider the following code:

#!/usr/bin/ruby -w
# =========================================================================== #
class Foo
  def initialize
    unused_variable_warning = 42
    bar
  end
  def bar
    puts 'hello from bar'
  end; alias bar1 bar
       alias bar2 bar
       alias bar3 bar
       alias bar3 bar

end

Foo.new

The output will be something like:

foo.rb:7: warning: assigned but unused variable - unused_variable_warning
hello from bar

This is all fine. We get a warning, which is good.

My question is: should the same alias name also cause
a warning?

It is probably unimportant because it is an alias to the very same
method anyway, but I was just wondering in general.

In my opinion it may be better to actually also show a warning
similar to unused variables. But I can not say since perhaps
people may prefer to not see any warning - I think that in most
cases, in the above, though, most people may have made a typo
or so. This is actually how I encountered this, I wanted to add
a new alias and noticed that I have had already two other, same
named aliases. It is no big deal but I was only wondering whether
the above behaviour to not show any warning was just an oversight
or whether it is deliberate.

History

Updated by znz (Kazuhiro NISHIYAMA) almost 2 years ago

In following example, ruby -w warns alias_after_def and duplicated_def only, but rubocop warns all combinations.

% cat /tmp/a.rb
#!/usr/bin/ruby -w
class Foo
  def m
  end

  def alias_after_def
  end

  alias alias_after_def m

  alias def_after_alias m

  def def_after_alias
  end

  alias duplicated_alias m
  alias duplicated_alias m

  def duplicated_def
  end

  def duplicated_def
  end
end
% ruby -w /tmp/a.rb
/tmp/a.rb:9: warning: method redefined; discarding old alias_after_def
/tmp/a.rb:6: warning: previous definition of alias_after_def was here
/tmp/a.rb:22: warning: method redefined; discarding old duplicated_def
/tmp/a.rb:19: warning: previous definition of duplicated_def was here
% rubocop /tmp/a.rb
Inspecting 1 file
W

Offenses:

/tmp/a.rb:1:1: W: Script file a.rb doesn't have execute permission.
#!/usr/bin/ruby -w
^^^^^^^^^^^^^^^^^^
/tmp/a.rb:2:1: C: Missing top-level class documentation comment.
class Foo
^^^^^
/tmp/a.rb:3:3: C: Put empty method definitions on a single line.
  def m ...
  ^^^^^
/tmp/a.rb:6:3: C: Put empty method definitions on a single line.
  def alias_after_def ...
  ^^^^^^^^^^^^^^^^^^^
/tmp/a.rb:9:3: W: Method Foo#alias_after_def is defined at both /tmp/a.rb:6 and /tmp/a.rb:9.
  alias alias_after_def m
  ^^^^^
/tmp/a.rb:13:3: W: Method Foo#def_after_alias is defined at both /tmp/a.rb:11 and /tmp/a.rb:13.
  def def_after_alias
  ^^^
/tmp/a.rb:13:3: C: Put empty method definitions on a single line.
  def def_after_alias ...
  ^^^^^^^^^^^^^^^^^^^
/tmp/a.rb:17:3: W: Method Foo#duplicated_alias is defined at both /tmp/a.rb:16 and /tmp/a.rb:17.
  alias duplicated_alias m
  ^^^^^
/tmp/a.rb:19:3: C: Put empty method definitions on a single line.
  def duplicated_def ...
  ^^^^^^^^^^^^^^^^^^
/tmp/a.rb:22:3: W: Method Foo#duplicated_def is defined at both /tmp/a.rb:19 and /tmp/a.rb:22.
  def duplicated_def
  ^^^
/tmp/a.rb:22:3: C: Put empty method definitions on a single line.
  def duplicated_def ...
  ^^^^^^^^^^^^^^^^^^

1 file inspected, 11 offenses detected

Also available in: Atom PDF