summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormurphy <murphy@rubychan.de>2010-01-22 03:28:23 +0000
committermurphy <murphy@rubychan.de>2010-01-22 03:28:23 +0000
commitab3e76ace4d6f9df6071d25c788018a7b8852a9c (patch)
tree1325c10ba320b7d7086c16d807b3fb7d2f4dfb91
parentb042c57cedf7461aaad41b953d3e61bcf1ee647a (diff)
downloadcoderay-ab3e76ace4d6f9df6071d25c788018a7b8852a9c.tar.gz
Ruby scanner can't parse complex method definitions (issue #147)
-rw-r--r--test/scanners/ruby/def.expected.raydebug89
-rw-r--r--test/scanners/ruby/def.in.rb89
-rw-r--r--test/scanners/ruby/def.known-issue.yaml2
3 files changed, 180 insertions, 0 deletions
diff --git a/test/scanners/ruby/def.expected.raydebug b/test/scanners/ruby/def.expected.raydebug
new file mode 100644
index 0000000..3438491
--- /dev/null
+++ b/test/scanners/ruby/def.expected.raydebug
@@ -0,0 +1,89 @@
+comment(# simple method definitions)
+
+reserved(def) method(method) ident(param1)operator(,) ident(param2)
+ comment(# code)
+reserved(end)
+
+reserved(def) method(method)operator(()ident(args)operator(,) operator(*)ident(rest)operator(,) operator(&)ident(block)operator(\))
+ comment(# code)
+reserved(end)
+
+reserved(def)
+method(method)operator(()ident(param1)operator(,) ident(param2)operator(\))
+ comment(# code)
+reserved(end)
+
+reserved(def) \
+method(method)operator(()ident(param1)operator(,) ident(param2)operator(\))
+ comment(# code)
+reserved(end)
+
+reserved(def) comment(# comment)
+method(method)operator(()ident(param1)operator(,) ident(param2)operator(\))
+ comment(# code)
+reserved(end)
+
+reserved(def) method([])operator(;)reserved(end)
+reserved(def) method(def)operator(;)reserved(end)
+reserved(def) method(end?)operator(;)reserved(end)
+reserved(def) method(a)operator(()operator(*)operator(\)) reserved(end)
+reserved(def) method(!)operator(;) reserved(end) comment(# Ruby 1.9)
+
+
+comment(# singleton methods)
+
+reserved(def) constant(Class)operator(.)ident(method)
+reserved(end)
+
+reserved(def) pre_constant(self)operator(.)method(method)
+reserved(end)
+
+reserved(def) ident(object)operator(.)method(method)
+reserved(end)
+
+reserved(def) global_variable($~)operator(.)method(method)
+reserved(end)
+
+reserved(def) pre_constant(nil)operator(.)method(method)
+reserved(end)
+reserved(def) pre_constant(true)operator(.)method(method)
+reserved(end)
+reserved(def) pre_constant(false)operator(.)method(method)
+reserved(end)
+reserved(def) pre_constant(__FILE__)operator(.)method(method)
+reserved(end)
+reserved(def) pre_constant(__LINE__)operator(.)method(method)
+reserved(end)
+reserved(def) pre_constant(__ENCODING__)operator(.)method(method)
+reserved(end)
+reserved(def) pre_constant(__ENCODING__)operator(.)method(method)
+reserved(end)
+
+reserved(def) instance_variable(@instance_variable)operator(.)method(method)
+reserved(end)
+
+reserved(def) instance_variable(@class_variable)operator(.)method(method)
+reserved(end)
+
+reserved(def) operator(()constant(Module)operator(::)constant(Class)operator(\))operator(.)method(method)
+reserved(end)
+
+reserved(def) operator(()ident(complex)operator(.)ident(expression)operator(\))operator(.)method(method)
+reserved(end)
+
+reserved(def) operator(()ident(complex)operator(.)ident(expression) operator(+) ident(another)operator(()ident(complex)operator(()ident(expression)operator(\))operator(\))operator(\))operator(.)method(method)
+reserved(end)
+
+
+comment(# crazy)
+
+reserved(def) operator(()reserved(class) class(Foo)
+ reserved(def) method(initialize)operator(()ident(args)operator(\))
+ reserved(def) method(yet_another_method)operator(;) reserved(end)
+ reserved(end)
+reserved(end)operator(\))operator(.)method(method)operator(()ident(args)operator(,) operator(*)ident(rest)operator(,) operator(&)ident(block)operator(\))
+reserved(end)
+
+comment(# wrong)
+reserved(def) ident(foo)operator(.)ident(bar)error(.)ident(quux)
+reserved(end)
diff --git a/test/scanners/ruby/def.in.rb b/test/scanners/ruby/def.in.rb
new file mode 100644
index 0000000..934dba1
--- /dev/null
+++ b/test/scanners/ruby/def.in.rb
@@ -0,0 +1,89 @@
+# simple method definitions
+
+def method param1, param2
+ # code
+end
+
+def method(args, *rest, &block)
+ # code
+end
+
+def
+method(param1, param2)
+ # code
+end
+
+def \
+method(param1, param2)
+ # code
+end
+
+def # comment
+method(param1, param2)
+ # code
+end
+
+def [];end
+def def;end
+def end?;end
+def a(*) end
+def !; end # Ruby 1.9
+
+
+# singleton methods
+
+def Class.method
+end
+
+def self.method
+end
+
+def object.method
+end
+
+def $~.method
+end
+
+def nil.method
+end
+def true.method
+end
+def false.method
+end
+def __FILE__.method
+end
+def __LINE__.method
+end
+def __ENCODING__.method
+end
+def __ENCODING__.method
+end
+
+def @instance_variable.method
+end
+
+def @class_variable.method
+end
+
+def (Module::Class).method
+end
+
+def (complex.expression).method
+end
+
+def (complex.expression + another(complex(expression))).method
+end
+
+
+# crazy
+
+def (class Foo
+ def initialize(args)
+ def yet_another_method; end
+ end
+end).method(args, *rest, &block)
+end
+
+# wrong
+def foo.bar.quux
+end
diff --git a/test/scanners/ruby/def.known-issue.yaml b/test/scanners/ruby/def.known-issue.yaml
new file mode 100644
index 0000000..b010a88
--- /dev/null
+++ b/test/scanners/ruby/def.known-issue.yaml
@@ -0,0 +1,2 @@
+description: Ruby scanner can't parse complex method definitions.
+ticket_url: http://redmine.rubychan.de/issues/147 \ No newline at end of file