Skip to content

Commit edd9713

Browse files
committed
## 1.9.1 - July 2022
* Fixes duplicate entries bug that happens when adding custom regex rule with same name. * Message changed from `Error: "SomeRuleName" can not be used as eslint-plugin-regex rule name` to `Error: "SomeRuleName" already defined as eslint-plugin-regex rule name`. * Updates documentation. * Changes background color to white for images.
1 parent c11da25 commit edd9713

File tree

8 files changed

+63
-30
lines changed

8 files changed

+63
-30
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# ESLint Plugin Regex Change Log
22

3+
## 1.9.1 - July 2022
4+
5+
* Fixes duplicate entries bug that happens when adding custom regex rule with same name.
6+
* Message changed from `Error: "SomeRuleName" can not be used as eslint-plugin-regex rule name` to `Error: "SomeRuleName" already defined as eslint-plugin-regex rule name`.
7+
* Updates documentation.
8+
* Changes background color to white for images.
9+
310
## 1.9.0 - April 2022
411

512
* Closes #15, Allowing mixing different error level.

README.md

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ __________________
2828
},
2929
"devDependencies": {
3030
"eslint": ">=4.0.0",
31-
"eslint-plugin-regex": "1.9.0",
31+
"eslint-plugin-regex": "1.9.1",
3232
```
3333

3434
2 . Configure eslint:
@@ -795,7 +795,7 @@ Creating and Using a Custom Set of regex rules **requires using `js` files**.
795795

796796
###### Named Regex Rules approach
797797

798-
Rule name can be anything that includes `invalid`, `disuse`, `avoid`, `required` or `use`, ignoring letter case, and with the restrictions of predefined names (`invalid`, `disuse`, `avoid`, `invalid-warn`, `invalid-error`, `another-invalid`, `other-invalid`, `required`, `use`, `required-warn`, `required-error`, `another-required` and `other-required`), this will allow to mix different error levels or create custom regex rules package.
798+
A regex rule can be named with a custom name. The Rule name can be anything that **includes `invalid`, `disuse`, `avoid`, `required` or `use`**, ignoring letter case, and with the restrictions of predefined names (`invalid`, `disuse`, `avoid`, `invalid-warn`, `invalid-error`, `another-invalid`, `other-invalid`, `required`, `use`, `required-warn`, `required-error`, `another-required` and `other-required`).
799799

800800
* `regex/*invalid*`, `regex/*disuse*` or `regex/*avoid*` for invalid patterns.
801801
* `regex/*required*` or `regex/*use*` for required patterns.
@@ -813,26 +813,11 @@ addRegexRuleName('*invalid*')
813813
addRegexRuleName('*required*')
814814
```
815815

816-
An advantage of using Named Regex Rules is that shown error will be even more specific, e.g.:
817-
818-
```javascript
819-
const { addRegexRuleName } = require('eslint-plugin-regex')
820-
821-
addRegexRuleName('required-custom-896')
822-
```
823-
824-
then, if an error happens, the output will be something similar to:
825-
826-
```sh
827-
/path/to/some.js
828-
1:1 error Required regular expression /requiredRegex/gm not found in file regex/required-custom-896
829-
```
830-
831-
instead of
816+
* If the custom regex rule name is already defined, then an error will be shown:
832817

833818
```sh
834-
/path/to/some.js
835-
1:1 error Required regular expression /requiredRegex/gm not found in file regex/required
819+
Error: Cannot read config file: /path/to/.eslintrc.js
820+
Error: "SomeRuleName" already defined as eslint-plugin-regex rule name
836821
```
837822

838823
***Local Custom Regex rules***
@@ -955,6 +940,36 @@ mixing with other regex rules:
955940
],
956941
```
957942

943+
***Advantages***
944+
945+
* Using Named Regex rule name will allow to have a **set of different regex rule**:
946+
* Each rule with totally different settings.
947+
* Allow to mix different regular expressions.
948+
* Allow to mix different error levels.
949+
* etc.
950+
* Easily create custom regex rules package.
951+
* When using Named Regex Rules, shown **errors will be even more specific**, e.g.:
952+
953+
```javascript
954+
const { addRegexRuleName } = require('eslint-plugin-regex')
955+
956+
addRegexRuleName('required-custom-896')
957+
```
958+
959+
then, if an error happens, the output will be something similar to:
960+
961+
```sh
962+
/path/to/some.js
963+
1:1 error Required regular expression /requiredRegex/gm not found in file regex/required-custom-896
964+
```
965+
966+
instead of
967+
968+
```sh
969+
/path/to/some.js
970+
1:1 error Required regular expression /requiredRegex/gm not found in file regex/required
971+
```
972+
958973
###### Import/Export approach
959974

960975
Create a custom npm package using either with `json` or `js` files and add the custom regex rules.

lib/index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ const rulesNames = ['required', 'use', 'required-warn', 'required-error', 'anoth
77
module.exports = {
88
addRegexRuleName: (ruleName) => {
99
if (/use|avoid|disuse|invalid|required/i.test(ruleName)) {
10-
if (/^(?:required|use|required-warn|required-error|another-required|other-required|invalid|disuse|avoid|invalid-warn|invalid-error|another-invalid|other-invalid)$/i // eslint-disable-line max-len
11-
.test(ruleName)) {
12-
throw new Error(`"${ruleName}" can not be used as eslint-plugin-regex rule name`)
10+
const candidate = ruleName.toUpperCase()
11+
if (rulesNames.findIndex(ruleName => ruleName.toUpperCase() === candidate) !== -1) {
12+
throw new Error(`"${ruleName}" already defined as eslint-plugin-regex rule name`)
1313
}
1414
rulesNames.push(ruleName)
1515
}

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "eslint-plugin-regex",
33
"description": "ESLint rules using Regular Expression",
4-
"version": "1.9.0",
4+
"version": "1.9.1",
55
"license": "MIT",
66
"author": "Gonzalo Müller Bravo",
77
"main": "lib/index.js",

readme/mixed-rules.svg

Lines changed: 1 addition & 1 deletion
Loading

readme/rules.svg

Lines changed: 1 addition & 1 deletion
Loading

tests/lib/index.test.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,26 @@ describe('index tests', () => {
5151

5252
for(const ruleName of rulesNames) {
5353
const testRuleName = ruleName.toUpperCase()
54-
it(`should not regex rule name when equal to ${ruleName}`, () => {
54+
it(`should not add regex rule name when equal to ${ruleName}`, () => {
5555
try {
5656
addRegexRuleName(testRuleName)
5757
fail(`Should not add "${ruleName}" name`)
5858
}
5959
catch(error) {
60-
expect(error.toString()).toBe(`Error: "${testRuleName}" can not be used as eslint-plugin-regex rule name`)
60+
expect(error.toString()).toBe(`Error: "${testRuleName}" already defined as eslint-plugin-regex rule name`)
6161
}
6262
})
6363
}
64+
65+
it('should fail adding same rule name more than once', () => {
66+
addRegexRuleName('Same Required Rule Name')
67+
try {
68+
addRegexRuleName('Same Required Rule Name')
69+
fail('Should not add "Same Required Rule Name" name')
70+
}
71+
catch(error) {
72+
expect(error.toString()).toBe('Error: "Same Required Rule Name" already defined as eslint-plugin-regex rule name')
73+
}
74+
})
6475
})
6576
})

0 commit comments

Comments
 (0)