summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSeba Gamboa <[email protected]>2015-10-12 14:13:11 -0200
committerSeba Gamboa <[email protected]>2015-10-12 14:13:11 -0200
commit89853c9da5d1274612f28ef8cb3e1ab22501e856 (patch)
tree733ac18fbbd60fd492b65131bfa313015eba9089
parentd2538783741de8681bdd0fa7e7e268bc24eddb4a (diff)
parent4d1b7420a4aaaaa8da14091d95ed007f4efb93ab (diff)
downloadyard-mruby-89853c9da5d1274612f28ef8cb3e1ab22501e856.tar.gz
yard-mruby-89853c9da5d1274612f28ef8cb3e1ab22501e856.zip
Merge pull request #8 from takahashim/typedef_handler
support typedef documentation
-rw-r--r--lib/yard/mruby/code_objects.rb1
-rw-r--r--lib/yard/mruby/code_objects/header_object.rb4
-rw-r--r--lib/yard/mruby/code_objects/typedef_object.rb8
-rw-r--r--lib/yard/mruby/handlers/c/header.rb1
-rw-r--r--lib/yard/mruby/handlers/c/header/typedef_handler.rb31
-rw-r--r--spec/handlers/c/header/typdef_handler_spec.rb23
-rw-r--r--templates/default/header/html/setup.rb8
-rw-r--r--templates/default/header/html/typedef_summary.erb11
8 files changed, 87 insertions, 0 deletions
diff --git a/lib/yard/mruby/code_objects.rb b/lib/yard/mruby/code_objects.rb
index bd41cef..324c1dd 100644
--- a/lib/yard/mruby/code_objects.rb
+++ b/lib/yard/mruby/code_objects.rb
@@ -3,3 +3,4 @@ require_relative 'code_objects/header_base_object'
require_relative 'code_objects/header_object'
require_relative 'code_objects/function_object'
require_relative 'code_objects/define_object'
+require_relative 'code_objects/typedef_object'
diff --git a/lib/yard/mruby/code_objects/header_object.rb b/lib/yard/mruby/code_objects/header_object.rb
index ddfa5d9..2f9e7e4 100644
--- a/lib/yard/mruby/code_objects/header_object.rb
+++ b/lib/yard/mruby/code_objects/header_object.rb
@@ -11,6 +11,10 @@ module YARD::MRuby::CodeObjects
children.find_all {|d| d.is_a?(DefineObject) }
end
+ def typedefs
+ children.find_all {|d| d.is_a?(TypedefObject) }
+ end
+
def path
self.name
end
diff --git a/lib/yard/mruby/code_objects/typedef_object.rb b/lib/yard/mruby/code_objects/typedef_object.rb
new file mode 100644
index 0000000..ce7561b
--- /dev/null
+++ b/lib/yard/mruby/code_objects/typedef_object.rb
@@ -0,0 +1,8 @@
+module YARD::MRuby::CodeObjects
+
+ # A TypedefObject represents a MRuby C API typedef declaration inside a header inside an include directory
+ class TypedefObject < HeaderBaseObject
+ end
+end
+
+
diff --git a/lib/yard/mruby/handlers/c/header.rb b/lib/yard/mruby/handlers/c/header.rb
index 9c955f2..5eff7cb 100644
--- a/lib/yard/mruby/handlers/c/header.rb
+++ b/lib/yard/mruby/handlers/c/header.rb
@@ -2,3 +2,4 @@ require_relative 'header/base'
require_relative 'header/function_handler'
require_relative 'header/define_handler'
require_relative 'header/header_decl_handler'
+require_relative 'header/typedef_handler'
diff --git a/lib/yard/mruby/handlers/c/header/typedef_handler.rb b/lib/yard/mruby/handlers/c/header/typedef_handler.rb
new file mode 100644
index 0000000..b6166f9
--- /dev/null
+++ b/lib/yard/mruby/handlers/c/header/typedef_handler.rb
@@ -0,0 +1,31 @@
+module YARD::MRuby::Handlers::C::Header
+ class TypedefHandler < Base
+ MATCH = /
+ typedef
+ (\s+(\*)?([A-Za-z0-9_\*]+))+
+ ;
+ /mx
+
+
+ handles MATCH
+ statement_class ToplevelStatement
+
+ process do
+ handle_typedef(statement)
+ end
+
+ def handle_typedef(statement)
+ header = self.header(statement.file)
+
+ statement.source.scan(MATCH) do |match|
+ name = match.last
+ register TypedefObject.new(header, name) do |obj|
+ if statement.comments
+ register_docstring(obj, statement.comments.source, statement)
+ end
+ end
+ end
+
+ end
+ end
+end
diff --git a/spec/handlers/c/header/typdef_handler_spec.rb b/spec/handlers/c/header/typdef_handler_spec.rb
new file mode 100644
index 0000000..59391e2
--- /dev/null
+++ b/spec/handlers/c/header/typdef_handler_spec.rb
@@ -0,0 +1,23 @@
+require_relative 'spec_helper'
+
+describe YARD::MRuby::Handlers::C::Header::TypedefHandler do
+ it "should register typedef" do
+ header_line <<-eof
+ typedef const char *mrb_args_format;
+ eof
+
+ expect(Registry.at('mrb_args_format')).not_to be_nil
+ end
+
+ it "should find docstrings attached to typedefs" do
+ header_line <<-eof
+ /**
+ * Format specifiers for \ref mrb_get_args function
+ */
+ typedef const char *mrb_args_format;
+ eof
+
+ define = Registry.at('mrb_args_format')
+ expect(define.docstring).to eq "Format specifiers for \ref mrb_get_args function"
+ end
+end
diff --git a/templates/default/header/html/setup.rb b/templates/default/header/html/setup.rb
index 204f823..7bb0159 100644
--- a/templates/default/header/html/setup.rb
+++ b/templates/default/header/html/setup.rb
@@ -5,6 +5,7 @@ def init
sections :header, :pre_docstring, T('docstring'), :includes,
:function_summary, [:item_summary],
:define_summary, [T('docstring')],
+ :typedef_summary, [T('docstring')],
:function_details_list, [T('function_details')]
end
@@ -22,3 +23,10 @@ def define_listing
@defines = object.defines
@defines
end
+
+def typedef_listing
+ return @typedefs if @typedefs
+
+ @typedefs = object.typedefs
+ @typedefs
+end
diff --git a/templates/default/header/html/typedef_summary.erb b/templates/default/header/html/typedef_summary.erb
new file mode 100644
index 0000000..001ab2d
--- /dev/null
+++ b/templates/default/header/html/typedef_summary.erb
@@ -0,0 +1,11 @@
+<% if typedef_listing.size > 0 %>
+ <h2>Typedef Summary</h2>
+ <dl class="constants">
+ <% typedef_listing.each do |typedef| %>
+ <dt id="<%= anchor_for(typedef) %>" class="<%= typedef.has_tag?(:deprecated) ? 'deprecated' : '' %>"><small>typedef</small> <%= typedef.name %>
+ <%= yieldall :object => typedef %>
+ </dt>
+ <dd><pre class="code"><%#= format_constant typedef.value %></pre></dd>
+ <% end %>
+ </dl>
+<% end %>