docrb 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +31 -41
- data/Gemfile +5 -1
- data/Gemfile.lock +28 -13
- data/docrb.gemspec +3 -5
- data/exe/docrb +39 -57
- data/lib/docrb/doc_compiler.rb +7 -47
- data/lib/docrb/version.rb +1 -1
- data/lib/docrb.rb +15 -54
- metadata +8 -55
- data/lib/docrb/comment_parser/code_example_block.rb +0 -36
- data/lib/docrb/comment_parser/code_example_parser.rb +0 -29
- data/lib/docrb/comment_parser/field_block.rb +0 -18
- data/lib/docrb/comment_parser/field_list_parser.rb +0 -90
- data/lib/docrb/comment_parser/text_block.rb +0 -43
- data/lib/docrb/comment_parser.rb +0 -272
- data/lib/docrb/doc_compiler/base_container/computations.rb +0 -178
- data/lib/docrb/doc_compiler/base_container.rb +0 -123
- data/lib/docrb/doc_compiler/doc_attribute.rb +0 -58
- data/lib/docrb/doc_compiler/doc_blocks.rb +0 -111
- data/lib/docrb/doc_compiler/doc_class.rb +0 -43
- data/lib/docrb/doc_compiler/doc_method.rb +0 -66
- data/lib/docrb/doc_compiler/doc_module.rb +0 -9
- data/lib/docrb/doc_compiler/file_ref.rb +0 -41
- data/lib/docrb/doc_compiler/object_container.rb +0 -68
- data/lib/docrb/markdown.rb +0 -62
- data/lib/docrb/module_extensions.rb +0 -13
- data/lib/docrb/resolvable.rb +0 -178
- data/lib/docrb/ruby_parser.rb +0 -630
data/lib/docrb/markdown.rb
DELETED
@@ -1,62 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Docrb
|
4
|
-
# Renderer provides a Redcarpet renderer with Rouge extensions
|
5
|
-
class Renderer < Redcarpet::Render::HTML
|
6
|
-
def initialize(extensions = {})
|
7
|
-
super extensions.merge(link_attributes: { target: "_blank" })
|
8
|
-
end
|
9
|
-
include Rouge::Plugins::Redcarpet
|
10
|
-
end
|
11
|
-
|
12
|
-
# InlineRenderer provides a renderer for inline contents. This renderer
|
13
|
-
# does not emit paragraph tags.
|
14
|
-
class InlineRenderer < Renderer
|
15
|
-
def paragraph(text)
|
16
|
-
text
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
# Markdown provides utilities for generating HTML from markdown contents
|
21
|
-
class Markdown
|
22
|
-
# Internal: Creates a new renderer based on a provided type by setting
|
23
|
-
# sensible defaults.
|
24
|
-
#
|
25
|
-
# type - Type of the renderer to be initialised. Use Docrb::Renderer or
|
26
|
-
# InlineRenderer
|
27
|
-
def self.make_render(type)
|
28
|
-
Redcarpet::Markdown.new(
|
29
|
-
type,
|
30
|
-
fenced_code_blocks: true,
|
31
|
-
autolink: true
|
32
|
-
)
|
33
|
-
end
|
34
|
-
|
35
|
-
# Renders a given input using the default renderer.
|
36
|
-
#
|
37
|
-
# input - Markdown content to be rendered
|
38
|
-
#
|
39
|
-
# Returns an HTML string containing the rendered Markdown content
|
40
|
-
def self.render(input)
|
41
|
-
make_render(Renderer).render(input)
|
42
|
-
end
|
43
|
-
|
44
|
-
# Renders a given input using the inline renderer.
|
45
|
-
#
|
46
|
-
# input - Markdown content to be rendered
|
47
|
-
#
|
48
|
-
# Returns an HTML string containing the rendered Markdown content
|
49
|
-
def self.inline(input)
|
50
|
-
make_render(InlineRenderer).render(input)
|
51
|
-
end
|
52
|
-
|
53
|
-
# Renders a given Ruby source code into HTML
|
54
|
-
#
|
55
|
-
# source - Source code to be rendered
|
56
|
-
#
|
57
|
-
# Returns an HTML string containing the rendered source code
|
58
|
-
def self.render_source(source)
|
59
|
-
render("```ruby\n#{source}\n```")
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
unless Class.respond_to? :try?
|
4
|
-
class Object
|
5
|
-
def try?(method, *args, **kwargs, &)
|
6
|
-
send(method, *args, **kwargs, &) if respond_to?(method)
|
7
|
-
end
|
8
|
-
|
9
|
-
def self.try?(method, *args, **kwargs, &)
|
10
|
-
send(method, *args, **kwargs, &) if respond_to?(method)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
data/lib/docrb/resolvable.rb
DELETED
@@ -1,178 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Docrb
|
4
|
-
# Resolvable implements utilities for resolving names and class paths on a
|
5
|
-
# container context (module/class)
|
6
|
-
class Resolvable
|
7
|
-
# Returns a matcher for a provided name
|
8
|
-
#
|
9
|
-
# name - Name to match against
|
10
|
-
def by_name(name)
|
11
|
-
->(obj) { obj.name == name }
|
12
|
-
end
|
13
|
-
|
14
|
-
# Returns a matcher for a provided name and type
|
15
|
-
#
|
16
|
-
# name - Name to match against
|
17
|
-
# type - Object type to match against (:def/:sdef/:class/:module...)
|
18
|
-
def by_name_and_type(name, type)
|
19
|
-
->(obj) { obj.name == name && obj.type == type }
|
20
|
-
end
|
21
|
-
|
22
|
-
# Attempts to resolve a method with a provided name in the container's
|
23
|
-
# context. This method attempts to match for instance methods, class
|
24
|
-
# methods, and finally by recursively calling this method on the inherited
|
25
|
-
# members, if any.
|
26
|
-
#
|
27
|
-
# name - Name of the method to be resolved.
|
28
|
-
#
|
29
|
-
# Returns a method structure, or nil, in case none is found.
|
30
|
-
def resolve_method(name)
|
31
|
-
if (local = try?(:defs)&.find(&by_name(name)))
|
32
|
-
return local
|
33
|
-
end
|
34
|
-
|
35
|
-
if (local = try?(:sdefs)&.find(&by_name(name)))
|
36
|
-
return local
|
37
|
-
end
|
38
|
-
|
39
|
-
# Inherited?
|
40
|
-
if (inherited = try?(:inherits)&.try?(:resolve_method, name, type))
|
41
|
-
return inherited
|
42
|
-
end
|
43
|
-
|
44
|
-
nil
|
45
|
-
end
|
46
|
-
|
47
|
-
# Resolves a container using a provided reference.
|
48
|
-
#
|
49
|
-
# ref - Either a reference hash (containing :class_path, :target, :name), or
|
50
|
-
# a symbol representing the name of the container being resolved.
|
51
|
-
#
|
52
|
-
# Returns a matched container or nil, in case none is found.
|
53
|
-
def resolve_container(ref)
|
54
|
-
if ref.is_a? Hash
|
55
|
-
path = ref
|
56
|
-
.slice(:class_path, :target, :name)
|
57
|
-
.values
|
58
|
-
.flatten
|
59
|
-
.compact
|
60
|
-
return resolve_container(path)
|
61
|
-
end
|
62
|
-
|
63
|
-
ref = [ref] if ref.is_a? Symbol
|
64
|
-
|
65
|
-
if ref.length == 1
|
66
|
-
name = ref.first
|
67
|
-
# module?
|
68
|
-
if (mod = try?(:modules)&.find(&by_name(name)))
|
69
|
-
return mod
|
70
|
-
end
|
71
|
-
|
72
|
-
# class?
|
73
|
-
if (cls = try?(:classes)&.find(&by_name(name)))
|
74
|
-
return cls
|
75
|
-
end
|
76
|
-
|
77
|
-
# parent?
|
78
|
-
return @parent&.resolve_container(ref)
|
79
|
-
end
|
80
|
-
|
81
|
-
obj = self
|
82
|
-
while ref.length.positive?
|
83
|
-
obj = resolve_container(ref.shift)
|
84
|
-
return nil if obj.nil?
|
85
|
-
end
|
86
|
-
|
87
|
-
obj
|
88
|
-
end
|
89
|
-
|
90
|
-
# Resolves a provided name in the current containter's context. This method
|
91
|
-
# will attempt to return an object matching the provided name by looking for
|
92
|
-
# it in the following subcontainers: modules, classes, methods, attributes,
|
93
|
-
# and recursively performing the resolution on the container's parent, if
|
94
|
-
# any.
|
95
|
-
#
|
96
|
-
# name - Name of the object being resolved
|
97
|
-
#
|
98
|
-
# Returns the first object found by the provided name, or nil, in case none
|
99
|
-
# is found.
|
100
|
-
def resolve(name)
|
101
|
-
return nil if name.nil?
|
102
|
-
|
103
|
-
name = name.to_sym
|
104
|
-
|
105
|
-
# module?
|
106
|
-
if (mod = try?(:modules)&.find(&by_name(name)))
|
107
|
-
return mod
|
108
|
-
end
|
109
|
-
|
110
|
-
# class?
|
111
|
-
if (cls = try?(:classes)&.find(&by_name(name)))
|
112
|
-
return cls
|
113
|
-
end
|
114
|
-
|
115
|
-
# method?
|
116
|
-
if (met = resolve_method(name))
|
117
|
-
return met
|
118
|
-
end
|
119
|
-
|
120
|
-
# attribute?
|
121
|
-
if (att = try?(:attributes)&.find(&by_name(name)))
|
122
|
-
return att
|
123
|
-
end
|
124
|
-
|
125
|
-
if (obj = @parent&.resolve(name))
|
126
|
-
return obj
|
127
|
-
end
|
128
|
-
|
129
|
-
nil
|
130
|
-
end
|
131
|
-
|
132
|
-
# Resolves a provided ref by creating its path string representation and
|
133
|
-
# calling #resolve_qualified
|
134
|
-
#
|
135
|
-
# ref - Hash representing the reference being resolved.
|
136
|
-
#
|
137
|
-
# Returns the object under the provided reference, or nil.
|
138
|
-
def resolve_ref(ref)
|
139
|
-
path = ref
|
140
|
-
.slice(:class_path, :target, :name)
|
141
|
-
.values
|
142
|
-
.flatten
|
143
|
-
.compact
|
144
|
-
return resolve_qualified(path.join("::")) if path.length > 1
|
145
|
-
|
146
|
-
resolve(path[0])
|
147
|
-
end
|
148
|
-
|
149
|
-
# Resolves a qualified path under the current container's context.
|
150
|
-
#
|
151
|
-
# path - Path of the object being resolved. Must be a string containing the
|
152
|
-
# object name being searched, or a classpath for it (e.g.
|
153
|
-
# `Foo::Bar::Baz`)
|
154
|
-
def resolve_qualified(path)
|
155
|
-
components = path.split("::").map(&:to_sym)
|
156
|
-
obj = root
|
157
|
-
until components.empty?
|
158
|
-
obj = obj.resolve(components.shift)
|
159
|
-
break if obj.nil?
|
160
|
-
end
|
161
|
-
obj
|
162
|
-
end
|
163
|
-
|
164
|
-
# Returns the root object for the current container
|
165
|
-
def root
|
166
|
-
obj = self
|
167
|
-
obj = obj.parent while obj.parent
|
168
|
-
obj
|
169
|
-
end
|
170
|
-
|
171
|
-
# Returns the container's full qualified path
|
172
|
-
def path
|
173
|
-
return [] if parent.nil?
|
174
|
-
|
175
|
-
parent.path + [name]
|
176
|
-
end
|
177
|
-
end
|
178
|
-
end
|