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 | |
| parent | 82e906d74dcc943d737ced7a6ebfee1e71a74aaf (diff) | |
| download | yard-mruby-3a60c88a3b3dbd334e4769a6283fb90c0495c25b.tar.gz yard-mruby-3a60c88a3b3dbd334e4769a6283fb90c0495c25b.zip | |
Sorting tons of stuff around
31 files changed, 183 insertions, 128 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 diff --git a/spec/handlers/c/header/function_handler_spec.rb b/spec/handlers/c/header/function_handler_spec.rb new file mode 100644 index 0000000..2270584 --- /dev/null +++ b/spec/handlers/c/header/function_handler_spec.rb @@ -0,0 +1,22 @@ +require_relative 'spec_helper' + +describe YARD::MRuby::Handlers::C::Header::FunctionHandler do + it "should register functions" do + header_line <<-eof + MRB_API void mrb_foo( void ); + eof + expect(Registry.at('mrb_foo')).not_to be_nil + + # puts Registry.send(:thread_local_store).inspect + end + + it "should find docstrings attached to functions" do + header_line <<-eof + /* DOCSTRING */ + MRB_API void mrb_foo( void ); + eof + + foo = Registry.at('mrb_foo') + expect(foo.docstring).to eq 'DOCSTRING' + end +end diff --git a/spec/handlers/header/spec_helper.rb b/spec/handlers/c/header/spec_helper.rb index da2b74f..da2b74f 100644 --- a/spec/handlers/header/spec_helper.rb +++ b/spec/handlers/c/header/spec_helper.rb diff --git a/spec/handlers/c/class_handler_spec.rb b/spec/handlers/c/source/class_handler_spec.rb index 9428dd6..bfac3b6 100644 --- a/spec/handlers/c/class_handler_spec.rb +++ b/spec/handlers/c/source/class_handler_spec.rb @@ -1,6 +1,6 @@ require_relative 'spec_helper' -describe YARD::MRuby::Handlers::C::ClassHandler do +describe YARD::MRuby::Handlers::C::Source::ClassHandler do it "should register classes" do parse_init 'cFoo = mrb_define_class(mrb, "Foo", mrb->object_class);' diff --git a/spec/handlers/c/method_handler_spec.rb b/spec/handlers/c/source/method_handler_spec.rb index 31e297d..713e390 100644 --- a/spec/handlers/c/method_handler_spec.rb +++ b/spec/handlers/c/source/method_handler_spec.rb @@ -1,6 +1,6 @@ require_relative 'spec_helper' -describe YARD::MRuby::Handlers::C::MethodHandler do +describe YARD::MRuby::Handlers::C::Source::MethodHandler do it "should register methods" do parse_init <<-eof mFoo = mrb_define_module(mrb, "Foo"); diff --git a/spec/handlers/c/module_handler_spec.rb b/spec/handlers/c/source/module_handler_spec.rb index aedf1a5..fd08ae6 100644 --- a/spec/handlers/c/module_handler_spec.rb +++ b/spec/handlers/c/source/module_handler_spec.rb @@ -1,6 +1,6 @@ require_relative 'spec_helper' -describe YARD::MRuby::Handlers::C::ModuleHandler do +describe YARD::MRuby::Handlers::C::Source::ModuleHandler do it "should register modules" do parse_init 'mFoo = mrb_define_module(mrb, "Foo");' expect(Registry.at('Foo').type).to be :module diff --git a/spec/handlers/c/source/spec_helper.rb b/spec/handlers/c/source/spec_helper.rb new file mode 100644 index 0000000..76844a4 --- /dev/null +++ b/spec/handlers/c/source/spec_helper.rb @@ -0,0 +1,13 @@ +require_relative '../spec_helper' + +def parse(src, file = '(stdin)') + YARD::Registry.clear + parser = YARD::Parser::SourceParser.new(:source) + parser.file = file + parser.parse(StringIO.new(src)) +end + +def parse_init(src) + YARD::Registry.clear + YARD.parse_string("void mrb_foo_gem_init(mrb_state *mrb) {\n#{src}\n}", :source) +end diff --git a/spec/handlers/c/spec_helper.rb b/spec/handlers/c/spec_helper.rb index 9424e3e..935238d 100644 --- a/spec/handlers/c/spec_helper.rb +++ b/spec/handlers/c/spec_helper.rb @@ -1,13 +1 @@ require_relative '../spec_helper' - -def parse(src, file = '(stdin)') - YARD::Registry.clear - parser = YARD::Parser::SourceParser.new(:c) - parser.file = file - parser.parse(StringIO.new(src)) -end - -def parse_init(src) - YARD::Registry.clear - YARD.parse_string("void mrb_foo_gem_init(mrb_state *mrb) {\n#{src}\n}", :c) -end diff --git a/spec/handlers/header/function_handler_spec.rb b/spec/handlers/header/function_handler_spec.rb deleted file mode 100644 index b97abb6..0000000 --- a/spec/handlers/header/function_handler_spec.rb +++ /dev/null @@ -1,12 +0,0 @@ -require_relative 'spec_helper' - -describe YARD::MRuby::Handlers::Header::FunctionHandler do - it "should register functions" do - header_line <<-eof - MRB_API void mrb_foo( void ); - eof - expect(Registry.at('mrb_foo')).not_to be_nil - - # puts Registry.send(:thread_local_store).inspect - end -end |
