rdoc-markdown 0.9.0 → 0.10.0
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 +4 -4
- data/Appraisals +13 -0
- data/CHANGELOG.md +13 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +7 -1
- data/Rakefile +4 -1
- data/gemfiles/rdoc_7.gemfile +20 -0
- data/gemfiles/rdoc_8.gemfile +20 -0
- data/gemfiles/rdoc_head.gemfile +17 -2
- data/lib/rdoc/generator/markdown/rbs_signature_index.rb +125 -20
- data/lib/rdoc/generator/markdown.rb +15 -7
- data/lib/rdoc/markdown/version.rb +1 -1
- metadata +4 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a3af6b5292a9333e8e0749195f1b799f80015a2b23bc7c8bd47068f315671d5c
|
|
4
|
+
data.tar.gz: 759122408198407ee3f300ee7effa75e4f7d02cf765a989f30db4ee1d79b4fa9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e259a75c590f3414e036763c213a3b19e8df9d78a964155ba20ebb6b5ec440b25cca3b4a925fc39181100267079cd89e30db711aabb087b34245b72dc3ca9873
|
|
7
|
+
data.tar.gz: e70488f82388bdbb6e1bd8a99e32864da66c86adf2e8cf58f2ee3775523a9283002b30aa31f8a8d080cc70812d6efcee5300bffb665b4bf432b2fd8643db5a86
|
data/Appraisals
ADDED
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.10.0
|
|
6
|
+
|
|
7
|
+
- Reworked RDoc 8 support
|
|
8
|
+
|
|
9
|
+
## 0.9.0
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
- Render RDoc 8 inline and sidecar RBS signatures in Markdown method headings.
|
|
13
|
+
- Resolve explicit relative `.rbs` inputs against the directory where RDoc started, not the output directory.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
- Run CI against both RDoc 7 and RDoc 8 dependency sets.
|
|
17
|
+
|
|
5
18
|
## 0.8.0
|
|
6
19
|
|
|
7
20
|
### Added
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
rdoc-markdown (0.
|
|
4
|
+
rdoc-markdown (0.10.0)
|
|
5
5
|
csv
|
|
6
6
|
erb
|
|
7
7
|
rdoc
|
|
@@ -29,6 +29,10 @@ GEM
|
|
|
29
29
|
securerandom (>= 0.3)
|
|
30
30
|
tzinfo (~> 2.0, >= 2.0.5)
|
|
31
31
|
uri (>= 0.13.1)
|
|
32
|
+
appraisal (2.5.0)
|
|
33
|
+
bundler
|
|
34
|
+
rake
|
|
35
|
+
thor (>= 0.14.0)
|
|
32
36
|
ast (2.4.3)
|
|
33
37
|
base64 (0.3.0)
|
|
34
38
|
better_html (2.2.0)
|
|
@@ -167,6 +171,7 @@ GEM
|
|
|
167
171
|
lint_roller (~> 1.1)
|
|
168
172
|
rubocop-performance (~> 1.26.0)
|
|
169
173
|
stringio (3.2.0)
|
|
174
|
+
thor (1.5.0)
|
|
170
175
|
tsort (0.2.0)
|
|
171
176
|
tzinfo (2.0.6)
|
|
172
177
|
concurrent-ruby (~> 1.0)
|
|
@@ -188,6 +193,7 @@ PLATFORMS
|
|
|
188
193
|
x86_64-linux-gnu
|
|
189
194
|
|
|
190
195
|
DEPENDENCIES
|
|
196
|
+
appraisal
|
|
191
197
|
bundler (>= 2.0)
|
|
192
198
|
commonmarker
|
|
193
199
|
erb_lint
|
data/Rakefile
CHANGED
|
@@ -21,7 +21,10 @@ task default: [:test]
|
|
|
21
21
|
namespace :erb do
|
|
22
22
|
desc "Lint markdown ERB templates"
|
|
23
23
|
task :lint do
|
|
24
|
-
|
|
24
|
+
files = Dir["lib/templates/**/*.{md,markdown}.erb"]
|
|
25
|
+
raise "No markdown ERB templates found" if files.empty?
|
|
26
|
+
|
|
27
|
+
sh "bundle", "exec", "erb_lint", *files
|
|
25
28
|
end
|
|
26
29
|
end
|
|
27
30
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# This file was generated by Appraisal
|
|
2
|
+
|
|
3
|
+
source "https://rubygems.org"
|
|
4
|
+
|
|
5
|
+
gem "rake", "~> 13.0"
|
|
6
|
+
gem "appraisal"
|
|
7
|
+
gem "erb_lint", require: false
|
|
8
|
+
gem "minitest", "~> 5.0"
|
|
9
|
+
gem "standard"
|
|
10
|
+
gem "yard-lint"
|
|
11
|
+
|
|
12
|
+
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.3")
|
|
13
|
+
gem "mutant"
|
|
14
|
+
gem "mutant-minitest"
|
|
15
|
+
gem "mutex_m"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
gem "rdoc", "~> 7.0"
|
|
19
|
+
|
|
20
|
+
gemspec path: "../"
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# This file was generated by Appraisal
|
|
2
|
+
|
|
3
|
+
source "https://rubygems.org"
|
|
4
|
+
|
|
5
|
+
gem "rake", "~> 13.0"
|
|
6
|
+
gem "appraisal"
|
|
7
|
+
gem "erb_lint", require: false
|
|
8
|
+
gem "minitest", "~> 5.0"
|
|
9
|
+
gem "standard"
|
|
10
|
+
gem "yard-lint"
|
|
11
|
+
|
|
12
|
+
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.3")
|
|
13
|
+
gem "mutant"
|
|
14
|
+
gem "mutant-minitest"
|
|
15
|
+
gem "mutex_m"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
gem "rdoc", "~> 8.0"
|
|
19
|
+
|
|
20
|
+
gemspec path: "../"
|
data/gemfiles/rdoc_head.gemfile
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
|
-
#
|
|
1
|
+
# This file was generated by Appraisal
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
source "https://rubygems.org"
|
|
4
|
+
|
|
5
|
+
gem "rake", "~> 13.0"
|
|
6
|
+
gem "appraisal"
|
|
7
|
+
gem "erb_lint", require: false
|
|
8
|
+
gem "minitest", "~> 5.0"
|
|
9
|
+
gem "standard"
|
|
10
|
+
gem "yard-lint"
|
|
11
|
+
|
|
12
|
+
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.3")
|
|
13
|
+
gem "mutant"
|
|
14
|
+
gem "mutant-minitest"
|
|
15
|
+
gem "mutex_m"
|
|
16
|
+
end
|
|
4
17
|
|
|
5
18
|
gem "rdoc", git: "https://github.com/ruby/rdoc.git", branch: "master"
|
|
19
|
+
|
|
20
|
+
gemspec path: "../"
|
|
@@ -5,68 +5,161 @@ class RDoc::Generator::Markdown::RbsSignatureIndex
|
|
|
5
5
|
# Builds a signature index from RBS files included in an RDoc run.
|
|
6
6
|
#
|
|
7
7
|
# @param files [Array<String>] Input files passed to RDoc.
|
|
8
|
+
# @param base_dir [String, Pathname, nil] Directory where RDoc started.
|
|
9
|
+
# @param store [RDoc::Store, nil] Store containing Ruby code objects and RDoc 8 sidecar signatures.
|
|
8
10
|
#
|
|
9
11
|
# @return [RDoc::Generator::Markdown::RbsSignatureIndex] Signature index.
|
|
10
|
-
def self.build(files)
|
|
12
|
+
def self.build(files, base_dir = nil, store = nil)
|
|
11
13
|
rbs_files = files.select { |file| File.extname(file) == ".rbs" }
|
|
12
|
-
new(signatures_from(rbs_files))
|
|
14
|
+
new(signatures_from_store(store).merge(signatures_from(rbs_files, base_dir)))
|
|
13
15
|
end
|
|
14
16
|
|
|
15
17
|
# Builds signatures by reusing RBS's own RDoc parser.
|
|
16
18
|
#
|
|
17
19
|
# @param files [Array<String>] RBS files to parse.
|
|
20
|
+
# @param base_dir [String, Pathname, nil] Directory where RDoc started.
|
|
18
21
|
#
|
|
19
|
-
# @return [Hash{Array => String}] Signature lookup keyed by class and method.
|
|
20
|
-
def self.signatures_from(files)
|
|
22
|
+
# @return [Hash{Array => Array<String>}] Signature lookup keyed by class and method.
|
|
23
|
+
def self.signatures_from(files, base_dir)
|
|
21
24
|
files.each_with_object({}) do |file, signatures|
|
|
22
|
-
parsed_classes(file).each do |klass|
|
|
25
|
+
parsed_classes(file, base_dir).each do |klass|
|
|
23
26
|
klass.method_list.each do |method|
|
|
24
|
-
|
|
27
|
+
add_method_signature_lines(signatures, klass: klass, method: method, lines: rbs_signature_lines_from_method(method))
|
|
25
28
|
end
|
|
26
29
|
end
|
|
27
30
|
end
|
|
28
31
|
end
|
|
29
32
|
|
|
33
|
+
# Builds signatures already merged into an RDoc store.
|
|
34
|
+
#
|
|
35
|
+
# @param store [RDoc::Store, nil] Store containing Ruby code objects and RDoc 8 sidecar signatures.
|
|
36
|
+
#
|
|
37
|
+
# @return [Hash{Array => Array<String>}] Signature lookup keyed by class and method.
|
|
38
|
+
def self.signatures_from_store(store)
|
|
39
|
+
return {} unless store
|
|
40
|
+
|
|
41
|
+
store.all_classes_and_modules.each_with_object({}) do |klass, signatures|
|
|
42
|
+
klass.method_list.each do |method|
|
|
43
|
+
add_method_signature_lines(signatures, klass: klass, method: method, lines: store_signature_lines_from_method(method, store))
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
30
48
|
# Parses one RBS file into RDoc class/module objects.
|
|
31
49
|
#
|
|
32
50
|
# @param file [String] RBS file path.
|
|
51
|
+
# @param base_dir [String, Pathname, nil] Directory where RDoc started.
|
|
33
52
|
#
|
|
34
53
|
# @return [Array<RDoc::Context>] Classes and modules parsed from RBS.
|
|
35
|
-
def self.parsed_classes(file)
|
|
54
|
+
def self.parsed_classes(file, base_dir)
|
|
55
|
+
file_path = rbs_file_path(file, base_dir)
|
|
36
56
|
store = RDoc::Store.new(RDoc::Options.new)
|
|
37
|
-
top_level = store.add_file(
|
|
38
|
-
parser = RDoc::Parser.for(top_level, File.read(
|
|
57
|
+
top_level = store.add_file(file_path)
|
|
58
|
+
parser = RDoc::Parser.for(top_level, File.read(file_path), store.options, nil)
|
|
39
59
|
parser.scan
|
|
40
60
|
store.all_classes_and_modules
|
|
41
61
|
end
|
|
42
62
|
|
|
43
|
-
#
|
|
63
|
+
# Resolves an RBS file path against the directory RDoc started from.
|
|
64
|
+
# RDoc changes into the output directory before generators run.
|
|
65
|
+
#
|
|
66
|
+
# @param file [String] RBS file path passed to RDoc.
|
|
67
|
+
# @param base_dir [String, Pathname, nil] Directory where RDoc started.
|
|
68
|
+
#
|
|
69
|
+
# @return [String] Absolute or already absolute RBS file path.
|
|
70
|
+
def self.rbs_file_path(file, base_dir)
|
|
71
|
+
Pathname.new(file).expand_path(base_dir).to_s
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Adds resolved method signature lines to the lookup.
|
|
44
75
|
#
|
|
45
|
-
# @param signatures [Hash{Array => String}] Signature lookup being populated.
|
|
76
|
+
# @param signatures [Hash{Array => Array<String>}] Signature lookup being populated.
|
|
46
77
|
# @param klass [RDoc::Context] Method owner.
|
|
47
|
-
# @param method [RDoc::AnyMethod] Method
|
|
78
|
+
# @param method [RDoc::AnyMethod] Method object.
|
|
79
|
+
# @param lines [Array<String>] Signature text lines.
|
|
48
80
|
#
|
|
49
81
|
# @return [void]
|
|
50
|
-
def self.
|
|
51
|
-
|
|
82
|
+
def self.add_method_signature_lines(signatures, klass:, method:, lines:)
|
|
83
|
+
return if lines.empty?
|
|
84
|
+
|
|
85
|
+
signatures[[klass.full_name, method.singleton, method.name]] = lines
|
|
52
86
|
|
|
53
87
|
return unless method.name == "initialize" && !method.singleton
|
|
54
88
|
|
|
55
|
-
signatures[[klass.full_name, true, "new"]] =
|
|
89
|
+
signatures[[klass.full_name, true, "new"]] = lines
|
|
56
90
|
end
|
|
57
91
|
|
|
58
|
-
#
|
|
92
|
+
# Extracts explicit RBS method signature lines from RDoc parser output.
|
|
93
|
+
# RDoc 7 exposes parsed RBS signatures through `param_seq`; RDoc 8 stores
|
|
94
|
+
# them as `type_signature_lines`.
|
|
95
|
+
#
|
|
96
|
+
# @param method [RDoc::AnyMethod] Method parsed by RDoc's RBS parser.
|
|
97
|
+
#
|
|
98
|
+
# @return [Array<String>] RBS signature lines.
|
|
99
|
+
def self.rbs_signature_lines_from_method(method)
|
|
100
|
+
lines = method_type_signature_lines(method)
|
|
101
|
+
lines = method.param_seq if lines.empty?
|
|
102
|
+
nonblank_lines(lines)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Extracts RBS method signature lines already merged into a Ruby store.
|
|
106
|
+
# Unlike explicit RBS parser output, ordinary Ruby `param_seq` is not a type
|
|
107
|
+
# signature and must not populate the index.
|
|
108
|
+
#
|
|
109
|
+
# @param method [RDoc::AnyMethod] Method object from the Ruby store.
|
|
110
|
+
# @param store [RDoc::Store] Store with sidecar RBS signatures.
|
|
111
|
+
#
|
|
112
|
+
# @return [Array<String>] RBS signature lines.
|
|
113
|
+
def self.store_signature_lines_from_method(method, store)
|
|
114
|
+
lines = method_type_signature_lines(method)
|
|
115
|
+
lines = store_type_signature_lines(method, store) if lines.empty?
|
|
116
|
+
lines
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Extracts RDoc 8 inline type signatures from a method.
|
|
120
|
+
#
|
|
121
|
+
# @param method [RDoc::AnyMethod] Method object.
|
|
122
|
+
#
|
|
123
|
+
# @return [Array<String>] Signature lines.
|
|
124
|
+
def self.method_type_signature_lines(method)
|
|
125
|
+
return [] unless method.respond_to?(:type_signature_lines)
|
|
126
|
+
|
|
127
|
+
nonblank_lines(method.type_signature_lines)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# Extracts RDoc 8 sidecar signatures from a store.
|
|
131
|
+
#
|
|
132
|
+
# @param method [RDoc::AnyMethod] Method object.
|
|
133
|
+
# @param store [RDoc::Store, nil] Optional RDoc store with sidecar RBS signatures.
|
|
134
|
+
#
|
|
135
|
+
# @return [Array<String>] Signature lines.
|
|
136
|
+
def self.store_type_signature_lines(method, store)
|
|
137
|
+
return [] unless store.respond_to?(:rbs_signature_for)
|
|
138
|
+
|
|
139
|
+
nonblank_lines(store.rbs_signature_for(method))
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# Normalizes a signature-line value to non-blank strings.
|
|
143
|
+
#
|
|
144
|
+
# @param lines [Array<String>, String, nil] Signature text lines.
|
|
145
|
+
#
|
|
146
|
+
# @return [Array<String>] Non-blank signature lines.
|
|
147
|
+
def self.nonblank_lines(lines)
|
|
148
|
+
Array(lines).select { |line| line&.match?(/\S/) }
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# @param signatures [Hash{Array => Array<String>}] Signature lookup.
|
|
59
152
|
def initialize(signatures)
|
|
60
153
|
@signatures = signatures
|
|
61
154
|
end
|
|
62
155
|
|
|
63
|
-
# Looks up the RBS signature for an RDoc method.
|
|
156
|
+
# Looks up the RBS signature lines for an RDoc method.
|
|
64
157
|
#
|
|
65
158
|
# @param method [RDoc::AnyMethod] Method object to render.
|
|
66
159
|
#
|
|
67
|
-
# @return [String
|
|
68
|
-
def
|
|
69
|
-
@signatures[
|
|
160
|
+
# @return [Array<String>] RBS method type lines when available.
|
|
161
|
+
def signature_lines_for(method)
|
|
162
|
+
@signatures.fetch([method.parent.full_name, method.singleton, method.name], [])
|
|
70
163
|
end
|
|
71
164
|
|
|
72
165
|
# Checks whether any RBS signatures were parsed.
|
|
@@ -75,4 +168,16 @@ class RDoc::Generator::Markdown::RbsSignatureIndex
|
|
|
75
168
|
def any?
|
|
76
169
|
@signatures.any?
|
|
77
170
|
end
|
|
171
|
+
|
|
172
|
+
private_class_method \
|
|
173
|
+
:signatures_from,
|
|
174
|
+
:signatures_from_store,
|
|
175
|
+
:parsed_classes,
|
|
176
|
+
:rbs_file_path,
|
|
177
|
+
:add_method_signature_lines,
|
|
178
|
+
:rbs_signature_lines_from_method,
|
|
179
|
+
:store_signature_lines_from_method,
|
|
180
|
+
:method_type_signature_lines,
|
|
181
|
+
:store_type_signature_lines,
|
|
182
|
+
:nonblank_lines
|
|
78
183
|
end
|
|
@@ -386,13 +386,21 @@ class RDoc::Generator::Markdown
|
|
|
386
386
|
#
|
|
387
387
|
# @return [String] Normalized method signature.
|
|
388
388
|
def method_signature(method)
|
|
389
|
-
|
|
390
|
-
|
|
389
|
+
signatures = @rbs_method_signatures.signature_lines_for(method)
|
|
390
|
+
signatures = [method.param_seq] if signatures.empty?
|
|
391
391
|
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
392
|
+
signatures = signatures.filter_map do |signature|
|
|
393
|
+
next unless signature&.match?(/\S/)
|
|
394
|
+
|
|
395
|
+
signature = signature.gsub("->", " -> ")
|
|
396
|
+
signature = signature.gsub(/\s+/, " ").strip
|
|
397
|
+
signature = " #{signature}" if signature.start_with?("->")
|
|
398
|
+
merge_method_signature_arguments(signature, method.params)
|
|
399
|
+
end
|
|
400
|
+
|
|
401
|
+
return "()" if signatures.empty?
|
|
402
|
+
|
|
403
|
+
signatures.join(" | ")
|
|
396
404
|
end
|
|
397
405
|
|
|
398
406
|
# Checks whether this documentation set has parsed RBS signatures.
|
|
@@ -822,7 +830,7 @@ class RDoc::Generator::Markdown
|
|
|
822
830
|
@class_docs_by_object_id = @class_docs.to_h { |doc| [doc.fetch(:klass).object_id, doc] }
|
|
823
831
|
@classes = @class_docs.map { |doc| doc.fetch(:klass) }
|
|
824
832
|
@pages = @store.all_files.select(&:text?).select(&:display?).sort_by(&:base_name)
|
|
825
|
-
@rbs_method_signatures = RbsSignatureIndex.build(Array(@options.files))
|
|
833
|
+
@rbs_method_signatures = RbsSignatureIndex.build(Array(@options.files), @base_dir, @store)
|
|
826
834
|
|
|
827
835
|
@known_output_paths = Set.new
|
|
828
836
|
@class_docs.each do |doc|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rdoc-markdown
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.10.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Stanislav (Stas) Katkov
|
|
@@ -192,6 +192,7 @@ files:
|
|
|
192
192
|
- ".standard.yml"
|
|
193
193
|
- ".yard-lint.yml"
|
|
194
194
|
- AGENTS.md
|
|
195
|
+
- Appraisals
|
|
195
196
|
- CHANGELOG.md
|
|
196
197
|
- CODE_OF_CONDUCT.md
|
|
197
198
|
- Gemfile
|
|
@@ -216,6 +217,8 @@ files:
|
|
|
216
217
|
- example/jekyll-seo-tag/Liquid.md
|
|
217
218
|
- example/jekyll-seo-tag/Liquid/Tag.md
|
|
218
219
|
- example/jekyll-seo-tag/index.csv
|
|
220
|
+
- gemfiles/rdoc_7.gemfile
|
|
221
|
+
- gemfiles/rdoc_8.gemfile
|
|
219
222
|
- gemfiles/rdoc_head.gemfile
|
|
220
223
|
- lib/markdown.rb
|
|
221
224
|
- lib/rdoc/discover.rb
|