summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSeba Gamboa <[email protected]>2015-09-25 18:01:14 -0300
committerSeba Gamboa <[email protected]>2015-09-25 18:01:14 -0300
commit3a60c88a3b3dbd334e4769a6283fb90c0495c25b (patch)
treede3d8ec187771d6e2d5f42da864c19ee6d69d890
parent82e906d74dcc943d737ced7a6ebfee1e71a74aaf (diff)
downloadyard-mruby-3a60c88a3b3dbd334e4769a6283fb90c0495c25b.tar.gz
yard-mruby-3a60c88a3b3dbd334e4769a6283fb90c0495c25b.zip
Sorting tons of stuff around
-rw-r--r--lib/yard/mruby.rb2
-rw-r--r--lib/yard/mruby/code_objects/header_object.rb6
-rw-r--r--lib/yard/mruby/handlers.rb1
-rw-r--r--lib/yard/mruby/handlers/c.rb8
-rw-r--r--lib/yard/mruby/handlers/c/base.rb52
-rw-r--r--lib/yard/mruby/handlers/c/header.rb (renamed from lib/yard/mruby/handlers/header.rb)0
-rw-r--r--lib/yard/mruby/handlers/c/header/base.rb30
-rw-r--r--lib/yard/mruby/handlers/c/header/define_handler.rb (renamed from lib/yard/mruby/handlers/header/define_handler.rb)0
-rw-r--r--lib/yard/mruby/handlers/c/header/function_handler.rb (renamed from lib/yard/mruby/handlers/header/function_handler.rb)5
-rw-r--r--lib/yard/mruby/handlers/c/source.rb7
-rw-r--r--lib/yard/mruby/handlers/c/source/base.rb54
-rw-r--r--lib/yard/mruby/handlers/c/source/class_handler.rb (renamed from lib/yard/mruby/handlers/c/class_handler.rb)2
-rw-r--r--lib/yard/mruby/handlers/c/source/init_handler.rb16
-rw-r--r--lib/yard/mruby/handlers/c/source/method_handler.rb (renamed from lib/yard/mruby/handlers/c/method_handler.rb)2
-rw-r--r--lib/yard/mruby/handlers/c/source/module_handler.rb (renamed from lib/yard/mruby/handlers/c/module_handler.rb)2
-rw-r--r--lib/yard/mruby/handlers/c/source/symbol_handler.rb (renamed from lib/yard/mruby/handlers/c/symbol_handler.rb)2
-rw-r--r--lib/yard/mruby/handlers/header/base.rb28
-rw-r--r--lib/yard/mruby/handlers/header/header_handler.rb0
-rw-r--r--lib/yard/mruby/parser.rb2
-rw-r--r--lib/yard/mruby/parser/c.rb3
-rw-r--r--lib/yard/mruby/parser/c/header_parser.rb (renamed from lib/yard/mruby/parser/header_parser.rb)5
-rw-r--r--lib/yard/mruby/parser/c/parser.rb10
-rw-r--r--lib/yard/mruby/parser/c/source_parser.rb9
-rw-r--r--spec/handlers/c/header/function_handler_spec.rb22
-rw-r--r--spec/handlers/c/header/spec_helper.rb (renamed from spec/handlers/header/spec_helper.rb)0
-rw-r--r--spec/handlers/c/source/class_handler_spec.rb (renamed from spec/handlers/c/class_handler_spec.rb)2
-rw-r--r--spec/handlers/c/source/method_handler_spec.rb (renamed from spec/handlers/c/method_handler_spec.rb)2
-rw-r--r--spec/handlers/c/source/module_handler_spec.rb (renamed from spec/handlers/c/module_handler_spec.rb)2
-rw-r--r--spec/handlers/c/source/spec_helper.rb13
-rw-r--r--spec/handlers/c/spec_helper.rb12
-rw-r--r--spec/handlers/header/function_handler_spec.rb12
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