From 2bf2f48a0be06e57d596968358ff60f57e488b0d Mon Sep 17 00:00:00 2001 From: ryan Date: Sat, 8 Jul 2006 23:17:53 +0000 Subject: cached rdoc diagrams, private rdoc comments, minor clarifications in debug.rb and pp.rb git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@10491 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 20 ++++++++++++++++++++ lib/debug.rb | 2 +- lib/irb/completion.rb | 5 +++-- lib/pp.rb | 2 +- lib/rdoc/diagram.rb | 22 ++++++++++++---------- lib/rdoc/generators/html_generator.rb | 15 +++++++++++---- lib/rdoc/parsers/parse_c.rb | 7 +++++++ 7 files changed, 55 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8836c9cd57..444029cc75 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,23 @@ +Sun Jul 9 07:58:48 2006 Ryan Davis + + * lib/rdoc/parsers/parse_f95.rb: massive overhaul from Yasuhiro + Morikawa including new file suffixes, function support, public + variables and constants, derived-types, defined operators and + assignments, namelists, and subroutine and function + arguments. Truly massive. + + * lib/rdoc/diagram.rb: diagrams are now cached. + + * lib/irb/completion.rb: fixed a crasher when completing against + an unnamed class/module. + + * lib/rdoc/parsers/parse_c.rb: private comment (--/++) support in + C-file rdoc. + + * lib/debug.rb: minor clarification in help. + + * lib/pp.rb: minor clarification on exception. + Sun Jul 9 00:54:11 2006 Nobuyoshi Nakada * eval.c (next_jump): deal with destination of next. diff --git a/lib/debug.rb b/lib/debug.rb index 8b522821a5..9ae119f8fb 100644 --- a/lib/debug.rb +++ b/lib/debug.rb @@ -551,7 +551,7 @@ Commands b[reak] [class.] set breakpoint to some position wat[ch] set watchpoint to some expression - cat[ch] set catchpoint to an exception + cat[ch] (|off) set catchpoint to an exception b[reak] list breakpoints cat[ch] show catchpoint del[ete][ nnn] delete some or all breakpoints diff --git a/lib/irb/completion.rb b/lib/irb/completion.rb index e51a92adc1..ac227fee90 100644 --- a/lib/irb/completion.rb +++ b/lib/irb/completion.rb @@ -137,9 +137,10 @@ module IRB else # func1.func2 candidates = [] + name = m.name rescue "" ObjectSpace.each_object(Module){|m| - next if m.name != "IRB::Context" and - /^(IRB|SLex|RubyLex|RubyToken)/ =~ m.name + next if name != "IRB::Context" and + /^(IRB|SLex|RubyLex|RubyToken)/ =~ name candidates.concat m.instance_methods(false) } candidates.sort! diff --git a/lib/pp.rb b/lib/pp.rb index 266949e22b..bc61484148 100644 --- a/lib/pp.rb +++ b/lib/pp.rb @@ -318,7 +318,7 @@ class PP < PrettyPrint # implement #pretty_print, or a RuntimeError will be raised. def pretty_print_inspect if /\(PP::ObjectMixin\)#/ =~ method(:pretty_print).inspect - raise "pretty_print is not overridden." + raise "pretty_print is not overridden for #{self.class}" end PP.singleline_pp(self, '') end diff --git a/lib/rdoc/diagram.rb b/lib/rdoc/diagram.rb index bbaa704365..9fdc49c02e 100644 --- a/lib/rdoc/diagram.rb +++ b/lib/rdoc/diagram.rb @@ -38,6 +38,7 @@ module RDoc @options = options @counter = 0 File.makedirs(DOT_PATH) + @diagram_cache = {} end # Draw the diagrams. We traverse the files, drawing a diagram for @@ -55,7 +56,6 @@ module RDoc @local_names = find_names(i) @global_names = [] @global_graph = graph = DOT::DOTDigraph.new('name' => 'TopLevel', - 'label' => i.file_absolute_name, 'fontname' => FONT, 'fontsize' => '8', 'bgcolor' => 'lightcyan1', @@ -73,7 +73,7 @@ module RDoc end add_classes(i, graph, i.file_relative_name) - i.diagram = convert_to_png("f_#{file_count}", graph, i.name) + i.diagram = convert_to_png("f_#{file_count}", graph) # now go through and document each top level class and # module independently @@ -83,7 +83,6 @@ module RDoc @global_names = [] @global_graph = graph = DOT::DOTDigraph.new('name' => 'TopLevel', - 'label' => i.full_name, 'fontname' => FONT, 'fontsize' => '8', 'bgcolor' => 'lightcyan1', @@ -95,8 +94,7 @@ module RDoc 'fontsize' => 8) draw_module(mod, graph, true) mod.diagram = convert_to_png("m_#{file_count}_#{count}", - graph, - "Module: #{mod.name}") + graph) end end $stderr.puts unless @options.quiet @@ -280,7 +278,9 @@ module RDoc end - def convert_to_png(file_base, graph, name) + def convert_to_png(file_base, graph) + str = graph.to_s + return @diagram_cache[str] if @diagram_cache[str] op_type = Options.instance.image_format dotfile = File.join(DOT_PATH, file_base) src = dotfile + ".dot" @@ -292,7 +292,7 @@ module RDoc end File.open(src, 'w+' ) do |f| - f << graph.to_s << "\n" + f << str << "\n" end system "dot", "-T#{op_type}", src, "-o", dot @@ -300,7 +300,9 @@ module RDoc # Now construct the imagemap wrapper around # that png - return wrap_in_image_map(src, dot, name) + ret = wrap_in_image_map(src, dot) + @diagram_cache[str] = ret + return ret end # Extract the client-side image map from dot, and use it @@ -308,7 +310,7 @@ module RDoc # .. combination, suitable for inclusion on # the page - def wrap_in_image_map(src, dot, name) + def wrap_in_image_map(src, dot) res = %{\n} dot_map = `dot -Tismap #{src}` dot_map.each do |area| @@ -326,7 +328,7 @@ module RDoc res << "\n" # map_file = src.sub(/.dot/, '.map') # system("dot -Timap #{src} -o #{map_file}") - res << %{#{name}} + res << %{#{dot}} return res end end diff --git a/lib/rdoc/generators/html_generator.rb b/lib/rdoc/generators/html_generator.rb index be79226c8e..1f9b808e8d 100644 --- a/lib/rdoc/generators/html_generator.rb +++ b/lib/rdoc/generators/html_generator.rb @@ -114,7 +114,12 @@ module Generators lookup = name end - if /([A-Z].*)[.\#](.*)/ =~ lookup + # Find class, module, or method in class or module. + if /([A-Z]\w*)[.\#](\w+[!?=]?)/ =~ lookup + container = $1 + method = $2 + ref = @context.find_symbol(container, method) + elsif /([A-Za-z]\w*)[.\#](\w+(\([\.\w+\*\/\+\-\=\<\>]+\))?)/ =~ lookup container = $1 method = $2 ref = @context.find_symbol(container, method) @@ -206,12 +211,14 @@ module Generators unless defined? @markup @markup = SM::SimpleMarkup.new - # class names, variable names, file names, or instance variables + # class names, variable names, or instance variables @markup.add_special(/( - \b([A-Z]\w*(::\w+)*[.\#]\w+) # A::B.meth + \w+(::\w+)*[.\#]\w+(\([\.\w+\*\/\+\-\=\<\>]+\))? # A::B.meth(**) (for operator in Fortran95) + | \#\w+(\([.\w\*\/\+\-\=\<\>]+\))? # meth(**) (for operator in Fortran95) + | \b([A-Z]\w*(::\w+)*[.\#]\w+) # A::B.meth | \b([A-Z]\w+(::\w+)*) # A::B.. | \#\w+[!?=]? # #meth_name - | \b\w+([_\/\.]+\w+)+[!?=]? # meth_name + | \b\w+([_\/\.]+\w+)*[!?=]? # meth_name )/x, :CROSSREF) diff --git a/lib/rdoc/parsers/parse_c.rb b/lib/rdoc/parsers/parse_c.rb index 89d36c6c50..e43fb00829 100644 --- a/lib/rdoc/parsers/parse_c.rb +++ b/lib/rdoc/parsers/parse_c.rb @@ -212,6 +212,11 @@ module RDoc $stderr.flush end + def remove_private_comments(comment) + comment.gsub!(/\/?\*--(.*?)\/?\*\+\+/m, '') + comment.sub!(/\/?\*--.*/m, '') + end + # remove lines that are commented out that might otherwise get # picked up when scanning for classes and methods @@ -552,6 +557,8 @@ module RDoc comment, params = $1, $2 body_text = $& + remove_private_comments(comment) if comment + # see if we can find the whole body re = Regexp.escape(body_text) + '[^(]*^\{.*?^\}' -- cgit v1.2.3