summaryrefslogtreecommitdiffhomepage
path: root/lib/yard/mruby
diff options
context:
space:
mode:
authorSeba Gamboa <[email protected]>2015-09-24 12:40:55 -0300
committerSeba Gamboa <[email protected]>2015-09-24 12:40:55 -0300
commit36407e1eb5c274f5e19b0f55114d4c66f5de7753 (patch)
treeebf383d6c8a207884323aec1486a0e4b2fb28b71 /lib/yard/mruby
parent7b633663385725c6665118dc5fc014c26e7ffc04 (diff)
downloadyard-mruby-36407e1eb5c274f5e19b0f55114d4c66f5de7753.tar.gz
yard-mruby-36407e1eb5c274f5e19b0f55114d4c66f5de7753.zip
Move MRuby c Handlers into YARD::MRuby and disable defaults
Diffstat (limited to 'lib/yard/mruby')
-rw-r--r--lib/yard/mruby/handlers.rb1
-rw-r--r--lib/yard/mruby/handlers/c.rb6
-rw-r--r--lib/yard/mruby/handlers/c/base.rb51
-rw-r--r--lib/yard/mruby/handlers/c/class_handler.rb35
-rw-r--r--lib/yard/mruby/handlers/c/method_handler.rb25
-rw-r--r--lib/yard/mruby/handlers/c/module_handler.rb34
-rw-r--r--lib/yard/mruby/handlers/c/symbol_handler.rb16
7 files changed, 168 insertions, 0 deletions
diff --git a/lib/yard/mruby/handlers.rb b/lib/yard/mruby/handlers.rb
index 848d25e..bcd1a5d 100644
--- a/lib/yard/mruby/handlers.rb
+++ b/lib/yard/mruby/handlers.rb
@@ -1 +1,2 @@
+require_relative 'handlers/c'
require_relative 'handlers/header'
diff --git a/lib/yard/mruby/handlers/c.rb b/lib/yard/mruby/handlers/c.rb
new file mode 100644
index 0000000..2f25788
--- /dev/null
+++ b/lib/yard/mruby/handlers/c.rb
@@ -0,0 +1,6 @@
+require_relative 'c/base'
+require_relative 'c/symbol_handler'
+require_relative 'c/class_handler'
+require_relative 'c/module_handler'
+require_relative 'c/method_handler'
+
diff --git a/lib/yard/mruby/handlers/c/base.rb b/lib/yard/mruby/handlers/c/base.rb
new file mode 100644
index 0000000..6f17c37
--- /dev/null
+++ b/lib/yard/mruby/handlers/c/base.rb
@@ -0,0 +1,51 @@
+module YARD::MRuby::Handlers
+ module C
+ 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 :C, C
+end
diff --git a/lib/yard/mruby/handlers/c/class_handler.rb b/lib/yard/mruby/handlers/c/class_handler.rb
new file mode 100644
index 0000000..f0223f0
--- /dev/null
+++ b/lib/yard/mruby/handlers/c/class_handler.rb
@@ -0,0 +1,35 @@
+module YARD::MRuby::Handlers::C
+ 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/method_handler.rb b/lib/yard/mruby/handlers/c/method_handler.rb
new file mode 100644
index 0000000..d60b568
--- /dev/null
+++ b/lib/yard/mruby/handlers/c/method_handler.rb
@@ -0,0 +1,25 @@
+module YARD::MRuby::Handlers::C
+ 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/module_handler.rb b/lib/yard/mruby/handlers/c/module_handler.rb
new file mode 100644
index 0000000..6b38be9
--- /dev/null
+++ b/lib/yard/mruby/handlers/c/module_handler.rb
@@ -0,0 +1,34 @@
+module YARD::MRuby::Handlers::C
+ 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/symbol_handler.rb b/lib/yard/mruby/handlers/c/symbol_handler.rb
new file mode 100644
index 0000000..8f24b93
--- /dev/null
+++ b/lib/yard/mruby/handlers/c/symbol_handler.rb
@@ -0,0 +1,16 @@
+module YARD::MRuby::Handlers::C
+ # 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