Skip to content

Commit

Permalink
feat(no-missing-syntax, no-restricted-syntax, etc.): assume any
Browse files Browse the repository at this point in the history
… context if `context` omitted
  • Loading branch information
brettz9 committed Jun 13, 2021
1 parent f870025 commit 2dcd9ad
Show file tree
Hide file tree
Showing 6 changed files with 116 additions and 3 deletions.
28 changes: 28 additions & 0 deletions README.md
Expand Up @@ -8193,6 +8193,13 @@ function quux () {
// "jsdoc/no-missing-syntax": ["error"|"warn", {"contexts":[{"comment":"JsdocBlock:has(JsdocTag[name=/opt_/])","context":"any","message":"Require names matching `/^opt_/i`."}]}]
// Message: Require names matching `/^opt_/i`.

/**
* @param ab
* @param cd
*/
// "jsdoc/no-missing-syntax": ["error"|"warn", {"contexts":[{"comment":"JsdocBlock:has(JsdocTag[name=/opt_/])","message":"Require names matching `/^opt_/i`."}]}]
// Message: Require names matching `/^opt_/i`.

/**
* @param ab
* @param cd
Expand Down Expand Up @@ -8247,6 +8254,13 @@ function baz () {
*/
function quux () {}
// "jsdoc/no-missing-syntax": ["error"|"warn", {"contexts":[{"comment":"JsdocBlock:has(JsdocTag[name=/opt_/])","context":"any","message":"Require names matching `/^opt_/i`."}]}]

/**
* @param opt_a
* @param opt_b
*/
function quux () {}
// "jsdoc/no-missing-syntax": ["error"|"warn", {"contexts":[{"comment":"JsdocBlock:has(JsdocTag[name=/opt_/])","message":"Require names matching `/^opt_/i`."}]}]
````


Expand Down Expand Up @@ -8550,6 +8564,14 @@ function a () {}
// "jsdoc/no-restricted-syntax": ["error"|"warn", {"contexts":[{"comment":"JsdocBlock:has(JsdocTag[name=/opt_/])","context":"any","message":"Only allowing names not matching `/^opt_/i`."}]}]
// Message: Only allowing names not matching `/^opt_/i`.

/**
* @param opt_a
* @param opt_b
*/
function a () {}
// "jsdoc/no-restricted-syntax": ["error"|"warn", {"contexts":[{"comment":"JsdocBlock:has(JsdocTag[name=/opt_/])","message":"Only allowing names not matching `/^opt_/i`."}]}]
// Message: Only allowing names not matching `/^opt_/i`.

/**
* @param opt_a
* @param opt_b
Expand Down Expand Up @@ -8597,6 +8619,12 @@ function a () {}
* @param cd
*/
// "jsdoc/no-restricted-syntax": ["error"|"warn", {"contexts":[{"comment":"JsdocBlock:has(JsdocTag[name=/opt_/])","context":"any","message":"Only allowing names not matching `/^opt_/i`."}]}]

/**
* @param ab
* @param cd
*/
// "jsdoc/no-restricted-syntax": ["error"|"warn", {"contexts":[{"comment":"JsdocBlock:has(JsdocTag[name=/opt_/])","message":"Only allowing names not matching `/^opt_/i`."}]}]
````


Expand Down
11 changes: 11 additions & 0 deletions src/iterateJsdoc.js
Expand Up @@ -933,6 +933,17 @@ export default function iterateJsdoc (iterator, ruleConfig) {
let contexts;
if (ruleConfig.contextDefaults || ruleConfig.contextSelected) {
contexts = jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);

if (contexts) {
contexts = contexts.map((obj) => {
if (typeof obj === 'object' && !obj.context) {
return {...obj, context: 'any'};
}

return obj;
});
}

const hasPlainAny = contexts?.includes('any');
const hasObjectAny = !hasPlainAny && contexts?.find((ctxt) => {
return ctxt?.context === 'any';
Expand Down
2 changes: 1 addition & 1 deletion src/rules/noMissingSyntax.js
Expand Up @@ -49,7 +49,7 @@ export default iterateJsdoc(({

// Report when MISSING
contexts.some((cntxt) => {
const contextStr = typeof cntxt === 'object' ? cntxt.context : cntxt;
const contextStr = typeof cntxt === 'object' ? cntxt.context ?? 'any' : cntxt;
const comment = cntxt?.comment ?? '';

const contextKey = contextStr === 'any' ? undefined : contextStr;
Expand Down
4 changes: 2 additions & 2 deletions src/rules/noRestrictedSyntax.js
Expand Up @@ -15,12 +15,12 @@ export default iterateJsdoc(({
const foundContext = contexts.find((cntxt) => {
return cntxt === selector ||
typeof cntxt === 'object' &&
(cntxt.context === 'any' || selector === cntxt.context) &&
(!cntxt.context || cntxt.context === 'any' || selector === cntxt.context) &&
comment === cntxt.comment;
});

const contextStr = typeof foundContext === 'object' ?
foundContext.context :
foundContext.context ?? 'any' :
foundContext;
const message = foundContext?.message ??
'Syntax is restricted: {{context}}.';
Expand Down
37 changes: 37 additions & 0 deletions test/rules/assertions/noMissingSyntax.js
Expand Up @@ -136,6 +136,26 @@ export default {
],
}],
},
{
code: `
/**
* @param ab
* @param cd
*/
`,
errors: [{
line: 1,
message: 'Require names matching `/^opt_/i`.',
}],
options: [{
contexts: [
{
comment: 'JsdocBlock:has(JsdocTag[name=/opt_/])',
message: 'Require names matching `/^opt_/i`.',
},
],
}],
},
{
code: `
/**
Expand Down Expand Up @@ -246,5 +266,22 @@ export default {
],
}],
},
{
code: `
/**
* @param opt_a
* @param opt_b
*/
function quux () {}
`,
options: [{
contexts: [
{
comment: 'JsdocBlock:has(JsdocTag[name=/opt_/])',
message: 'Require names matching `/^opt_/i`.',
},
],
}],
},
],
};
37 changes: 37 additions & 0 deletions test/rules/assertions/noRestrictedSyntax.js
Expand Up @@ -159,6 +159,27 @@ export default {
],
}],
},
{
code: `
/**
* @param opt_a
* @param opt_b
*/
function a () {}
`,
errors: [{
line: 2,
message: 'Only allowing names not matching `/^opt_/i`.',
}],
options: [{
contexts: [
{
comment: 'JsdocBlock:has(JsdocTag[name=/opt_/])',
message: 'Only allowing names not matching `/^opt_/i`.',
},
],
}],
},
{
code: `
/**
Expand Down Expand Up @@ -277,5 +298,21 @@ export default {
],
}],
},
{
code: `
/**
* @param ab
* @param cd
*/
`,
options: [{
contexts: [
{
comment: 'JsdocBlock:has(JsdocTag[name=/opt_/])',
message: 'Only allowing names not matching `/^opt_/i`.',
},
],
}],
},
],
};

0 comments on commit 2dcd9ad

Please sign in to comment.