jsduck 5.1.0 → 5.2.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 +15 -0
- data/lib/jsduck/batch_processor.rb +2 -0
- data/lib/jsduck/logger.rb +51 -98
- data/lib/jsduck/news.rb +9 -1
- data/lib/jsduck/options.rb +9 -9
- data/lib/jsduck/process/accessors.rb +1 -1
- data/lib/jsduck/process/lint.rb +0 -28
- data/lib/jsduck/process/no_doc.rb +50 -0
- data/lib/jsduck/tag/fires.rb +2 -0
- data/lib/jsduck/util/io.rb +11 -1
- data/lib/jsduck/warning/all.rb +36 -0
- data/lib/jsduck/warning/basic.rb +51 -0
- data/lib/jsduck/warning/deprecated.rb +40 -0
- data/lib/jsduck/warning/nodoc.rb +79 -0
- data/lib/jsduck/warning/parser.rb +168 -0
- data/lib/jsduck/warning/registry.rb +106 -0
- data/lib/jsduck/warning/warn_exception.rb +10 -0
- data/template-min/index-template.html +1 -1
- data/template-min/print-template.html +1 -1
- data/template-min/resources/css/{app-939e5db2bc2809b47493559f1001ebbd.css → app-4689d2a5522dcd3c9e9923ca59c33f27.css} +1 -1
- data/template-min/template.html +1 -1
- metadata +14 -24
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YTQ4ZGE0ZGEzMTQxNDY1ZjhiY2FhNTliMmJjNTQ0OGY2NTZkY2VhMA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ZWEzMjZmMGEzOTBmOGM4OGQ4NzZiY2NhMjA5OTZkZGVlMzdhMTc4NQ==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZjA3N2ZjODkwZjNhNjBiNWExNTNlZjI0YzA4Y2EyZmZjZDk5MWUyMzY1Y2Iy
|
10
|
+
NTlmYWY0MjJlODhjZjgwZGE3ZmY2YzZjZWI3MWE5OWVhM2ZjN2Q3YWJlODQy
|
11
|
+
Zjg0OGM1NDZmNTdkNDExNmJlN2ZmZTU4ODkxYWI1YTM3MWFhMjk=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NTc0ZDQ1NDMxYTU5MDhiMTYyMTFlN2RiODNlYTczYThkZjUzMDFkNzk4NTU3
|
14
|
+
NzY5YzVkNDMyYzA0NWI1MjM5NWQ4M2VkYzI2ZDcxNzQ0MGI0Y2Y5OWVkNDYz
|
15
|
+
MjE0MjFiZjRjNWIxNWYzMjcxMWU2YjNkMjY3M2VmNTZmMzg2ODY=
|
@@ -14,6 +14,7 @@ require 'jsduck/process/versions'
|
|
14
14
|
require 'jsduck/process/return_values'
|
15
15
|
require 'jsduck/process/fires'
|
16
16
|
require 'jsduck/process/lint'
|
17
|
+
require 'jsduck/process/no_doc'
|
17
18
|
require 'jsduck/process/circular_deps'
|
18
19
|
|
19
20
|
module JsDuck
|
@@ -71,6 +72,7 @@ module JsDuck
|
|
71
72
|
Process::ReturnValues.new(relations).process_all!
|
72
73
|
Process::Fires.new(relations).process_all!
|
73
74
|
Process::Lint.new(relations).process_all!
|
75
|
+
Process::NoDoc.new(relations).process_all!
|
74
76
|
relations
|
75
77
|
end
|
76
78
|
|
data/lib/jsduck/logger.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'jsduck/util/singleton'
|
2
2
|
require 'jsduck/util/os'
|
3
|
+
require 'jsduck/warning/registry'
|
4
|
+
require 'jsduck/warning/warn_exception'
|
3
5
|
|
4
6
|
module JsDuck
|
5
7
|
|
@@ -18,51 +20,7 @@ module JsDuck
|
|
18
20
|
@verbose = false
|
19
21
|
@colors = nil
|
20
22
|
|
21
|
-
@
|
22
|
-
[:global, "Member doesn't belong to any class"],
|
23
|
-
[:inheritdoc, "@inheritdoc referring to unknown class or member"],
|
24
|
-
[:extend, "@extend/mixin/requires/uses referring to unknown class"],
|
25
|
-
[:tag, "Use of unsupported @tag"],
|
26
|
-
[:tag_repeated, "An @tag used multiple times, but only once allowed"],
|
27
|
-
[:tag_syntax, "@tag syntax error"],
|
28
|
-
[:link, "{@link} to unknown class or member"],
|
29
|
-
[:link_ambiguous, "{@link} is ambiguous"],
|
30
|
-
[:link_auto, "Auto-detected link to unknown class or member"],
|
31
|
-
[:html, "Unclosed HTML tag."],
|
32
|
-
|
33
|
-
[:alt_name, "Name used as both classname and alternate classname"],
|
34
|
-
[:name_missing, "Member or parameter has no name"],
|
35
|
-
[:no_doc, "Public class without documentation"],
|
36
|
-
[:no_doc_member, "Public member without documentation"],
|
37
|
-
[:no_doc_param, "Parameter of public member without documentation"],
|
38
|
-
[:dup_param, "Method has two parameters with the same name"],
|
39
|
-
[:dup_member, "Class has two members with the same name"],
|
40
|
-
[:req_after_opt, "Required parameter comes after optional"],
|
41
|
-
[:param_count, "Less parameters documented than detected from code"],
|
42
|
-
[:subproperty, "@param foo.bar where foo param doesn't exist"],
|
43
|
-
[:sing_static, "Singleton class member marked as @static"],
|
44
|
-
[:type_syntax, "Syntax error in {type definition}"],
|
45
|
-
[:type_name, "Unknown type referenced in {type definition}"],
|
46
|
-
[:enum, "Enum with invalid values or no values at all"],
|
47
|
-
[:fires, "@fires references unknown event"],
|
48
|
-
|
49
|
-
[:image, "{@img} referring to missing file"],
|
50
|
-
[:image_unused, "An image exists in --images dir that's not used"],
|
51
|
-
[:cat_old_format, "Categories file uses old deprecated format"],
|
52
|
-
[:cat_no_match, "Class pattern in categories file matches nothing"],
|
53
|
-
[:cat_class_missing, "Class is missing from categories file"],
|
54
|
-
[:guide, "Guide is missing from --guides dir"],
|
55
|
-
|
56
|
-
[:aside, "Problem with @aside tag"],
|
57
|
-
[:hide, "Problem with @hide tag"],
|
58
|
-
]
|
59
|
-
# Turn off all warnings by default.
|
60
|
-
# This is good for testing.
|
61
|
-
# When running JSDuck app, the Options class enables most warnings.
|
62
|
-
@warnings = {}
|
63
|
-
@warning_docs.each do |w|
|
64
|
-
@warnings[w[0]] = {:enabled => false, :patterns => []}
|
65
|
-
end
|
23
|
+
@warnings = Warning::Registry.new
|
66
24
|
|
67
25
|
@shown_warnings = {}
|
68
26
|
end
|
@@ -77,31 +35,17 @@ module JsDuck
|
|
77
35
|
# Enables or disables a particular warning
|
78
36
|
# or all warnings when type == :all.
|
79
37
|
# Additionally a filename pattern can be specified.
|
80
|
-
def set_warning(type, enabled, pattern=nil)
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
set_warning(key, enabled, pattern) unless pattern && @warnings[key][:enabled] == enabled
|
86
|
-
end
|
87
|
-
elsif @warnings.has_key?(type)
|
88
|
-
if pattern
|
89
|
-
if @warnings[type][:enabled] == enabled
|
90
|
-
warn(nil, "Warning rule '#{enabled ? '+' : '-'}#{type}:#{pattern}' has no effect")
|
91
|
-
else
|
92
|
-
@warnings[type][:patterns] << Regexp.new(Regexp.escape(pattern))
|
93
|
-
end
|
94
|
-
else
|
95
|
-
@warnings[type] = {:enabled => enabled, :patterns => []}
|
96
|
-
end
|
97
|
-
else
|
98
|
-
warn(nil, "Warning of type '#{type}' doesn't exist")
|
38
|
+
def set_warning(type, enabled, pattern=nil, params=[])
|
39
|
+
begin
|
40
|
+
@warnings.set(type, enabled, pattern, params)
|
41
|
+
rescue Warning::WarnException => e
|
42
|
+
warn(nil, e.message)
|
99
43
|
end
|
100
44
|
end
|
101
45
|
|
102
46
|
# get documentation for all warnings
|
103
47
|
def doc_warnings
|
104
|
-
@
|
48
|
+
@warnings.doc
|
105
49
|
end
|
106
50
|
|
107
51
|
# Prints warning message.
|
@@ -125,46 +69,24 @@ module JsDuck
|
|
125
69
|
filename = filename[:filename]
|
126
70
|
end
|
127
71
|
|
128
|
-
msg = paint(:yellow, "Warning: ") + format(filename, line) + " " + msg
|
129
|
-
|
130
72
|
if warning_enabled?(type, filename)
|
131
|
-
|
132
|
-
$stderr.puts msg
|
133
|
-
@shown_warnings[msg] = true
|
134
|
-
end
|
73
|
+
print_warning(msg, filename, line)
|
135
74
|
end
|
136
75
|
|
137
76
|
return false
|
138
77
|
end
|
139
78
|
|
140
|
-
#
|
141
|
-
#
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
if rule[:patterns].any? {|re| filename =~ re }
|
151
|
-
!rule[:enabled]
|
152
|
-
else
|
153
|
-
rule[:enabled]
|
154
|
-
end
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
# Formats filename and line number for output
|
159
|
-
def format(filename=nil, line=nil)
|
160
|
-
out = ""
|
161
|
-
if filename
|
162
|
-
out = Util::OS.windows? ? filename.gsub('/', '\\') : filename
|
163
|
-
if line
|
164
|
-
out += ":#{line}:"
|
165
|
-
end
|
79
|
+
# Prints :nodoc warning message.
|
80
|
+
#
|
81
|
+
# Because the :nodoc warning needs different parameters, for now
|
82
|
+
# we're using a separate method specially for these.
|
83
|
+
def warn_nodoc(type, visibility, msg, file)
|
84
|
+
filename = file[:filename]
|
85
|
+
line = file[:linenr]
|
86
|
+
|
87
|
+
if @warnings.enabled?(:nodoc, filename, [type, visibility])
|
88
|
+
print_warning(msg, filename, line)
|
166
89
|
end
|
167
|
-
paint(:magenta, out)
|
168
90
|
end
|
169
91
|
|
170
92
|
# Prints fatal error message with backtrace.
|
@@ -202,6 +124,37 @@ module JsDuck
|
|
202
124
|
|
203
125
|
CLEAR = "\e[0m"
|
204
126
|
|
127
|
+
def warning_enabled?(type, filename)
|
128
|
+
if type == nil
|
129
|
+
true
|
130
|
+
elsif !@warnings.has?(type)
|
131
|
+
warn(nil, "Unknown warning type #{type}")
|
132
|
+
else
|
133
|
+
@warnings.enabled?(type, filename)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def print_warning(msg, filename, line)
|
138
|
+
warning = paint(:yellow, "Warning: ") + format(filename, line) + " " + msg
|
139
|
+
|
140
|
+
if !@shown_warnings[warning]
|
141
|
+
$stderr.puts warning
|
142
|
+
@shown_warnings[warning] = true
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
# Formats filename and line number for output
|
147
|
+
def format(filename=nil, line=nil)
|
148
|
+
out = ""
|
149
|
+
if filename
|
150
|
+
out = Util::OS.windows? ? filename.gsub('/', '\\') : filename
|
151
|
+
if line
|
152
|
+
out += ":#{line}:"
|
153
|
+
end
|
154
|
+
end
|
155
|
+
paint(:magenta, out)
|
156
|
+
end
|
157
|
+
|
205
158
|
# Helper for doing colored output in UNIX terminal
|
206
159
|
#
|
207
160
|
# Only does color output when STDERR is attached to TTY
|
data/lib/jsduck/news.rb
CHANGED
@@ -27,7 +27,7 @@ module JsDuck
|
|
27
27
|
"<div id='news-content' style='#{style}'>",
|
28
28
|
"<div class='section'>",
|
29
29
|
"<h1>New in this version</h1>",
|
30
|
-
|
30
|
+
render_news(@new_items),
|
31
31
|
"<div style='clear:both'></div>",
|
32
32
|
"</div>",
|
33
33
|
"</div>",
|
@@ -91,6 +91,14 @@ module JsDuck
|
|
91
91
|
str[0,1].upcase + str[1..-1]
|
92
92
|
end
|
93
93
|
|
94
|
+
def render_news(new_items)
|
95
|
+
if new_items.length > 0
|
96
|
+
render_columns(new_items)
|
97
|
+
else
|
98
|
+
"<h3>Nothing new.</h3>"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
94
102
|
def render_columns(new_items)
|
95
103
|
align = ["left-column", "middle-column", "right-column"]
|
96
104
|
i = -1
|
data/lib/jsduck/options.rb
CHANGED
@@ -6,6 +6,7 @@ require 'jsduck/util/io'
|
|
6
6
|
require 'jsduck/util/parallel'
|
7
7
|
require 'jsduck/tag_registry'
|
8
8
|
require 'jsduck/js/ext_patterns'
|
9
|
+
require 'jsduck/warning/parser'
|
9
10
|
|
10
11
|
module JsDuck
|
11
12
|
|
@@ -98,7 +99,7 @@ module JsDuck
|
|
98
99
|
]
|
99
100
|
@ext4_events = nil
|
100
101
|
|
101
|
-
@version = "5.
|
102
|
+
@version = "5.2.0"
|
102
103
|
# Customizing output
|
103
104
|
@title = "Documentation - JSDuck"
|
104
105
|
@header = "<strong>Documentation</strong> JSDuck"
|
@@ -148,7 +149,7 @@ module JsDuck
|
|
148
149
|
Logger.set_warning(:link_auto, false)
|
149
150
|
Logger.set_warning(:param_count, false)
|
150
151
|
Logger.set_warning(:fires, false)
|
151
|
-
Logger.set_warning(:
|
152
|
+
Logger.set_warning(:nodoc, false)
|
152
153
|
|
153
154
|
@optparser = create_option_parser
|
154
155
|
end
|
@@ -672,7 +673,7 @@ module JsDuck
|
|
672
673
|
Logger.verbose = true
|
673
674
|
end
|
674
675
|
|
675
|
-
opts.on('--warnings=+A,-B,+C',
|
676
|
+
opts.on('--warnings=+A,-B,+C',
|
676
677
|
"Turns warnings selectively on/off.",
|
677
678
|
"",
|
678
679
|
" +all - to turn on all warnings.",
|
@@ -696,13 +697,12 @@ module JsDuck
|
|
696
697
|
"(Those with '+' in front of them default to on)",
|
697
698
|
"",
|
698
699
|
*Logger.doc_warnings) do |warnings|
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
name = $2.to_sym
|
703
|
-
path = $3
|
704
|
-
Logger.set_warning(name, enable, path)
|
700
|
+
begin
|
701
|
+
Warning::Parser.new(warnings).parse.each do |w|
|
702
|
+
Logger.set_warning(w[:type], w[:enabled], w[:path], w[:params])
|
705
703
|
end
|
704
|
+
rescue Warning::WarnException => e
|
705
|
+
Logger.warn(nil, e.message)
|
706
706
|
end
|
707
707
|
end
|
708
708
|
|
data/lib/jsduck/process/lint.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'jsduck/logger'
|
2
|
-
require 'jsduck/class'
|
3
2
|
|
4
3
|
module JsDuck
|
5
4
|
module Process
|
@@ -14,7 +13,6 @@ module JsDuck
|
|
14
13
|
|
15
14
|
# Runs the linter
|
16
15
|
def process_all!
|
17
|
-
warn_no_doc
|
18
16
|
warn_unnamed
|
19
17
|
warn_optional_params
|
20
18
|
warn_duplicate_params
|
@@ -37,32 +35,6 @@ module JsDuck
|
|
37
35
|
end
|
38
36
|
end
|
39
37
|
|
40
|
-
# print warning for each class or public member with no name
|
41
|
-
def warn_no_doc
|
42
|
-
@relations.each do |cls|
|
43
|
-
|
44
|
-
if cls[:doc] == "" && !cls[:private]
|
45
|
-
warn(:no_doc, "No documentation for #{cls[:name]}", cls)
|
46
|
-
end
|
47
|
-
|
48
|
-
cls.all_local_members.each do |member|
|
49
|
-
if !member[:private] && !member[:hide] && !JsDuck::Class.constructor?(member)
|
50
|
-
if member[:doc] == ""
|
51
|
-
warn(:no_doc_member, "No documentation for #{member[:owner]}##{member[:name]}", member)
|
52
|
-
end
|
53
|
-
|
54
|
-
(member[:params] || []).each do |p|
|
55
|
-
if p[:doc] == ""
|
56
|
-
warn(:no_doc_param, "No documentation for parameter #{p[:name]} of #{member[:owner]}##{member[:name]}", member)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
38
|
# print warning for each non-optional parameter that follows an optional parameter
|
67
39
|
def warn_optional_params
|
68
40
|
each_member do |member|
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'jsduck/logger'
|
2
|
+
require 'jsduck/class'
|
3
|
+
|
4
|
+
module JsDuck
|
5
|
+
module Process
|
6
|
+
|
7
|
+
# Reports missing documentation
|
8
|
+
class NoDoc
|
9
|
+
def initialize(relations)
|
10
|
+
@relations = relations
|
11
|
+
end
|
12
|
+
|
13
|
+
# Prints warning for each class or public member with no name
|
14
|
+
def process_all!
|
15
|
+
@relations.each do |cls|
|
16
|
+
|
17
|
+
if cls[:doc] == ""
|
18
|
+
warn(:class, "No documentation for #{cls[:name]}", cls)
|
19
|
+
end
|
20
|
+
|
21
|
+
cls.all_local_members.each do |member|
|
22
|
+
if !member[:hide] && !JsDuck::Class.constructor?(member)
|
23
|
+
if member[:doc] == ""
|
24
|
+
warn(:member, "No documentation for #{member[:owner]}##{member[:name]}", member)
|
25
|
+
end
|
26
|
+
|
27
|
+
(member[:params] || []).each do |p|
|
28
|
+
if p[:doc] == ""
|
29
|
+
warn(:param, "No documentation for parameter #{p[:name]} of #{member[:owner]}##{member[:name]}", member)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def warn(type, msg, owner)
|
42
|
+
visibility = owner[:private] ? :private : (owner[:protected] ? :protected : :public)
|
43
|
+
|
44
|
+
Logger.warn_nodoc(type, visibility, msg, owner[:files][0])
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
data/lib/jsduck/tag/fires.rb
CHANGED
data/lib/jsduck/util/io.rb
CHANGED
@@ -25,7 +25,17 @@ module JsDuck
|
|
25
25
|
|
26
26
|
# Reads given filename into string
|
27
27
|
def self.read(filename)
|
28
|
-
File.open(filename, "r:"+@@encoding) {|f| f.read }
|
28
|
+
File.open(filename, "r:"+@@encoding) {|f| self.strip_utf8_bom(f.read) }
|
29
|
+
end
|
30
|
+
|
31
|
+
# Takes care of removing UTF-8 byte order mark in Ruby <= 1.8 which
|
32
|
+
# doesn't have built-in encodings support.
|
33
|
+
def self.strip_utf8_bom(string)
|
34
|
+
if "".respond_to?(:encoding)
|
35
|
+
string
|
36
|
+
else
|
37
|
+
string.sub(/\A\xEF\xBB\xBF/, "")
|
38
|
+
end
|
29
39
|
end
|
30
40
|
|
31
41
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module JsDuck
|
2
|
+
module Warning
|
3
|
+
|
4
|
+
# A composite warning, encompassing all the other warning types.
|
5
|
+
class All
|
6
|
+
|
7
|
+
# Creates a deprecated warning with a mapping to :nodoc warning
|
8
|
+
# type with given parameters. The warning is disabled by
|
9
|
+
# default.
|
10
|
+
def initialize(warnings)
|
11
|
+
@warnings = warnings
|
12
|
+
end
|
13
|
+
|
14
|
+
# Enables/disables all warnings.
|
15
|
+
def set(enabled, path_pattern=nil, params=[])
|
16
|
+
# When used with a path_pattern, only add the pattern to the rules
|
17
|
+
# where it can have an effect - otherwise we get a warning.
|
18
|
+
@warnings.each do |w|
|
19
|
+
w.set(enabled, path_pattern, params) unless path_pattern && w.enabled? == enabled
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Doesn't make sense to check if the :all warning is enabled.
|
24
|
+
def enabled?(filename="", params=[])
|
25
|
+
raise "Warning type 'all' must not be checked for enabled/disabled"
|
26
|
+
end
|
27
|
+
|
28
|
+
# The all-warning is documented separately
|
29
|
+
def doc
|
30
|
+
nil
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|