jsduck 5.0.0.beta2 → 5.0.0.beta3
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -0,0 +1,47 @@
|
|
1
|
+
require "jsduck/logger"
|
2
|
+
require "jsduck/merger"
|
3
|
+
|
4
|
+
module JsDuck
|
5
|
+
# Performs the merging of :params field.
|
6
|
+
# Used by Method, Event and CssMixin members.
|
7
|
+
class ParamsMerger
|
8
|
+
# Ensures the existance of params array.
|
9
|
+
# Defaults type of each parameter to "Object".
|
10
|
+
# Logs warnings for inconsistencies between params in code and in docs.
|
11
|
+
def self.merge(h, docs, code)
|
12
|
+
h[:params] = [] unless h[:params]
|
13
|
+
|
14
|
+
h[:params].each do |p|
|
15
|
+
p[:type] = "Object" unless p[:type]
|
16
|
+
end
|
17
|
+
|
18
|
+
check_consistency(docs, code, h[:files].first)
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.check_consistency(docs, code, file)
|
22
|
+
explicit = docs[:params] || []
|
23
|
+
implicit = JsDuck::Merger.can_be_autodetected?(docs, code) ? (code[:params] || []) : []
|
24
|
+
ex_len = explicit.length
|
25
|
+
im_len = implicit.length
|
26
|
+
|
27
|
+
if ex_len == 0 || im_len == 0
|
28
|
+
# Skip when either no implicit or explicit params
|
29
|
+
elsif ex_len != im_len && explicit.last[:type] =~ /\.\.\.$/
|
30
|
+
# Skip when vararg params are in play.
|
31
|
+
elsif ex_len < im_len
|
32
|
+
# Warn when less parameters documented than found from code.
|
33
|
+
JsDuck::Logger.warn(:param_count, "Detected #{im_len} params, but only #{ex_len} documented.", file)
|
34
|
+
elsif ex_len > im_len
|
35
|
+
# Warn when more parameters documented than found from code.
|
36
|
+
JsDuck::Logger.warn(:param_count, "Detected #{im_len} params, but #{ex_len} documented.", file)
|
37
|
+
elsif implicit.map {|p| p[:name] } != explicit.map {|p| p[:name] }
|
38
|
+
# Warn when parameter names don't match up.
|
39
|
+
ex_names = explicit.map {|p| p[:name] }
|
40
|
+
im_names = implicit.map {|p| p[:name] }
|
41
|
+
str = ex_names.zip(im_names).map {|p| ex, im = p; ex == im ? ex : (ex||"")+"/"+(im||"") }.join(", ")
|
42
|
+
JsDuck::Logger.warn(:param_count, "Documented and auto-detected params don't match: #{str}", file)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
@@ -127,9 +127,15 @@ module JsDuck
|
|
127
127
|
end
|
128
128
|
|
129
129
|
# Copy over from @cfg all the fields that aren't already present.
|
130
|
-
# Except :type and :default which don't make sense for methods and events.
|
131
130
|
def add_shared(hash, cfg)
|
132
|
-
ignored_fields = [
|
131
|
+
ignored_fields = [
|
132
|
+
# These don't make sense for methods and events.
|
133
|
+
:type, :default,
|
134
|
+
# It's the config that's tagged with these, don't propagate them to methods/events.
|
135
|
+
:accessor, :evented,
|
136
|
+
# The :doc field get auto-created and we don't want any other docs.
|
137
|
+
:inheritdoc, :localdoc,
|
138
|
+
]
|
133
139
|
|
134
140
|
cfg.each_pair do |key, value|
|
135
141
|
hash[key] = value unless ignored_fields.include?(key) || hash[key]
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'jsduck/logger'
|
2
|
+
|
3
|
+
module JsDuck
|
4
|
+
module Process
|
5
|
+
|
6
|
+
# Expands lists of fired events to take into account events fired
|
7
|
+
# by all the methods that get called by a method.
|
8
|
+
class Fires
|
9
|
+
def initialize(relations)
|
10
|
+
@relations = relations
|
11
|
+
# Map of methods for which all @fires tags have been detected.
|
12
|
+
# So we don't repeat the resolving.
|
13
|
+
@detected = {}
|
14
|
+
# Map of methods that we're currently resolving.
|
15
|
+
# So we don't recurse into infinity.
|
16
|
+
@call_chain = {}
|
17
|
+
end
|
18
|
+
|
19
|
+
# Populates @fires tags with additional events.
|
20
|
+
def process_all!
|
21
|
+
@relations.each do |cls|
|
22
|
+
cls.find_members(:tagname => :method, :static => false).each do |m|
|
23
|
+
@call_chain = {m[:name] => true}
|
24
|
+
detect_fires(cls, m)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def detect_fires(cls, m)
|
32
|
+
if m[:autodetected][:fires] && m[:method_calls] && !detected?(m)
|
33
|
+
m[:fires] = events_from_methods(cls, m[:method_calls]).concat(m[:fires] || []).sort.uniq
|
34
|
+
mark_detected(m)
|
35
|
+
end
|
36
|
+
|
37
|
+
m[:fires]
|
38
|
+
end
|
39
|
+
|
40
|
+
def mark_detected(m)
|
41
|
+
@detected[m[:owner]] = {} unless @detected[m[:owner]]
|
42
|
+
@detected[m[:owner]][m[:name]] = true
|
43
|
+
end
|
44
|
+
|
45
|
+
def detected?(m)
|
46
|
+
cls = @detected[m[:owner]]
|
47
|
+
cls && cls[m[:name]]
|
48
|
+
end
|
49
|
+
|
50
|
+
def events_from_methods(cls, methods)
|
51
|
+
events = []
|
52
|
+
|
53
|
+
methods.each do |name|
|
54
|
+
if !@call_chain[name]
|
55
|
+
@call_chain[name] = true
|
56
|
+
m = cls.find_members(:tagname => :method, :name => name, :static => false)[0]
|
57
|
+
if m
|
58
|
+
fires = detect_fires(cls, m)
|
59
|
+
events.concat(fires) if fires
|
60
|
+
end
|
61
|
+
@call_chain[name] = false
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
events.sort.uniq
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
@@ -28,9 +28,11 @@ module JsDuck
|
|
28
28
|
|
29
29
|
# Reads in data from all .json files in directory
|
30
30
|
def read(ver)
|
31
|
+
ensure_correct_format(ver[:path])
|
32
|
+
|
31
33
|
# Map list of files into pairs of (classname, members-hash)
|
32
34
|
pairs = Util::Parallel.map(Dir[ver[:path] + "/*.json"]) do |filename|
|
33
|
-
|
35
|
+
Logger.log("Importing #{ver[:version]}", filename)
|
34
36
|
json = Util::Json.read(filename)
|
35
37
|
[json["name"], members_id_index(json)]
|
36
38
|
end
|
@@ -39,6 +41,22 @@ module JsDuck
|
|
39
41
|
return Hash[ pairs ]
|
40
42
|
end
|
41
43
|
|
44
|
+
def ensure_correct_format(path)
|
45
|
+
# Read first JSON file in import dir
|
46
|
+
json = Util::Json.read(Dir[path + "/*.json"].first)
|
47
|
+
|
48
|
+
unless correct_format?(json)
|
49
|
+
Logger.fatal("Bad format for importing: #{path}")
|
50
|
+
Logger.fatal("Export format changed in 5.0.0 beta 2.")
|
51
|
+
Logger.fatal("Maybe you forgot to re-generate the exports with new JSDuck.")
|
52
|
+
exit(1)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def correct_format?(json)
|
57
|
+
json["members"].is_a?(Array)
|
58
|
+
end
|
59
|
+
|
42
60
|
# creates index of all class members
|
43
61
|
def members_id_index(json)
|
44
62
|
index = {}
|
data/lib/jsduck/render/class.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
require 'jsduck/render/signature'
|
2
1
|
require 'jsduck/render/tags'
|
3
2
|
require 'jsduck/render/sidebar'
|
3
|
+
require 'jsduck/tag_registry'
|
4
4
|
|
5
5
|
module JsDuck
|
6
6
|
module Render
|
@@ -13,7 +13,6 @@ module JsDuck
|
|
13
13
|
|
14
14
|
def render(cls)
|
15
15
|
@cls = cls
|
16
|
-
@signature = Render::Signature.new(cls)
|
17
16
|
|
18
17
|
return [
|
19
18
|
"<div>",
|
@@ -122,8 +121,8 @@ module JsDuck
|
|
122
121
|
"<br/>",
|
123
122
|
@opts.source ? "<a href='source/#{m[:files][0][:href]}' target='_blank' class='view-source'>view source</a>" : "",
|
124
123
|
"</div>",
|
125
|
-
|
126
|
-
|
124
|
+
render_member_signature(m),
|
125
|
+
render_tag_signature(m),
|
127
126
|
"</div>",
|
128
127
|
# short and long descriptions
|
129
128
|
"<div class='description'>",
|
@@ -138,6 +137,14 @@ module JsDuck
|
|
138
137
|
]
|
139
138
|
end
|
140
139
|
|
140
|
+
def render_member_signature(m)
|
141
|
+
TagRegistry.get_by_name(m[:tagname]).to_html(m, @cls)
|
142
|
+
end
|
143
|
+
|
144
|
+
def render_tag_signature(m)
|
145
|
+
Render::Tags.render_signature(m)
|
146
|
+
end
|
147
|
+
|
141
148
|
end
|
142
149
|
|
143
150
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module JsDuck
|
2
|
+
module Render
|
3
|
+
|
4
|
+
# Helper method for rendering the link in method/property signature
|
5
|
+
class SignatureUtil
|
6
|
+
|
7
|
+
def self.link(class_name, member_id, text)
|
8
|
+
"<a href='#!/api/#{class_name}-#{member_id}' class='name expandable'>#{text}</a>"
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
data/lib/jsduck/tag/alias.rb
CHANGED
@@ -9,7 +9,6 @@ module JsDuck::Tag
|
|
9
9
|
@repeatable = true
|
10
10
|
@ext_define_pattern = "alias"
|
11
11
|
@ext_define_default = {:aliases => []}
|
12
|
-
@merge_context = :class
|
13
12
|
end
|
14
13
|
|
15
14
|
# For backwards compatibility decide whether the @alias was used
|
@@ -39,24 +38,5 @@ module JsDuck::Tag
|
|
39
38
|
cls[:aliases] += JsDuck::Js::Utils.make_string_list(ast)
|
40
39
|
end
|
41
40
|
|
42
|
-
def merge(h, docs, code)
|
43
|
-
h[:aliases] = build_aliases_hash(docs[:aliases] || code[:aliases] || [])
|
44
|
-
end
|
45
|
-
|
46
|
-
# Given array of full alias names like "foo.bar", "foo.baz"
|
47
|
-
# build hash like {"foo" => ["bar", "baz"]}
|
48
|
-
def build_aliases_hash(aliases)
|
49
|
-
hash={}
|
50
|
-
aliases.each do |a|
|
51
|
-
if a =~ /^([^.]+)\.(.+)$/
|
52
|
-
if hash[$1]
|
53
|
-
hash[$1] << $2
|
54
|
-
else
|
55
|
-
hash[$1] = [$2]
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
hash
|
60
|
-
end
|
61
41
|
end
|
62
42
|
end
|
@@ -8,11 +8,6 @@ module JsDuck::Tag
|
|
8
8
|
@repeatable = true
|
9
9
|
@ext_define_pattern = "alternateClassName"
|
10
10
|
@ext_define_default = {:alternateClassNames => []}
|
11
|
-
@merge_context = :class
|
12
|
-
end
|
13
|
-
|
14
|
-
def merge(h, docs, code)
|
15
|
-
h[@tagname] = docs[@tagname] || code[@tagname] || []
|
16
11
|
end
|
17
12
|
end
|
18
13
|
end
|
data/lib/jsduck/tag/cfg.rb
CHANGED
@@ -1,18 +1,17 @@
|
|
1
|
-
require "jsduck/tag/
|
1
|
+
require "jsduck/tag/member_tag"
|
2
2
|
require "jsduck/doc/subproperties"
|
3
3
|
|
4
4
|
module JsDuck::Tag
|
5
|
-
class Cfg <
|
5
|
+
class Cfg < MemberTag
|
6
6
|
def initialize
|
7
7
|
@pattern = "cfg"
|
8
8
|
@tagname = :cfg
|
9
9
|
@repeatable = true
|
10
10
|
@member_type = {
|
11
|
-
:name => :cfg,
|
12
|
-
:category => :property_like,
|
13
11
|
:title => "Config options",
|
14
12
|
:toolbar_title => "Configs",
|
15
13
|
:position => MEMBER_POS_CFG,
|
14
|
+
:icon => File.dirname(__FILE__) + "/icons/cfg.png",
|
16
15
|
:subsections => [
|
17
16
|
{:title => "Required config options", :filter => {:required => true}},
|
18
17
|
{:title => "Optional config options", :filter => {:required => false}, :default => true},
|
@@ -22,7 +21,13 @@ module JsDuck::Tag
|
|
22
21
|
|
23
22
|
# @cfg {Type} [name=default] (required) ...
|
24
23
|
def parse_doc(p, pos)
|
25
|
-
tag = p.standard_tag({
|
24
|
+
tag = p.standard_tag({
|
25
|
+
:tagname => :cfg,
|
26
|
+
:type => true,
|
27
|
+
:name => true,
|
28
|
+
:default => true,
|
29
|
+
:optional => true
|
30
|
+
})
|
26
31
|
tag[:optional] = false if parse_required(p)
|
27
32
|
tag[:doc] = :multiline
|
28
33
|
tag
|
@@ -45,5 +50,25 @@ module JsDuck::Tag
|
|
45
50
|
h[:properties] = nested[:properties]
|
46
51
|
h[:name] = nested[:name]
|
47
52
|
end
|
53
|
+
|
54
|
+
def process_code(code)
|
55
|
+
h = super(code)
|
56
|
+
h[:type] = code[:type]
|
57
|
+
h[:default] = code[:default]
|
58
|
+
h[:accessor] = code[:accessor]
|
59
|
+
h[:evented] = code[:evented]
|
60
|
+
h
|
61
|
+
end
|
62
|
+
|
63
|
+
# Do the merging of :type field
|
64
|
+
def merge(h, docs, code)
|
65
|
+
if h[:type] == nil
|
66
|
+
h[:type] = code[:tagname] == :method ? "Function" : "Object"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def to_html(cfg, cls)
|
71
|
+
member_link(cfg) + " : " + cfg[:html_type]
|
72
|
+
end
|
48
73
|
end
|
49
74
|
end
|
data/lib/jsduck/tag/class.rb
CHANGED
@@ -5,7 +5,6 @@ module JsDuck::Tag
|
|
5
5
|
def initialize
|
6
6
|
@pattern = "class"
|
7
7
|
@tagname = :class
|
8
|
-
@merge_context = :class
|
9
8
|
end
|
10
9
|
|
11
10
|
# @class name
|
@@ -20,9 +19,53 @@ module JsDuck::Tag
|
|
20
19
|
h[:name] = tags[0][:name]
|
21
20
|
end
|
22
21
|
|
23
|
-
#
|
22
|
+
# Although class is not a member, it also has the auto-detected
|
23
|
+
# part from code. So this method gets called by Merger.
|
24
|
+
#
|
25
|
+
# If we did detect code as a class use all the auto-detected
|
26
|
+
# fields, otherwise use only the name field.
|
27
|
+
def process_code(code)
|
28
|
+
if code[:tagname] == :class
|
29
|
+
code
|
30
|
+
else
|
31
|
+
{:name => code[:name] }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
24
35
|
def merge(h, docs, code)
|
36
|
+
# Ensure the empty members array.
|
25
37
|
h[:members] = []
|
38
|
+
# Ignore extending of the Object class
|
39
|
+
h[:extends] = nil if h[:extends] == "Object"
|
40
|
+
# Default alternateClassNames list to empty array
|
41
|
+
h[:alternateClassNames] = [] unless h[:alternateClassNames]
|
42
|
+
# Turn :aliases field into hash
|
43
|
+
h[:aliases] = build_aliases_hash(h[:aliases] || [])
|
44
|
+
|
45
|
+
# Takes the :enum always from docs, but the :doc_only can come
|
46
|
+
# from either code or docs.
|
47
|
+
if docs[:enum]
|
48
|
+
h[:enum] = docs[:enum]
|
49
|
+
h[:enum][:doc_only] = docs[:enum][:doc_only] || (code[:enum] && code[:enum][:doc_only])
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
# Given array of full alias names like "foo.bar", "foo.baz"
|
56
|
+
# build hash like {"foo" => ["bar", "baz"]}
|
57
|
+
def build_aliases_hash(aliases)
|
58
|
+
hash={}
|
59
|
+
aliases.each do |a|
|
60
|
+
if a =~ /^([^.]+)\.(.+)$/
|
61
|
+
if hash[$1]
|
62
|
+
hash[$1] << $2
|
63
|
+
else
|
64
|
+
hash[$1] = [$2]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
hash
|
26
69
|
end
|
27
70
|
end
|
28
71
|
end
|
data/lib/jsduck/tag/css_mixin.rb
CHANGED
@@ -1,17 +1,21 @@
|
|
1
|
-
require "jsduck/tag/
|
1
|
+
require "jsduck/tag/member_tag"
|
2
2
|
|
3
3
|
module JsDuck::Tag
|
4
4
|
# As of now there is no @css_mixin tag available in CSS files. This
|
5
5
|
# class just exists to define that we have a member type called
|
6
6
|
# :css_mixin.
|
7
|
-
class CssMixin <
|
7
|
+
class CssMixin < MemberTag
|
8
8
|
def initialize
|
9
|
+
@tagname = :css_mixin
|
9
10
|
@member_type = {
|
10
|
-
:name => :css_mixin,
|
11
|
-
:category => :method_like,
|
12
11
|
:title => "CSS Mixins",
|
13
12
|
:position => MEMBER_POS_CSS_MIXIN,
|
13
|
+
:icon => File.dirname(__FILE__) + "/icons/css_mixin.png"
|
14
14
|
}
|
15
15
|
end
|
16
|
+
|
17
|
+
def to_html(mixin, cls)
|
18
|
+
member_link(mixin) + member_params(mixin[:params])
|
19
|
+
end
|
16
20
|
end
|
17
21
|
end
|
data/lib/jsduck/tag/css_var.rb
CHANGED
@@ -1,22 +1,27 @@
|
|
1
|
-
require "jsduck/tag/
|
1
|
+
require "jsduck/tag/member_tag"
|
2
2
|
|
3
3
|
module JsDuck::Tag
|
4
|
-
class CssVar <
|
4
|
+
class CssVar < MemberTag
|
5
5
|
def initialize
|
6
6
|
@pattern = "var"
|
7
7
|
@tagname = :css_var
|
8
8
|
@member_type = {
|
9
|
-
:name => :css_var,
|
10
|
-
:category => :property_like,
|
11
9
|
:title => "CSS Variables",
|
12
10
|
:toolbar_title => "CSS Vars",
|
13
11
|
:position => MEMBER_POS_CSS_VAR,
|
12
|
+
:icon => File.dirname(__FILE__) + "/icons/css_var.png"
|
14
13
|
}
|
15
14
|
end
|
16
15
|
|
17
16
|
# @var {Type} [name=default] ...
|
18
17
|
def parse_doc(p, pos)
|
19
|
-
p.standard_tag({
|
18
|
+
p.standard_tag({
|
19
|
+
:tagname => :css_var,
|
20
|
+
:type => true,
|
21
|
+
:name => true,
|
22
|
+
:default => true,
|
23
|
+
:optional => true
|
24
|
+
})
|
20
25
|
end
|
21
26
|
|
22
27
|
def process_doc(h, tags, pos)
|
@@ -25,5 +30,21 @@ module JsDuck::Tag
|
|
25
30
|
h[:type] = p[:type]
|
26
31
|
h[:default] = p[:default]
|
27
32
|
end
|
33
|
+
|
34
|
+
def process_code(code)
|
35
|
+
h = super(code)
|
36
|
+
h[:type] = code[:type]
|
37
|
+
h[:default] = code[:default]
|
38
|
+
h
|
39
|
+
end
|
40
|
+
|
41
|
+
# Set default value for :type field
|
42
|
+
def merge(h, docs, code)
|
43
|
+
h[:type] = "Object" unless h[:type]
|
44
|
+
end
|
45
|
+
|
46
|
+
def to_html(var, cls)
|
47
|
+
member_link(var) + " : " + var[:html_type]
|
48
|
+
end
|
28
49
|
end
|
29
50
|
end
|