diff --git a/__tests__/lib/github.js b/__tests__/lib/github.js index ce15eccde..92968adcf 100644 --- a/__tests__/lib/github.js +++ b/__tests__/lib/github.js @@ -25,6 +25,10 @@ function evaluate(fn) { ); } +afterEach(function() { + mock.restore(); +}); + test('github', function() { mock(mockRepo.master); @@ -42,8 +46,6 @@ test('github', function() { path: 'index.js', url: 'https://github.com/foo/bar/blob/this_is_the_sha/index.js#L6-L8' }); - - mock.restore(); }); test('malformed repository', function() { @@ -60,8 +62,6 @@ test('malformed repository', function() { } })[0].context.github ).toBe(undefined); - - mock.restore(); }); test('enterprise repository', function() { @@ -82,6 +82,28 @@ test('enterprise repository', function() { url: 'https://github.enterprise.com/foo/bar/blob/this_is_the_sha/index.js#L6-L8' }); +}); - mock.restore(); +test('typedef', function() { + mock(mockRepo.master); + + expect( + evaluate(function() { + /** + * A number, or a string containing a number. + * @typedef {(number|string)} NumberLike + */ + + /** + * get one + * @returns {number} one + */ + function getOne() { + return 1; + } + })[0].context.github + ).toEqual({ + path: 'index.js', + url: 'https://github.com/foo/bar/blob/this_is_the_sha/index.js#L2-L5' + }); }); diff --git a/declarations/comment.js b/declarations/comment.js index 257dee204..24fb5ba64 100644 --- a/declarations/comment.js +++ b/declarations/comment.js @@ -106,6 +106,7 @@ type Comment = { type?: DoctrineType, context: CommentContext, + loc: CommentLoc, path?: Array<{ name: string, diff --git a/src/github.js b/src/github.js index 1a80cfffc..291275b13 100644 --- a/src/github.js +++ b/src/github.js @@ -21,15 +21,20 @@ module.exports = function(comment: Comment) { .join('/'); if (urlPrefix) { + let startLine; + let endLine; + + if (comment.kind == 'typedef') { + startLine = comment.loc.start.line; + endLine = comment.loc.end.line; + } else { + startLine = comment.context.loc.start.line; + endLine = comment.context.loc.end.line; + } + comment.context.github = { url: - urlPrefix + - fileRelativePath + - '#L' + - comment.context.loc.start.line + - '-' + - 'L' + - comment.context.loc.end.line, + urlPrefix + fileRelativePath + '#L' + startLine + '-' + 'L' + endLine, path: fileRelativePath }; }