Skip to content

Commit 4c2cc4d

Browse files
committed
Infer module names
1 parent 5449757 commit 4c2cc4d

File tree

2 files changed

+44
-5
lines changed

2 files changed

+44
-5
lines changed

lib/infer/name.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use strict';
22

3-
var types = require('ast-types');
3+
var types = require('ast-types'),
4+
pathParse = require('parse-filepath');
45

56
/**
67
* Infers a `name` tag from the context,
@@ -33,6 +34,11 @@ module.exports = function () {
3334
return comment;
3435
}
3536

37+
if (comment.module) {
38+
comment.name = comment.module.name || pathParse(comment.context.file).name;
39+
return comment;
40+
}
41+
3642
if (comment.typedef) {
3743
comment.name = comment.typedef.name;
3844
return comment;

test/lib/infer/name.js

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ var test = require('tap').test,
44
parse = require('../../../lib/parsers/javascript'),
55
inferName = require('../../../lib/infer/name')();
66

7-
function toComment(fn, filename) {
7+
function toComment(fn, file) {
88
return parse({
9-
file: filename,
9+
file: file,
1010
source: fn instanceof Function ? '(' + fn.toString() + ')' : fn
1111
})[0];
1212
}
1313

14-
function evaluate(fn, callback) {
15-
return inferName(toComment(fn, callback));
14+
function evaluate(fn, file) {
15+
return inferName(toComment(fn, file));
1616
}
1717

1818
test('inferName', function (t) {
@@ -136,5 +136,38 @@ test('inferName', function (t) {
136136
return implicitName;
137137
}).name, 'explicitCallback', 'explicitCallback');
138138

139+
t.equal(evaluate(function () {
140+
/**
141+
* @module explicitModule
142+
* @returns {undefined} baz
143+
*/
144+
function implicitName() {}
145+
return implicitName;
146+
}).name, 'explicitModule');
147+
148+
t.equal(evaluate(function () {
149+
/**
150+
* @module {Function} explicitModule
151+
* @returns {undefined} baz
152+
*/
153+
function implicitName() {}
154+
return implicitName;
155+
}).name, 'explicitModule');
156+
157+
t.equal(evaluate(function () {
158+
/**
159+
* @module
160+
* @returns {undefined} baz
161+
*/
162+
function implicitName() {}
163+
return implicitName;
164+
}, '/path/inferred-from-file.js').name, 'inferred-from-file');
165+
166+
t.equal(evaluate(function () {
167+
/**
168+
* @module
169+
*/
170+
}, '/path/inferred-from-file.js').name, 'inferred-from-file');
171+
139172
t.end();
140173
});

0 commit comments

Comments
 (0)