jsduck 5.0.0.beta2 → 5.0.0.beta3
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/Rakefile +14 -4
- data/bin/jsduck +3 -1
- data/jsduck.gemspec +2 -2
- data/lib/jsduck/app.rb +8 -0
- data/lib/jsduck/assets.rb +3 -0
- data/lib/jsduck/batch_processor.rb +2 -0
- data/lib/jsduck/categories/class_name.rb +2 -26
- data/lib/jsduck/categories/factory.rb +5 -43
- data/lib/jsduck/columns.rb +56 -0
- data/lib/jsduck/doc/delimited_parser.rb +105 -0
- data/lib/jsduck/doc/scanner.rb +2 -1
- data/lib/jsduck/doc/standard_tag_parser.rb +37 -71
- data/lib/jsduck/guide_anchors.rb +32 -0
- data/lib/jsduck/guide_toc.rb +49 -0
- data/lib/jsduck/guides.rb +14 -32
- data/lib/jsduck/inline/video.rb +2 -8
- data/lib/jsduck/js/ast.rb +13 -305
- data/lib/jsduck/js/class.rb +245 -0
- data/lib/jsduck/js/event.rb +34 -0
- data/lib/jsduck/js/fires.rb +42 -0
- data/lib/jsduck/js/method.rb +94 -0
- data/lib/jsduck/js/method_calls.rb +40 -0
- data/lib/jsduck/js/node.rb +29 -0
- data/lib/jsduck/js/property.rb +64 -0
- data/lib/jsduck/js/{function.rb → returns.rb} +8 -3
- data/lib/jsduck/js/scoped_traverser.rb +42 -0
- data/lib/jsduck/logger.rb +13 -1
- data/lib/jsduck/merger.rb +34 -27
- data/lib/jsduck/news.rb +128 -0
- data/lib/jsduck/options.rb +59 -2
- data/lib/jsduck/params_merger.rb +47 -0
- data/lib/jsduck/process/accessors.rb +8 -2
- data/lib/jsduck/process/fires.rb +71 -0
- data/lib/jsduck/process/importer.rb +19 -1
- data/lib/jsduck/render/class.rb +11 -4
- data/lib/jsduck/render/signature_util.rb +14 -0
- data/lib/jsduck/tag/alias.rb +0 -20
- data/lib/jsduck/tag/alternate_class_names.rb +0 -5
- data/lib/jsduck/tag/cfg.rb +30 -5
- data/lib/jsduck/tag/class.rb +45 -2
- data/lib/jsduck/tag/css_mixin.rb +8 -4
- data/lib/jsduck/tag/css_var.rb +26 -5
- data/lib/jsduck/tag/default.rb +2 -8
- data/lib/jsduck/tag/enum.rb +7 -10
- data/lib/jsduck/tag/event.rb +12 -4
- data/lib/jsduck/tag/extends.rb +0 -6
- data/lib/jsduck/tag/fires.rb +53 -0
- data/lib/jsduck/tag/icons/cfg.png +0 -0
- data/lib/jsduck/tag/icons/css_mixin.png +0 -0
- data/lib/jsduck/tag/icons/css_var.png +0 -0
- data/lib/jsduck/tag/icons/event.png +0 -0
- data/lib/jsduck/tag/icons/method.png +0 -0
- data/lib/jsduck/tag/icons/property.png +0 -0
- data/lib/jsduck/tag/member_tag.rb +130 -0
- data/lib/jsduck/tag/method.rb +44 -4
- data/lib/jsduck/tag/param.rb +8 -60
- data/lib/jsduck/tag/property.rb +28 -5
- data/lib/jsduck/tag/tag.rb +3 -75
- data/lib/jsduck/tag/type.rb +1 -11
- data/lib/jsduck/tag_registry.rb +6 -48
- data/lib/jsduck/web/css.rb +8 -1
- data/lib/jsduck/web/data.rb +2 -1
- data/lib/jsduck/web/index_html.rb +1 -0
- data/lib/jsduck/web/member_icons.rb +43 -0
- data/lib/jsduck/web/search.rb +3 -2
- data/lib/jsduck/web/writer.rb +8 -0
- metadata +31 -27
- data/lib/jsduck/docs_code_comparer.rb +0 -44
- data/lib/jsduck/render/signature.rb +0 -94
- data/lib/jsduck/tag/autodetected.rb +0 -21
- data/lib/jsduck/tag/name.rb +0 -36
data/lib/jsduck/tag/default.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require "jsduck/tag/tag"
|
2
|
-
require "jsduck/docs_code_comparer"
|
3
2
|
require "jsduck/util/html"
|
4
3
|
|
5
4
|
module JsDuck::Tag
|
@@ -9,19 +8,14 @@ module JsDuck::Tag
|
|
9
8
|
#
|
10
9
|
# @cfg [blah=somedefault]
|
11
10
|
#
|
12
|
-
# This tag class exists to
|
13
|
-
#
|
11
|
+
# This tag class exists to generate the "Defaults to:" text in final
|
12
|
+
# HTML.
|
14
13
|
class Default < Tag
|
15
14
|
def initialize
|
16
15
|
@tagname = :default
|
17
|
-
@merge_context = :property_like
|
18
16
|
@html_position = POS_DEFAULT
|
19
17
|
end
|
20
18
|
|
21
|
-
def merge(h, docs, code)
|
22
|
-
JsDuck::DocsCodeComparer.merge_if_matches(h, :default, docs, code)
|
23
|
-
end
|
24
|
-
|
25
19
|
def to_html(m)
|
26
20
|
return if m[:default] == "undefined"
|
27
21
|
|
data/lib/jsduck/tag/enum.rb
CHANGED
@@ -5,7 +5,6 @@ module JsDuck::Tag
|
|
5
5
|
def initialize
|
6
6
|
@pattern = "enum"
|
7
7
|
@tagname = :enum
|
8
|
-
@merge_context = :class
|
9
8
|
@html_position = POS_ENUM
|
10
9
|
# Green box
|
11
10
|
@css = <<-EOCSS
|
@@ -19,7 +18,13 @@ module JsDuck::Tag
|
|
19
18
|
|
20
19
|
# @enum {Type} [name=default] ...
|
21
20
|
def parse_doc(p, pos)
|
22
|
-
enum = p.standard_tag({
|
21
|
+
enum = p.standard_tag({
|
22
|
+
:tagname => :enum,
|
23
|
+
:type => true,
|
24
|
+
:name => true,
|
25
|
+
:default => true,
|
26
|
+
:optional => true
|
27
|
+
})
|
23
28
|
|
24
29
|
# @enum is a special case of class, so we also generate a class
|
25
30
|
# tag with the same name as given for @enum.
|
@@ -36,14 +41,6 @@ module JsDuck::Tag
|
|
36
41
|
}
|
37
42
|
end
|
38
43
|
|
39
|
-
# Takes the :enum always from docs, but the :doc_only can come
|
40
|
-
# from either code or docs.
|
41
|
-
def merge(h, docs, code)
|
42
|
-
return unless docs[:enum]
|
43
|
-
h[:enum] = docs[:enum]
|
44
|
-
h[:enum][:doc_only] = docs[:enum][:doc_only] || (code[:enum] && code[:enum][:doc_only])
|
45
|
-
end
|
46
|
-
|
47
44
|
def to_html(cls)
|
48
45
|
if cls[:enum][:doc_only]
|
49
46
|
first = cls[:members][0] || {:name => 'foo', :default => '"foo"'}
|
data/lib/jsduck/tag/event.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
|
-
require "jsduck/tag/
|
1
|
+
require "jsduck/tag/member_tag"
|
2
|
+
require "jsduck/params_merger"
|
2
3
|
|
3
4
|
module JsDuck::Tag
|
4
|
-
class Event <
|
5
|
+
class Event < MemberTag
|
5
6
|
def initialize
|
6
7
|
@pattern = "event"
|
7
8
|
@tagname = :event
|
8
9
|
@member_type = {
|
9
|
-
:name => :event,
|
10
|
-
:category => :method_like,
|
11
10
|
:title => "Events",
|
12
11
|
:position => MEMBER_POS_EVENT,
|
12
|
+
:icon => File.dirname(__FILE__) + "/icons/event.png"
|
13
13
|
}
|
14
14
|
end
|
15
15
|
|
@@ -24,5 +24,13 @@ module JsDuck::Tag
|
|
24
24
|
def process_doc(h, tags, pos)
|
25
25
|
h[:name] = tags[0][:name]
|
26
26
|
end
|
27
|
+
|
28
|
+
def merge(h, docs, code)
|
29
|
+
JsDuck::ParamsMerger.merge(h, docs, code)
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_html(event, cls)
|
33
|
+
member_link(event) + member_params(event[:params])
|
34
|
+
end
|
27
35
|
end
|
28
36
|
end
|
data/lib/jsduck/tag/extends.rb
CHANGED
@@ -8,7 +8,6 @@ module JsDuck::Tag
|
|
8
8
|
@tagname = :extends
|
9
9
|
@ext_define_pattern = "extend"
|
10
10
|
@ext_define_default = {:extends => "Ext.Base"}
|
11
|
-
@merge_context = :class
|
12
11
|
end
|
13
12
|
|
14
13
|
# @extends classname
|
@@ -36,10 +35,5 @@ module JsDuck::Tag
|
|
36
35
|
cls[:extends] = JsDuck::Js::Utils.make_string(ast)
|
37
36
|
end
|
38
37
|
|
39
|
-
# Ignore extending of the Object class
|
40
|
-
def merge(h, docs, code)
|
41
|
-
h[:extends] = docs[:extends] || code[:extends]
|
42
|
-
h[:extends] = nil if h[:extends] == "Object"
|
43
|
-
end
|
44
38
|
end
|
45
39
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require "jsduck/tag/tag"
|
2
|
+
require "jsduck/logger"
|
3
|
+
|
4
|
+
module JsDuck::Tag
|
5
|
+
class Fires < Tag
|
6
|
+
def initialize
|
7
|
+
@pattern = "fires"
|
8
|
+
@tagname = :fires
|
9
|
+
@repeatable = true
|
10
|
+
@html_position = POS_FIRES
|
11
|
+
end
|
12
|
+
|
13
|
+
# @fires eventname
|
14
|
+
def parse_doc(p, pos)
|
15
|
+
{:tagname => :fires, :events => ident_list(p)}
|
16
|
+
end
|
17
|
+
|
18
|
+
# matches <ident> <ident> ... until line end
|
19
|
+
def ident_list(p)
|
20
|
+
list = []
|
21
|
+
while ident = p.hw.ident
|
22
|
+
list << ident
|
23
|
+
end
|
24
|
+
list
|
25
|
+
end
|
26
|
+
|
27
|
+
def process_doc(h, tags, pos)
|
28
|
+
h[:fires] = tags.map {|t| t[:events] }.flatten
|
29
|
+
end
|
30
|
+
|
31
|
+
def format(m, formatter)
|
32
|
+
cls = formatter.relations[m[:owner]]
|
33
|
+
|
34
|
+
m[:fires] = m[:fires].map do |name|
|
35
|
+
if cls.find_members({:tagname => :event, :name => name}).length > 0
|
36
|
+
formatter.link(m[:owner], name, name, :event)
|
37
|
+
else
|
38
|
+
JsDuck::Logger.warn(:fires, "@fires references unknown event: #{name}", m[:files][0])
|
39
|
+
name
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def to_html(m)
|
45
|
+
return [
|
46
|
+
"<h3 class='pa'>Fires</h3>",
|
47
|
+
"<ul>",
|
48
|
+
m[:fires].map {|e| "<li>#{e}</li>" },
|
49
|
+
"</ul>",
|
50
|
+
]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,130 @@
|
|
1
|
+
require 'jsduck/tag/tag'
|
2
|
+
require 'jsduck/render/signature_util'
|
3
|
+
|
4
|
+
module JsDuck::Tag
|
5
|
+
# Base class for all builtin members.
|
6
|
+
class MemberTag < Tag
|
7
|
+
# Defines a class member type and specifies various settings. For
|
8
|
+
# example:
|
9
|
+
#
|
10
|
+
# {
|
11
|
+
# :title => "Events",
|
12
|
+
# :position => MEMBER_POS_EVENT,
|
13
|
+
# # The following are optional
|
14
|
+
# :toolbar_title => "Events",
|
15
|
+
# :icon => File.dirname(__FILE__) + "/icons/event.png",
|
16
|
+
# :subsections => [
|
17
|
+
# {:title => "Static events",
|
18
|
+
# :filter => {:static => false},
|
19
|
+
# :default => true},
|
20
|
+
# {:title => "Instance events",
|
21
|
+
# :filter => {:static => true}},
|
22
|
+
# ]
|
23
|
+
# }
|
24
|
+
#
|
25
|
+
# Position defines the ordering of member section in final HTML
|
26
|
+
# output.
|
27
|
+
#
|
28
|
+
# Title is shown at the top of each such section and also as a
|
29
|
+
# label on Docs app toolbar button unless :toolbar_title is
|
30
|
+
# specified.
|
31
|
+
#
|
32
|
+
# Icon defines a file to be used as member icon in various places
|
33
|
+
# of the docs app.
|
34
|
+
#
|
35
|
+
# Subsections allows splitting the list of members to several
|
36
|
+
# subgroups. For example methods get split into static and
|
37
|
+
# instance methods.
|
38
|
+
#
|
39
|
+
# - The :filter field defines how to filter out the members for
|
40
|
+
# this subcategory. :static=>true filters out all members that
|
41
|
+
# have a :static field with a truthy value. Conversely,
|
42
|
+
# :static=>false filters out members not having a :static field
|
43
|
+
# or having it with a falsy value.
|
44
|
+
#
|
45
|
+
# - Setting :default=>true will hide the subsection title when all
|
46
|
+
# the members end up in that subsection. For example when there
|
47
|
+
# are only instance methods, the docs will only contain the
|
48
|
+
# section title "Methods", as by default one should assume all
|
49
|
+
# methods are instance methods if not stated otherwise.
|
50
|
+
#
|
51
|
+
attr_reader :member_type
|
52
|
+
|
53
|
+
# Avoid already-defined-constant warnings in Ruby 1.8
|
54
|
+
unless defined?(MEMBER_POS_CFG)
|
55
|
+
MEMBER_POS_CFG = 1
|
56
|
+
MEMBER_POS_PROPERTY = 2
|
57
|
+
MEMBER_POS_METHOD = 3
|
58
|
+
MEMBER_POS_EVENT = 4
|
59
|
+
MEMBER_POS_CSS_VAR = 5
|
60
|
+
MEMBER_POS_CSS_MIXIN = 6
|
61
|
+
end
|
62
|
+
|
63
|
+
# Extracts the fields auto-detected from code that are relevant to
|
64
|
+
# the member type and returns a hash with them.
|
65
|
+
#
|
66
|
+
# The implementation here extracts fields applicable to all member
|
67
|
+
# types. When additional member-specific fields are to be
|
68
|
+
# extracted, override this method, but be sure to call the
|
69
|
+
# superclass method too.
|
70
|
+
#
|
71
|
+
# For example inside Method tag we might additionally want to
|
72
|
+
# extract :type and :default:
|
73
|
+
#
|
74
|
+
# def process_code(code)
|
75
|
+
# h = super(code)
|
76
|
+
# h[:type] = code[:type]
|
77
|
+
# h[:default] = code[:default]
|
78
|
+
# h
|
79
|
+
# end
|
80
|
+
#
|
81
|
+
def process_code(code)
|
82
|
+
return {
|
83
|
+
:tagname => code[:tagname],
|
84
|
+
# An auto-detected name might be "MyClass.prototype.myMethod" -
|
85
|
+
# for member name we only want the last "myMethod" part.
|
86
|
+
:name => code[:name] ? code[:name].split(/\./).last : nil,
|
87
|
+
|
88
|
+
:autodetected => code[:autodetected],
|
89
|
+
:inheritdoc => code[:inheritdoc],
|
90
|
+
:static => code[:static],
|
91
|
+
:private => code[:private],
|
92
|
+
:inheritable => code[:inheritable],
|
93
|
+
:linenr => code[:linenr],
|
94
|
+
}
|
95
|
+
end
|
96
|
+
|
97
|
+
# Merges documentation and code hashes into the result hash.
|
98
|
+
def merge(hash, docs, code)
|
99
|
+
end
|
100
|
+
|
101
|
+
# This method defines the signature-line of the member.
|
102
|
+
# For example it might return something like this:
|
103
|
+
#
|
104
|
+
# "apply(source, target) : Object"
|
105
|
+
#
|
106
|
+
# Use #member_link method to render the member name as link in a
|
107
|
+
# standard way. Similarly there's helper method #member_params
|
108
|
+
# for rendering the parameter list.
|
109
|
+
def to_html(context, cls)
|
110
|
+
end
|
111
|
+
|
112
|
+
# Creates HTML link to the given member.
|
113
|
+
# A helper method for use in #to_html.
|
114
|
+
def member_link(member)
|
115
|
+
JsDuck::Render::SignatureUtil::link(member[:owner], member[:id], member[:name])
|
116
|
+
end
|
117
|
+
|
118
|
+
# Creates HTML listing of parameters.
|
119
|
+
# When called with nil, creates empty params list.
|
120
|
+
# A helper method for use in #to_html.
|
121
|
+
def member_params(params)
|
122
|
+
ps = Array(params).map do |p|
|
123
|
+
p[:optional] ? "["+p[:name]+"]" : p[:name]
|
124
|
+
end.join(", ")
|
125
|
+
|
126
|
+
"( <span class='pre'>#{ps}</span> )"
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
end
|
data/lib/jsduck/tag/method.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
require "jsduck/tag/
|
1
|
+
require "jsduck/tag/member_tag"
|
2
|
+
require "jsduck/params_merger"
|
2
3
|
|
3
4
|
module JsDuck::Tag
|
4
5
|
# Implementation of @method tag.
|
5
|
-
class Method <
|
6
|
+
class Method < MemberTag
|
6
7
|
def initialize
|
7
8
|
@pattern = "method"
|
8
9
|
@tagname = :method
|
9
10
|
@member_type = {
|
10
|
-
:name => :method,
|
11
|
-
:category => :method_like,
|
12
11
|
:title => "Methods",
|
13
12
|
:position => MEMBER_POS_METHOD,
|
13
|
+
:icon => File.dirname(__FILE__) + "/icons/method.png",
|
14
14
|
:subsections => [
|
15
15
|
{:title => "Instance methods", :filter => {:static => false}, :default => true},
|
16
16
|
{:title => "Static methods", :filter => {:static => true}},
|
@@ -31,5 +31,45 @@ module JsDuck::Tag
|
|
31
31
|
def process_doc(h, tags, pos)
|
32
32
|
h[:name] = tags[0][:name] if tags[0][:name]
|
33
33
|
end
|
34
|
+
|
35
|
+
def process_code(code)
|
36
|
+
h = super(code)
|
37
|
+
h[:params] = code[:params]
|
38
|
+
h[:chainable] = code[:chainable]
|
39
|
+
h[:fires] = code[:fires]
|
40
|
+
h[:method_calls] = code[:method_calls]
|
41
|
+
h
|
42
|
+
end
|
43
|
+
|
44
|
+
def merge(h, docs, code)
|
45
|
+
JsDuck::ParamsMerger.merge(h, docs, code)
|
46
|
+
end
|
47
|
+
|
48
|
+
def to_html(m, cls)
|
49
|
+
new_kw(m) + method_link(m, cls) + member_params(m[:params]) + return_value(m)
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def new_kw(m)
|
55
|
+
constructor?(m) ? "<strong class='new-keyword'>new</strong>" : ""
|
56
|
+
end
|
57
|
+
|
58
|
+
def method_link(m, cls)
|
59
|
+
if constructor?(m)
|
60
|
+
member_link(:owner => m[:owner], :id => m[:id], :name => cls[:name])
|
61
|
+
else
|
62
|
+
member_link(m)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def constructor?(m)
|
67
|
+
m[:name] == "constructor"
|
68
|
+
end
|
69
|
+
|
70
|
+
def return_value(m)
|
71
|
+
m[:return] ? (" : " + m[:return][:html_type]) : ""
|
72
|
+
end
|
73
|
+
|
34
74
|
end
|
35
75
|
end
|
data/lib/jsduck/tag/param.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
require "jsduck/tag/tag"
|
2
2
|
require "jsduck/doc/subproperties"
|
3
3
|
require "jsduck/render/subproperties"
|
4
|
-
require "jsduck/docs_code_comparer"
|
5
|
-
require "jsduck/logger"
|
6
4
|
|
7
5
|
module JsDuck::Tag
|
8
6
|
class Param < Tag
|
@@ -10,13 +8,18 @@ module JsDuck::Tag
|
|
10
8
|
@pattern = "param"
|
11
9
|
@tagname = :params
|
12
10
|
@repeatable = true
|
13
|
-
@merge_context = :method_like
|
14
11
|
@html_position = POS_PARAM
|
15
12
|
end
|
16
13
|
|
17
14
|
# @param {Type} [name=default] (optional) ...
|
18
15
|
def parse_doc(p, pos)
|
19
|
-
tag = p.standard_tag({
|
16
|
+
tag = p.standard_tag({
|
17
|
+
:tagname => :params,
|
18
|
+
:type => true,
|
19
|
+
:name => true,
|
20
|
+
:default => true,
|
21
|
+
:optional => true
|
22
|
+
})
|
20
23
|
tag[:optional] = true if parse_optional(p)
|
21
24
|
tag[:doc] = :multiline
|
22
25
|
tag
|
@@ -28,14 +31,7 @@ module JsDuck::Tag
|
|
28
31
|
|
29
32
|
def process_doc(h, tags, pos)
|
30
33
|
h[:params] = JsDuck::Doc::Subproperties.nest(tags, pos)
|
31
|
-
|
32
|
-
|
33
|
-
def merge(h, docs, code)
|
34
|
-
h[:params] = merge_params(docs, code, h[:files].first)
|
35
|
-
|
36
|
-
if only_autodetected_params?(docs, code)
|
37
|
-
JsDuck::DocsCodeComparer.mark_autodetected(h, :params)
|
38
|
-
end
|
34
|
+
h[:params] = nil if h[:params].length == 0
|
39
35
|
end
|
40
36
|
|
41
37
|
def format(m, formatter)
|
@@ -46,53 +42,5 @@ module JsDuck::Tag
|
|
46
42
|
JsDuck::Render::Subproperties.render_params(m[:params]) if m[:params].length > 0
|
47
43
|
end
|
48
44
|
|
49
|
-
private
|
50
|
-
|
51
|
-
def only_autodetected_params?(docs, code)
|
52
|
-
(docs[:params] || []).length == 0 && (code[:params] || []).length > 0
|
53
|
-
end
|
54
|
-
|
55
|
-
def merge_params(docs, code, file)
|
56
|
-
explicit = docs[:params] || []
|
57
|
-
implicit = JsDuck::DocsCodeComparer.matches?(docs, code) ? (code[:params] || []) : []
|
58
|
-
ex_len = explicit.length
|
59
|
-
im_len = implicit.length
|
60
|
-
|
61
|
-
if ex_len == 0 || im_len == 0
|
62
|
-
# Skip when either no implicit or explicit params
|
63
|
-
elsif ex_len != im_len && explicit.last[:type] =~ /\.\.\.$/
|
64
|
-
# Skip when vararg params are in play.
|
65
|
-
elsif ex_len < im_len
|
66
|
-
# Warn when less parameters documented than found from code.
|
67
|
-
JsDuck::Logger.warn(:param_count, "Detected #{im_len} params, but only #{ex_len} documented.", file)
|
68
|
-
elsif ex_len > im_len
|
69
|
-
# Warn when more parameters documented than found from code.
|
70
|
-
JsDuck::Logger.warn(:param_count, "Detected #{im_len} params, but #{ex_len} documented.", file)
|
71
|
-
elsif implicit.map {|p| p[:name] } != explicit.map {|p| p[:name] }
|
72
|
-
# Warn when parameter names don't match up.
|
73
|
-
ex_names = explicit.map {|p| p[:name] }
|
74
|
-
im_names = implicit.map {|p| p[:name] }
|
75
|
-
str = ex_names.zip(im_names).map {|p| ex, im = p; ex == im ? ex : (ex||"")+"/"+(im||"") }.join(", ")
|
76
|
-
JsDuck::Logger.warn(:param_count, "Documented and auto-detected params don't match: #{str}", file)
|
77
|
-
end
|
78
|
-
|
79
|
-
# Override implicit parameters with explicit ones
|
80
|
-
# But if explicit ones exist, don't append the implicit ones.
|
81
|
-
params = []
|
82
|
-
(ex_len > 0 ? ex_len : im_len).times do |i|
|
83
|
-
im = implicit[i] || {}
|
84
|
-
ex = explicit[i] || {}
|
85
|
-
params << {
|
86
|
-
:type => ex[:type] || im[:type] || "Object",
|
87
|
-
:name => ex[:name] || im[:name] || "",
|
88
|
-
:doc => ex[:doc] || im[:doc] || "",
|
89
|
-
:optional => ex[:optional] || false,
|
90
|
-
:default => ex[:default],
|
91
|
-
:properties => ex[:properties] || [],
|
92
|
-
}
|
93
|
-
end
|
94
|
-
params
|
95
|
-
end
|
96
|
-
|
97
45
|
end
|
98
46
|
end
|