Skip to content

Commit 136e2be

Browse files
author
Alexej Yaroshevich
committed
Fix type parsing bug
Merge branch 'hotfix/issue-16' Fixes #16
2 parents 5042da4 + d83bf93 commit 136e2be

2 files changed

Lines changed: 48 additions & 1 deletion

File tree

lib/jsdoc-helpers.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,8 +218,24 @@ function jsDocMatchType (variants, argument) {
218218
} else if (argument.type === 'ArrayExpression') {
219219
result = result || (type === 'array');
220220

221+
} else if (argument.type === 'NewExpression' && type === 'object') {
222+
result = result || true;
223+
221224
} else if (argument.type === 'NewExpression') {
222-
result = result || ((type === 'object') || (type === argument.callee.name.toLowerCase()));
225+
var c = argument.callee;
226+
var exam = c.name;
227+
if (!exam && c.type === 'MemberExpression') {
228+
var cur = c;
229+
exam = [];
230+
while (cur.object) {
231+
exam.unshift(cur.property.name);
232+
cur = cur.object;
233+
}
234+
exam.unshift(cur.name);
235+
exam = exam.join('.');
236+
}
237+
exam = exam.toLowerCase();
238+
result = result || (type === exam);
223239
}
224240

225241
if (result) {

test/test.validate-jsdoc-returns.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,37 @@ describe('rules/validate-jsdoc @returns', function() {
348348
);
349349
});
350350

351+
it('should not report on `@returns {foo.Bar}`. issue #16', function() {
352+
checker.configure({ jsDoc: { requireReturnTypes: true, checkReturnTypes: true } });
353+
assert(
354+
checker.checkString(
355+
'module.exports = {\n' +
356+
' /**\n' +
357+
' * @return {foo.Bar}\n' +
358+
' */\n' +
359+
' foo: function () {\n' +
360+
' return new foo.Bar();\n' +
361+
' },\n' +
362+
' /**\n' +
363+
' * @return {foo.Bar.Baz}\n' +
364+
' */\n' +
365+
' bar: function () {\n' +
366+
' return new foo.Bar.Baz();\n' +
367+
' },\n' +
368+
' /**\n' +
369+
' * @return {foo.Bar.Baz|foo.Bar.Baz.Moo}\n' +
370+
' */\n' +
371+
' baz: function (t) {\n' +
372+
' if (t) {\n' +
373+
' return new foo.Bar.Baz.Moo();\n' +
374+
' }\n' +
375+
' return new foo.Bar.Baz();\n' +
376+
' }\n' +
377+
'};\n'
378+
).isEmpty()
379+
);
380+
});
381+
351382
});
352383

353384
});

0 commit comments

Comments
 (0)