yard 0.5.3 → 0.5.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 (90) hide show
  1. data/ChangeLog +443 -0
  2. data/README.md +5 -2
  3. data/docs/WhatsNew.md +8 -0
  4. data/lib/yard.rb +4 -4
  5. data/lib/yard/autoload.rb +34 -30
  6. data/lib/yard/cli/base.rb +14 -0
  7. data/lib/yard/cli/yard_graph.rb +5 -11
  8. data/lib/yard/cli/yardoc.rb +9 -8
  9. data/lib/yard/cli/yri.rb +2 -9
  10. data/lib/yard/code_objects/base.rb +9 -6
  11. data/lib/yard/code_objects/class_object.rb +5 -5
  12. data/lib/yard/code_objects/module_object.rb +3 -2
  13. data/lib/yard/core_ext/file.rb +1 -1
  14. data/lib/yard/docstring.rb +9 -20
  15. data/lib/yard/handlers/base.rb +13 -0
  16. data/lib/yard/handlers/ruby/alias_handler.rb +1 -1
  17. data/lib/yard/handlers/ruby/attribute_handler.rb +1 -1
  18. data/lib/yard/handlers/ruby/class_condition_handler.rb +1 -1
  19. data/lib/yard/handlers/ruby/class_handler.rb +1 -1
  20. data/lib/yard/handlers/ruby/class_variable_handler.rb +1 -1
  21. data/lib/yard/handlers/ruby/constant_handler.rb +1 -1
  22. data/lib/yard/handlers/ruby/exception_handler.rb +1 -1
  23. data/lib/yard/handlers/ruby/legacy/alias_handler.rb +1 -1
  24. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +1 -1
  25. data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +8 -0
  26. data/lib/yard/handlers/ruby/legacy/class_handler.rb +1 -1
  27. data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +1 -1
  28. data/lib/yard/handlers/ruby/legacy/constant_handler.rb +1 -1
  29. data/lib/yard/handlers/ruby/legacy/exception_handler.rb +1 -1
  30. data/lib/yard/handlers/ruby/legacy/method_handler.rb +1 -1
  31. data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +1 -1
  32. data/lib/yard/handlers/ruby/legacy/module_handler.rb +1 -1
  33. data/lib/yard/handlers/ruby/legacy/process_handler.rb +12 -0
  34. data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +1 -1
  35. data/lib/yard/handlers/ruby/legacy/yield_handler.rb +1 -1
  36. data/lib/yard/handlers/ruby/method_condition_handler.rb +1 -1
  37. data/lib/yard/handlers/ruby/method_handler.rb +1 -1
  38. data/lib/yard/handlers/ruby/mixin_handler.rb +1 -1
  39. data/lib/yard/handlers/ruby/module_handler.rb +1 -1
  40. data/lib/yard/handlers/ruby/process_handler.rb +12 -0
  41. data/lib/yard/handlers/ruby/visibility_handler.rb +1 -1
  42. data/lib/yard/handlers/ruby/yield_handler.rb +1 -1
  43. data/lib/yard/parser/ruby/legacy/ruby_lex.rb +1 -1
  44. data/lib/yard/parser/ruby/legacy/statement.rb +6 -0
  45. data/lib/yard/parser/ruby/legacy/statement_list.rb +9 -3
  46. data/lib/yard/parser/ruby/ruby_parser.rb +16 -0
  47. data/lib/yard/tags/default_factory.rb +9 -13
  48. data/lib/yard/tags/library.rb +7 -7
  49. data/lib/yard/tags/overload_tag.rb +4 -4
  50. data/lib/yard/templates/erb_cache.rb +18 -0
  51. data/lib/yard/templates/helpers/html_helper.rb +24 -5
  52. data/lib/yard/templates/helpers/method_helper.rb +10 -2
  53. data/lib/yard/templates/template.rb +11 -7
  54. data/spec/code_objects/class_object_spec.rb +8 -1
  55. data/spec/code_objects/module_object_spec.rb +8 -1
  56. data/spec/core_ext/file_spec.rb +5 -1
  57. data/spec/docstring_spec.rb +80 -42
  58. data/spec/handlers/class_condition_handler_spec.rb +15 -13
  59. data/spec/handlers/examples/process_handler_001.rb.txt +11 -0
  60. data/spec/handlers/process_handler_spec.rb +17 -0
  61. data/spec/parser/source_parser_spec.rb +11 -0
  62. data/spec/tags/overload_tag_spec.rb +2 -2
  63. data/spec/templates/class_spec.rb +9 -0
  64. data/spec/templates/examples/class001.html +20 -17
  65. data/spec/templates/examples/class002.html +37 -0
  66. data/spec/templates/examples/method001.html +7 -7
  67. data/spec/templates/examples/method002.html +5 -5
  68. data/spec/templates/examples/method003.html +5 -5
  69. data/spec/templates/examples/method004.html +3 -3
  70. data/spec/templates/examples/method005.html +1 -1
  71. data/spec/templates/examples/module001.html +64 -36
  72. data/spec/templates/helpers/html_helper_spec.rb +28 -0
  73. data/spec/templates/helpers/method_helper_spec.rb +28 -0
  74. data/spec/templates/module_spec.rb +10 -1
  75. data/spec/templates/template_spec.rb +4 -0
  76. data/templates/default/class/setup.rb +1 -1
  77. data/templates/default/fulldoc/html/css/style.css +6 -1
  78. data/templates/default/fulldoc/html/frames.erb +1 -1
  79. data/templates/default/fulldoc/html/full_list.erb +1 -1
  80. data/templates/default/fulldoc/html/js/app.js +12 -0
  81. data/templates/default/fulldoc/html/js/full_list.js +11 -0
  82. data/templates/default/fulldoc/html/setup.rb +2 -1
  83. data/templates/default/layout/html/headers.erb +1 -1
  84. data/templates/default/layout/html/setup.rb +1 -1
  85. data/templates/default/module/html/box_info.erb +5 -0
  86. data/templates/default/module/html/constant_summary.erb +1 -1
  87. data/templates/default/module/html/inherited_methods.erb +10 -1
  88. data/templates/default/module/html/method_summary.erb +9 -7
  89. data/templates/default/module/setup.rb +17 -3
  90. metadata +9 -2
@@ -3,8 +3,16 @@ module YARD
3
3
  module MethodHelper
4
4
  def format_args(object)
5
5
  return if object.parameters.nil?
6
- unless object.parameters.empty?
7
- args = object.parameters.map {|n, v| v ? "#{n} = #{v}" : n.to_s }.join(", ")
6
+ params = object.parameters
7
+ if object.has_tag?(:yield) || object.has_tag?(:yieldparam)
8
+ params.reject! do |param|
9
+ param[0][0,1] == "&" &&
10
+ !object.tags(:param).any? {|t| t.name == param[0][1..-1] }
11
+ end
12
+ end
13
+
14
+ unless params.empty?
15
+ args = params.map {|n, v| v ? "#{n} = #{v}" : n.to_s }.join(", ")
8
16
  h("(#{args})")
9
17
  else
10
18
  ""
@@ -18,6 +18,7 @@ module YARD
18
18
 
19
19
  self.extra_includes = []
20
20
 
21
+ include ErbCache
21
22
  include Helpers::BaseHelper
22
23
  include Helpers::MethodHelper
23
24
 
@@ -109,7 +110,7 @@ module YARD
109
110
  end
110
111
 
111
112
  def include_inherited(full_paths)
112
- full_paths.each do |full_path|
113
+ full_paths.reverse.each do |full_path|
113
114
  include Engine.template!(path, full_path)
114
115
  end
115
116
  end
@@ -226,8 +227,10 @@ module YARD
226
227
  # @yield calls subsections to be rendered
227
228
  # @return [String] the contents of the ERB rendered section
228
229
  def erb(section, &block)
229
- erb = erb_with(cache(section), cache_filename(section))
230
- erb.result(binding, &block)
230
+ method_name = ErbCache.method_for(cache_filename(section)) do
231
+ erb_with(cache(section), cache_filename(section))
232
+ end
233
+ send(method_name, &block)
231
234
  end
232
235
 
233
236
  # Returns the contents of a file. If +allow_inherited+ is set to +true+,
@@ -271,8 +274,8 @@ module YARD
271
274
  def superb(section = section, &block)
272
275
  filename = self.class.find_nth_file(erb_file_for(section), 2)
273
276
  return "" unless filename
274
- erb = erb_with(IO.read(filename), filename)
275
- erb.result(binding, &block)
277
+ method_name = ErbCache.method_for(filename) { erb_with(IO.read(filename), filename) }
278
+ send(method_name, &block)
276
279
  end
277
280
 
278
281
  def options=(value)
@@ -319,14 +322,15 @@ module YARD
319
322
  content = @cache[section.to_sym]
320
323
  return content if content
321
324
 
322
- file = self.class.find_file(erb_file_for(section))
325
+ file = cache_filename(section)
323
326
  @cache_filename[section.to_sym] = file
324
327
  raise ArgumentError, "no template for section '#{section}' in #{self.class.path}" unless file
325
328
  @cache[section.to_sym] = IO.read(file)
326
329
  end
327
330
 
328
331
  def cache_filename(section)
329
- @cache_filename[section.to_sym]
332
+ @cache_filename[section.to_sym] ||=
333
+ self.class.find_file(erb_file_for(section))
330
334
  end
331
335
 
332
336
  def set_ivars
@@ -23,7 +23,7 @@ describe YARD::CodeObjects::ClassObject do
23
23
  end
24
24
 
25
25
  it "should show proper inheritance tree when mixins are included" do
26
- @yard.inheritance_tree(true).should == [@yard, @mixin, @superyard, @mixin2, @mixin3, P(:String)]
26
+ @yard.inheritance_tree(true).should == [@yard, @mixin, @superyard, @mixin4, @mixin2, @mixin3, P(:String)]
27
27
  end
28
28
 
29
29
  it "should not modify the object's mixin list when mixins are included" do
@@ -34,6 +34,13 @@ describe YARD::CodeObjects::ClassObject do
34
34
  @class2.inheritance_tree(true)
35
35
  @class2.mixins.should == []
36
36
  end
37
+
38
+ it "should list class mixins in inheritance tree" do
39
+ mod = ModuleObject.new(:root, :ClassMethods)
40
+ klass = ClassObject.new(:root, :ReceivingClass)
41
+ klass.class_mixins << mod
42
+ klass.inheritance_tree(true).should == [klass, mod]
43
+ end
37
44
  end
38
45
 
39
46
  describe "#meths / #inherited_meths" do
@@ -128,6 +128,13 @@ describe YARD::CodeObjects::ModuleObject do
128
128
  it "should not list inheritance tree of proxy objects in inheritance tree" do
129
129
  @proxy.should_not_receive(:inheritance_tree)
130
130
  @mod5.instance_mixins.should == [@proxy]
131
- end
131
+ end
132
+
133
+ it "should list class mixins in inheritance tree" do
134
+ mod = ModuleObject.new(:root, :ClassMethods)
135
+ recvmod = ModuleObject.new(:root, :ReceivingModule)
136
+ recvmod.class_mixins << mod
137
+ recvmod.inheritance_tree(true).should == [recvmod, mod]
138
+ end
132
139
  end
133
140
  end
@@ -41,9 +41,13 @@ describe File do
41
41
  File.cleanpath('A/B/C/D/..').should == "A/B/C"
42
42
  end
43
43
 
44
- it "should not pass the initial directory" do
44
+ it "should pass the initial directory" do
45
45
  File.cleanpath('C/../../D').should == "../D"
46
46
  end
47
+
48
+ it "should not remove multiple '../' at the beginning" do
49
+ File.cleanpath('../../A/B').should == '../../A/B'
50
+ end
47
51
  end
48
52
 
49
53
  describe '.open!' do
@@ -4,51 +4,9 @@ describe YARD::Docstring do
4
4
  before { YARD::Registry.clear }
5
5
 
6
6
  describe '#initialize' do
7
- it "should parse comments into tags" do
8
- doc = Docstring.new(<<-eof)
9
- @param name Hello world
10
- how are you?
11
- @param name2
12
- this is a new line
13
- @param name3 and this
14
- is a new paragraph:
15
-
16
- right here.
17
- eof
18
- doc.tags("param").each do |tag|
19
- if tag.name == "name"
20
- tag.text.should == "Hello world how are you?"
21
- elsif tag.name == "name2"
22
- tag.text.should == "this is a new line"
23
- elsif tag.name == "name3"
24
- tag.text.should == "and this is a new paragraph:\n\nright here."
25
- end
26
- end
27
- end
28
-
29
7
  it "should handle docstrings with empty newlines" do
30
8
  Docstring.new("\n\n").should == ""
31
9
  end
32
-
33
- it "should only parse tags with charset [A-Za-z_]" do
34
- doc = Docstring.new
35
- valid = %w( @testing @valid @is_a @is_A @__ )
36
- invalid = %w( @ @return@ @param, @x.y @x-y )
37
-
38
- log.enter_level(Logger::FATAL) do
39
- {valid => 1, invalid => 0}.each do |tags, size|
40
- tags.each do |tag|
41
- class << doc
42
- def create_tag(tag_name, *args)
43
- add_tag Tags::Tag.new(tag_name, *args)
44
- end
45
- end
46
- doc.all = tag
47
- doc.tags(tag[1..-1]).size.should == size
48
- end
49
- end
50
- end
51
- end
52
10
  end
53
11
 
54
12
  describe '#summary' do
@@ -187,4 +145,84 @@ describe YARD::Docstring do
187
145
  d.should_not be_blank
188
146
  end
189
147
  end
148
+
149
+ describe '#add_tag' do
150
+ it "should only parse tags with charset [A-Za-z_]" do
151
+ doc = Docstring.new
152
+ valid = %w( @testing @valid @is_a @is_A @__ )
153
+ invalid = %w( @ @return@ @param, @x.y @x-y )
154
+
155
+ log.enter_level(Logger::FATAL) do
156
+ {valid => 1, invalid => 0}.each do |tags, size|
157
+ tags.each do |tag|
158
+ class << doc
159
+ def create_tag(tag_name, *args)
160
+ add_tag Tags::Tag.new(tag_name, *args)
161
+ end
162
+ end
163
+ doc.all = tag
164
+ doc.tags(tag[1..-1]).size.should == size
165
+ end
166
+ end
167
+ end
168
+ end
169
+ end
170
+
171
+ describe '#parse_comments' do
172
+ it "should parse comments into tags" do
173
+ doc = Docstring.new(<<-eof)
174
+ @param name Hello world
175
+ how are you?
176
+ @param name2
177
+ this is a new line
178
+ @param name3 and this
179
+ is a new paragraph:
180
+
181
+ right here.
182
+ eof
183
+ tags = doc.tags(:param)
184
+ tags[0].name.should == "name"
185
+ tags[0].text.should == "Hello world\nhow are you?"
186
+ tags[1].name.should == "name2"
187
+ tags[1].text.should == "this is a new line"
188
+ tags[2].name.should == "name3"
189
+ tags[2].text.should == "and this\nis a new paragraph:\n\nright here."
190
+ end
191
+
192
+ it "should end parsing a tag on de-dent" do
193
+ doc = Docstring.new(<<-eof)
194
+ @note test
195
+ one two three
196
+ rest of docstring
197
+ eof
198
+ doc.tag(:note).text.should == "test\none two three"
199
+ doc.should == "rest of docstring"
200
+ end
201
+
202
+ it "should parse examples embedded in doc" do
203
+ doc = Docstring.new(<<-eof)
204
+ test string here
205
+ @example code
206
+
207
+ def foo(x, y, z)
208
+ end
209
+
210
+ class A; end
211
+
212
+ more stuff
213
+ eof
214
+ doc.should == "test string here\nmore stuff"
215
+ doc.tag(:example).text.should == "\ndef foo(x, y, z)\nend\n\nclass A; end"
216
+ end
217
+
218
+ it "should remove only original indentation from beginning of line in tags" do
219
+ doc = Docstring.new(<<-eof)
220
+ @param name
221
+ some value
222
+ foo bar
223
+ baz
224
+ eof
225
+ doc.tag(:param).text.should == "some value\nfoo bar\n baz"
226
+ end
227
+ end
190
228
  end
@@ -8,10 +8,6 @@ describe "YARD::Handlers::Ruby::#{RUBY18 ? "Legacy::" : ""}ClassConditionHandler
8
8
  names.each {|name| Registry.at("A##{name}not").should be_nil }
9
9
  end
10
10
 
11
- it "should parse all if/elsif blocks for complex conditions" do
12
- verify_method :a, :b, :c, :d
13
- end
14
-
15
11
  it "should parse all unless blocks for complex conditions" do
16
12
  verify_method :g
17
13
  end
@@ -24,17 +20,9 @@ describe "YARD::Handlers::Ruby::#{RUBY18 ? "Legacy::" : ""}ClassConditionHandler
24
20
  verify_method :p
25
21
  end
26
22
 
27
- it "should only parse else block if condition is literal value `false`" do
28
- verify_method :q
29
- end
30
-
31
23
  it "should only parse then block if condition is literal integer != 0" do
32
24
  verify_method :o
33
25
  end
34
-
35
- it "should only parse else block if condition is literal integer == 0" do
36
- verify_method :n
37
- end
38
26
 
39
27
  it "should invert block to parse for literal condition if it's an unless block" do
40
28
  verify_method :e
@@ -43,4 +31,18 @@ describe "YARD::Handlers::Ruby::#{RUBY18 ? "Legacy::" : ""}ClassConditionHandler
43
31
  it "should handle conditions such as 'defined? VALUE'" do
44
32
  verify_method :j, :k
45
33
  end
46
- end if RUBY19
34
+
35
+ if RUBY19
36
+ it "should parse all if/elsif blocks for complex conditions" do
37
+ verify_method :a, :b, :c, :d
38
+ end
39
+
40
+ it "should only parse else block if condition is literal value `false`" do
41
+ verify_method :q
42
+ end
43
+
44
+ it "should only parse else block if condition is literal integer == 0" do
45
+ verify_method :n
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,11 @@
1
+ class A < NotHandler
2
+ process { hello }
3
+ end
4
+
5
+ class B < YARD::Handlers::Ruby::Base
6
+ process { test }
7
+ end
8
+
9
+ class C < YARD::Handlers::Ruby::Legacy::Base
10
+ process do test end
11
+ end
@@ -0,0 +1,17 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "YARD::Handlers::Ruby::#{RUBY18 ? "Legacy::" : ""}ProcessHandler" do
4
+ before(:all) { parse_file :process_handler_001, __FILE__ }
5
+
6
+ it "should only work for classes that extend YARD::Handlers::*" do
7
+ Registry.at('A#process').should be_nil
8
+ end
9
+
10
+ it "should work for process { }" do
11
+ Registry.at('B#process').should_not be_nil
12
+ end
13
+
14
+ it "should work for process do ... end" do
15
+ Registry.at('C#process').should_not be_nil
16
+ end
17
+ end
@@ -57,6 +57,17 @@ describe YARD::Parser::SourceParser do
57
57
  Registry.at(:Hello2).docstring.should == "PASS"
58
58
  Registry.at('Hello2#x').docstring.should == "ANOTHER PASS"
59
59
  end
60
+
61
+ it "should handle =begin/=end style comments" do
62
+ YARD.parse_string "=begin\nfoo\nbar\n=end\nclass Foo; end\n"
63
+ Registry.at(:Foo).docstring.should == "foo\nbar"
64
+
65
+ YARD.parse_string "=begin\n\nfoo\nbar\n=end\nclass Foo; end\n"
66
+ Registry.at(:Foo).docstring.should == "foo\nbar"
67
+
68
+ YARD.parse_string "=begin\nfoo\n\nbar\n=end\nclass Foo; end\n"
69
+ Registry.at(:Foo).docstring.should == "foo\n\nbar"
70
+ end
60
71
  end
61
72
 
62
73
  describe '#parse' do
@@ -2,7 +2,7 @@ require File.dirname(__FILE__) + '/../spec_helper'
2
2
 
3
3
  describe YARD::Tags::OverloadTag do
4
4
  before do
5
- @tag = Tags::OverloadTag.new(:overload, nil, <<-'eof')
5
+ @tag = Tags::OverloadTag.new(:overload, <<-'eof')
6
6
  def bar(a, b = 1, &block)
7
7
  Hello world
8
8
  @param a [String]
@@ -47,7 +47,7 @@ describe YARD::Tags::OverloadTag do
47
47
  end
48
48
 
49
49
  it "should not parse 'def' out of method name" do
50
- tag = Tags::OverloadTag.new(:overload, nil, "default")
50
+ tag = Tags::OverloadTag.new(:overload, "default")
51
51
  tag.signature.should == "default"
52
52
  end
53
53
  end
@@ -21,6 +21,11 @@ describe YARD::Templates::Engine.template(:default, :docstring) do
21
21
  end
22
22
 
23
23
  class C < A; end
24
+
25
+ class D
26
+ # @private
27
+ def initialize; end
28
+ end
24
29
  eof
25
30
  end
26
31
 
@@ -31,4 +36,8 @@ describe YARD::Templates::Engine.template(:default, :docstring) do
31
36
  it "should render text format correctly" do
32
37
  text_equals(Registry.at('A').format, :class001)
33
38
  end
39
+
40
+ it "should hide private constructors" do
41
+ html_equals(Registry.at('D').format(:format => :html, :no_highlight => true, :verifier => Verifier.new("!@private")), :class002)
42
+ end
34
43
  end
@@ -38,7 +38,7 @@
38
38
  <div class="discussion">
39
39
  <p class="note abstract">
40
40
  <strong>This class is abstract.</strong>
41
- override this class
41
+ <div class='inline'>override this class</div>
42
42
  </p>
43
43
  Comments
44
44
 
@@ -63,7 +63,7 @@ Comments
63
63
 
64
64
 
65
65
 
66
- Test
66
+ <div class='inline'>Test</div>
67
67
 
68
68
  </li>
69
69
 
@@ -77,7 +77,7 @@ Comments
77
77
 
78
78
 
79
79
 
80
- 1.0
80
+ <div class='inline'>1.0</div>
81
81
 
82
82
  </li>
83
83
 
@@ -91,11 +91,12 @@ Comments
91
91
 
92
92
 
93
93
 
94
- <h2>Instance Method Summary</h2>
94
+
95
+ <h2>Instance Method Summary</h2>
95
96
 
96
- <ul class="summary">
97
-
98
- <li class="public deprecated">
97
+ <ul class="summary">
98
+
99
+ <li class="public deprecated">
99
100
  <span class="summary_signature">
100
101
 
101
102
  <a title="#a (instance method)">- <strong>a</strong> </a>
@@ -110,12 +111,12 @@ Comments
110
111
  <span class="deprecated note title">Deprecated</span>
111
112
 
112
113
 
113
- <span class="summary_desc"><strong>Deprecated.</strong> </span>
114
+ <span class="summary_desc"><strong>Deprecated.</strong> <div class='inline'></div></span>
114
115
 
115
116
  </li>
116
117
 
117
-
118
- <li class="public ">
118
+
119
+ <li class="public ">
119
120
  <span class="summary_signature">
120
121
 
121
122
  <a title="#initialize (instance method)">- (A) <strong>initialize</strong>(test) </a>
@@ -132,12 +133,12 @@ Comments
132
133
 
133
134
 
134
135
 
135
- <span class="summary_desc">constructor method!.</span>
136
+ <span class="summary_desc"><div class='inline'>constructor method!.</div></span>
136
137
 
137
138
  </li>
138
139
 
139
-
140
- <li class="public ">
140
+
141
+ <li class="public ">
141
142
  <span class="summary_signature">
142
143
 
143
144
  <a title="#method_missing (instance method)">- <strong>method_missing</strong>(*args) </a>
@@ -152,12 +153,14 @@ Comments
152
153
 
153
154
 
154
155
 
155
- <span class="summary_desc">HI.</span>
156
+ <span class="summary_desc"><div class='inline'>HI.</div></span>
156
157
 
157
158
  </li>
158
159
 
159
-
160
- </ul>
160
+
161
+ </ul>
162
+
163
+
161
164
 
162
165
  <div id="constructor_details" class="method_details_list">
163
166
  <h2>Constructor Details</h2>
@@ -250,7 +253,7 @@ def method_missing(*args) end</pre>
250
253
 
251
254
  </p><div class="docstring">
252
255
  <div class="discussion">
253
- <p class="note deprecated"><strong>Deprecated.</strong> </p>
256
+ <p class="note deprecated"><strong>Deprecated.</strong> <div class='inline'></div></p>
254
257
 
255
258
 
256
259
  </div>