33var types = require ( 'ast-types' ) ,
44 flowDoctrine = require ( '../flow_doctrine' ) ;
55
6+
67/**
78 * Infers param tags by reading function parameter names
89 *
@@ -12,6 +13,41 @@ var types = require('ast-types'),
1213 */
1314module . exports = function inferParams ( comment ) {
1415
16+ function paramToDoc ( param ) {
17+ // ES6 default
18+ if ( param . type === 'AssignmentPattern' ) {
19+ var newParam = paramToDoc ( param . left ) ;
20+ var optionalParam = {
21+ title : 'param' ,
22+ name : newParam . name ,
23+ 'default' : comment . context . code . substring (
24+ param . right . start , param . right . end )
25+ } ;
26+
27+ if ( newParam . type ) {
28+ optionalParam . type = {
29+ type : 'OptionalType' ,
30+ expression : newParam . type
31+ } ;
32+ }
33+
34+ return optionalParam ;
35+ }
36+
37+ var newParam = {
38+ title : 'param' ,
39+ name : param . name ,
40+ lineNumber : param . loc . start . line
41+ } ;
42+
43+ // Flow/TS annotations
44+ if ( param . typeAnnotation && param . typeAnnotation . typeAnnotation ) {
45+ newParam . type = flowDoctrine ( param . typeAnnotation . typeAnnotation ) ;
46+ }
47+
48+ return newParam ;
49+ }
50+
1551 types . visit ( comment . context . ast , {
1652 visitFunction : function ( path ) {
1753
@@ -30,15 +66,8 @@ module.exports = function inferParams(comment) {
3066 if ( ! comment . params ) {
3167 comment . params = [ ] ;
3268 }
33- var newParam = {
34- title : 'param' ,
35- name : param . name ,
36- lineNumber : param . loc . start . line
37- } ;
38- if ( param . typeAnnotation && param . typeAnnotation . typeAnnotation ) {
39- newParam . type = flowDoctrine ( param . typeAnnotation . typeAnnotation ) ;
40- }
41- comment . params . push ( newParam ) ;
69+
70+ comment . params . push ( paramToDoc ( param ) ) ;
4271 }
4372 paramOrder [ param . name ] = i ++ ;
4473 } ) ;
0 commit comments