yard-markdown 0.7.1 → 0.7.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 20eaf2ccb5ab45418bcb82e961f472231fb5d705090e8650dd854a8cc0e1d92f
4
- data.tar.gz: ec1a4f6d7f3afa2f7af44c44a72af9ba6a22148ffeb643dda1ffbb747a0cf1ee
3
+ metadata.gz: 6aa034296e039353941780b9556959dabbddad7874f52231b0dc69faed55b662
4
+ data.tar.gz: 379509fb60bb677e34f4ef90e3d6776462a6f9d0768fcf09c078866c78967476
5
5
  SHA512:
6
- metadata.gz: ea0c103943a5b5361ecab753fa0d014835016a6a154bb77552e7c8d3c1f253eea2a8c62c2aafe2d7f72afd31dfe5cac763c864a7768cd0126bc229ba8f19ace4
7
- data.tar.gz: 0f2ade24652236aef7cfb310cafe04f1f0dcc43a5bccba854ec9712d0a7edb752d91a6f85b723a8c5e19e66aff798ff2cbf669b4e5401f33f2f18c66875e8dd3
6
+ metadata.gz: 7a93025d200cc5711781fefced38b4e2a4e91ca6fb7228b744c28c1c8dfae8b18819b12bfcec1c7b9b6051c4f179342d55b8bd3bdf07ec083ea9e36ca60f59c7
7
+ data.tar.gz: f25532bd94b48553decf5b8c1a48c9bc92dcf639aadfc09b02a6c8ec77f8a9c568515d21991b891499d76643f4ab42c0e4df19d6e0588df887480734b756a7d9
data/CHANGELOG.md CHANGED
@@ -5,6 +5,14 @@ This format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
5
5
 
6
6
  ## Unreleased
7
7
 
8
+ ## 0.7.2
9
+
10
+ ### Changed
11
+ - Limit the packaged gem to documentation, runtime code, and templates.
12
+
13
+ ### Removed
14
+ - Remove the generated RBS signature from the packaged gem.
15
+
8
16
  ## 0.7.1
9
17
 
10
18
  ### Fixed
data/README.md CHANGED
@@ -66,12 +66,6 @@ Validate generated markdown in sample docs:
66
66
  bundle exec rake markdown:validate_examples
67
67
  ```
68
68
 
69
- Regenerate the checked-in RBS types derived from YARD docs:
70
-
71
- ```bash
72
- bundle exec rake types:generate
73
- ```
74
-
75
69
  There is also a real-world validation harness for repositories with substantial YARD documentation (`rspec-core`, `sidekiq`):
76
70
 
77
71
  ```bash
@@ -82,6 +76,4 @@ This task validates generated markdown against CommonMark + GFM rendering, and r
82
76
 
83
77
  GitHub Actions CI now runs this task on every push/PR, so `sidekiq` and other real-world fixture gems are verified continuously.
84
78
 
85
- CI also regenerates `sig/yard/markdown.rbs` with `sord` and fails if the checked-in RBS file is out of date.
86
-
87
79
  For reproducible checks, the task clones pinned tags (`rspec-core` `v3.13.2`, `sidekiq` `v7.3.10`) into `tmp/real-world/repos` before generating output.
@@ -1,10 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # Namespace for YARD extensions used by this gem.
3
4
  module YARD
5
+ # Shared helpers for rendering YARD objects as Markdown.
4
6
  module Markdown
5
7
  # Computes anchor ids that match the generated Markdown headings.
6
8
  module ArefHelper
7
- include AnchorComponentHelper
9
+ # Encodes a value so it can be embedded safely in an HTML anchor id.
10
+ #
11
+ # @param value [Object] Raw anchor fragment to encode.
12
+ # @return [String] Anchor-safe identifier fragment.
13
+ def anchor_component(value)
14
+ value.to_s.each_char.map do |char|
15
+ char.match?(/[A-Za-z0-9_-]/) ? char : format("-%X", char.ord)
16
+ end.join
17
+ end
8
18
 
9
19
  # Returns the primary anchor id for a documented object.
10
20
  #
@@ -10,27 +10,7 @@ module YARD
10
10
  # @param group_order [Array<String>, nil] Preferred ordering for group headings.
11
11
  # @return [String] Markdown for the constants section.
12
12
  def render_constants(constants, group_order)
13
- lines = ["## Constants"]
14
- grouped_constants = grouped_items(constants.sort_by { |item| item.name }, group_order)
15
- uses_groups = grouped_constants.any? { |name, _items| !name.nil? }
16
-
17
- grouped_constants.each do |group_name, items|
18
- if uses_groups
19
- lines << "### #{group_name || "General"}"
20
- item_heading = "####"
21
- else
22
- item_heading = "###"
23
- end
24
-
25
- lines << items.map { |item|
26
- item_lines = [heading_with_anchors("#{item_heading} `#{item.name}`", item)]
27
- append_lines(item_lines, documented_text(item), separated: false)
28
- append_lines(item_lines, render_tags(item), separated: false)
29
- item_lines.join("\n")
30
- }.join("\n\n")
31
- end
32
-
33
- lines.join("\n")
13
+ render_collection("Constants", constants.sort_by { |item| item.name }, group_order) { |item| "`#{item.name}`" }
34
14
  end
35
15
 
36
16
  # Renders the attributes section for an object page.
@@ -39,27 +19,7 @@ module YARD
39
19
  # @param group_order [Array<String>, nil] Preferred ordering for group headings.
40
20
  # @return [String] Markdown for the attributes section.
41
21
  def render_attributes(attrs, group_order)
42
- lines = ["## Attributes"]
43
- grouped_attrs = grouped_items(attrs, group_order)
44
- uses_groups = grouped_attrs.any? { |name, _items| !name.nil? }
45
-
46
- grouped_attrs.each do |group_name, items|
47
- if uses_groups
48
- lines << "### #{group_name || "General"}"
49
- item_heading = "####"
50
- else
51
- item_heading = "###"
52
- end
53
-
54
- lines << items.map { |item|
55
- item_lines = [heading_with_anchors("#{item_heading} `#{item.name}` [#{attribute_access(item)}]", item)]
56
- append_lines(item_lines, documented_text(item), separated: false)
57
- append_lines(item_lines, render_tags(item), separated: false)
58
- item_lines.join("\n")
59
- }.join("\n\n")
60
- end
61
-
62
- lines.join("\n")
22
+ render_collection("Attributes", attrs, group_order) { |item| "`#{item.name}` [#{attribute_access(item)}]" }
63
23
  end
64
24
 
65
25
  # Renders a method section for an object page.
@@ -69,20 +29,26 @@ module YARD
69
29
  # @param group_order [Array<String>, nil] Preferred ordering for group headings.
70
30
  # @return [String] Markdown for the method section.
71
31
  def render_methods(section_title, methods, group_order)
32
+ render_collection(section_title, methods, group_order) { |item| "`#{formatted_method_heading(item)}`" }
33
+ end
34
+
35
+ # Renders a grouped collection with a caller-provided item label.
36
+ #
37
+ # @param section_title [String] Section title to render.
38
+ # @param items [Array<YARD::CodeObjects::Base>] Objects to group and render.
39
+ # @param group_order [Array<String>, nil] Preferred ordering for group headings.
40
+ # @return [String] Markdown for the collection section.
41
+ def render_collection(section_title, items, group_order)
72
42
  lines = ["## #{section_title}"]
73
- grouped_methods = grouped_items(methods, group_order)
74
- uses_groups = grouped_methods.any? { |name, _items| !name.nil? }
43
+ groups = grouped_items(items, group_order)
44
+ uses_groups = groups.any? { |name, _items| !name.nil? }
45
+ item_heading = uses_groups ? "####" : "###"
75
46
 
76
- grouped_methods.each do |group_name, items|
77
- if uses_groups
78
- lines << "### #{group_name || "General"}"
79
- item_heading = "####"
80
- else
81
- item_heading = "###"
82
- end
47
+ groups.each do |group_name, group_items|
48
+ lines << "### #{group_name || "General"}" if uses_groups
83
49
 
84
- lines << items.map { |item|
85
- item_lines = [heading_with_anchors("#{item_heading} `#{formatted_method_heading(item)}`", item)]
50
+ lines << group_items.map { |item|
51
+ item_lines = [heading_with_anchors("#{item_heading} #{yield(item)}", item)]
86
52
  append_lines(item_lines, documented_text(item), separated: false)
87
53
  append_lines(item_lines, render_tags(item), separated: false)
88
54
  item_lines.join("\n")
@@ -34,13 +34,9 @@ module YARD
34
34
  # @param attribute [YARD::CodeObjects::MethodObject] Attribute reader or writer.
35
35
  # @return [String] Access mode marker such as `R`, `W`, or `RW`.
36
36
  def attribute_access(attribute)
37
- info = attribute.attr_info || {}
38
- return "RW" if info[:read] && info[:write]
39
- return "R" if info[:read]
40
- return "W" if info[:write]
41
-
42
- return "RW" if attribute.reader? && attribute.writer?
43
- return "R" if attribute.reader?
37
+ read, write = attribute.attr_info.fetch_values(:read, :write)
38
+ return "RW" if read && write
39
+ return "R" if read
44
40
 
45
41
  "W"
46
42
  end
@@ -10,23 +10,12 @@ module YARD
10
10
  # @param group_order [Array<String>, nil] Preferred ordering for named groups.
11
11
  # @return [Array<Array>] Ordered pairs of group names and grouped items.
12
12
  def grouped_items(items, group_order)
13
- grouped = Hash.new { |hash, key| hash[key] = [] }
14
- items.each { |item| grouped[item.group] << item }
13
+ groups = items.group_by(&:group)
14
+ names = groups.keys
15
+ order = Array(group_order)
16
+ ordered_names = (order & names) + (names.compact - order).sort + ([nil] & names)
15
17
 
16
- ordered = []
17
-
18
- Array(group_order).each do |name|
19
- next unless grouped.key?(name)
20
-
21
- ordered << [name, grouped.delete(name)]
22
- end
23
-
24
- grouped.keys.compact.sort.each do |name|
25
- ordered << [name, grouped.delete(name)]
26
- end
27
-
28
- ordered << [nil, grouped.delete(nil)] if grouped.key?(nil)
29
- ordered
18
+ ordered_names.map { |name| [name, groups.fetch(name)] }
30
19
  end
31
20
 
32
21
  # Appends non-empty content to a mutable list of lines.
@@ -9,13 +9,8 @@ module YARD
9
9
  # @param object [YARD::CodeObjects::Base] Object whose tags are being rendered.
10
10
  # @return [String] Markdown representation of the object's tags.
11
11
  def render_tags(object)
12
- lines = []
13
- regular_tags = object.tags.reject { |tag| tag.tag_name == "example" }
14
- example_tags = object.tags.select { |tag| tag.tag_name == "example" }
15
-
16
- regular_tags.each do |tag|
17
- lines << "- #{format_tag(tag)}"
18
- end
12
+ example_tags, regular_tags = object.tags.partition { |tag| tag.tag_name == "example" }
13
+ lines = regular_tags.map { |tag| "- #{format_tag(tag)}" }
19
14
 
20
15
  example_tags.each do |tag|
21
16
  lines << nil unless lines.empty?
@@ -46,29 +41,10 @@ module YARD
46
41
 
47
42
  # Normalizes tag type declarations into printable strings.
48
43
  #
49
- # @param types [Array<Object>, Hash, nil] Raw tag types from YARD.
44
+ # @param types [Array<Object>, nil] Raw tag types from YARD.
50
45
  # @return [Array<String>] Cleaned type strings.
51
46
  def normalized_tag_types(types)
52
- values = if types.instance_of?(Hash)
53
- types.map { |name, value| format_hash_tag_type(name, value) }
54
- else
55
- Array(types)
56
- end
57
-
58
- values.map(&:to_s).map(&:strip).reject(&:empty?)
59
- end
60
-
61
- # Formats a hash-style tag type entry.
62
- #
63
- # @param name [String] Type name to format.
64
- # @param value [Object] Associated type detail.
65
- # @return [String, nil] Formatted type entry, or nil when blank.
66
- def format_hash_tag_type(name, value)
67
- key = name.rstrip
68
- return nil if key.empty?
69
- return key if value.nil? || value == true || (value.respond_to?(:empty?) && value.empty?)
70
-
71
- "#{key}: #{value}"
47
+ Array(types).map(&:to_s).map(&:strip).reject(&:empty?)
72
48
  end
73
49
  end
74
50
  end
data/lib/yard-markdown.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "yard"
4
- require_relative "yard/markdown/anchor_component_helper"
5
4
  require_relative "yard/markdown/aref_helper"
6
5
  require_relative "yard/markdown/collection_rendering_helper"
7
6
  require_relative "yard/markdown/documentation_helper"
@@ -2,11 +2,9 @@
2
2
 
3
3
  require "csv"
4
4
 
5
- class_eval do
6
- include YARD::Templates::Helpers::ModuleHelper
7
- include YARD::Markdown::ArefHelper
8
- include YARD::Markdown::ObjectListingHelper
9
- end
5
+ include YARD::Templates::Helpers::ModuleHelper
6
+ include YARD::Markdown::ArefHelper
7
+ include YARD::Markdown::ObjectListingHelper
10
8
 
11
9
  # Prepares the markdown serializer and renders each object page.
12
10
  #
@@ -57,46 +55,20 @@ def serialize_index(objects)
57
55
  csv << [object.path, "Module", options.serializer.serialized_path(object)]
58
56
  end
59
57
 
60
- constants = constant_listing(object)
61
- if constants.size.positive?
62
- constants.each do |cnst|
63
- csv << [
64
- "#{object.path}.#{cnst.name(false)}",
65
- "Constant",
66
- (options.serializer.serialized_path(object) + "#" + aref(cnst))
67
- ]
68
- end
69
- end
70
-
71
- if (insmeths = public_instance_methods(object)).size > 0
72
- insmeths.each do |item|
73
- csv << [
74
- "#{object.path}.#{item.name(false)}",
75
- "Method",
76
- options.serializer.serialized_path(object) + "#" + aref(item)
77
- ]
78
- end
79
- end
80
-
81
- if (pubmeths = public_class_methods(object)).size > 0
82
- pubmeths.each do |item|
58
+ [
59
+ ["Constant", constant_listing(object)],
60
+ ["Method", public_instance_methods(object)],
61
+ ["Method", public_class_methods(object)],
62
+ ["Attribute", attr_listing(object)]
63
+ ].each do |type, items|
64
+ items.each do |item|
83
65
  csv << [
84
66
  "#{object.path}.#{item.name(false)}",
85
- "Method",
67
+ type,
86
68
  options.serializer.serialized_path(object) + "#" + aref(item)
87
69
  ]
88
70
  end
89
71
  end
90
-
91
- next unless (attrs = attr_listing(object)).size > 0
92
-
93
- attrs.each do |item|
94
- csv << [
95
- "#{object.path}.#{item.name(false)}",
96
- "Attribute",
97
- options.serializer.serialized_path(object) + "#" + aref(item)
98
- ]
99
- end
100
72
  end
101
73
  end
102
74
  end
@@ -1,21 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "rdoc"
4
-
5
- class_eval do
6
- include YARD::Templates::Helpers::ModuleHelper
7
- include YARD::Markdown::AnchorComponentHelper
8
- include YARD::Markdown::ArefHelper
9
- include YARD::Markdown::CollectionRenderingHelper
10
- include YARD::Markdown::DocumentationHelper
11
- include YARD::Markdown::HeadingHelper
12
- include YARD::Markdown::LinkNormalizationHelper
13
- include YARD::Markdown::MethodPresentationHelper
14
- include YARD::Markdown::ObjectListingHelper
15
- include YARD::Markdown::RelationshipSectionHelper
16
- include YARD::Markdown::SectionAssemblyHelper
17
- include YARD::Markdown::TagFormattingHelper
18
- end
3
+ include YARD::Templates::Helpers::ModuleHelper
4
+ include YARD::Markdown::CollectionRenderingHelper
5
+ include YARD::Markdown::DocumentationHelper
6
+ include YARD::Markdown::HeadingHelper
7
+ include YARD::Markdown::LinkNormalizationHelper
8
+ include YARD::Markdown::MethodPresentationHelper
9
+ include YARD::Markdown::ObjectListingHelper
10
+ include YARD::Markdown::RelationshipSectionHelper
11
+ include YARD::Markdown::SectionAssemblyHelper
12
+ include YARD::Markdown::TagFormattingHelper
19
13
 
20
14
  # Registers the sections rendered for a namespace markdown page.
21
15
  #
@@ -42,21 +36,11 @@ end
42
36
  # @return [String] Rendered markdown output.
43
37
  def run(opts = nil, sects = sections, start_at = 0, break_first = false, &block)
44
38
  output = super
45
- return output unless top_level_render?(sects, start_at, break_first)
39
+ return output unless !break_first && start_at.zero? && sects == sections
46
40
 
47
41
  finalize_markdown(output, options.serializer.serialized_path(object))
48
42
  end
49
43
 
50
- # Returns whether this invocation is rendering the full top-level page.
51
- #
52
- # @param sects [Array<Symbol>] Section names requested for rendering.
53
- # @param start_at [Integer] Starting index within `sects`.
54
- # @param break_first [Boolean] Whether rendering stops after the first section.
55
- # @return [Boolean] True when the whole page is being rendered in one pass.
56
- def top_level_render?(sects, start_at, break_first)
57
- !break_first && start_at.zero? && sects == sections
58
- end
59
-
60
44
  # Renders the page heading for the current object.
61
45
  #
62
46
  # @return [String] Markdown heading section.
metadata CHANGED
@@ -1,11 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yard-markdown
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stanislav (Stas) Katkov
8
- bindir: exe
8
+ bindir: bin
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
@@ -58,29 +58,10 @@ executables: []
58
58
  extensions: []
59
59
  extra_rdoc_files: []
60
60
  files:
61
- - ".editorconfig"
62
- - ".standard.yml"
63
- - ".streerc"
64
- - ".yard-lint.yml"
65
- - ".yardopts"
66
- - AGENTS.md
67
61
  - CHANGELOG.md
68
62
  - LICENSE.txt
69
63
  - README.md
70
- - Rakefile
71
- - config/mutant.yml
72
- - example/rdoc/Bird.md
73
- - example/rdoc/Duck.md
74
- - example/rdoc/Waterfowl.md
75
- - example/rdoc/index.csv
76
- - example/yard/Aquatic.md
77
- - example/yard/Fish.md
78
- - example/yard/Salmon.md
79
- - example/yard/index.csv
80
- - example_rdoc.rb
81
- - example_yard.rb
82
64
  - lib/yard-markdown.rb
83
- - lib/yard/markdown/anchor_component_helper.rb
84
65
  - lib/yard/markdown/aref_helper.rb
85
66
  - lib/yard/markdown/collection_rendering_helper.rb
86
67
  - lib/yard/markdown/documentation_helper.rb
@@ -91,7 +72,6 @@ files:
91
72
  - lib/yard/markdown/relationship_section_helper.rb
92
73
  - lib/yard/markdown/section_assembly_helper.rb
93
74
  - lib/yard/markdown/tag_formatting_helper.rb
94
- - sig/yard/markdown.rbs
95
75
  - templates/default/fulldoc/markdown/setup.rb
96
76
  - templates/default/module/markdown/setup.rb
97
77
  homepage: https://poshtui.com
data/.editorconfig DELETED
@@ -1,13 +0,0 @@
1
- # top-most EditorConfig file
2
- root = true
3
-
4
- # Unix-style newlines with a newline ending every file
5
- # Two spaces for indenting
6
- [*]
7
- end_of_line = lf
8
- insert_final_newline = true
9
- indent_style = space
10
- indent_size = 2
11
- charset = utf-8
12
- trim_trailing_whitespace = true
13
- max_line_length = 120
data/.standard.yml DELETED
@@ -1,3 +0,0 @@
1
- ignore:
2
- - "example_*.rb"
3
- - "test/example/example.rb"
data/.streerc DELETED
@@ -1,2 +0,0 @@
1
- --print-width=100
2
- --plugins=plugin/trailing_comma,disable_ternary