@@ -64,7 +64,9 @@ function jsDocSimplifyNode (node) {
6464 case 'NullableType' :
6565 case 'NonNullableType' :
6666 result = jsDocSimplifyNode ( node . expression ) ;
67- result . nullable = ( node . type === 'NullableType' ) ;
67+ if ( node . type === 'NullableType' ) {
68+ result . push ( { type : 'null' } ) ;
69+ }
6870 return result ;
6971
7072 case 'NullLiteral' :
@@ -121,42 +123,49 @@ function jsDocSimplifyNode (node) {
121123 * @param {Object } argument - esprima source code node
122124 */
123125function jsDocMatchType ( variants , argument ) {
124- var i , l , variant , type ;
126+ var i , l , variant , type , result = null ;
125127
126128 for ( i = 0 , l = variants . length ; i < l ; i += 1 ) {
127129 variant = variants [ i ] [ 0 ] || variants [ i ] ;
128130 if ( variant . unknown || ! variant . type ) {
129- continue ;
131+ result = true ;
132+ break ;
130133 }
131134
132135 type = variant . type . toLowerCase ( ) ;
133136
134137 if ( argument . type === 'Literal' ) {
135138 if ( argument . value === null ) {
136- return type === 'null' ;
137- }
138- if ( argument . value === undefined ) {
139- return type === 'undefined' ;
140- }
141- if ( typeof argument . value !== 'object' ) {
142- return type === typeof argument . value ;
143- }
144- if ( ! argument . value . type ) {
145- return type === ( argument . value instanceof RegExp ? 'regexp' : 'object' ) ;
139+ result = result || ( type === 'null' ) ;
140+
141+ } else if ( argument . value === undefined ) {
142+ result = result || ( type === 'undefined' ) ;
143+
144+ } else if ( typeof argument . value !== 'object' ) {
145+ result = result || ( type === typeof argument . value ) ;
146+
147+ } else if ( ! argument . value . type ) {
148+ result = result || ( type === ( argument . value instanceof RegExp ? 'regexp' : 'object' ) ) ;
149+
150+ } else {
151+ result = result || ( type === argument . value . type ) ;
146152 }
147- return type === argument . value . type ;
148153
149154 } else if ( argument . type === 'ObjectExpression' ) {
150- return ( type === 'object' ) ;
155+ result = result || ( type === 'object' ) ;
151156
152157 } else if ( argument . type === 'ArrayExpression' ) {
153- return ( type === 'array' ) ;
158+ result = result || ( type === 'array' ) ;
154159
155160 } else if ( argument . type === 'NewExpression' ) {
156- return ( type === 'object' ) || ( type === argument . callee . name . toLowerCase ( ) ) ;
161+ result = result || ( ( type === 'object' ) || ( type === argument . callee . name . toLowerCase ( ) ) ) ;
162+ }
163+
164+ if ( result ) {
165+ break ;
157166 }
158167 }
159168
160169 // variables, expressions, another behavior
161- return true ;
170+ return result !== false ;
162171}
0 commit comments