[#98621] Re: Function getlogin_r()'s protoype] — Bertram Scharpf <lists@...>
FYI,
3 messages
2020/06/02
[#98947] [Ruby master Feature#16986] Anonymous Struct literal — ko1@...
Issue #16986 has been reported by ko1 (Koichi Sasada).
66 messages
2020/06/26
[#98962] [Ruby master Bug#16988] Kernel.load loads file from current directory without '.' in path — misharinn@...
Issue #16988 has been reported by TheSmartnik (Nikita Misharin).
5 messages
2020/06/26
[#98969] [Ruby master Feature#16994] Sets: shorthand for frozen sets of symbols / strings — marcandre-ruby-core@...
Issue #16994 has been reported by marcandre (Marc-Andre Lafortune).
7 messages
2020/06/26
[#100117] [Ruby master Feature#16994] Sets: shorthand for frozen sets of symbols / strings
— matz@...
2020/09/25
Issue #16994 has been updated by matz (Yukihiro Matsumoto).
[ruby-core:98869] [Ruby master Bug#16969] False positive for warning against `public` without arguments inside method
From:
merch-redmine@...
Date:
2020-06-18 15:15:04 UTC
List:
ruby-core #98869
Issue #16969 has been updated by jeremyevans0 (Jeremy Evans).
Status changed from Open to Rejected
No, this actually isn't a false positive. The code is having an affect you don't want, you just don't realize it. Example:
```ruby
class B
end
class A
private
B.send(:public, *[])
def bar
end
public_instance_methods(false) # [:bar]
private_instance_methods(false) # []
end
```
Yes, calling public (or other visibility method such as private/protected) without arguments changes the default visibility in the current scope, even if public was called with a receiver that doesn't match the current scope.
When calling public with arbitrary arguments, you need a guard:
```ruby
unless (meths = Admin::UsersController.protected_instance_methods).empty?
Admin::UsersController.send(:public, *meths)
end
```
So the fact that it warns in your example is not a false positive, it is very much by design. If you want to change the behavior of public and other visibility methods so that such a warning is not necessary, that seems like a useful feature request, though being familiar with the code in question, I'm not sure how it would be implemented.
----------------------------------------
Bug #16969: False positive for warning against `public` without arguments inside method
https://bugs.ruby-lang.org/issues/16969#change-86236
* Author: deivid (David Rodr刕uez)
* Status: Rejected
* Priority: Normal
* ruby -v: ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN
----------------------------------------
Hi!
When running the following code:
```ruby
def setup
# make public so we can test it
Admin::UsersController.send(:public, *Admin::UsersController.protected_instance_methods)
end
```
I'm getting the following warning:
```
warning: calling public without arguments inside a method may not have the intended effect
```
It looks like a false positive to me.
I'm guessing it's a bug in https://bugs.ruby-lang.org/projects/ruby-master/repository/git/revisions/2993b24a1ecc5fa3cc9f140bfd80669c3a3b7b9c.
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>