yard 0.9.28 → 0.9.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +139 -1
  3. data/LEGAL +29 -1
  4. data/README.md +29 -25
  5. data/docs/GettingStarted.md +41 -15
  6. data/docs/Parser.md +17 -42
  7. data/docs/Tags.md +6 -6
  8. data/docs/Templates.md +5 -4
  9. data/docs/WhatsNew.md +61 -9
  10. data/docs/templates/default/yard_tags/html/setup.rb +1 -1
  11. data/lib/yard/autoload.rb +20 -1
  12. data/lib/yard/cli/command.rb +1 -1
  13. data/lib/yard/cli/diff.rb +7 -2
  14. data/lib/yard/cli/yardoc.rb +1 -1
  15. data/lib/yard/code_objects/base.rb +6 -2
  16. data/lib/yard/code_objects/extra_file_object.rb +1 -0
  17. data/lib/yard/code_objects/macro_object.rb +0 -1
  18. data/lib/yard/code_objects/proxy.rb +1 -1
  19. data/lib/yard/docstring_parser.rb +1 -2
  20. data/lib/yard/handlers/base.rb +23 -1
  21. data/lib/yard/handlers/processor.rb +1 -1
  22. data/lib/yard/handlers/rbs/attribute_handler.rb +79 -0
  23. data/lib/yard/handlers/rbs/base.rb +38 -0
  24. data/lib/yard/handlers/rbs/constant_handler.rb +18 -0
  25. data/lib/yard/handlers/rbs/method_handler.rb +327 -0
  26. data/lib/yard/handlers/rbs/mixin_handler.rb +20 -0
  27. data/lib/yard/handlers/rbs/namespace_handler.rb +26 -0
  28. data/lib/yard/handlers/ruby/attribute_handler.rb +7 -4
  29. data/lib/yard/handlers/ruby/constant_handler.rb +24 -6
  30. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +1 -1
  31. data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +2 -1
  32. data/lib/yard/handlers/ruby/mixin_handler.rb +13 -6
  33. data/lib/yard/handlers/ruby/visibility_handler.rb +14 -1
  34. data/lib/yard/i18n/locale.rb +2 -2
  35. data/lib/yard/i18n/message.rb +2 -2
  36. data/lib/yard/i18n/messages.rb +1 -1
  37. data/lib/yard/i18n/pot_generator.rb +2 -2
  38. data/lib/yard/logging.rb +116 -61
  39. data/lib/yard/open_struct.rb +67 -0
  40. data/lib/yard/options.rb +1 -1
  41. data/lib/yard/parser/rbs/rbs_parser.rb +325 -0
  42. data/lib/yard/parser/rbs/statement.rb +75 -0
  43. data/lib/yard/parser/ruby/ast_node.rb +5 -4
  44. data/lib/yard/parser/ruby/legacy/irb/slex.rb +19 -1
  45. data/lib/yard/parser/ruby/legacy/ruby_lex.rb +20 -5
  46. data/lib/yard/parser/ruby/ruby_parser.rb +117 -26
  47. data/lib/yard/parser/source_parser.rb +7 -7
  48. data/lib/yard/registry_resolver.rb +9 -1
  49. data/lib/yard/rubygems/specification.rb +1 -1
  50. data/lib/yard/server/commands/base.rb +2 -2
  51. data/lib/yard/server/commands/library_command.rb +8 -8
  52. data/lib/yard/server/commands/static_file_helpers.rb +1 -2
  53. data/lib/yard/server/http_utils.rb +512 -0
  54. data/lib/yard/server/library_version.rb +1 -1
  55. data/lib/yard/server/rack_adapter.rb +13 -5
  56. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +168 -88
  57. data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +203 -12
  58. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +1 -17
  59. data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -2
  60. data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +3 -3
  61. data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +2 -3
  62. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +22 -16
  63. data/lib/yard/tags/default_factory.rb +1 -0
  64. data/lib/yard/tags/directives.rb +7 -1
  65. data/lib/yard/tags/library.rb +3 -3
  66. data/lib/yard/tags/overload_tag.rb +2 -1
  67. data/lib/yard/tags/tag.rb +4 -3
  68. data/lib/yard/tags/types_explainer.rb +6 -5
  69. data/lib/yard/templates/engine.rb +0 -1
  70. data/lib/yard/templates/helpers/base_helper.rb +1 -1
  71. data/lib/yard/templates/helpers/html_helper.rb +21 -6
  72. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +6 -1
  73. data/lib/yard/templates/helpers/markup/hybrid_markdown.rb +2147 -0
  74. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +2 -0
  75. data/lib/yard/templates/helpers/markup_helper.rb +4 -2
  76. data/lib/yard/templates/template_options.rb +0 -1
  77. data/lib/yard/version.rb +1 -1
  78. data/po/ja.po +101 -101
  79. data/templates/default/fulldoc/html/css/common.css +1 -1
  80. data/templates/default/fulldoc/html/css/full_list.css +201 -53
  81. data/templates/default/fulldoc/html/css/style.css +991 -399
  82. data/templates/default/fulldoc/html/frames.erb +9 -4
  83. data/templates/default/fulldoc/html/full_list.erb +8 -5
  84. data/templates/default/fulldoc/html/js/app.js +799 -312
  85. data/templates/default/fulldoc/html/js/full_list.js +332 -214
  86. data/templates/default/fulldoc/html/setup.rb +10 -2
  87. data/templates/default/layout/html/headers.erb +1 -1
  88. data/templates/default/layout/html/layout.erb +3 -1
  89. data/templates/default/method/html/header.erb +3 -3
  90. data/templates/default/module/html/defines.erb +3 -3
  91. data/templates/default/module/html/inherited_methods.erb +1 -0
  92. data/templates/default/module/html/method_summary.erb +8 -0
  93. data/templates/default/module/setup.rb +20 -0
  94. data/templates/default/onefile/html/headers.erb +2 -0
  95. data/templates/default/onefile/html/layout.erb +3 -4
  96. data/templates/default/tags/html/example.erb +2 -2
  97. data/templates/default/tags/html/option.erb +1 -1
  98. data/templates/guide/fulldoc/html/css/style.css +347 -97
  99. data/templates/guide/fulldoc/html/js/app.js +61 -33
  100. data/templates/guide/layout/html/layout.erb +69 -72
  101. metadata +21 -60
  102. data/.dockerignore +0 -2
  103. data/.gitattributes +0 -4
  104. data/.github/FUNDING.yml +0 -3
  105. data/.github/ISSUE_TEMPLATE.md +0 -33
  106. data/.github/PULL_REQUEST_TEMPLATE.md +0 -12
  107. data/.github/workflows/ci.yml +0 -30
  108. data/.github/workflows/gem.yml +0 -19
  109. data/.gitignore +0 -14
  110. data/.rspec +0 -2
  111. data/.rubocop.yml +0 -112
  112. data/CODE_OF_CONDUCT.md +0 -15
  113. data/CONTRIBUTING.md +0 -140
  114. data/Dockerfile.samus +0 -28
  115. data/Gemfile +0 -34
  116. data/Rakefile +0 -36
  117. data/SECURITY.md +0 -26
  118. data/benchmarks/builtins_vs_eval.rb +0 -24
  119. data/benchmarks/concat_vs_join.rb +0 -13
  120. data/benchmarks/erb_vs_erubis.rb +0 -54
  121. data/benchmarks/format_args.rb +0 -47
  122. data/benchmarks/generation.rb +0 -38
  123. data/benchmarks/marshal_vs_dbm.rb +0 -64
  124. data/benchmarks/parsing.rb +0 -46
  125. data/benchmarks/pathname_vs_string.rb +0 -51
  126. data/benchmarks/rdoc_vs_yardoc.rb +0 -11
  127. data/benchmarks/registry_store_types.rb +0 -49
  128. data/benchmarks/ri_vs_yri.rb +0 -19
  129. data/benchmarks/ripper_parser.rb +0 -13
  130. data/benchmarks/splat_vs_flatten.rb +0 -13
  131. data/benchmarks/template_erb.rb +0 -23
  132. data/benchmarks/template_format.rb +0 -7
  133. data/benchmarks/template_profile.rb +0 -18
  134. data/benchmarks/yri_cache.rb +0 -20
  135. data/samus.json +0 -49
  136. data/tasks/prepare_tag.rake +0 -45
  137. data/tasks/update_error_map.rake +0 -53
  138. data/yard.gemspec +0 -25
@@ -507,7 +507,7 @@ module YARD
507
507
  #
508
508
  # @example
509
509
  # # Synchronizes system time using NTP.
510
- # # @see http://ntp.org/documentation.html NTP Documentation
510
+ # # @see https://ntp.org/documentation.html NTP Documentation
511
511
  # # @see NTPHelperMethods
512
512
  # class NTPUpdater; end
513
513
  define_tag "See Also", :see, :with_name
@@ -541,7 +541,7 @@ module YARD
541
541
  # @example
542
542
  # # @todo Add support for Jabberwocky service.
543
543
  # # There is an open source Jabberwocky library available
544
- # # at http://jbrwcky.org that can be easily integrated.
544
+ # # at https://jbrwcky.org that can be easily integrated.
545
545
  # class Wonderlander; end
546
546
  # @see tag:note
547
547
  define_tag "Todo Item", :todo
@@ -554,7 +554,7 @@ module YARD
554
554
  # of a specific object.
555
555
  #
556
556
  # @example
557
- # # The public REST API for http://jbrwcky.org
557
+ # # The public REST API for https://jbrwcky.org
558
558
  # # @version 2.0
559
559
  # class JabberwockyAPI; end
560
560
  define_tag "Version", :version
@@ -60,7 +60,8 @@ module YARD
60
60
  args = YARD::Handlers::Ruby::Legacy::Base.new(nil, nil).send(:tokval_list, toks, :all)
61
61
  args = args.map do |a|
62
62
  k, v = *a.split(/:|=/, 2)
63
- [k.strip.to_s + (a[k.size, 1] == ':' ? ':' : ''), (v ? v.strip : nil)]
63
+ v.strip! if v
64
+ [k.strip.to_s + (a[k.size, 1] == ':' ? ':' : ''), (v && v.empty? ? nil : v)]
64
65
  end if args
65
66
  @name = meth.to_sym
66
67
  @parameters = args
data/lib/yard/tags/tag.rb CHANGED
@@ -23,6 +23,7 @@ module YARD
23
23
  attr_accessor :types
24
24
 
25
25
  # @return [String] a name associated with the tag
26
+ # @return [nil] if no tag name is supplied
26
27
  attr_accessor :name
27
28
 
28
29
  # @return [CodeObjects::Base] the associated object
@@ -37,7 +38,7 @@ module YARD
37
38
  # +raise+, etc.
38
39
  #
39
40
  # @param [#to_s] tag_name the tag name to create the tag for
40
- # @param [String] text the descriptive text for this tag
41
+ # @param [String, nil] text the descriptive text for this tag, or nil if none provided
41
42
  # @param [Array<String>] types optional type list of formally declared types
42
43
  # for the tag
43
44
  # @param [String] name optional key name which the tag refers to
@@ -58,10 +59,10 @@ module YARD
58
59
  end
59
60
 
60
61
  # Provides a plain English summary of the type specification, or nil
61
- # if no types are provided or parseable.
62
+ # if no types are provided or parsable.
62
63
  #
63
64
  # @return [String] a plain English description of the associated types
64
- # @return [nil] if no types are provided or not parseable
65
+ # @return [nil] if no types are provided or not parsable
65
66
  def explain_types
66
67
  return nil if !types || types.empty?
67
68
  TypesExplainer.explain(*types)
@@ -13,7 +13,7 @@ module YARD
13
13
  end
14
14
 
15
15
  # (see explain)
16
- # @raise [SyntaxError] if the types are not parseable
16
+ # @raise [SyntaxError] if the types are not parsable
17
17
  def self.explain!(*types)
18
18
  Parser.parse(types.join(", ")).join("; ")
19
19
  end
@@ -32,7 +32,7 @@ module YARD
32
32
 
33
33
  def to_s(singular = true)
34
34
  if name[0, 1] == "#"
35
- singular ? "an object that responds to #{name}" : "objects that respond to #{name}"
35
+ (singular ? "an object that responds to " : "objects that respond to ") + list_join(name.split(/ *& */), with: "and")
36
36
  elsif name[0, 1] =~ /[A-Z]/
37
37
  singular ? "a#{name[0, 1] =~ /[aeiou]/i ? 'n' : ''} " + name : "#{name}#{name[-1, 1] =~ /[A-Z]/ ? "'" : ''}s"
38
38
  else
@@ -42,12 +42,12 @@ module YARD
42
42
 
43
43
  private
44
44
 
45
- def list_join(list)
45
+ def list_join(list, with: "or")
46
46
  index = 0
47
47
  list.inject(String.new) do |acc, el|
48
48
  acc << el.to_s
49
49
  acc << ", " if index < list.size - 2
50
- acc << " or " if index == list.size - 2
50
+ acc << " #{with} " if index == list.size - 2
51
51
  index += 1
52
52
  acc
53
53
  end
@@ -102,6 +102,7 @@ module YARD
102
102
  :fixed_collection_start => /\(/,
103
103
  :fixed_collection_end => /\)/,
104
104
  :type_name => /#{ISEP}#{METHODNAMEMATCH}|#{NAMESPACEMATCH}|\w+/,
105
+ :symbol => /:#{METHODNAMEMATCH}/,
105
106
  :type_next => /[,;]/,
106
107
  :whitespace => /\s+/,
107
108
  :hash_collection_start => /\{/,
@@ -130,7 +131,7 @@ module YARD
130
131
  next unless (match.nil? && @scanner.eos?) || (match && token = @scanner.scan(match))
131
132
  found = true
132
133
  case token_type
133
- when :type_name
134
+ when :type_name, :symbol
134
135
  raise SyntaxError, "expecting END, got name '#{token}'" if name
135
136
  name = token
136
137
  when :type_next
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- require 'ostruct'
3
2
 
4
3
  module YARD
5
4
  module Templates
@@ -45,7 +45,7 @@ module YARD::Templates::Helpers
45
45
  # method depending on the arguments passed in.
46
46
  #
47
47
  # @example Linking a URL
48
- # linkify('http://example.com')
48
+ # linkify('https://example.com')
49
49
  # @example Including docstring contents of an object
50
50
  # linkify('include:YARD::Docstring')
51
51
  # @example Linking to an extra file
@@ -1,5 +1,9 @@
1
1
  # frozen_string_literal: true
2
- require 'cgi'
2
+ if RUBY_VERSION < '3.5'
3
+ require 'cgi/util'
4
+ else
5
+ require 'cgi/escape'
6
+ end
3
7
 
4
8
  module YARD
5
9
  module Templates::Helpers
@@ -89,10 +93,16 @@ module YARD
89
93
  :tables,
90
94
  :with_toc_data,
91
95
  :no_intraemphasis).to_html
96
+ when 'Commonmarker'
97
+ provider.to_html(text, :options => { }, :plugins => { :syntax_highlighter => nil })
92
98
  when 'CommonMarker'
93
- CommonMarker.render_html(text, %i[DEFAULT GITHUB_PRE_LANG], %i[autolink])
99
+ provider.render_html(text, %i[DEFAULT GITHUB_PRE_LANG], %i[autolink table])
94
100
  else
95
- provider.new(text).to_html
101
+ if provider.respond_to?(:to_html)
102
+ provider.to_html(text)
103
+ else
104
+ provider.new(text).to_html
105
+ end
96
106
  end
97
107
  end
98
108
 
@@ -152,7 +162,7 @@ module YARD
152
162
  # @return [String] the output HTML
153
163
  # @since 0.6.0
154
164
  def html_markup_text(text)
155
- h(text).gsub(/\r?\n/, '<br/>')
165
+ h(text).gsub(/\r?\n/, '<br>')
156
166
  end
157
167
 
158
168
  # @return [String] the same text with no markup
@@ -224,7 +234,7 @@ module YARD
224
234
  # @return [String] HTML with linkified references
225
235
  def resolve_links(text)
226
236
  code_tags = 0
227
- text.gsub(%r{<(/)?(pre|code|tt)|(\\|!)?\{(?!\})(\S+?)(?:\s([^\}]*?\S))?\}(?=[\W<]|.+</|$)}m) do |str|
237
+ text.gsub(%r{<(/)?(pre|code|tt)|(\\|!)?\{(?!\})(\S+?)(?:\s([^\}]*?\S))?\}(?=\W|.+</|$)}m) do |str|
228
238
  closed = $1
229
239
  tag = $2
230
240
  escape = $3
@@ -646,7 +656,12 @@ module YARD
646
656
  language ||= detect_lang_in_codeblock_attributes($1, $2)
647
657
  language ||= object.source_type
648
658
 
649
- if options.highlight
659
+ # Skip re-highlighting if the block is already highlighted (e.g. from a recursive
660
+ # htmlify call via {include:} or {yard:include_tags}). Passing pre-highlighted HTML
661
+ # through CGI.unescapeHTML would corrupt deliberately-escaped entities inside spans.
662
+ # Note: this heuristic suppresses highlighting for code blocks in :html markup that
663
+ # contain a literal <span> tag in the source being documented (an uncommon edge case).
664
+ if options.highlight && string !~ HtmlSyntaxHighlightHelper::ALREADY_HIGHLIGHTED_RE
650
665
  string = html_syntax_highlight(CGI.unescapeHTML(string), language)
651
666
  end
652
667
  classes = ['code', language].compact.join(' ')
@@ -6,6 +6,11 @@ module YARD
6
6
  module HtmlSyntaxHighlightHelper
7
7
  include ModuleHelper
8
8
 
9
+ # Matches source that has already been highlighted (i.e. contains a span tag).
10
+ # Used to avoid double-processing pre-highlighted HTML in the rescue clause of
11
+ # {#html_syntax_highlight_ruby_ripper} and in the {HtmlHelper#parse_codeblocks} guard.
12
+ ALREADY_HIGHLIGHTED_RE = /<span[\s>]/
13
+
9
14
  # Highlights Ruby source
10
15
  # @param [String] source the Ruby source code
11
16
  # @return [String] the highlighted Ruby source
@@ -39,7 +44,7 @@ module YARD
39
44
  end
40
45
  output
41
46
  rescue Parser::ParserSyntaxError
42
- source =~ /^<span\s+class=/ ? source : h(source)
47
+ source =~ ALREADY_HIGHLIGHTED_RE ? source : h(source)
43
48
  end
44
49
 
45
50
  def html_syntax_highlight_ruby_legacy(source)