diff options
Diffstat (limited to 'lib')
23 files changed, 145 insertions, 101 deletions
diff --git a/lib/yard/mruby.rb b/lib/yard/mruby.rb index 194c9e7..8d78182 100644 --- a/lib/yard/mruby.rb +++ b/lib/yard/mruby.rb @@ -1,3 +1,5 @@ +require 'yard' + require_relative "mruby/version" require_relative "mruby/code_objects" require_relative "mruby/parser" diff --git a/lib/yard/mruby/code_objects/header_object.rb b/lib/yard/mruby/code_objects/header_object.rb index 59f67a3..2e70230 100644 --- a/lib/yard/mruby/code_objects/header_object.rb +++ b/lib/yard/mruby/code_objects/header_object.rb @@ -3,12 +3,6 @@ module YARD::MRuby::CodeObjects # A HeaderObject represents a MRuby header inside an include directory # It groups C Functions and define macros. class HeaderObject < YARD::CodeObjects::NamespaceObject - def initialize(*args) - super - - raise "Invalid Header" unless self.title.match(/\.h$/) - end - def functions children.find_all {|d| d.is_a?(FunctionObject) } end diff --git a/lib/yard/mruby/handlers.rb b/lib/yard/mruby/handlers.rb index bcd1a5d..1ae677a 100644 --- a/lib/yard/mruby/handlers.rb +++ b/lib/yard/mruby/handlers.rb @@ -1,2 +1 @@ require_relative 'handlers/c' -require_relative 'handlers/header' diff --git a/lib/yard/mruby/handlers/c.rb b/lib/yard/mruby/handlers/c.rb index 2f25788..766989a 100644 --- a/lib/yard/mruby/handlers/c.rb +++ b/lib/yard/mruby/handlers/c.rb @@ -1,6 +1,4 @@ -require_relative 'c/base' -require_relative 'c/symbol_handler' -require_relative 'c/class_handler' -require_relative 'c/module_handler' -require_relative 'c/method_handler' +require_relative 'c/source' +require_relative 'c/header' +YARD::Handlers::Processor.namespace_for_handler.delete(:c) diff --git a/lib/yard/mruby/handlers/c/base.rb b/lib/yard/mruby/handlers/c/base.rb deleted file mode 100644 index 6bb2436..0000000 --- a/lib/yard/mruby/handlers/c/base.rb +++ /dev/null @@ -1,52 +0,0 @@ -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/header.rb b/lib/yard/mruby/handlers/c/header.rb index 590386f..590386f 100644 --- a/lib/yard/mruby/handlers/header.rb +++ b/lib/yard/mruby/handlers/c/header.rb diff --git a/lib/yard/mruby/handlers/c/header/base.rb b/lib/yard/mruby/handlers/c/header/base.rb new file mode 100644 index 0000000..f0771ca --- /dev/null +++ b/lib/yard/mruby/handlers/c/header/base.rb @@ -0,0 +1,30 @@ +module YARD::MRuby::Handlers + module C + module Header + class Base < YARD::Handlers::C::Base + include YARD::MRuby::CodeObjects + + def header(path) + # Remove include prefix + path = path.gsub(/^.*include\//,'') + + headers[path] ||= begin + header = HeaderObject.new(HEADERS_ROOT, path) + register header + header + end + + + end + + def headers + globals.mruby_headers ||= {} + end + + end + + end + + YARD::Handlers::Processor.register_handler_namespace :header, Header + end +end diff --git a/lib/yard/mruby/handlers/header/define_handler.rb b/lib/yard/mruby/handlers/c/header/define_handler.rb index e69de29..e69de29 100644 --- a/lib/yard/mruby/handlers/header/define_handler.rb +++ b/lib/yard/mruby/handlers/c/header/define_handler.rb diff --git a/lib/yard/mruby/handlers/header/function_handler.rb b/lib/yard/mruby/handlers/c/header/function_handler.rb index 9b98258..6bdb8a6 100644 --- a/lib/yard/mruby/handlers/header/function_handler.rb +++ b/lib/yard/mruby/handlers/c/header/function_handler.rb @@ -1,4 +1,4 @@ -module YARD::MRuby::Handlers::Header +module YARD::MRuby::Handlers::C::Header class FunctionHandler < Base MATCH = / MRB_(API|INLINE)\s+((\w+\s+)+)(\w+)\s*\( @@ -16,6 +16,9 @@ module YARD::MRuby::Handlers::Header statement.source.scan(MATCH) do |type, prefix, _, name, *args| register FunctionObject.new(header, name) do |obj| + if statement.comments + register_docstring(obj, statement.comments.source, statement) + end end end end diff --git a/lib/yard/mruby/handlers/c/source.rb b/lib/yard/mruby/handlers/c/source.rb new file mode 100644 index 0000000..8f2a68c --- /dev/null +++ b/lib/yard/mruby/handlers/c/source.rb @@ -0,0 +1,7 @@ +require_relative 'source/base' +require_relative 'source/init_handler' +require_relative 'source/symbol_handler' +require_relative 'source/class_handler' +require_relative 'source/module_handler' +require_relative 'source/method_handler' + 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/class_handler.rb b/lib/yard/mruby/handlers/c/source/class_handler.rb index f0223f0..a8f3b84 100644 --- a/lib/yard/mruby/handlers/c/class_handler.rb +++ b/lib/yard/mruby/handlers/c/source/class_handler.rb @@ -1,4 +1,4 @@ -module YARD::MRuby::Handlers::C +module YARD::MRuby::Handlers::C::Source class ClassHandler < Base TOP_LEVEL_CLASS = /([\w]+)\s*=\s*mrb_define_class\s* 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/method_handler.rb b/lib/yard/mruby/handlers/c/source/method_handler.rb index d60b568..b744f54 100644 --- a/lib/yard/mruby/handlers/c/method_handler.rb +++ b/lib/yard/mruby/handlers/c/source/method_handler.rb @@ -1,4 +1,4 @@ -module YARD::MRuby::Handlers::C +module YARD::MRuby::Handlers::C::Source class MethodHandler < Base MATCH1 = /mrb_define_( method | diff --git a/lib/yard/mruby/handlers/c/module_handler.rb b/lib/yard/mruby/handlers/c/source/module_handler.rb index 6b38be9..587fc3e 100644 --- a/lib/yard/mruby/handlers/c/module_handler.rb +++ b/lib/yard/mruby/handlers/c/source/module_handler.rb @@ -1,4 +1,4 @@ -module YARD::MRuby::Handlers::C +module YARD::MRuby::Handlers::C::Source class ModuleHandler < Base TOP_LEVEL_MODULE = /([\w]+)\s*=\s*mrb_define_module\s* diff --git a/lib/yard/mruby/handlers/c/symbol_handler.rb b/lib/yard/mruby/handlers/c/source/symbol_handler.rb index 8f24b93..a1e3caa 100644 --- a/lib/yard/mruby/handlers/c/symbol_handler.rb +++ b/lib/yard/mruby/handlers/c/source/symbol_handler.rb @@ -1,4 +1,4 @@ -module YARD::MRuby::Handlers::C +module YARD::MRuby::Handlers::C::Source # Keeps track of function bodies for symbol lookup during MRuby method declarations class SymbolHandler < Base diff --git a/lib/yard/mruby/handlers/header/base.rb b/lib/yard/mruby/handlers/header/base.rb deleted file mode 100644 index 1f3f16e..0000000 --- a/lib/yard/mruby/handlers/header/base.rb +++ /dev/null @@ -1,28 +0,0 @@ -module YARD::MRuby::Handlers - module Header - class Base < YARD::Handlers::C::Base - include YARD::MRuby::CodeObjects - - def header(path) - # Remove include prefix - path = path.gsub(/^.*include\//,'') - - headers[path] ||= begin - header = HeaderObject.new(HEADERS_ROOT, path) - register header - header - end - - - end - - def headers - globals.mruby_headers ||= {} - end - - end - - end - - YARD::Handlers::Processor.register_handler_namespace :header, Header -end diff --git a/lib/yard/mruby/handlers/header/header_handler.rb b/lib/yard/mruby/handlers/header/header_handler.rb deleted file mode 100644 index e69de29..0000000 --- a/lib/yard/mruby/handlers/header/header_handler.rb +++ /dev/null diff --git a/lib/yard/mruby/parser.rb b/lib/yard/mruby/parser.rb index f8a74ac..4c91895 100644 --- a/lib/yard/mruby/parser.rb +++ b/lib/yard/mruby/parser.rb @@ -1 +1 @@ -require_relative 'parser/header_parser' +require_relative 'parser/c' diff --git a/lib/yard/mruby/parser/c.rb b/lib/yard/mruby/parser/c.rb new file mode 100644 index 0000000..4d95fa1 --- /dev/null +++ b/lib/yard/mruby/parser/c.rb @@ -0,0 +1,3 @@ +require_relative 'c/parser' +require_relative 'c/source_parser' +require_relative 'c/header_parser' diff --git a/lib/yard/mruby/parser/header_parser.rb b/lib/yard/mruby/parser/c/header_parser.rb index 6fe4df3..598fe21 100644 --- a/lib/yard/mruby/parser/header_parser.rb +++ b/lib/yard/mruby/parser/c/header_parser.rb @@ -1,6 +1,5 @@ - -module YARD::MRuby::Parser - class HeaderParser < YARD::Parser::C::CParser +module YARD::MRuby::Parser::C + class HeaderParser < Parser end # diff --git a/lib/yard/mruby/parser/c/parser.rb b/lib/yard/mruby/parser/c/parser.rb new file mode 100644 index 0000000..3b6414a --- /dev/null +++ b/lib/yard/mruby/parser/c/parser.rb @@ -0,0 +1,10 @@ +module YARD::MRuby::Parser + module C + class Parser < YARD::Parser::C::CParser + end + + # Disable default C Parser + YARD::Parser::SourceParser.parser_types.delete(:c) + YARD::Parser::SourceParser.parser_type_extensions.delete(:c) + end +end diff --git a/lib/yard/mruby/parser/c/source_parser.rb b/lib/yard/mruby/parser/c/source_parser.rb new file mode 100644 index 0000000..f468dea --- /dev/null +++ b/lib/yard/mruby/parser/c/source_parser.rb @@ -0,0 +1,9 @@ +module YARD::MRuby::Parser::C + class SourceParser < Parser + end + + # + # Register all header files (.h) to be processed with the above HeaderParser + YARD::Parser::SourceParser.register_parser_type :source, SourceParser, 'c' + +end |
