summaryrefslogtreecommitdiffhomepage
path: root/lib/yard/mruby/handlers/c/source
diff options
context:
space:
mode:
Diffstat (limited to 'lib/yard/mruby/handlers/c/source')
-rw-r--r--lib/yard/mruby/handlers/c/source/base.rb54
-rw-r--r--lib/yard/mruby/handlers/c/source/class_handler.rb35
-rw-r--r--lib/yard/mruby/handlers/c/source/init_handler.rb16
-rw-r--r--lib/yard/mruby/handlers/c/source/method_handler.rb25
-rw-r--r--lib/yard/mruby/handlers/c/source/module_handler.rb34
-rw-r--r--lib/yard/mruby/handlers/c/source/symbol_handler.rb16
6 files changed, 180 insertions, 0 deletions
diff --git a/lib/yard/mruby/handlers/c/source/base.rb b/lib/yard/mruby/handlers/c/source/base.rb
new file mode 100644
index 0000000..268ef9f
--- /dev/null
+++ b/lib/yard/mruby/handlers/c/source/base.rb
@@ -0,0 +1,54 @@
+module YARD::MRuby::Handlers
+ module C
+ module Source
+ class Base < YARD::Handlers::C::Base
+
+ DEFAULT_NAMESPACES = {
+ # 'mrb->top_self' => '',
+ 'object_class' => 'Object',
+ 'class_class' => 'Class',
+ 'module_class' => 'Module',
+ 'proc_class' => 'Proc',
+ 'string_class' => 'String',
+ 'array_class' => 'Array',
+ 'hash_class' => 'Hash',
+ 'float_class' => 'Float',
+ 'fixnum_class' => 'Fixnum',
+ 'true_class' => 'TrueClass',
+ 'false_class' => 'FalseClass',
+ 'nil_class' => 'NilClass',
+ 'symbol_class' => 'Symbol',
+ 'kernel_module' => 'Kernel'
+ }
+
+ def namespace_for_variable(var)
+ DEFAULT_NAMESPACES[ var[/^\w+->(\w+)$/, 1] ] || super
+ end
+
+ def handle_class(var_name, class_name, parent, stmt, in_module = nil)
+ object = super(var_name, class_name, parent, in_module)
+
+ if stmt.comments
+ register_docstring(object, stmt.comments.source, stmt)
+ end
+
+ object
+ end
+
+ def handle_module(var_name, module_name, stmt, in_module = nil)
+ object = super(var_name, module_name, in_module)
+
+ if stmt.comments
+ register_docstring(object, stmt.comments.source, stmt)
+ end
+
+ object
+ end
+
+ end
+
+ end
+
+ YARD::Handlers::Processor.register_handler_namespace :source, Source
+ end
+end
diff --git a/lib/yard/mruby/handlers/c/source/class_handler.rb b/lib/yard/mruby/handlers/c/source/class_handler.rb
new file mode 100644
index 0000000..a8f3b84
--- /dev/null
+++ b/lib/yard/mruby/handlers/c/source/class_handler.rb
@@ -0,0 +1,35 @@
+module YARD::MRuby::Handlers::C::Source
+ class ClassHandler < Base
+
+ TOP_LEVEL_CLASS = /([\w]+)\s*=\s*mrb_define_class\s*
+ \(
+ \s*\w+\s*,
+ \s*"(\w+)"\s*,
+ \s*([\w\->]+)\s*
+ \)
+ /mx
+
+ NAMESPACED_CLASS = /([\w]+)\s*=\s*mrb_define_class_under\s*
+ \(
+ \s*\w+\s*,
+ \s*(\w+)\s*,
+ \s*"(\w+)"\s*,
+ \s*([\w\->]+)\s*
+ \)
+ /mx
+
+ handles TOP_LEVEL_CLASS
+ handles NAMESPACED_CLASS
+
+ statement_class BodyStatement
+
+ process do
+ statement.source.scan(TOP_LEVEL_CLASS) do |var_name, class_name, parent|
+ handle_class(var_name, class_name, parent, statement)
+ end
+ statement.source.scan(NAMESPACED_CLASS) do |var_name, in_module, class_name, parent|
+ handle_class(var_name, class_name, parent, statement, in_module)
+ end
+ end
+ end
+end
diff --git a/lib/yard/mruby/handlers/c/source/init_handler.rb b/lib/yard/mruby/handlers/c/source/init_handler.rb
new file mode 100644
index 0000000..43115a0
--- /dev/null
+++ b/lib/yard/mruby/handlers/c/source/init_handler.rb
@@ -0,0 +1,16 @@
+module YARD::MRuby::Handlers::C::Source
+ class InitHandler < Base
+ MATCH1 = /mrb_\w+_gem_init\s*\(/mx
+ MATCH2 = /mrb_init_\w\s*\(/mx
+
+ handles MATCH1
+ handles MATCH2
+ statement_class ToplevelStatement
+
+ process do
+ parse_block
+ end
+
+ end
+end
+
diff --git a/lib/yard/mruby/handlers/c/source/method_handler.rb b/lib/yard/mruby/handlers/c/source/method_handler.rb
new file mode 100644
index 0000000..b744f54
--- /dev/null
+++ b/lib/yard/mruby/handlers/c/source/method_handler.rb
@@ -0,0 +1,25 @@
+module YARD::MRuby::Handlers::C::Source
+ class MethodHandler < Base
+ MATCH1 = /mrb_define_(
+ method |
+ singleton_method |
+ module_function
+ )
+ \s*\(
+ \s*\w+\s*,
+ \s*(\w+)\s*,
+ \s*"(\w+)"\s*,
+ \s*(\w+)\s*,
+ /mx
+
+ handles MATCH1
+ statement_class BodyStatement
+
+ process do
+ statement.source.scan(MATCH1) do |type,var_name, name, func_name|
+ handle_method(type, var_name, name, func_name)
+ end
+ end
+
+ end
+end
diff --git a/lib/yard/mruby/handlers/c/source/module_handler.rb b/lib/yard/mruby/handlers/c/source/module_handler.rb
new file mode 100644
index 0000000..587fc3e
--- /dev/null
+++ b/lib/yard/mruby/handlers/c/source/module_handler.rb
@@ -0,0 +1,34 @@
+module YARD::MRuby::Handlers::C::Source
+ class ModuleHandler < Base
+
+ TOP_LEVEL_MODULE = /([\w]+)\s*=\s*mrb_define_module\s*
+ \(
+ \s*\w+\s*,
+ \s*"(\w+)"\s*
+ \)
+ /mx
+
+ NAMESPACED_MODULE = /([\w]+)\s*=\s*mrb_define_module_under\s*
+ \(
+ \s*\w+\s*,
+ \s*(\w+)\s*,
+ \s*"(\w+)"\s*
+ \)
+ /mx
+
+ handles TOP_LEVEL_MODULE
+ handles NAMESPACED_MODULE
+
+ statement_class BodyStatement
+
+ process do
+ statement.source.scan(TOP_LEVEL_MODULE) do |var_name, module_name|
+ handle_module(var_name, module_name, statement)
+ end
+ statement.source.scan(NAMESPACED_MODULE) do |var_name, in_module, module_name|
+ handle_module(var_name, module_name, statement, in_module)
+ end
+ end
+ end
+end
+
diff --git a/lib/yard/mruby/handlers/c/source/symbol_handler.rb b/lib/yard/mruby/handlers/c/source/symbol_handler.rb
new file mode 100644
index 0000000..a1e3caa
--- /dev/null
+++ b/lib/yard/mruby/handlers/c/source/symbol_handler.rb
@@ -0,0 +1,16 @@
+module YARD::MRuby::Handlers::C::Source
+ # Keeps track of function bodies for symbol lookup during MRuby method declarations
+ class SymbolHandler < Base
+
+ MATCH = /
+ mrb_value\s*(\w+)\s*\(\s*mrb_state\s*\*\s*\w+,\s*mrb_value\s*\w+\s*\)
+ /mx
+
+ handles MATCH
+ statement_class ToplevelStatement
+
+ process do
+ symbols[statement.source[MATCH, 1]] = statement
+ end
+ end
+end