Skip to content

Commit 105631f

Browse files
committed
adding @type tag
1 parent bab1033 commit 105631f

File tree

3 files changed

+101
-9
lines changed

3 files changed

+101
-9
lines changed

tags/option.js

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -115,13 +115,16 @@ var tnd = require("bit-docs-type-annotate").typeNameDescription;
115115
add: function( line, tagData ) {
116116

117117
var noNameData = tnd(line, true),
118-
data = tnd(line);
118+
data = tnd(line),
119+
i,
120+
option,
121+
obj;
119122

120123
if(tagData && this !== tagData) {
121124
var options = getOptions(tagData);
122125

123126
if(options) {
124-
var option = getOrMakeOptionByName(options, data.name);
127+
option = getOrMakeOptionByName(options, data.name);
125128
setOptionData(option, data);
126129
return option;
127130
}
@@ -133,10 +136,10 @@ var tnd = require("bit-docs-type-annotate").typeNameDescription;
133136
// Typedef's can have option values, but those values can be objects
134137
// with options.
135138
// So, we should check in options objects first
136-
for( var i = 0 ; i < this.types.length; i++ ) {
137-
var obj = this.types[i];
139+
for( i = 0 ; i < this.types.length; i++ ) {
140+
obj = this.types[i];
138141
if( obj.type == "Object" ) {
139-
var option = getOrMakeOptionByName(obj.options || [], data.name);
142+
option = getOrMakeOptionByName(obj.options || [], data.name);
140143
if(option) {
141144
setOptionData(option, data);
142145
return option;
@@ -151,8 +154,8 @@ var tnd = require("bit-docs-type-annotate").typeNameDescription;
151154
// only process this type of option if there is one value
152155
if(noNameData.types && noNameData.types.length == 1) {
153156
var typeData = noNameData.types[0];
154-
for(var i = 0 ; i < locations.length; i++){
155-
var obj = locations[i];
157+
for(i = 0 ; i < locations.length; i++){
158+
obj = locations[i];
156159
if(obj){
157160
if(!obj.types){
158161
obj.types = [];
@@ -190,7 +193,7 @@ var tnd = require("bit-docs-type-annotate").typeNameDescription;
190193
}
191194
}
192195
// get the named one
193-
var option = getOrMakeOptionByName(options || params, data.name);
196+
option = getOrMakeOptionByName(options || params, data.name);
194197

195198
// add to it
196199
setOptionData(option, data);

tags/tags.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ var tags = {
1313
signature: require("./signature"),
1414
"static": require("./static"),
1515
"this": require("./this"),
16-
typedef: require("./typedef")
16+
type: require("./type"),
17+
typedef: require("./typedef")
1718
};
1819

1920
for(var name in tags) {

tags/type.js

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
var tnd = require("bit-docs-type-annotate").typeNameDescription;
2+
3+
// go through the types and get the first one that has options
4+
var getOptions = function(param){
5+
if(!param.types) {
6+
return;
7+
}
8+
for(var i =0; i < param.types.length; i++) {
9+
if( param.types[i].options ) {
10+
return param.types[i].options;
11+
}
12+
}
13+
};
14+
// go through the types and return the first one that has params
15+
var getParams = function(param){
16+
if(!param.types) {
17+
return;
18+
}
19+
for(var i =0; i < param.types.length; i++) {
20+
if( param.types[i].params ) {
21+
return param.types[i].params;
22+
}
23+
}
24+
};
25+
26+
// find matching type
27+
var getType = function(types, type){
28+
for(var i =0; i < types.length; i++) {
29+
if( types[i].type === type ) {
30+
return types[i];
31+
}
32+
}
33+
};
34+
35+
var getOrMakeOptionByName = function(options, name){
36+
for(var i =0; i < options.length; i++) {
37+
if( options[i].name === name ) {
38+
return options[i];
39+
}
40+
}
41+
var option = {name: name};
42+
options.push(option);
43+
return option;
44+
},
45+
setOptionData = function(option, data){
46+
option.description = data.description;
47+
48+
for(var prop in data){
49+
option[prop] = data[prop];
50+
}
51+
};
52+
53+
54+
module.exports = {
55+
56+
addMore: function( line, last ) {
57+
if ( last ) last.description += "\n" + line;
58+
},
59+
add: function( line, tagData ) {
60+
61+
var noNameData = tnd(line, true),
62+
data = tnd(line);
63+
// we should look to find something matching
64+
var locations = [this];
65+
// only process this type of option if there is one value
66+
if(noNameData.types && noNameData.types.length == 1) {
67+
var typeData = noNameData.types[0];
68+
for(var i = 0 ; i < locations.length; i++){
69+
var obj = locations[i];
70+
if(obj){
71+
if(!obj.types){
72+
obj.types = [];
73+
}
74+
var type = getType(obj.types, typeData.type);
75+
if(type){
76+
// copy description
77+
type.description = noNameData.description;
78+
// copy any additional type info
79+
for(var prop in typeData){
80+
type[prop] = typeData[prop];
81+
}
82+
return type;
83+
}
84+
}
85+
}
86+
}
87+
}
88+
};

0 commit comments

Comments
 (0)