Skip to content

Commit b897250

Browse files
committed
Refactor utils naming
1 parent 5e0f9a5 commit b897250

File tree

5 files changed

+100
-125
lines changed

5 files changed

+100
-125
lines changed

src/iterateJsdoc.js

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ const parseComment = (commentNode, indent, trim = true) => {
1818
}
1919

2020
return parser(str, data);
21-
}
21+
};
2222
};
2323

2424
// Preserve JSDoc block start/end indentation.
@@ -193,27 +193,32 @@ const getUtils = (
193193
return false;
194194
};
195195

196-
utils.isNamepathDefiningTag = (tagName) => {
197-
return jsdocUtils.isNamepathDefiningTag(tagName);
196+
utils.tagMustHaveEitherTypeOrNamepath = (tagName) => {
197+
return jsdocUtils.tagMustHaveEitherTypeOrNamepath(tagName);
198198
};
199-
utils.isNamepathTag = (tagName, checkSeesForNamepaths) => {
200-
return jsdocUtils.isNamepathTag(tagName, checkSeesForNamepaths);
199+
200+
utils.tagMightHaveEitherTypeOrNamepath = (tagName) => {
201+
return jsdocUtils.tagMightHaveEitherTypeOrNamepath(tagName);
201202
};
202203

203-
utils.isTagWithType = (tagName) => {
204-
return jsdocUtils.isTagWithType(tagName);
204+
utils.tagMustHaveNamepath = (tagName) => {
205+
return jsdocUtils.tagMustHaveNamepath(tagName);
205206
};
206-
utils.isPotentiallyEmptyTypeTag = (tagName) => {
207-
return jsdocUtils.isPotentiallyEmptyTypeTag(tagName);
207+
208+
utils.tagMightHaveNamepath = (tagName) => {
209+
return jsdocUtils.tagMightHaveNamepath(tagName);
208210
};
209211

210-
utils.passesEmptyNamepathCheck = (tag, allowEmptyNamepaths) => {
211-
return !tag.name && allowEmptyNamepaths &&
212-
jsdocUtils.isPotentiallyEmptyNamepathTag(tag.tag);
212+
utils.tagMustHaveType = (tagName) => {
213+
return jsdocUtils.tagMustHaveType(tagName);
213214
};
214215

215-
utils.isTagWithMandatoryNamepathOrType = (tagName) => {
216-
return jsdocUtils.isTagWithMandatoryNamepathOrType(tagName);
216+
utils.tagMightHaveType = (tagName) => {
217+
return jsdocUtils.tagMightHaveType(tagName);
218+
};
219+
220+
utils.isNamepathDefiningTag = (tagName) => {
221+
return jsdocUtils.isNamepathDefiningTag(tagName);
217222
};
218223

219224
utils.hasDefinedTypeReturnTag = (tag) => {

src/jsdocUtils.js

Lines changed: 76 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -126,17 +126,45 @@ const hasDefinedTypeReturnTag = (tag) => {
126126
return true;
127127
};
128128

129+
const tagsWithOptionalType = [
130+
'augments', 'extends',
131+
'class', 'constructor',
132+
'constant', 'const',
133+
'enum',
134+
'implements',
135+
'member', 'var',
136+
'module',
137+
'namespace',
138+
'param', 'arg', 'argument',
139+
'property', 'prop',
140+
'returns', 'return',
141+
'throws', 'exception',
142+
'type',
143+
'typedef',
144+
'yields', 'yield',
145+
146+
// GCC specific
147+
'package',
148+
'private',
149+
'protected',
150+
'public',
151+
'static',
152+
];
153+
154+
const tagsWithMandatoryType = [
155+
'enum',
156+
'implements',
157+
'member', 'var',
158+
'module',
159+
'type',
160+
'typedef',
161+
];
162+
129163
const namepathDefiningTags = [
130-
// NOT USEFUL WITHOUT NAMEPATH
131164
'external', 'host',
132165
'name',
133166
'typedef',
134-
135-
// MAY BE USEFUL WITHOUT NAMEPATH
136167
'event',
137-
138-
// MAY BE USEFUL WITHOUT NAMEPATH (OR
139-
// BLOCK CAN USE NAMEPATH FROM ELSEWHERE)
140168
'class', 'constructor',
141169
'constant', 'const',
142170
'callback',
@@ -147,126 +175,68 @@ const namepathDefiningTags = [
147175
'namespace',
148176
];
149177

150-
const namepathPointingTags = [
151-
// NOT USEFUL WITHOUT NAMEPATH
178+
const tagsWithOptionalNamepath = [
179+
...namepathDefiningTags,
152180
'alias',
153181
'augments', 'extends',
154182

155183
// `borrows` has a different format, however, so needs special parsing
156184
'borrows',
185+
'emits', 'fires',
157186
'lends',
158-
'memberof',
159-
'memberof!',
187+
'listens',
188+
'memberof', 'memberof!',
160189
'mixes',
190+
'see',
161191
'this',
162-
163-
// MAY BE USEFUL WITHOUT NAMEPATH
164-
'emits',
165-
'fires',
166-
'listens',
167192
];
168193

169-
const isNamepathDefiningTag = (tagName) => {
170-
return namepathDefiningTags.includes(tagName);
171-
};
172-
173-
const isNamepathPointingTag = (tagName, checkSeesForNamepaths) => {
174-
return namepathPointingTags.includes(tagName) ||
175-
tagName === 'see' && checkSeesForNamepaths;
176-
};
177-
178-
const isNamepathTag = (tagName, checkSeesForNamepaths) => {
179-
return isNamepathDefiningTag(tagName) ||
180-
isNamepathPointingTag(tagName, checkSeesForNamepaths);
181-
};
182-
183-
const potentiallyEmptyNamepathTags = [
184-
// These may serve some minor purpose when empty or
185-
// their namepath can be expressed elsewhere on the block
186-
'event',
194+
const tagsWithMandatoryNamepath = [
187195
'callback',
188-
'class', 'constructor',
189-
'extends', 'augments',
190-
'constant', 'const',
191-
'function', 'func', 'method',
192-
'interface',
193-
'member', 'var',
194-
'mixin',
195-
'namespace',
196-
'listens', 'fires', 'emits',
197-
'see',
198-
199-
// GCC syntax allows typedef to be named through variable declaration rather than jsdoc name
196+
'external', 'host',
197+
'name',
200198
'typedef',
201199
];
202200

203-
const isPotentiallyEmptyNamepathTag = (tag) => {
204-
return potentiallyEmptyNamepathTags.includes(tag);
205-
};
206-
207-
let tagsWithTypes = [
201+
const tagsWithMandatoryEitherTypeOrNamepath = [
202+
'alias',
208203
'augments', 'extends',
209-
'class',
210-
'constant',
211-
'enum',
212-
'implements',
213-
'member',
214-
'module',
215-
'namespace',
216-
'param',
217-
'property',
218-
'returns',
219-
'throws',
220-
'type',
204+
'borrows',
205+
'external', 'host',
206+
'lends',
207+
'memberof', 'memberof!',
208+
'mixes',
209+
'name',
210+
'this',
221211
'typedef',
222-
'yields',
223212
];
224213

225-
const closureTagsWithTypes = [
226-
'package', 'private', 'protected', 'public', 'static',
227-
];
214+
const isNamepathDefiningTag = (tagName) => {
215+
return namepathDefiningTags.includes(tagName);
216+
};
228217

229-
const tagsWithTypesAliases = [
230-
'constructor',
231-
'const',
232-
'var',
233-
'arg',
234-
'argument',
235-
'prop',
236-
'return',
237-
'exception',
238-
'yield',
239-
];
218+
const tagMightHaveType = (tag) => {
219+
return tagsWithOptionalType.includes(tag);
220+
};
240221

241-
tagsWithTypes = tagsWithTypes.concat(tagsWithTypesAliases, closureTagsWithTypes);
222+
const tagMustHaveType = (tag) => {
223+
return tagsWithMandatoryType.includes(tag);
224+
};
242225

243-
const potentiallyEmptyTypeTags = [
244-
'class', 'constructor',
245-
'constant', 'const',
246-
'extends', 'augments',
247-
'namespace',
248-
'param', 'arg',
249-
'return', 'returns',
250-
'throws', 'exception',
251-
'yields', 'yield',
252-
'package', 'private', 'protected', 'public', 'static',
253-
];
226+
const tagMightHaveNamepath = (tag) => {
227+
return tagsWithOptionalNamepath.includes(tag);
228+
};
254229

255-
const isPotentiallyEmptyTypeTag = (tag) => {
256-
return potentiallyEmptyTypeTags.includes(tag);
230+
const tagMustHaveNamepath = (tag) => {
231+
return tagsWithMandatoryNamepath.includes(tag);
257232
};
258233

259-
const isTagWithType = (tagName) => {
260-
return tagsWithTypes.includes(tagName);
234+
const tagMightHaveEitherTypeOrNamepath = (tag) => {
235+
return tagMightHaveType(tag) || tagMightHaveNamepath(tag);
261236
};
262237

263-
const tagsWithMandatoryNamepathOrType = [
264-
'augments', 'extends',
265-
'param', 'arg',
266-
'typedef',
267-
];
268-
const isTagWithMandatoryNamepathOrType = (tagName) => {
269-
return tagsWithMandatoryNamepathOrType.includes(tagName);
238+
const tagMustHaveEitherTypeOrNamepath = (tag) => {
239+
return tagsWithMandatoryEitherTypeOrNamepath.includes(tag);
270240
};
271241

272242
/**
@@ -451,11 +421,12 @@ export default {
451421
hasReturnValue,
452422
hasTag,
453423
isNamepathDefiningTag,
454-
isNamepathTag,
455-
isPotentiallyEmptyNamepathTag,
456-
isPotentiallyEmptyTypeTag,
457-
isTagWithMandatoryNamepathOrType,
458-
isTagWithType,
459424
isValidTag,
460425
parseClosureTemplateTag,
426+
tagMightHaveEitherTypeOrNamepath,
427+
tagMightHaveNamepath,
428+
tagMightHaveType,
429+
tagMustHaveEitherTypeOrNamepath,
430+
tagMustHaveNamepath,
431+
tagMustHaveType,
461432
};

src/rules/checkTypes.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export default iterateJsdoc(({
2626
context,
2727
}) => {
2828
const jsdocTags = utils.filterTags((tag) => {
29-
return utils.isTagWithType(tag.tag);
29+
return utils.tagMightHaveType(tag.tag);
3030
});
3131

3232
const {preferredTypes} = settings;

src/rules/noUndefinedTypes.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ export default iterateJsdoc(({
108108
.concat(closureGenericTypes);
109109

110110
const jsdocTags = utils.filterTags((tag) => {
111-
return utils.isTagWithType(tag.tag);
111+
return utils.tagMightHaveType(tag.tag);
112112
});
113113

114114
jsdocTags.forEach((tag) => {

src/rules/validTypes.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,13 @@ export default iterateJsdoc(({
6262
};
6363

6464
const hasType = Boolean(tag.type);
65-
const mustHaveType = utils.isTagWithType(tag.tag) && !utils.isPotentiallyEmptyTypeTag(tag.tag);
65+
const mustHaveType = utils.tagMustHaveType(tag.tag);
6666

6767
const hasNamePath = Boolean(tag.name) && !(tag.tag === 'see' && !checkSeesForNamepaths);
68-
const mustHaveNamepath = utils.isNamepathTag(tag.tag, checkSeesForNamepaths) &&
69-
!utils.passesEmptyNamepathCheck(tag, allowEmptyNamepaths);
68+
const mustHaveNamepath = utils.tagMustHaveNamepath(tag.tag) && !allowEmptyNamepaths;
7069

7170
const hasEither = hasType || hasNamePath;
72-
const mustHaveEither = utils.isTagWithMandatoryNamepathOrType(tag.tag);
71+
const mustHaveEither = utils.tagMustHaveEitherTypeOrNamepath(tag.tag);
7372

7473
if (tag.tag === 'borrows') {
7574
const thisNamepath = tag.description.replace(asExpression, '');

0 commit comments

Comments
 (0)