From b6b1038c6bc487b0b8f7d1675d02a22a4ee8f4b8 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 29 Dec 2015 08:54:18 +0000 Subject: eval.c: warn block for using * eval.c (ignored_block): warn if a block is given to `using`, which is probably for `Module.new`. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53368 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- eval.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'eval.c') diff --git a/eval.c b/eval.c index f87be390f6..b9fcd86f5c 100644 --- a/eval.c +++ b/eval.c @@ -1273,6 +1273,16 @@ rb_mod_refine(VALUE module, VALUE klass) return refinement; } +static void +ignored_block(VALUE module, const char *klass) +{ + const char *anon = ""; + if (!RTEST(rb_search_class_path(module))) { + anon = ", maybe for Module.new"; + } + rb_warn("%s""using doesn't call the given block""%s.", klass, anon); +} + /* * call-seq: * using(module) -> self @@ -1293,6 +1303,9 @@ mod_using(VALUE self, VALUE module) if (prev_cfp && prev_cfp->self != self) { rb_raise(rb_eRuntimeError, "Module#using is not called on self"); } + if (rb_block_given_p()) { + ignored_block(module, "Module#"); + } rb_using_module(rb_vm_cref_replace_with_duplicated_cref(), module); return self; } @@ -1426,6 +1439,9 @@ top_using(VALUE self, VALUE module) if (CREF_NEXT(cref) || (prev_cfp && rb_vm_frame_method_entry(prev_cfp))) { rb_raise(rb_eRuntimeError, "main.using is permitted only at toplevel"); } + if (rb_block_given_p()) { + ignored_block(module, "main."); + } rb_using_module(rb_vm_cref_replace_with_duplicated_cref(), module); return self; } -- cgit v1.2.3