Skip to content

Commit

Permalink
Add "comment-pattern" rule (#4962)
Browse files Browse the repository at this point in the history
* added implementation + tests

* Added/updated readme

* applied prettier

* PR fixes (supporting string as option + tests, formatting, improved readme)

* specifying the original pattern in the error message + fixing tests

* Update lib/rules/comment-pattern/index.js

Co-authored-by: Richard Hallows <jeddy3@users.noreply.github.com>

* removed irrelevant testRule

* Update lib/rules/comment-pattern/README.md

Co-authored-by: Masafumi Koba <473530+ybiquitous@users.noreply.github.com>

* removed redundant tests which are covered in basic checks

Co-authored-by: Richard Hallows <jeddy3@users.noreply.github.com>
Co-authored-by: Masafumi Koba <473530+ybiquitous@users.noreply.github.com>
  • Loading branch information
3 people committed Oct 15, 2020
1 parent b0a0ee4 commit cba295e
Show file tree
Hide file tree
Showing 5 changed files with 178 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/user-guide/rules/list.md
Expand Up @@ -228,6 +228,7 @@ Grouped first by the following categories and then by the [_thing_](http://apps.

### Comment

- [`comment-pattern`](../../../lib/rules/comment-pattern/README.md): Specify a pattern for comments.
- [`comment-word-blacklist`](../../../lib/rules/comment-word-blacklist/README.md): Specify a list of disallowed words within comments. **(deprecated)**
- [`comment-word-disallowed-list`](../../../lib/rules/comment-word-disallowed-list/README.md): Specify a list of disallowed words within comments.

Expand Down
38 changes: 38 additions & 0 deletions lib/rules/comment-pattern/README.md
@@ -0,0 +1,38 @@
# comment-pattern

Specify a pattern for comments.

<!-- prettier-ignore -->
```css
/* comment */
/** ↑
* The pattern of this */
```

## Options

`regex|string`

A string will be translated into a RegExp like so `new RegExp(yourString)` — so be sure to escape properly.

Given the string:

```
"foo .+"
```

The following patterns are considered violations:

<!-- prettier-ignore -->
```css
/*not starting with foo*/
a { color: red; }
```

The following patterns are _not_ considered violations:

<!-- prettier-ignore -->
```css
/*foo at the beginning*/
a { color: red; }
```
90 changes: 90 additions & 0 deletions lib/rules/comment-pattern/__tests__/index.js
@@ -0,0 +1,90 @@
'use strict';

const { messages, ruleName } = require('..');

testRule({
ruleName,
config: [/foo-.+/],

accept: [
{
code: '/* foo-valid yay */',
},
{
code: `/* foo--
multi-line
\n
\r
\r\n
\n\r
\t
*/`,
},
],

reject: [
{
code: '/* not foo- */',
message: messages.expected(/foo-.+/),
},
{
code: '/**/',
message: messages.expected(/foo-.+/),
},
],
});

testRule({
ruleName,
config: ['foo-.+'],

accept: [
{
code: '/* foo-valid yay */',
},
{
code: `/* foo--
multi-line
\n
\r
\r\n
\n\r
\t
*/`,
},
],

reject: [
{
code: '/* not foo- */',
message: messages.expected('foo-.+'),
},
{
code: '/**/',
message: messages.expected('foo-.+'),
},
],
});

testRule({
ruleName,
config: [/foo-.+/],
syntax: 'scss',

accept: [
{
code: 'a {} // foo-ok',
},
{
code: '// foo-ok',
},
],

reject: [
{
code: 'a {} // not-foo',
description: 'checks inline scss comments',
message: messages.expected(/foo-.+/),
},
],
});
48 changes: 48 additions & 0 deletions lib/rules/comment-pattern/index.js
@@ -0,0 +1,48 @@
// @ts-nocheck

'use strict';

const _ = require('lodash');
const report = require('../../utils/report');
const ruleMessages = require('../../utils/ruleMessages');
const validateOptions = require('../../utils/validateOptions');

const ruleName = 'comment-pattern';

const messages = ruleMessages(ruleName, {
expected: (pattern) => `Expected comment to match pattern "${pattern}"`,
});

function rule(pattern) {
return (root, result) => {
const validOptions = validateOptions(result, ruleName, {
actual: pattern,
possible: [_.isRegExp, _.isString],
});

if (!validOptions) {
return;
}

const normalizedPattern = _.isString(pattern) ? new RegExp(pattern) : pattern;

root.walkComments((comment) => {
const text = comment.text;

if (normalizedPattern.test(text)) {
return;
}

report({
message: messages.expected(pattern),
node: comment,
result,
ruleName,
});
});
};
}

rule.ruleName = ruleName;
rule.messages = messages;
module.exports = rule;
1 change: 1 addition & 0 deletions lib/rules/index.js
Expand Up @@ -61,6 +61,7 @@ const rules = {
'color-no-invalid-hex': importLazy(() => require('./color-no-invalid-hex'))(),
'comment-empty-line-before': importLazy(() => require('./comment-empty-line-before'))(),
'comment-no-empty': importLazy(() => require('./comment-no-empty'))(),
'comment-pattern': importLazy(() => require('./comment-pattern'))(),
'comment-whitespace-inside': importLazy(() => require('./comment-whitespace-inside'))(),
'comment-word-blacklist': importLazy(() => require('./comment-word-blacklist'))(),
'comment-word-disallowed-list': importLazy(() => require('./comment-word-disallowed-list'))(),
Expand Down

0 comments on commit cba295e

Please sign in to comment.