diff options
| author | Seba Gamboa <[email protected]> | 2015-09-24 12:40:55 -0300 |
|---|---|---|
| committer | Seba Gamboa <[email protected]> | 2015-09-24 12:40:55 -0300 |
| commit | 36407e1eb5c274f5e19b0f55114d4c66f5de7753 (patch) | |
| tree | ebf383d6c8a207884323aec1486a0e4b2fb28b71 /lib/yard/mruby | |
| parent | 7b633663385725c6665118dc5fc014c26e7ffc04 (diff) | |
| download | yard-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.rb | 1 | ||||
| -rw-r--r-- | lib/yard/mruby/handlers/c.rb | 6 | ||||
| -rw-r--r-- | lib/yard/mruby/handlers/c/base.rb | 51 | ||||
| -rw-r--r-- | lib/yard/mruby/handlers/c/class_handler.rb | 35 | ||||
| -rw-r--r-- | lib/yard/mruby/handlers/c/method_handler.rb | 25 | ||||
| -rw-r--r-- | lib/yard/mruby/handlers/c/module_handler.rb | 34 | ||||
| -rw-r--r-- | lib/yard/mruby/handlers/c/symbol_handler.rb | 16 |
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 |
