Skip to content

Commit

Permalink
ESLint: Added regexp/no-super-linear-backtracking rule (#3040)
Browse files Browse the repository at this point in the history
  • Loading branch information
RunDevelopment committed Aug 27, 2021
1 parent 44456b2 commit 4e9338a
Show file tree
Hide file tree
Showing 8 changed files with 19 additions and 6 deletions.
5 changes: 3 additions & 2 deletions .eslintrc.js
Expand Up @@ -56,17 +56,18 @@ module.exports = {
'jsdoc/require-property-name': 'warn',

// regexp
'regexp/no-empty-capturing-group': 'error',
'regexp/no-dupe-disjunctions': 'error',
'regexp/no-empty-alternative': 'error',
'regexp/no-empty-capturing-group': 'error',
'regexp/no-empty-lookarounds-assertion': 'error',
'regexp/no-lazy-ends': 'error',
'regexp/no-obscure-range': 'error',
'regexp/no-optional-assertion': 'error',
'regexp/no-standalone-backslash': 'error',
'regexp/no-super-linear-backtracking': 'error',
'regexp/no-unused-capturing-group': 'error',
'regexp/no-zero-quantifier': 'error',
'regexp/optimal-lookaround-quantifier': 'error',
'regexp/no-unused-capturing-group': 'error',

'regexp/match-any': 'warn',
'regexp/negation': 'warn',
Expand Down
2 changes: 1 addition & 1 deletion components/prism-core.js
Expand Up @@ -201,7 +201,7 @@ var Prism = (function (_self) {
// at _.util.currentScript (http://localhost/components/prism-core.js:119:5)
// at Global code (http://localhost/components/prism-core.js:606:1)

var src = (/at [^(\r\n]*\((.*):.+:.+\)$/i.exec(err.stack) || [])[1];
var src = (/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(err.stack) || [])[1];
if (src) {
var scripts = document.getElementsByTagName('script');
for (var i in scripts) {
Expand Down
2 changes: 1 addition & 1 deletion components/prism-core.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions components/prism-kumir.js
Expand Up @@ -76,6 +76,7 @@

/** Should be performed after searching for reserved words. */
'name': {
// eslint-disable-next-line regexp/no-super-linear-backtracking
pattern: wrapId(/(^|[<nonId>])[^\d<nonId>][^<nonId>]*(?:\x20+[^<nonId>]+)*(?=[<nonId>]|$)/.source),
lookbehind: true
},
Expand Down
10 changes: 10 additions & 0 deletions components/prism-textile.js
Expand Up @@ -91,51 +91,59 @@
},

'inline': {
// eslint-disable-next-line regexp/no-super-linear-backtracking
pattern: withModifier(/(^|[^a-zA-Z\d])(\*\*|__|\?\?|[*_%@+\-^~])<MOD>*.+?\2(?![a-zA-Z\d])/.source),
lookbehind: true,
inside: {
// Note: superscripts and subscripts are not handled specifically

// *bold*, **bold**
'bold': {
// eslint-disable-next-line regexp/no-super-linear-backtracking
pattern: withModifier(/(^(\*\*?)<MOD>*).+?(?=\2)/.source),
lookbehind: true
},

// _italic_, __italic__
'italic': {
// eslint-disable-next-line regexp/no-super-linear-backtracking
pattern: withModifier(/(^(__?)<MOD>*).+?(?=\2)/.source),
lookbehind: true
},

// ??cite??
'cite': {
// eslint-disable-next-line regexp/no-super-linear-backtracking
pattern: withModifier(/(^\?\?<MOD>*).+?(?=\?\?)/.source),
lookbehind: true,
alias: 'string'
},

// @code@
'code': {
// eslint-disable-next-line regexp/no-super-linear-backtracking
pattern: withModifier(/(^@<MOD>*).+?(?=@)/.source),
lookbehind: true,
alias: 'keyword'
},

// +inserted+
'inserted': {
// eslint-disable-next-line regexp/no-super-linear-backtracking
pattern: withModifier(/(^\+<MOD>*).+?(?=\+)/.source),
lookbehind: true
},

// -deleted-
'deleted': {
// eslint-disable-next-line regexp/no-super-linear-backtracking
pattern: withModifier(/(^-<MOD>*).+?(?=-)/.source),
lookbehind: true
},

// %span%
'span': {
// eslint-disable-next-line regexp/no-super-linear-backtracking
pattern: withModifier(/(^%<MOD>*).+?(?=%)/.source),
lookbehind: true
},
Expand Down Expand Up @@ -168,9 +176,11 @@
// "text":http://example.com
// "text":link-ref
'link': {
// eslint-disable-next-line regexp/no-super-linear-backtracking
pattern: withModifier(/"<MOD>*[^"]+":.+?(?=[^\w/]?(?:\s|$))/.source),
inside: {
'text': {
// eslint-disable-next-line regexp/no-super-linear-backtracking
pattern: withModifier(/(^"<MOD>*)[^"]+(?=")/.source),
lookbehind: true
},
Expand Down
2 changes: 1 addition & 1 deletion docs/prism-core.js.html
Expand Up @@ -254,7 +254,7 @@ <h1 class="page-title">prism-core.js</h1>
// at _.util.currentScript (http://localhost/components/prism-core.js:119:5)
// at Global code (http://localhost/components/prism-core.js:606:1)

var src = (/at [^(\r\n]*\((.*):.+:.+\)$/i.exec(err.stack) || [])[1];
var src = (/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(err.stack) || [])[1];
if (src) {
var scripts = document.getElementsByTagName('script');
for (var i in scripts) {
Expand Down
1 change: 1 addition & 0 deletions gulpfile.js/changelog.js
Expand Up @@ -58,6 +58,7 @@ function createSortedArray(compareFn) {
* @typedef {"A" | "C" | "D" | "M" | "R" | "T" | "U" | "X" | "B"} ChangeMode
*/
async function getCommitInfo(line) {
// eslint-disable-next-line regexp/no-super-linear-backtracking
const [, hash, message] = /^([a-f\d]+)\s+(.*)$/i.exec(line);

/* The output looks like this:
Expand Down
2 changes: 1 addition & 1 deletion prism.js
Expand Up @@ -206,7 +206,7 @@ var Prism = (function (_self) {
// at _.util.currentScript (http://localhost/components/prism-core.js:119:5)
// at Global code (http://localhost/components/prism-core.js:606:1)

var src = (/at [^(\r\n]*\((.*):.+:.+\)$/i.exec(err.stack) || [])[1];
var src = (/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(err.stack) || [])[1];
if (src) {
var scripts = document.getElementsByTagName('script');
for (var i in scripts) {
Expand Down

0 comments on commit 4e9338a

Please sign in to comment.