diff options
| author | Seba Gamboa <[email protected]> | 2015-09-25 18:01:14 -0300 |
|---|---|---|
| committer | Seba Gamboa <[email protected]> | 2015-09-25 18:01:14 -0300 |
| commit | 3a60c88a3b3dbd334e4769a6283fb90c0495c25b (patch) | |
| tree | de3d8ec187771d6e2d5f42da864c19ee6d69d890 /lib/yard/mruby/handlers/c/source | |
| parent | 82e906d74dcc943d737ced7a6ebfee1e71a74aaf (diff) | |
| download | yard-mruby-3a60c88a3b3dbd334e4769a6283fb90c0495c25b.tar.gz yard-mruby-3a60c88a3b3dbd334e4769a6283fb90c0495c25b.zip | |
Sorting tons of stuff around
Diffstat (limited to 'lib/yard/mruby/handlers/c/source')
| -rw-r--r-- | lib/yard/mruby/handlers/c/source/base.rb | 54 | ||||
| -rw-r--r-- | lib/yard/mruby/handlers/c/source/class_handler.rb | 35 | ||||
| -rw-r--r-- | lib/yard/mruby/handlers/c/source/init_handler.rb | 16 | ||||
| -rw-r--r-- | lib/yard/mruby/handlers/c/source/method_handler.rb | 25 | ||||
| -rw-r--r-- | lib/yard/mruby/handlers/c/source/module_handler.rb | 34 | ||||
| -rw-r--r-- | lib/yard/mruby/handlers/c/source/symbol_handler.rb | 16 |
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 |
