jsduck 5.2.0 → 5.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README.md +2 -0
- data/lib/jsduck/batch_parser.rb +20 -3
- data/lib/jsduck/cache.rb +137 -0
- data/lib/jsduck/class_writer.rb +2 -1
- data/lib/jsduck/export_writer.rb +2 -1
- data/lib/jsduck/js/class.rb +2 -2
- data/lib/jsduck/js/method.rb +1 -1
- data/lib/jsduck/js/property.rb +12 -3
- data/lib/jsduck/js/rkelly_adapter.rb +39 -23
- data/lib/jsduck/options.rb +74 -19
- data/lib/jsduck/output_dir.rb +29 -0
- data/lib/jsduck/tag/deprecated.rb +4 -0
- data/lib/jsduck/tag/deprecated_tag.rb +6 -4
- data/lib/jsduck/tag/experimental.rb +28 -0
- data/lib/jsduck/tag/removed.rb +5 -1
- data/lib/jsduck/web/template.rb +0 -1
- data/lib/jsduck/web/writer.rb +8 -2
- data/template-min/README.md +1 -1
- data/template-min/{app-b895bbbc1ef610321296135e5054108f.js → app-62eb26a2d94c140c86796839b6ea1cb3.js} +1 -1
- data/template-min/template.html +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
Yjc3MDZjMmZlYWNkOGMzNzQ4MTdlZTA2MGU4M2Y3OWE1MmE5OWQ4MA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZDkwMmFjOWQ1MTRlYzYxYWIzZjRhNThjMDlhNDc2YzBhZDU1ZjA0OQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MjBlMjA4YzMwNTQzOTFmODE4MDcxNmJiZTU1OGMxY2FjOWVjZTNkZjViZDA3
|
10
|
+
ZDk3MTZlNGFmODU3Y2NlN2QwMTc5YjI0ODc1Yzc0MGJkMzUyMDI1M2Y3N2U4
|
11
|
+
ODViMjRlNDg4NDVhYWU2NDk2YWM5ZjRjMzk2ZDlkMjQ4NDNmY2U=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
M2U1ZTRiZDk0NjNiODUwZjNmMTRmYjIwNTA3NDg4ZTlkMGQ0MzZhYzY4YzA0
|
14
|
+
NmNiOWIwYmUwNTI0YjhkMDMzMzA3NTRjZWU0ZWE5YjlkNmM4Mzk1YzFmNTAy
|
15
|
+
NTU4ZDg2ZjBiMzU5ZGFjNzI4OTZjZTM3NTFlYzE2MDFiNjVlZGI=
|
data/README.md
CHANGED
@@ -98,6 +98,8 @@ Who's using JSDuck?
|
|
98
98
|
- [CKEditor](http://docs.ckeditor.com)
|
99
99
|
- [GeoExt 2](https://github.com/geoext/geoext2)
|
100
100
|
- Rally Software [Rally App SDK](https://prod.help.rallydev.com/apps/2.0rc1/doc/)
|
101
|
+
- Wikimedia Foundation [Mediawiki](https://doc.wikimedia.org/mediawiki-core/master/js/)
|
102
|
+
and [VisualEditor](https://doc.wikimedia.org/VisualEditor/master/)
|
101
103
|
- [Sencha](http://docs.sencha.com) - obviously :)
|
102
104
|
|
103
105
|
These are some that we know of. Want your project listed here? Drop us a line.
|
data/lib/jsduck/batch_parser.rb
CHANGED
@@ -3,6 +3,7 @@ require 'jsduck/util/io'
|
|
3
3
|
require 'jsduck/parser'
|
4
4
|
require 'jsduck/source/file'
|
5
5
|
require 'jsduck/logger'
|
6
|
+
require 'jsduck/cache'
|
6
7
|
|
7
8
|
module JsDuck
|
8
9
|
|
@@ -11,17 +12,33 @@ module JsDuck
|
|
11
12
|
class BatchParser
|
12
13
|
|
13
14
|
def self.parse(opts)
|
14
|
-
|
15
|
+
cache = Cache.create(opts)
|
16
|
+
|
17
|
+
results = Util::Parallel.map(opts.input_files) do |fname|
|
15
18
|
Logger.log("Parsing", fname)
|
19
|
+
|
16
20
|
begin
|
17
21
|
source = Util::IO.read(fname)
|
18
|
-
docs =
|
19
|
-
|
22
|
+
docs = nil
|
23
|
+
|
24
|
+
unless docs = cache.read(fname, source)
|
25
|
+
docs = Parser.new.parse(source, fname, opts)
|
26
|
+
cache.write(fname, source, docs)
|
27
|
+
end
|
28
|
+
|
29
|
+
{
|
30
|
+
:file => Source::File.new(source, docs, fname),
|
31
|
+
:cache => cache.previous_entry,
|
32
|
+
}
|
20
33
|
rescue
|
21
34
|
Logger.fatal_backtrace("Error while parsing #{fname}", $!)
|
22
35
|
exit(1)
|
23
36
|
end
|
24
37
|
end
|
38
|
+
|
39
|
+
cache.cleanup( results.map {|r| r[:cache] }.compact )
|
40
|
+
|
41
|
+
return results.map {|r| r[:file] }
|
25
42
|
end
|
26
43
|
|
27
44
|
end
|
data/lib/jsduck/cache.rb
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
require 'digest/md5'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'jsduck/util/null_object'
|
4
|
+
require 'set'
|
5
|
+
|
6
|
+
module JsDuck
|
7
|
+
|
8
|
+
# Reads/writes parsed files in cache.
|
9
|
+
#
|
10
|
+
# When writing to cache:
|
11
|
+
#
|
12
|
+
# - makes MD5 hash of <file name> + <file contents>
|
13
|
+
# - Dumps the the parsed data structure using Marshal into <md5>.dat
|
14
|
+
#
|
15
|
+
# When reading from cache:
|
16
|
+
#
|
17
|
+
# - makes MD5 hash of <file name> + <file contents>
|
18
|
+
# - Reads the parsed data structure using Marshal from <md5>.dat
|
19
|
+
#
|
20
|
+
# Additionally a manifest.txt file is saved into the cache
|
21
|
+
# directory, the contents of which is a string like the following:
|
22
|
+
#
|
23
|
+
# Ruby: 1.9.3, JSDuck: 5.2.0
|
24
|
+
#
|
25
|
+
# This file is consulted before all other cache operations. When
|
26
|
+
# the version numbers in there don't match with current Ruby and
|
27
|
+
# JSDuck versions, the whole cache gets invalidated - all cached
|
28
|
+
# files get deleted. This is to avoid problems with the Marshal
|
29
|
+
# file format changes between Ruby versions and parsed data
|
30
|
+
# structure changes between JSDuck versions.
|
31
|
+
#
|
32
|
+
# After all files have been checked into cache, the files that
|
33
|
+
# weren't touched get deleted (using the #cleanup method). This
|
34
|
+
# ensures that the number of files in cache only grows when more
|
35
|
+
# files are added to the documentation.
|
36
|
+
#
|
37
|
+
class Cache
|
38
|
+
|
39
|
+
# Factory method to produce a cache object. When caching is
|
40
|
+
# disabled, returns a NullObject which emulates a cache that's
|
41
|
+
# always empty.
|
42
|
+
def self.create(opts)
|
43
|
+
# Check also for cache_dir, which will be nil when output_dir is :stdout
|
44
|
+
if opts.cache && opts.cache_dir
|
45
|
+
Cache.new(opts)
|
46
|
+
else
|
47
|
+
Util::NullObject.new(
|
48
|
+
:read => nil,
|
49
|
+
:write => nil,
|
50
|
+
:previous_entry => nil,
|
51
|
+
:cleanup => nil
|
52
|
+
)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# The name of the cache file that was previously read or written.
|
57
|
+
# When the #read call failed to find the file, it will be nil.
|
58
|
+
# But it will always be available after the #write call.
|
59
|
+
attr_reader :previous_entry
|
60
|
+
|
61
|
+
def initialize(opts)
|
62
|
+
@jsduck_version = opts.version
|
63
|
+
@cache_dir = opts.cache_dir
|
64
|
+
@manifest_file = @cache_dir + "/manifest.txt"
|
65
|
+
@previous_entry = nil
|
66
|
+
|
67
|
+
FileUtils.mkdir_p(@cache_dir) unless File.exists?(@cache_dir)
|
68
|
+
|
69
|
+
# Invalidate the whole cache when it was generated with a
|
70
|
+
# different Ruby and/or JSDuck version.
|
71
|
+
invalidate_all! unless valid_manifest?
|
72
|
+
end
|
73
|
+
|
74
|
+
# Given the name and contents of a source file, reads the already
|
75
|
+
# parsed data structure from cache. Returns nil when not found.
|
76
|
+
def read(file_name, file_contents)
|
77
|
+
fname = cache_file_name(file_name, file_contents)
|
78
|
+
if File.exists?(fname)
|
79
|
+
@previous_entry = fname
|
80
|
+
File.open(fname, "rb") {|file| Marshal::load(file) }
|
81
|
+
else
|
82
|
+
@previous_entry = nil
|
83
|
+
nil
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
# Writes parse data into cache under a name generated from the
|
88
|
+
# name and contents of a source file.
|
89
|
+
def write(file_name, file_contents, data)
|
90
|
+
fname = cache_file_name(file_name, file_contents)
|
91
|
+
@previous_entry = fname
|
92
|
+
File.open(fname, "wb") {|file| Marshal::dump(data, file) }
|
93
|
+
end
|
94
|
+
|
95
|
+
# Given listing of used cache files (those that were either read
|
96
|
+
# or written during this jsduck run) removes rest of the files
|
97
|
+
# from cache directory that were unused.
|
98
|
+
def cleanup(used_cache_entries)
|
99
|
+
used = Set.new(used_cache_entries)
|
100
|
+
|
101
|
+
Dir[@cache_dir + "/*.dat"].each do |file|
|
102
|
+
FileUtils.rm_rf(file) unless used.include?(file)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
private
|
107
|
+
|
108
|
+
def cache_file_name(file_name, file_contents)
|
109
|
+
@cache_dir + "/" + md5(file_name + file_contents) + ".dat"
|
110
|
+
end
|
111
|
+
|
112
|
+
def md5(string)
|
113
|
+
Digest::MD5.hexdigest(string)
|
114
|
+
end
|
115
|
+
|
116
|
+
def valid_manifest?
|
117
|
+
manifest = File.exists?(@manifest_file) ? Util::IO.read(@manifest_file) : ""
|
118
|
+
return manifest == current_manifest
|
119
|
+
end
|
120
|
+
|
121
|
+
def invalidate_all!
|
122
|
+
FileUtils.rm_rf(@cache_dir)
|
123
|
+
FileUtils.mkdir(@cache_dir)
|
124
|
+
save_manifest
|
125
|
+
end
|
126
|
+
|
127
|
+
def save_manifest
|
128
|
+
File.open(@manifest_file, "w") {|f| f.write(current_manifest) }
|
129
|
+
end
|
130
|
+
|
131
|
+
def current_manifest
|
132
|
+
"Ruby: #{RUBY_VERSION}, JSDuck: #{@jsduck_version}\n"
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
data/lib/jsduck/class_writer.rb
CHANGED
@@ -29,7 +29,8 @@ module JsDuck
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def write_dir(dir, extension)
|
32
|
-
FileUtils.mkdir(dir)
|
32
|
+
FileUtils.mkdir(dir) unless File.exists?(dir)
|
33
|
+
|
33
34
|
Util::Parallel.each(@relations.classes) do |cls|
|
34
35
|
filename = dir + "/" + cls[:name] + extension
|
35
36
|
Logger.log("Writing docs", filename)
|
data/lib/jsduck/export_writer.rb
CHANGED
@@ -4,6 +4,7 @@ require 'jsduck/exporter/examples'
|
|
4
4
|
require 'jsduck/format/batch'
|
5
5
|
require 'jsduck/class_writer'
|
6
6
|
require 'jsduck/guide_writer'
|
7
|
+
require 'jsduck/output_dir'
|
7
8
|
require 'fileutils'
|
8
9
|
|
9
10
|
module JsDuck
|
@@ -50,7 +51,7 @@ module JsDuck
|
|
50
51
|
# -- util routines --
|
51
52
|
|
52
53
|
def clean_output_dir
|
53
|
-
|
54
|
+
OutputDir.clean(@opts)
|
54
55
|
end
|
55
56
|
|
56
57
|
def format_classes
|
data/lib/jsduck/js/class.rb
CHANGED
@@ -122,7 +122,7 @@ module JsDuck
|
|
122
122
|
when "inheritableStatics"
|
123
123
|
cls[:members] += make_statics(value, {:inheritable => true})
|
124
124
|
else
|
125
|
-
detect_method_or_property(cls, key, value, pair)
|
125
|
+
detect_method_or_property(cls, key, value, pair) if pair.raw["kind"] == "init"
|
126
126
|
end
|
127
127
|
end
|
128
128
|
end
|
@@ -132,7 +132,7 @@ module JsDuck
|
|
132
132
|
def detect_class_members_from_object(cls, ast)
|
133
133
|
cls[:members] = []
|
134
134
|
ast.each_property do |key, value, pair|
|
135
|
-
detect_method_or_property(cls, key, value, pair)
|
135
|
+
detect_method_or_property(cls, key, value, pair) if pair.raw["kind"] == "init"
|
136
136
|
end
|
137
137
|
end
|
138
138
|
|
data/lib/jsduck/js/method.rb
CHANGED
@@ -34,7 +34,7 @@ module JsDuck
|
|
34
34
|
make(exp["id"].to_s || "", exp)
|
35
35
|
|
36
36
|
# foo: function() {}
|
37
|
-
elsif ast.property? && ast["value"].function?
|
37
|
+
elsif ast.property? && ast.raw["kind"] == "init" && ast["value"].function?
|
38
38
|
make(ast["key"].key_value, ast["value"])
|
39
39
|
|
40
40
|
# Object.defineProperty(obj, "prop", {value: function() {} })
|
data/lib/jsduck/js/property.rb
CHANGED
@@ -41,9 +41,18 @@ module JsDuck
|
|
41
41
|
# Object.defineProperty(obj, "prop", {value: x})
|
42
42
|
elsif exp && exp.define_property?
|
43
43
|
name = exp["arguments"][1].to_value
|
44
|
-
|
45
|
-
|
46
|
-
|
44
|
+
|
45
|
+
if exp.object_descriptor("set")
|
46
|
+
# Object with a setter is not readonly
|
47
|
+
make(name)
|
48
|
+
elsif exp.object_descriptor("get")
|
49
|
+
# Object with a getter and no setter is readonly
|
50
|
+
make(name, nil, true)
|
51
|
+
else
|
52
|
+
writable = exp.object_descriptor("writable")
|
53
|
+
readonly = writable ? !writable.to_value : true
|
54
|
+
make(name, exp.object_descriptor("value"), readonly)
|
55
|
+
end
|
47
56
|
|
48
57
|
else
|
49
58
|
nil
|
@@ -216,32 +216,24 @@ module JsDuck
|
|
216
216
|
when RKelly::Nodes::PropertyNode == node.class
|
217
217
|
make(node, {
|
218
218
|
"type" => "Property",
|
219
|
-
"key" =>
|
220
|
-
if node.name.is_a?(Numeric)
|
221
|
-
{
|
222
|
-
"type" => "Literal",
|
223
|
-
"value" => node.name,
|
224
|
-
"raw" => node.name.to_s,
|
225
|
-
"range" => offset_range(node, :name),
|
226
|
-
}
|
227
|
-
elsif node.name =~ /['"]/
|
228
|
-
{
|
229
|
-
"type" => "Literal",
|
230
|
-
"value" => string_value(node.name),
|
231
|
-
"raw" => node.name,
|
232
|
-
"range" => offset_range(node, :name),
|
233
|
-
}
|
234
|
-
else
|
235
|
-
{
|
236
|
-
"type" => "Identifier",
|
237
|
-
"name" => node.name,
|
238
|
-
"range" => offset_range(node, :name),
|
239
|
-
}
|
240
|
-
end,
|
219
|
+
"key" => property_key(node),
|
241
220
|
"value" => adapt_node(node.value),
|
242
221
|
"kind" => "init",
|
243
222
|
})
|
244
|
-
|
223
|
+
when RKelly::Nodes::GetterPropertyNode == node.class
|
224
|
+
make(node, {
|
225
|
+
"type" => "Property",
|
226
|
+
"key" => property_key(node),
|
227
|
+
"value" => adapt_node(node.value),
|
228
|
+
"kind" => "get",
|
229
|
+
})
|
230
|
+
when RKelly::Nodes::SetterPropertyNode == node.class
|
231
|
+
make(node, {
|
232
|
+
"type" => "Property",
|
233
|
+
"key" => property_key(node),
|
234
|
+
"value" => adapt_node(node.value),
|
235
|
+
"kind" => "set",
|
236
|
+
})
|
245
237
|
# Statements
|
246
238
|
when RKelly::Nodes::ExpressionStatementNode == node.class
|
247
239
|
make(node, {
|
@@ -458,6 +450,30 @@ module JsDuck
|
|
458
450
|
}
|
459
451
|
end
|
460
452
|
|
453
|
+
def property_key(node)
|
454
|
+
if node.name.is_a?(Numeric)
|
455
|
+
{
|
456
|
+
"type" => "Literal",
|
457
|
+
"value" => node.name,
|
458
|
+
"raw" => node.name.to_s,
|
459
|
+
"range" => offset_range(node, :name),
|
460
|
+
}
|
461
|
+
elsif node.name =~ /['"]/
|
462
|
+
{
|
463
|
+
"type" => "Literal",
|
464
|
+
"value" => string_value(node.name),
|
465
|
+
"raw" => node.name,
|
466
|
+
"range" => offset_range(node, :name),
|
467
|
+
}
|
468
|
+
else
|
469
|
+
{
|
470
|
+
"type" => "Identifier",
|
471
|
+
"name" => node.name,
|
472
|
+
"range" => offset_range(node, :name),
|
473
|
+
}
|
474
|
+
end
|
475
|
+
end
|
476
|
+
|
461
477
|
# Evaluates the actual value of a JavaScript string.
|
462
478
|
# Importantly we avoid using Ruby's eval().
|
463
479
|
def string_value(string)
|
data/lib/jsduck/options.rb
CHANGED
@@ -18,6 +18,7 @@ module JsDuck
|
|
18
18
|
attr_accessor :ignore_global
|
19
19
|
attr_accessor :external_classes
|
20
20
|
attr_accessor :ext4_events
|
21
|
+
attr_accessor :version
|
21
22
|
|
22
23
|
# Customizing output
|
23
24
|
attr_accessor :title
|
@@ -48,6 +49,8 @@ module JsDuck
|
|
48
49
|
|
49
50
|
# Debugging
|
50
51
|
attr_accessor :warnings_exit_nonzero
|
52
|
+
attr_accessor :cache
|
53
|
+
attr_accessor :cache_dir
|
51
54
|
attr_accessor :template_dir
|
52
55
|
attr_accessor :template_links
|
53
56
|
attr_accessor :extjs_path
|
@@ -99,7 +102,7 @@ module JsDuck
|
|
99
102
|
]
|
100
103
|
@ext4_events = nil
|
101
104
|
|
102
|
-
@version = "5.
|
105
|
+
@version = "5.3.0"
|
103
106
|
# Customizing output
|
104
107
|
@title = "Documentation - JSDuck"
|
105
108
|
@header = "<strong>Documentation</strong> JSDuck"
|
@@ -132,6 +135,8 @@ module JsDuck
|
|
132
135
|
|
133
136
|
# Debugging
|
134
137
|
@warnings_exit_nonzero = false
|
138
|
+
@cache = false
|
139
|
+
@cache_dir = nil
|
135
140
|
@root_dir = File.dirname(File.dirname(File.dirname(__FILE__)))
|
136
141
|
@template_dir = @root_dir + "/template-min"
|
137
142
|
@template_links = false
|
@@ -203,16 +208,22 @@ module JsDuck
|
|
203
208
|
"This option is REQUIRED. When the directory exists,",
|
204
209
|
"it will be overwritten. Give dash '-' as argument",
|
205
210
|
"to write docs to STDOUT (works only with --export).") do |path|
|
206
|
-
|
211
|
+
if path == "-"
|
212
|
+
@output_dir = :stdout
|
213
|
+
else
|
214
|
+
@output_dir = canonical(path)
|
215
|
+
@cache_dir = @output_dir + "/.cache" unless @cache_dir
|
216
|
+
end
|
207
217
|
end
|
208
218
|
|
209
|
-
opts.on('--export=
|
219
|
+
opts.on('--export=full/examples',
|
210
220
|
"Exports docs in JSON.",
|
211
221
|
"",
|
212
|
-
"
|
222
|
+
"For each JavaScript class a JSON file gets written,",
|
223
|
+
"the contents of which are as follows:",
|
213
224
|
"",
|
214
|
-
"- full -
|
215
|
-
"- examples -
|
225
|
+
"- full - docs and metadata for class and its members.",
|
226
|
+
"- examples - inline examples from classes and guides.") do |format|
|
216
227
|
export_type = format.to_sym
|
217
228
|
if [:full, :examples].include?(export_type)
|
218
229
|
@export = export_type
|
@@ -662,6 +673,63 @@ module JsDuck
|
|
662
673
|
end
|
663
674
|
end
|
664
675
|
|
676
|
+
opts.separator ""
|
677
|
+
opts.separator "Performance:"
|
678
|
+
opts.separator ""
|
679
|
+
|
680
|
+
opts.on('-p', '--processes=COUNT',
|
681
|
+
"The number of parallel processes to use.",
|
682
|
+
"",
|
683
|
+
"Defaults to the number of processors/cores.",
|
684
|
+
"",
|
685
|
+
"Set to 0 to disable parallel processing completely.",
|
686
|
+
"This is often useful in debugging to get deterministic",
|
687
|
+
"results.",
|
688
|
+
"",
|
689
|
+
"In Windows this option is disabled.") do |count|
|
690
|
+
Util::Parallel.in_processes = count.to_i
|
691
|
+
end
|
692
|
+
|
693
|
+
opts.on('--[no-]cache',
|
694
|
+
"Turns parser cache on/off (EXPERIMENTAL).",
|
695
|
+
"",
|
696
|
+
"Defaults to off.",
|
697
|
+
"",
|
698
|
+
"When enabled, the results of parsing source files is saved",
|
699
|
+
"inside the JSDuck output directory. Next time JSDuck runs,",
|
700
|
+
"only the files that have changed are parsed again, others",
|
701
|
+
"are read from the cache.",
|
702
|
+
"",
|
703
|
+
"Note that switching between Ruby and/or JSDuck versions",
|
704
|
+
"invalidates the whole cache. But changes in custom tags",
|
705
|
+
"don't invalidate the cache, so avoid caching when developing",
|
706
|
+
"your custom tags.",
|
707
|
+
"",
|
708
|
+
"To change the cache directory location, use --cache-dir.") do |enabled|
|
709
|
+
@cache = enabled
|
710
|
+
end
|
711
|
+
|
712
|
+
opts.on('--cache-dir=PATH',
|
713
|
+
"Directory where to cache the parsed source.",
|
714
|
+
"",
|
715
|
+
"Defaults to: <output-dir>/.cache",
|
716
|
+
"",
|
717
|
+
"Each project needs to have a separate cache directory.",
|
718
|
+
"Instead of writing the cache into the output directory,",
|
719
|
+
"one might consider keeping it together with the source",
|
720
|
+
"files.",
|
721
|
+
"",
|
722
|
+
"Note that JSDuck ensures that the <output-dir>/.cache",
|
723
|
+
"dir is preserved when the rest of the <output-dir> gets",
|
724
|
+
"wiped clean during the docs generation. If you specify",
|
725
|
+
"cache dir like <output-dir>/.mycache, then this will also",
|
726
|
+
"be cleaned up during docs generation, and the caching",
|
727
|
+
"won't work.",
|
728
|
+
"",
|
729
|
+
"This option only has an effect when --cache is also used.",) do |path|
|
730
|
+
@cache_dir = path
|
731
|
+
end
|
732
|
+
|
665
733
|
opts.separator ""
|
666
734
|
opts.separator "Debugging:"
|
667
735
|
opts.separator ""
|
@@ -726,19 +794,6 @@ module JsDuck
|
|
726
794
|
Logger.colors = on
|
727
795
|
end
|
728
796
|
|
729
|
-
opts.on('-p', '--processes=COUNT',
|
730
|
-
"The number of parallel processes to use.",
|
731
|
-
"",
|
732
|
-
"Defaults to the number of processors/cores.",
|
733
|
-
"",
|
734
|
-
"Set to 0 to disable parallel processing completely.",
|
735
|
-
"This is often useful in debugging to get deterministic",
|
736
|
-
"results.",
|
737
|
-
"",
|
738
|
-
"In Windows this option is disabled.") do |count|
|
739
|
-
Util::Parallel.in_processes = count.to_i
|
740
|
-
end
|
741
|
-
|
742
797
|
opts.on('--pretty-json',
|
743
798
|
"Turns on pretty-printing of JSON.",
|
744
799
|
"",
|