jsduck 4.0.beta → 4.0.beta2
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.
- data/README.md +3 -0
- data/Rakefile +6 -0
- data/bin/compare +199 -37
- data/bin/graph +52 -0
- data/jsduck.gemspec +2 -2
- data/lib/jsduck/aggregator.rb +6 -0
- data/lib/jsduck/app.rb +7 -4
- data/lib/jsduck/ast.rb +44 -14
- data/lib/jsduck/class.rb +8 -2
- data/lib/jsduck/class_writer.rb +2 -3
- data/lib/jsduck/doc_ast.rb +10 -0
- data/lib/jsduck/doc_formatter.rb +7 -7
- data/lib/jsduck/doc_parser.rb +12 -0
- data/lib/jsduck/enum.rb +73 -0
- data/lib/jsduck/guide_writer.rb +2 -3
- data/lib/jsduck/guides.rb +11 -12
- data/lib/jsduck/importer.rb +102 -0
- data/lib/jsduck/inherit_doc.rb +26 -15
- data/lib/jsduck/lint.rb +10 -0
- data/lib/jsduck/logger.rb +3 -0
- data/lib/jsduck/markdown.rb +46 -0
- data/lib/jsduck/merger.rb +3 -1
- data/lib/jsduck/options.rb +17 -4
- data/lib/jsduck/parallel_wrap.rb +10 -9
- data/lib/jsduck/renderer.rb +21 -0
- data/lib/jsduck/source_file.rb +1 -1
- data/lib/jsduck/source_file_parser.rb +0 -2
- data/lib/jsduck/source_writer.rb +3 -3
- data/lib/jsduck/tag/new.rb +20 -0
- data/lib/jsduck/tag/since.rb +26 -0
- data/lib/jsduck/type_parser.rb +25 -1
- metadata +9 -3
data/README.md
CHANGED
@@ -41,7 +41,10 @@ For **Windows** users out there, you can download the binary version,
|
|
41
41
|
which includes Ruby interpreter and all dependencies bundled in a
|
42
42
|
single .exe file. Grab it from the [download page][].
|
43
43
|
|
44
|
+
If you are brave enough: [try out JSDuck 4.0 beta.][beta]
|
45
|
+
|
44
46
|
[download page]: https://github.com/senchalabs/jsduck/downloads
|
47
|
+
[beta]: https://github.com/senchalabs/jsduck/wiki/4.0-beta
|
45
48
|
|
46
49
|
Usage
|
47
50
|
-----
|
data/Rakefile
CHANGED
@@ -233,6 +233,12 @@ task :sdk => :sass do
|
|
233
233
|
"--output", OUT_DIR,
|
234
234
|
"--config", "#{SDK_DIR}/extjs/docs/config.json",
|
235
235
|
"--examples-base-url", "extjs-build/examples/",
|
236
|
+
"--import", "Ext JS 1:compare/ext11",
|
237
|
+
"--import", "Ext JS 2:compare/ext23",
|
238
|
+
"--import", "Ext JS 3:compare/ext34",
|
239
|
+
"--import", "Ext JS 4.0.7:compare/ext407",
|
240
|
+
"--import", "Ext JS 4.1.0:compare/ext410",
|
241
|
+
"--import", "Ext JS 4.1.1",
|
236
242
|
"--seo",
|
237
243
|
"--tests"
|
238
244
|
)
|
data/bin/compare
CHANGED
@@ -1,22 +1,80 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
#
|
2
|
+
# Produces diff of two JSDuck exports.
|
3
3
|
|
4
4
|
# For running when gem not installed
|
5
5
|
$:.unshift File.dirname(File.dirname(__FILE__)) + "/lib"
|
6
6
|
|
7
7
|
require "rubygems"
|
8
|
+
require "cgi"
|
9
|
+
require "optparse"
|
8
10
|
require "jsduck/json_duck"
|
9
11
|
|
12
|
+
options = {
|
13
|
+
:title => "Comparison of Ext 4.0.7 and Ext 4.1.1",
|
14
|
+
}
|
15
|
+
|
16
|
+
input_files = OptionParser.new do |opts|
|
17
|
+
opts.banner = "Produces diff of two JSDuck exports.\n\n" +
|
18
|
+
"Usage: compare [options] old/classes/ new/classes/ output.html\n\n"
|
19
|
+
|
20
|
+
opts.on("--ignore=FILE", "A file listing members to be ignored") do |file|
|
21
|
+
options[:ignore] = file
|
22
|
+
end
|
23
|
+
|
24
|
+
opts.on("--type=NAME", "Only produce diff of cfg, property, method or event.") do |name|
|
25
|
+
options[:type] = name
|
26
|
+
end
|
27
|
+
|
28
|
+
opts.on("--title=TEXT", "Title for the generated HTML page.",
|
29
|
+
"Defaults to: 'Comparison of Ext 4.0.7 and Ext 4.1.1'") do |text|
|
30
|
+
options[:title] = text
|
31
|
+
end
|
32
|
+
|
33
|
+
opts.on("-h", "--help", "Show this help message") do
|
34
|
+
puts opts
|
35
|
+
exit
|
36
|
+
end
|
37
|
+
end.parse!
|
38
|
+
|
39
|
+
if input_files.length == 3
|
40
|
+
options[:old_classes] = input_files[0]
|
41
|
+
options[:new_classes] = input_files[1]
|
42
|
+
options[:out_file] = input_files[2]
|
43
|
+
else
|
44
|
+
puts "You must specify exactly 3 filenames: old/classes/ new/classes/ output.html"
|
45
|
+
exit 1
|
46
|
+
end
|
47
|
+
|
48
|
+
|
10
49
|
def read_class(filename)
|
11
50
|
JsDuck::JsonDuck.read(filename)
|
12
51
|
end
|
13
52
|
|
53
|
+
# loops through all members of class
|
54
|
+
def each_member(cls)
|
55
|
+
["members", "statics"].each do |category|
|
56
|
+
cls[category].each_pair do |k, members|
|
57
|
+
members.each do |m|
|
58
|
+
yield m
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def discard_docs(cls)
|
65
|
+
each_member(cls) do |m|
|
66
|
+
m["doc"] = nil
|
67
|
+
m["params"] = nil
|
68
|
+
end
|
69
|
+
cls
|
70
|
+
end
|
71
|
+
|
14
72
|
def read_all_classes(dir, ignore_private=false)
|
15
73
|
map = {}
|
16
74
|
Dir[dir+"/*.json"].each do |filename|
|
17
75
|
print "."
|
18
76
|
STDOUT.flush
|
19
|
-
cls = read_class(filename)
|
77
|
+
cls = discard_docs(read_class(filename))
|
20
78
|
unless ignore_private && cls["private"]
|
21
79
|
map[cls["name"]] = cls
|
22
80
|
cls["alternateClassNames"].each do |name|
|
@@ -40,42 +98,136 @@ def normal_public_member?(m)
|
|
40
98
|
!m["private"] && !m["meta"]["protected"] && !m["meta"]["deprecated"] && !m["meta"]["removed"]
|
41
99
|
end
|
42
100
|
|
43
|
-
|
44
|
-
|
45
|
-
|
101
|
+
def unify_default(v)
|
102
|
+
(v || "undefined").gsub(/"/, "'").sub(/^Ext\.baseCSSPrefix \+ '/, "'x-")
|
103
|
+
end
|
104
|
+
|
105
|
+
def visibility(m)
|
106
|
+
if m["private"]
|
107
|
+
"private"
|
108
|
+
elsif m["meta"]["protected"]
|
109
|
+
"protected"
|
110
|
+
else
|
111
|
+
"public"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
# Finds equivalent member to given member from class.
|
116
|
+
# Returns the member found or nil.
|
117
|
+
def find_member(cls, member)
|
118
|
+
cls[member["meta"]["static"] ? "statics" : "members"][member["tagname"]].find do |m|
|
119
|
+
member["name"] == m["name"]
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
|
124
|
+
# Compares members of cls1 to cls2.
|
125
|
+
# Returns diff array of added, removed and changed members.
|
126
|
+
def compare_classes(cls1, cls2)
|
46
127
|
diff = []
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
128
|
+
|
129
|
+
checked_members = {}
|
130
|
+
|
131
|
+
each_member(cls1) do |m1|
|
132
|
+
next unless normal_public_member?(m1) && m1["owner"] == cls1["name"]
|
133
|
+
|
134
|
+
checked_members[m1["id"]] = true
|
135
|
+
|
136
|
+
m2 = find_member(cls2, m1)
|
137
|
+
|
138
|
+
if m2
|
139
|
+
changes = []
|
140
|
+
if m1["type"] != m2["type"]
|
141
|
+
changes << {
|
142
|
+
:what => "type",
|
143
|
+
:a => m1["type"],
|
144
|
+
:b => m2["type"],
|
145
|
+
}
|
51
146
|
end
|
52
|
-
if
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
147
|
+
if unify_default(m1["default"]) != unify_default(m2["default"])
|
148
|
+
changes << {
|
149
|
+
:what => "default",
|
150
|
+
:a => unify_default(m1["default"]),
|
151
|
+
:b => unify_default(m2["default"]),
|
152
|
+
}
|
153
|
+
end
|
154
|
+
if visibility(m1) != visibility(m2)
|
155
|
+
changes << {
|
156
|
+
:what => "visibility",
|
157
|
+
:a => visibility(m1),
|
158
|
+
:b => visibility(m2),
|
159
|
+
}
|
160
|
+
end
|
161
|
+
|
162
|
+
if changes.length > 0
|
58
163
|
diff << {
|
59
|
-
:type =>
|
164
|
+
:type => m1["tagname"],
|
60
165
|
:name => m1["name"],
|
61
|
-
:
|
62
|
-
|
63
|
-
:static => other["meta"]["static"],
|
64
|
-
:private => other["private"],
|
65
|
-
:protected => other["meta"]["protected"],
|
66
|
-
} : nil
|
166
|
+
:what => "changed",
|
167
|
+
:changes => changes,
|
67
168
|
}
|
68
169
|
end
|
170
|
+
|
171
|
+
elsif !m2 && m1["name"] != "constructor" && m1["name"] != ""
|
172
|
+
other = nil
|
173
|
+
["cfg", "property", "method", "event"].each do |g|
|
174
|
+
other = other || cls2["members"][g].find {|m2| m2["name"] == m1["name"] }
|
175
|
+
other = other || cls2["statics"][g].find {|m2| m2["name"] == m1["name"] }
|
176
|
+
end
|
177
|
+
diff << {
|
178
|
+
:type => m1["tagname"],
|
179
|
+
:name => m1["name"],
|
180
|
+
:what => "removed",
|
181
|
+
:other => other ? {
|
182
|
+
:type => other["tagname"],
|
183
|
+
:static => other["meta"]["static"],
|
184
|
+
:private => other["private"],
|
185
|
+
:protected => other["meta"]["protected"],
|
186
|
+
} : nil
|
187
|
+
}
|
69
188
|
end
|
70
189
|
end
|
190
|
+
|
191
|
+
each_member(cls2) do |m2|
|
192
|
+
next unless normal_public_member?(m2) && m2["owner"] == cls2["name"] && !checked_members[m2["id"]]
|
193
|
+
|
194
|
+
m1 = find_member(cls1, m2)
|
195
|
+
|
196
|
+
if m1
|
197
|
+
changes = []
|
198
|
+
if visibility(m1) != visibility(m2)
|
199
|
+
changes << {
|
200
|
+
:what => "visibility",
|
201
|
+
:a => visibility(m1),
|
202
|
+
:b => visibility(m2),
|
203
|
+
}
|
204
|
+
end
|
205
|
+
|
206
|
+
if changes.length > 0
|
207
|
+
diff << {
|
208
|
+
:type => m2["tagname"],
|
209
|
+
:name => m2["name"],
|
210
|
+
:what => "changed",
|
211
|
+
:changes => changes,
|
212
|
+
}
|
213
|
+
end
|
214
|
+
|
215
|
+
elsif !m1 && m2["name"] != "constructor" && m2["name"] != ""
|
216
|
+
diff << {
|
217
|
+
:type => m2["tagname"],
|
218
|
+
:name => m2["name"],
|
219
|
+
:what => "added",
|
220
|
+
}
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
71
224
|
diff
|
72
225
|
end
|
73
226
|
|
74
227
|
|
75
|
-
old_classes = read_all_classes(
|
76
|
-
new_classes = read_all_classes(
|
77
|
-
|
78
|
-
ignored_members = ARGV[3] ? read_ignored_members(ARGV[3]) : {}
|
228
|
+
old_classes = read_all_classes(options[:old_classes], :ignore_private)
|
229
|
+
new_classes = read_all_classes(options[:new_classes])
|
230
|
+
ignored_members = options[:ignore] ? read_ignored_members(options[:ignore]) : {}
|
79
231
|
|
80
232
|
# Explicit remapping of classes
|
81
233
|
remap = {
|
@@ -101,16 +253,23 @@ old_classes.each_pair do |name, cls|
|
|
101
253
|
:name => cls["name"],
|
102
254
|
:found => !!new_cls || ignored_members[name],
|
103
255
|
:new_name => new_cls && new_cls["name"],
|
104
|
-
:diff => new_cls ? compare_classes(cls, new_cls
|
256
|
+
:diff => new_cls ? compare_classes(cls, new_cls) : [],
|
105
257
|
}
|
106
258
|
end
|
107
259
|
end
|
108
260
|
|
261
|
+
# Throw away ignored members and everything except configs
|
262
|
+
diff_data.each do |cls|
|
263
|
+
cls[:diff] = cls[:diff].find_all do |m|
|
264
|
+
!ignored_members[cls[:name]+"#"+m[:name]] && (!options[:type] || m[:type] == options[:type])
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
109
268
|
# Choose title based on filename
|
110
|
-
if out_file =~ /touch/
|
269
|
+
if options[:out_file] =~ /touch/
|
111
270
|
title = "Comparison of Touch 1.1.1 and Touch 2.0.0"
|
112
271
|
else
|
113
|
-
title = "Comparison of Ext 4.0.7 and Ext 4.1.
|
272
|
+
title = "Comparison of Ext 4.0.7 and Ext 4.1.1"
|
114
273
|
end
|
115
274
|
|
116
275
|
# do HTML output
|
@@ -119,7 +278,7 @@ html << <<-EOHTML
|
|
119
278
|
<!DOCTYPE html>
|
120
279
|
<html>
|
121
280
|
<head>
|
122
|
-
<title>#{title}</title>
|
281
|
+
<title>#{options[:title]}</title>
|
123
282
|
<style type="text/css">
|
124
283
|
body { font-family: Georgia, serif; }
|
125
284
|
li h2 { font-size: medium; font-weight: normal; }
|
@@ -136,7 +295,7 @@ $(function() {
|
|
136
295
|
</script>
|
137
296
|
</head>
|
138
297
|
<body>
|
139
|
-
<h1>#{title}</h1>
|
298
|
+
<h1>#{options[:title]}</h1>
|
140
299
|
EOHTML
|
141
300
|
|
142
301
|
html << "<ul>"
|
@@ -146,20 +305,24 @@ diff_data.each do |cls|
|
|
146
305
|
html << "<li>"
|
147
306
|
if cls[:found]
|
148
307
|
new_name = (cls[:new_name] == cls[:name] ? "" : " --> " + cls[:new_name])
|
149
|
-
diff_count = cls[:diff].length > 0 ? "(#{cls[:diff].length}
|
308
|
+
diff_count = cls[:diff].length > 0 ? "(#{cls[:diff].length} changes)" : ""
|
150
309
|
link = cls[:diff].length > 0 ? "<a href='#expand'>#{cls[:name]}</a>" : cls[:name]
|
151
310
|
html << "<h2>#{link} #{new_name} #{diff_count}</h2>"
|
152
311
|
if cls[:diff].length > 0
|
153
312
|
html << "<ul>"
|
154
313
|
cls[:diff].each do |m|
|
155
314
|
html << "<li>"
|
156
|
-
html << m[:type] + " " + m[:name]
|
315
|
+
html << m[:what] + " " + m[:type] + " " + m[:name]
|
157
316
|
if m[:other]
|
158
317
|
o = m[:other]
|
159
318
|
stat = o[:static] ? 'static' : ''
|
160
319
|
priv = o[:private] ? 'private' : ''
|
161
320
|
prot = o[:protected] ? 'protected' : ''
|
162
321
|
html << " (found #{stat} #{priv} #{prot} #{o[:type]} with the same name)"
|
322
|
+
elsif m[:changes]
|
323
|
+
m[:changes].each do |c|
|
324
|
+
html << " (#{c[:what]} changed from #{CGI.escapeHTML(c[:a])} to #{CGI.escapeHTML(c[:b])})"
|
325
|
+
end
|
163
326
|
end
|
164
327
|
html << "</li>"
|
165
328
|
end
|
@@ -178,12 +341,11 @@ dd = diff_data
|
|
178
341
|
html << "<p>" + dd.find_all {|c| !c[:found] }.length.to_s + " classes not found</p>"
|
179
342
|
html << "<p>" + dd.find_all {|c| c[:found] && c[:name] == c[:new_name] }.length.to_s + " classes with same name</p>"
|
180
343
|
html << "<p>" + dd.find_all {|c| c[:found] && c[:name] != c[:new_name] }.length.to_s + " renamed classes</p>"
|
181
|
-
html << "<p>" + dd.find_all {|c| c[:diff].length > 0 }.length.to_s + " classes with
|
182
|
-
html << "<p>" + dd.map {|c| c[:diff].length }.inject {|sum,x| sum + x }.to_s + "
|
183
|
-
html << "<p>" + dd.map {|c| c[:diff].find_all {|m| !m[:other]}.length }.inject {|sum,x| sum + x }.to_s + " completely missing members</p>"
|
344
|
+
html << "<p>" + dd.find_all {|c| c[:diff].length > 0 }.length.to_s + " classes with changed members</p>"
|
345
|
+
html << "<p>" + dd.map {|c| c[:diff].length }.inject {|sum,x| sum + x }.to_s + " changed members</p>"
|
184
346
|
|
185
347
|
|
186
348
|
html << "</body>"
|
187
349
|
html << "</html>"
|
188
350
|
|
189
|
-
File.open(out_file, 'w') {|f| f.write(html.join("\n")) }
|
351
|
+
File.open(options[:out_file], 'w') {|f| f.write(html.join("\n")) }
|
data/bin/graph
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# For running when gem not installed
|
4
|
+
$:.unshift File.dirname(File.dirname(__FILE__)) + "/lib"
|
5
|
+
|
6
|
+
require "rubygems"
|
7
|
+
require "pp"
|
8
|
+
require "jsduck/json_duck"
|
9
|
+
|
10
|
+
def with_each_class(dir)
|
11
|
+
Dir[dir+"/*.json"].each do |filename|
|
12
|
+
yield JsDuck::JsonDuck.read(filename)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def quote(a)
|
17
|
+
'"'+a+'"'
|
18
|
+
end
|
19
|
+
|
20
|
+
def arrow(a, b, opts="")
|
21
|
+
" #{quote(a)}->#{quote(b)} #{opts};"
|
22
|
+
end
|
23
|
+
|
24
|
+
input_dir = ARGV[0]
|
25
|
+
|
26
|
+
# Build a map that links each classname or alternate classname to its
|
27
|
+
# canonical form
|
28
|
+
$canonical_map = {}
|
29
|
+
with_each_class(input_dir) do |cls|
|
30
|
+
$canonical_map[cls["name"]] = cls["name"]
|
31
|
+
cls["alternateClassNames"].each do |name|
|
32
|
+
$canonical_map[name] = cls["name"]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def canonical(name)
|
37
|
+
$canonical_map[name] || name
|
38
|
+
end
|
39
|
+
|
40
|
+
# Print out the graph description
|
41
|
+
puts 'digraph G {'
|
42
|
+
puts 'rankdir=LR;'
|
43
|
+
with_each_class(input_dir) do |cls|
|
44
|
+
if cls["extends"] && cls["extends"] != "Object"
|
45
|
+
puts arrow(canonical(cls["extends"]), cls['name'], '[style=bold,weight=10]')
|
46
|
+
end
|
47
|
+
if cls["mixins"]
|
48
|
+
cls["mixins"].each {|mx| puts arrow(canonical(mx), cls['name'], '[weight=1,style=dashed]') }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
puts '}'
|
52
|
+
|
data/jsduck.gemspec
CHANGED
@@ -2,8 +2,8 @@ Gem::Specification.new do |s|
|
|
2
2
|
s.required_rubygems_version = ">= 1.3.5"
|
3
3
|
|
4
4
|
s.name = 'jsduck'
|
5
|
-
s.version = '4.0.
|
6
|
-
s.date = '2012-
|
5
|
+
s.version = '4.0.beta2'
|
6
|
+
s.date = '2012-08-01'
|
7
7
|
s.summary = "Simple JavaScript Duckumentation generator"
|
8
8
|
s.description = "Documentation generator for Sencha JS frameworks"
|
9
9
|
s.homepage = "https://github.com/senchalabs/jsduck"
|
data/lib/jsduck/aggregator.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'jsduck/class'
|
2
2
|
require 'jsduck/accessors'
|
3
3
|
require 'jsduck/logger'
|
4
|
+
require 'jsduck/enum'
|
4
5
|
|
5
6
|
module JsDuck
|
6
7
|
|
@@ -228,6 +229,11 @@ module JsDuck
|
|
228
229
|
end
|
229
230
|
end
|
230
231
|
|
232
|
+
# Loops through all enums and auto-detects their types if needed.
|
233
|
+
def process_enums
|
234
|
+
Enum.new(@classes).process_all!
|
235
|
+
end
|
236
|
+
|
231
237
|
# Are we dealing with ExtJS 4?
|
232
238
|
# True if any of the classes is defined with Ext.define()
|
233
239
|
def ext4?
|
data/lib/jsduck/app.rb
CHANGED
@@ -11,6 +11,7 @@ require 'jsduck/logger'
|
|
11
11
|
require 'jsduck/assets'
|
12
12
|
require 'jsduck/json_duck'
|
13
13
|
require 'jsduck/io'
|
14
|
+
require 'jsduck/importer'
|
14
15
|
require 'jsduck/lint'
|
15
16
|
require 'jsduck/template_dir'
|
16
17
|
require 'jsduck/class_writer'
|
@@ -35,7 +36,7 @@ module JsDuck
|
|
35
36
|
@opts = opts
|
36
37
|
# Sets the nr of parallel processes to use.
|
37
38
|
# Set to 0 to disable parallelization completely.
|
38
|
-
|
39
|
+
ParallelWrap.in_processes = @opts.processes
|
39
40
|
# Turn JSON pretty-printing on/off
|
40
41
|
JsonDuck.pretty = @opts.pretty_json
|
41
42
|
end
|
@@ -46,6 +47,7 @@ module JsDuck
|
|
46
47
|
result = aggregate(parsed_files)
|
47
48
|
@relations = filter_classes(result)
|
48
49
|
InheritDoc.new(@relations).resolve_all
|
50
|
+
Importer.import(@opts.imports, @relations)
|
49
51
|
Lint.new(@relations).run
|
50
52
|
|
51
53
|
# Initialize guides, videos, examples, ...
|
@@ -81,7 +83,7 @@ module JsDuck
|
|
81
83
|
# between source files and classes. Therefore it MUST to be done
|
82
84
|
# after writing sources which needs the links to work.
|
83
85
|
if @opts.source
|
84
|
-
source_writer = SourceWriter.new(parsed_files
|
86
|
+
source_writer = SourceWriter.new(parsed_files)
|
85
87
|
source_writer.write(@opts.output_dir + "/source")
|
86
88
|
end
|
87
89
|
format_classes
|
@@ -102,7 +104,7 @@ module JsDuck
|
|
102
104
|
|
103
105
|
# Parses the files in parallel using as many processes as available CPU-s
|
104
106
|
def parallel_parse(filenames)
|
105
|
-
|
107
|
+
ParallelWrap.map(filenames) do |fname|
|
106
108
|
Logger.instance.log("Parsing", fname)
|
107
109
|
begin
|
108
110
|
SourceFile.new(JsDuck::IO.read(fname), fname, @opts)
|
@@ -125,6 +127,7 @@ module JsDuck
|
|
125
127
|
agr.remove_ignored_classes
|
126
128
|
agr.create_accessors
|
127
129
|
agr.append_ext4_event_options
|
130
|
+
agr.process_enums
|
128
131
|
agr.result
|
129
132
|
end
|
130
133
|
|
@@ -162,7 +165,7 @@ module JsDuck
|
|
162
165
|
# Don't format types when exporting
|
163
166
|
class_formatter.include_types = !@opts.export
|
164
167
|
# Format all doc-objects in parallel
|
165
|
-
formatted_classes =
|
168
|
+
formatted_classes = ParallelWrap.map(@relations.classes) do |cls|
|
166
169
|
Logger.instance.log("Markdown formatting #{cls[:name]}")
|
167
170
|
begin
|
168
171
|
{
|