yard 0.8.3 → 0.8.4

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of yard might be problematic. Click here for more details.

Files changed (64) hide show
  1. data/ChangeLog +197 -38
  2. data/LICENSE +1 -1
  3. data/README.md +15 -4
  4. data/docs/GettingStarted.md +6 -6
  5. data/docs/WhatsNew.md +5 -0
  6. data/docs/images/code-objects-class-diagram.png +0 -0
  7. data/docs/images/handlers-class-diagram.png +0 -0
  8. data/docs/images/overview-class-diagram.png +0 -0
  9. data/docs/images/parser-class-diagram.png +0 -0
  10. data/docs/images/tags-class-diagram.png +0 -0
  11. data/lib/yard/autoload.rb +2 -0
  12. data/lib/yard/cli/graph.rb +3 -2
  13. data/lib/yard/cli/server.rb +3 -0
  14. data/lib/yard/cli/yardoc.rb +1 -0
  15. data/lib/yard/code_objects/base.rb +60 -30
  16. data/lib/yard/code_objects/extra_file_object.rb +1 -1
  17. data/lib/yard/code_objects/proxy.rb +1 -0
  18. data/lib/yard/docstring.rb +36 -2
  19. data/lib/yard/docstring_parser.rb +25 -2
  20. data/lib/yard/handlers/base.rb +18 -2
  21. data/lib/yard/handlers/c/handler_methods.rb +1 -1
  22. data/lib/yard/handlers/processor.rb +3 -0
  23. data/lib/yard/handlers/ruby/class_handler.rb +1 -2
  24. data/lib/yard/handlers/ruby/dsl_handler_methods.rb +7 -1
  25. data/lib/yard/handlers/ruby/exception_handler.rb +2 -2
  26. data/lib/yard/handlers/ruby/legacy/class_handler.rb +4 -3
  27. data/lib/yard/handlers/ruby/legacy/exception_handler.rb +2 -2
  28. data/lib/yard/handlers/ruby/legacy/method_handler.rb +4 -4
  29. data/lib/yard/handlers/ruby/legacy/yield_handler.rb +4 -4
  30. data/lib/yard/handlers/ruby/method_handler.rb +6 -6
  31. data/lib/yard/handlers/ruby/struct_handler_methods.rb +4 -4
  32. data/lib/yard/handlers/ruby/yield_handler.rb +4 -4
  33. data/lib/yard/i18n/locale.rb +16 -0
  34. data/lib/yard/parser/ruby/legacy/statement_list.rb +3 -0
  35. data/lib/yard/parser/ruby/ruby_parser.rb +9 -4
  36. data/lib/yard/rubygems/doc_manager.rb +16 -7
  37. data/lib/yard/server/templates/default/fulldoc/html/images/processing.gif +0 -0
  38. data/lib/yard/tags/directives.rb +3 -2
  39. data/lib/yard/tags/overload_tag.rb +1 -1
  40. data/lib/yard/templates/helpers/html_helper.rb +5 -2
  41. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +3 -3
  42. data/lib/yard/version.rb +1 -1
  43. data/spec/cli/server_spec.rb +18 -0
  44. data/spec/code_objects/base_spec.rb +32 -1
  45. data/spec/handlers/base_spec.rb +9 -0
  46. data/spec/handlers/dsl_handler_spec.rb +12 -1
  47. data/spec/handlers/examples/dsl_handler_001.rb.txt +16 -1
  48. data/spec/handlers/examples/visibility_handler_001.rb.txt +5 -0
  49. data/spec/handlers/method_handler_spec.rb +3 -3
  50. data/spec/handlers/processor_spec.rb +12 -1
  51. data/spec/handlers/visibility_handler_spec.rb +5 -0
  52. data/spec/parser/ruby/ruby_parser_spec.rb +13 -0
  53. data/spec/parser/source_parser_spec.rb +38 -1
  54. data/spec/server/doc_server_helper_spec.rb +2 -0
  55. data/spec/tags/directives_spec.rb +8 -1
  56. data/spec/tags/overload_tag_spec.rb +1 -1
  57. data/spec/templates/helpers/html_helper_spec.rb +25 -5
  58. data/templates/default/class/setup.rb +1 -1
  59. data/templates/default/module/html/box_info.erb +1 -1
  60. data/templates/default/tags/html/example.erb +1 -1
  61. data/templates/default/tags/setup.rb +1 -1
  62. data/templates/guide/fulldoc/html/css/style.css +12 -5
  63. data/templates/guide/layout/html/layout.erb +4 -4
  64. metadata +3 -3
@@ -1,5 +1,11 @@
1
1
  module YARD
2
2
  module Handlers
3
+ # Raise this error when a handler should exit before completing.
4
+ # The exception will be silenced, allowing the next handler(s) in the
5
+ # queue to be executed.
6
+ # @since 0.8.4
7
+ class HandlerAborted < ::RuntimeError; end
8
+
3
9
  # Raised during processing phase when a handler needs to perform
4
10
  # an operation on an object's namespace but the namespace could
5
11
  # not be resolved.
@@ -340,6 +346,15 @@ module YARD
340
346
  def globals; parser.globals end
341
347
  def extra_state; parser.extra_state end
342
348
 
349
+ # Aborts a handler by raising {Handlers::HandlerAborted}.
350
+ # An exception will only be logged in debugging mode for
351
+ # this kind of handler exit.
352
+ #
353
+ # @since 0.8.4
354
+ def abort!
355
+ raise Handlers::HandlerAborted
356
+ end
357
+
343
358
  # Executes a given block with specific state values for {#owner},
344
359
  # {#namespace} and {#scope}.
345
360
  #
@@ -473,7 +488,7 @@ module YARD
473
488
  next if object.namespace.is_a?(Proxy)
474
489
  next unless object.namespace.has_tag?(tag)
475
490
  next if object.has_tag?(tag)
476
- object.docstring.add_tag(*object.namespace.tags(tag))
491
+ object.add_tag(*object.namespace.tags(tag))
477
492
  end
478
493
  end
479
494
 
@@ -494,6 +509,7 @@ module YARD
494
509
  # @since 0.8.0
495
510
  def register_visibility(object, visibility = self.visibility)
496
511
  return unless object.respond_to?(:visibility=)
512
+ return if object.is_a?(NamespaceObject)
497
513
  object.visibility = visibility
498
514
  end
499
515
 
@@ -578,4 +594,4 @@ module YARD
578
594
  end
579
595
  end
580
596
  end
581
- end
597
+ end
@@ -45,7 +45,7 @@ module YARD
45
45
  register MethodObject.new(namespace, name, scope) do |obj|
46
46
  register_visibility(obj, visibility)
47
47
  find_method_body(obj, func_name)
48
- obj.docstring.add_tag(Tags::Tag.new(:return, '', 'Boolean')) if name =~ /\?$/
48
+ obj.add_tag(Tags::Tag.new(:return, '', 'Boolean')) if name =~ /\?$/
49
49
  end
50
50
  end
51
51
 
@@ -112,6 +112,9 @@ module YARD
112
112
  find_handlers(stmt).each do |handler|
113
113
  begin
114
114
  handler.new(self, stmt).process
115
+ rescue HandlerAborted => abort
116
+ log.debug "#{handler.to_s} cancelled from #{caller.last}"
117
+ log.debug "\tin file '#{file}':#{stmt.line}:\n\n" + stmt.show + "\n"
115
118
  rescue NamespaceMissingError => missingerr
116
119
  log.warn "The #{missingerr.object.type} #{missingerr.object.path} has not yet been recognized."
117
120
  log.warn "If this class/method is part of your source tree, this will affect your documentation results."
@@ -5,8 +5,8 @@ class YARD::Handlers::Ruby::ClassHandler < YARD::Handlers::Ruby::Base
5
5
  namespace_only
6
6
 
7
7
  process do
8
+ classname = statement[0].source.gsub(/\s/, '')
8
9
  if statement.type == :class
9
- classname = statement[0].source
10
10
  superclass = parse_superclass(statement[1])
11
11
  if superclass == "Struct"
12
12
  is_a_struct = true
@@ -32,7 +32,6 @@ class YARD::Handlers::Ruby::ClassHandler < YARD::Handlers::Ruby::Base
32
32
  if statement[0] == s(:var_ref, s(:kw, "self"))
33
33
  parse_block(statement[1], :namespace => namespace, :scope => :class)
34
34
  else
35
- classname = statement[0].source
36
35
  proxy = Proxy.new(namespace, classname)
37
36
 
38
37
  # Allow constants to reference class names
@@ -14,6 +14,12 @@ module YARD
14
14
 
15
15
  @docstring = statement.comments || ""
16
16
  @docstring = @docstring.join("\n") if @docstring.is_a?(Array)
17
+
18
+ if @docstring =~ /^@!?macro\s+\[[^\]]*attach/
19
+ register_docstring(nil)
20
+ @docstring = ""
21
+ end
22
+
17
23
  if macro = find_attached_macro
18
24
  @docstring += "\n" +
19
25
  macro.expand([caller_method, *call_params], statement.source)
@@ -59,7 +65,7 @@ module YARD
59
65
  Registry.all(:macro).each do |macro|
60
66
  next unless macro.method_object
61
67
  next unless macro.method_object.name.to_s == caller_method.to_s
62
- (namespace.inheritance_tree + [P('Object')]).each do |obj|
68
+ (namespace.inheritance_tree(true) + [P('Object')]).each do |obj|
63
69
  return macro if obj == macro.method_object.namespace
64
70
  end
65
71
  end
@@ -21,6 +21,6 @@ class YARD::Handlers::Ruby::ExceptionHandler < YARD::Handlers::Ruby::Base
21
21
  end
22
22
  end
23
23
 
24
- owner.docstring.add_tag YARD::Tags::Tag.new(:raise, '', klass) if klass
24
+ owner.add_tag YARD::Tags::Tag.new(:raise, '', klass) if klass
25
25
  end
26
- end
26
+ end
@@ -9,12 +9,13 @@ class YARD::Handlers::Ruby::Legacy::ClassHandler < YARD::Handlers::Ruby::Legacy:
9
9
  classname = $1
10
10
  superclass_def = $2
11
11
  superclass = parse_superclass($2)
12
+ classname = classname.gsub(/\s/, '')
12
13
  if superclass == "Struct"
13
14
  is_a_struct = true
14
15
  superclass = struct_superclass_name(superclass_def)
15
16
  create_struct_superclass(superclass, superclass_def)
16
17
  end
17
- undocsuper = $2 && superclass.nil?
18
+ undocsuper = superclass_def && superclass.nil?
18
19
 
19
20
  klass = register ClassObject.new(namespace, classname) do |o|
20
21
  o.superclass = superclass if superclass
@@ -30,8 +31,8 @@ class YARD::Handlers::Ruby::Legacy::ClassHandler < YARD::Handlers::Ruby::Legacy:
30
31
  if undocsuper
31
32
  raise YARD::Parser::UndocumentableError, 'superclass (class was added without superclass)'
32
33
  end
33
- elsif statement.tokens.to_s =~ /^class\s*<<\s*([\w\:]+)/
34
- classname = $1
34
+ elsif statement.tokens.to_s =~ /^class\s*<<\s*([\w\:\s]+)/
35
+ classname = $1.gsub(/\s/, '')
35
36
  proxy = Proxy.new(namespace, classname)
36
37
 
37
38
  # Allow constants to reference class names
@@ -7,6 +7,6 @@ class YARD::Handlers::Ruby::Legacy::ExceptionHandler < YARD::Handlers::Ruby::Leg
7
7
  return if owner.has_tag?(:raise)
8
8
 
9
9
  klass = statement.tokens.to_s[/^raise[\(\s]*(#{NAMESPACEMATCH})\s*(?:\)|,|\s(?:if|unless|until)|;|(?:(?:\.|\:\:)\s*)?new|$)/, 1]
10
- owner.docstring.add_tag YARD::Tags::Tag.new(:raise, '', klass) if klass
10
+ owner.add_tag YARD::Tags::Tag.new(:raise, '', klass) if klass
11
11
  end
12
- end
12
+ end
@@ -38,18 +38,18 @@ class YARD::Handlers::Ruby::Legacy::MethodHandler < YARD::Handlers::Ruby::Legacy
38
38
 
39
39
  if mscope == :instance && meth == "initialize"
40
40
  unless obj.has_tag?(:return)
41
- obj.docstring.add_tag(YARD::Tags::Tag.new(:return,
41
+ obj.add_tag(YARD::Tags::Tag.new(:return,
42
42
  "a new instance of #{namespace.name}", namespace.name.to_s))
43
43
  end
44
44
  elsif mscope == :class && obj.docstring.blank? && %w(inherited included
45
45
  extended method_added method_removed method_undefined).include?(meth)
46
- obj.docstring.add_tag(YARD::Tags::Tag.new(:private, nil))
46
+ obj.add_tag(YARD::Tags::Tag.new(:private, nil))
47
47
  elsif meth.to_s =~ /\?$/
48
48
  if obj.tag(:return) && (obj.tag(:return).types || []).empty?
49
49
  obj.tag(:return).types = ['Boolean']
50
50
  elsif obj.tag(:return).nil?
51
51
  unless obj.tags(:overload).any? {|overload| overload.tag(:return) }
52
- obj.docstring.add_tag(YARD::Tags::Tag.new(:return, "", "Boolean"))
52
+ obj.add_tag(YARD::Tags::Tag.new(:return, "", "Boolean"))
53
53
  end
54
54
  end
55
55
  end
@@ -60,7 +60,7 @@ class YARD::Handlers::Ruby::Legacy::MethodHandler < YARD::Handlers::Ruby::Legacy
60
60
  expected_param = option.name
61
61
  unless obj.tags(:param).find {|x| x.name == expected_param }
62
62
  new_tag = YARD::Tags::Tag.new(:param, "a customizable set of options", "Hash", expected_param)
63
- obj.docstring.add_tag(new_tag)
63
+ obj.add_tag(new_tag)
64
64
  end
65
65
  end
66
66
  end
@@ -12,17 +12,17 @@ class YARD::Handlers::Ruby::Legacy::YieldHandler < YARD::Handlers::Ruby::Legacy:
12
12
  item = item.inspect unless item.is_a?(String)
13
13
  if item == "self"
14
14
  yieldtag.types << '_self'
15
- owner.docstring.add_tag YARD::Tags::Tag.new(:yieldparam,
15
+ owner.add_tag YARD::Tags::Tag.new(:yieldparam,
16
16
  "the object that the method was called on", owner.namespace.path, '_self')
17
17
  elsif item == "super"
18
18
  yieldtag.types << '_super'
19
- owner.docstring.add_tag YARD::Tags::Tag.new(:yieldparam,
19
+ owner.add_tag YARD::Tags::Tag.new(:yieldparam,
20
20
  "the result of the method from the superclass", nil, '_super')
21
21
  else
22
22
  yieldtag.types << item
23
23
  end
24
24
  end
25
25
 
26
- owner.docstring.add_tag(yieldtag) unless yieldtag.types.empty?
26
+ owner.add_tag(yieldtag) unless yieldtag.types.empty?
27
27
  end
28
- end
28
+ end
@@ -29,20 +29,20 @@ class YARD::Handlers::Ruby::MethodHandler < YARD::Handlers::Ruby::Base
29
29
  nobj.aliases.delete(aobj)
30
30
  end if nobj.is_a?(NamespaceObject)
31
31
 
32
- if mscope == :instance && meth == "initialize"
32
+ if obj.constructor?
33
33
  unless obj.has_tag?(:return)
34
- obj.docstring.add_tag(YARD::Tags::Tag.new(:return,
34
+ obj.add_tag(YARD::Tags::Tag.new(:return,
35
35
  "a new instance of #{namespace.name}", namespace.name.to_s))
36
36
  end
37
37
  elsif mscope == :class && obj.docstring.blank? && %w(inherited included
38
38
  extended method_added method_removed method_undefined).include?(meth)
39
- obj.docstring.add_tag(YARD::Tags::Tag.new(:private, nil))
39
+ obj.add_tag(YARD::Tags::Tag.new(:private, nil))
40
40
  elsif meth.to_s =~ /\?$/
41
41
  if obj.tag(:return) && (obj.tag(:return).types || []).empty?
42
42
  obj.tag(:return).types = ['Boolean']
43
43
  elsif obj.tag(:return).nil?
44
44
  unless obj.tags(:overload).any? {|overload| overload.tag(:return) }
45
- obj.docstring.add_tag(YARD::Tags::Tag.new(:return, "", "Boolean"))
45
+ obj.add_tag(YARD::Tags::Tag.new(:return, "", "Boolean"))
46
46
  end
47
47
  end
48
48
  end
@@ -53,7 +53,7 @@ class YARD::Handlers::Ruby::MethodHandler < YARD::Handlers::Ruby::Base
53
53
  expected_param = option.name
54
54
  unless obj.tags(:param).find {|x| x.name == expected_param }
55
55
  new_tag = YARD::Tags::Tag.new(:param, "a customizable set of options", "Hash", expected_param)
56
- obj.docstring.add_tag(new_tag)
56
+ obj.add_tag(new_tag)
57
57
  end
58
58
  end
59
59
  end
@@ -88,4 +88,4 @@ class YARD::Handlers::Ruby::MethodHandler < YARD::Handlers::Ruby::Base
88
88
  "def #{method_name}"
89
89
  end
90
90
  end
91
- end
91
+ end
@@ -63,7 +63,7 @@ module YARD::Handlers::Ruby::StructHandlerMethods
63
63
  return_type = return_type_from_tag(member_tag)
64
64
  getter_doc_text = member_tag ? member_tag.text : "Returns the value of attribute #{member}"
65
65
  new_method.docstring.replace(getter_doc_text)
66
- new_method.docstring.add_tag YARD::Tags::Tag.new(:return, "the current value of #{member}", return_type)
66
+ new_method.add_tag YARD::Tags::Tag.new(:return, "the current value of #{member}", return_type)
67
67
  end
68
68
 
69
69
  # Creates the auto-generated docstring for the setter method of a struct's
@@ -78,8 +78,8 @@ module YARD::Handlers::Ruby::StructHandlerMethods
78
78
  return_type = return_type_from_tag(member_tag)
79
79
  setter_doc_text = member_tag ? member_tag.text : "Sets the attribute #{member}"
80
80
  new_method.docstring.replace(setter_doc_text)
81
- new_method.docstring.add_tag YARD::Tags::Tag.new(:param, "the value to set the attribute #{member} to.", return_type, "value")
82
- new_method.docstring.add_tag YARD::Tags::Tag.new(:return, "the newly set value", return_type)
81
+ new_method.add_tag YARD::Tags::Tag.new(:param, "the value to set the attribute #{member} to.", return_type, "value")
82
+ new_method.add_tag YARD::Tags::Tag.new(:return, "the newly set value", return_type)
83
83
  end
84
84
 
85
85
  # Creates and registers a class object with the given name and superclass name.
@@ -138,4 +138,4 @@ module YARD::Handlers::Ruby::StructHandlerMethods
138
138
  create_reader klass, member if create_member_method?(klass, member, :read)
139
139
  end
140
140
  end
141
- end
141
+ end
@@ -13,11 +13,11 @@ class YARD::Handlers::Ruby::YieldHandler < YARD::Handlers::Ruby::Base
13
13
  statement.jump(:list).children.each do |item|
14
14
  if item == s(:var_ref, s(:kw, "self"))
15
15
  yieldtag.types << '_self'
16
- owner.docstring.add_tag YARD::Tags::Tag.new(:yieldparam,
16
+ owner.add_tag YARD::Tags::Tag.new(:yieldparam,
17
17
  "the object that the method was called on", owner.namespace.path, '_self')
18
18
  elsif item == s(:zsuper)
19
19
  yieldtag.types << '_super'
20
- owner.docstring.add_tag YARD::Tags::Tag.new(:yieldparam,
20
+ owner.add_tag YARD::Tags::Tag.new(:yieldparam,
21
21
  "the result of the method from the superclass", nil, '_super')
22
22
  else
23
23
  yieldtag.types << item.source
@@ -25,6 +25,6 @@ class YARD::Handlers::Ruby::YieldHandler < YARD::Handlers::Ruby::Base
25
25
  end
26
26
  end
27
27
 
28
- owner.docstring.add_tag(yieldtag) unless yieldtag.types.empty?
28
+ owner.add_tag(yieldtag) unless yieldtag.types.empty?
29
29
  end
30
- end
30
+ end
@@ -5,6 +5,22 @@ module YARD
5
5
  #
6
6
  # @since 0.8.2
7
7
  class Locale
8
+ class << self
9
+ # @return [String, nil] the default locale name.
10
+ # @since 0.8.4
11
+ attr_accessor :default
12
+
13
+ undef default
14
+ def default
15
+ @@default ||= nil
16
+ end
17
+
18
+ undef default=
19
+ def default=(locale)
20
+ @@default = locale
21
+ end
22
+ end
23
+
8
24
  # @return [String] the name of the locale. It used IETF language
9
25
  # tag format +[language[_territory][.codeset][@modifier]]+.
10
26
  # @see http://tools.ietf.org/rfc/bcp/bcp47.txt
@@ -301,6 +301,9 @@ module YARD
301
301
  # Or we might be at the beginning of an argument list
302
302
  (@current_block == TkDEF && tk.class == TkRPAREN))
303
303
 
304
+ # Continue line ending on . or ::
305
+ return if @last_tk && [EXPR_DOT].include?(@last_tk.lex_state)
306
+
304
307
  # Continue a possible existing new statement unless we just finished an expression...
305
308
  return unless (@last_tk && [EXPR_END, EXPR_ARG].include?(@last_tk.lex_state)) ||
306
309
  # Or we've opened a block and are ready to move into the body
@@ -217,6 +217,11 @@ module YARD
217
217
  lstart, sstart = *(map ? map.pop : [lineno, @ns_charno - 1])
218
218
  node.source_range = Range.new(sstart, @ns_charno - 1)
219
219
  node.line_range = Range.new(lstart, lineno)
220
+ if node.respond_to?(:block)
221
+ sr, lr = node.block.source_range, node.block.line_range
222
+ node.block.source_range = Range.new(sr.first, @tokens.last[2][1])
223
+ node.block.line_range = Range.new(lr.first, @tokens.last[2][0])
224
+ end
220
225
  node
221
226
  end
222
227
 
@@ -241,9 +246,9 @@ module YARD
241
246
 
242
247
  def add_token(token, data)
243
248
  if @tokens.last && @tokens.last[0] == :symbeg
244
- @tokens[-1] = [:symbol, ":" + data]
249
+ @tokens[-1] = [:symbol, ":" + data, @tokens.last[2]]
245
250
  elsif @heredoc_state == :started
246
- @heredoc_tokens << [token, data]
251
+ @heredoc_tokens << [token, data, [lineno, charno]]
247
252
 
248
253
  # fix ripper encoding of heredoc bug
249
254
  # (see http://bugs.ruby-lang.org/issues/6200)
@@ -251,12 +256,12 @@ module YARD
251
256
 
252
257
  @heredoc_state = :ended if token == :heredoc_end
253
258
  elsif (token == :nl || token == :comment) && @heredoc_state == :ended
254
- @heredoc_tokens.unshift([token, data])
259
+ @heredoc_tokens.unshift([token, data, [lineno, charno]])
255
260
  @tokens += @heredoc_tokens
256
261
  @heredoc_tokens = nil
257
262
  @heredoc_state = nil
258
263
  else
259
- @tokens << [token, data]
264
+ @tokens << [token, data, [lineno, charno]]
260
265
  if token == :heredoc_beg
261
266
  @heredoc_state = :started
262
267
  @heredoc_tokens = []
@@ -1,5 +1,8 @@
1
- require 'rubygems/user_interaction'
2
- require 'rubygems/doc_manager'
1
+ begin
2
+ require 'rubygems/user_interaction'
3
+ require 'rubygems/doc_manager'
4
+ rescue LoadError
5
+ end
3
6
 
4
7
  class Gem::DocManager
5
8
  def self.load_yardoc
@@ -34,7 +37,7 @@ class Gem::DocManager
34
37
  Dir.chdir(old_pwd)
35
38
  end
36
39
 
37
- undef setup_rdoc
40
+ begin undef setup_rdoc; rescue NameError; end
38
41
  def setup_rdoc
39
42
  if File.exist?(@doc_dir) && !File.writable?(@doc_dir) then
40
43
  raise Gem::FilePermissionError.new(@doc_dir)
@@ -64,8 +67,11 @@ class Gem::DocManager
64
67
  say "Building YARD (yri) index for #{@spec.full_name}..."
65
68
  run_yardoc '-c', '-n'
66
69
  end
67
- alias install_ri_yard_orig install_ri
68
- alias install_ri install_ri_yard
70
+
71
+ begin
72
+ alias install_ri_yard_orig install_ri
73
+ alias install_ri install_ri_yard
74
+ rescue NameError; end
69
75
 
70
76
  def install_rdoc_yard
71
77
  if @spec.has_rdoc?
@@ -74,6 +80,9 @@ class Gem::DocManager
74
80
  install_yardoc
75
81
  end
76
82
  end
77
- alias install_rdoc_yard_orig install_rdoc
78
- alias install_rdoc install_rdoc_yard
83
+
84
+ begin
85
+ alias install_rdoc_yard_orig install_rdoc
86
+ alias install_rdoc install_rdoc_yard
87
+ rescue NameError; end
79
88
  end
@@ -266,8 +266,9 @@ module YARD
266
266
  end
267
267
 
268
268
  def attach?
269
- class_method? || # always attach to class methods
270
- (tag.types && tag.types.include?('attach'))
269
+ new? && # must have data or there is nothing to attach
270
+ class_method? || # always attach to class methods
271
+ (tag.types && tag.types.include?('attach'))
271
272
  end
272
273
 
273
274
  def class_method?
@@ -55,7 +55,7 @@ module YARD
55
55
  # FIXME refactor this code to not make use of the Handlers::Base class (tokval_list should be moved)
56
56
  toks = YARD::Parser::Ruby::Legacy::TokenList.new(args)
57
57
  args = YARD::Handlers::Ruby::Legacy::Base.new(nil, nil).send(:tokval_list, toks, :all)
58
- args.map! {|a| k, v = *a.split('=', 2); [k.strip.to_sym, (v ? v.strip : nil)] } if args
58
+ args.map! {|a| k, v = *a.split('=', 2); [k.strip.to_s, (v ? v.strip : nil)] } if args
59
59
  @name = meth.to_sym
60
60
  @parameters = args
61
61
  end
@@ -256,6 +256,8 @@ module YARD
256
256
  # "CurrentClass.method_name"
257
257
  if obj.is_a?(CodeObjects::MethodObject) && obj.scope == :class && obj.parent == object
258
258
  title = h([object.name, obj.sep, obj.name].join)
259
+ elsif obj.title != obj.path
260
+ title = h(obj.title)
259
261
  else
260
262
  title = h(object.relative_path(obj))
261
263
  end
@@ -266,7 +268,7 @@ module YARD
266
268
  return title if obj.is_a?(CodeObjects::Proxy)
267
269
 
268
270
  link = url_for(obj, anchor, relative)
269
- link = link ? link_url(link, title, :title => h("#{obj.path} (#{obj.type})")) : title
271
+ link = link ? link_url(link, title, :title => h("#{obj.title} (#{obj.type})")) : title
270
272
  "<span class='object_link'>" + link + "</span>"
271
273
  end
272
274
 
@@ -310,6 +312,7 @@ module YARD
310
312
  def url_for(obj, anchor = nil, relative = true)
311
313
  link = nil
312
314
  return link unless serializer
315
+ return link if obj.is_a?(CodeObjects::Base) && run_verifier([obj]).empty?
313
316
 
314
317
  if obj.is_a?(CodeObjects::Base) && !obj.is_a?(CodeObjects::NamespaceObject)
315
318
  # If the obj is not a namespace obj make it the anchor.
@@ -582,7 +585,7 @@ module YARD
582
585
  string = html_syntax_highlight(CGI.unescapeHTML(string), language)
583
586
  end
584
587
  classes = ['code', language].compact.join(' ')
585
- %Q{<pre class="#{classes}"><code>#{string}</code></pre>}
588
+ %Q{<pre class="#{classes}"><code class="#{language}">#{string}</code></pre>}
586
589
  end
587
590
  end
588
591
  end