From 1bd88fa84f3a7a724512a8226563df38236f924c Mon Sep 17 00:00:00 2001 From: fisker Date: Tue, 19 Jan 2021 15:19:22 +0800 Subject: [PATCH 1/5] `no-new-buffer`: Use suggestion for unknown arguments --- docs/rules/no-new-buffer.md | 10 +- readme.md | 2 +- rules/no-new-buffer.js | 95 +++++++--- test/no-new-buffer.js | 127 ++++++------- test/snapshots/no-new-buffer.js.md | 265 ++++++++++++++++++++++++++- test/snapshots/no-new-buffer.js.snap | Bin 259 -> 1120 bytes 6 files changed, 396 insertions(+), 103 deletions(-) diff --git a/docs/rules/no-new-buffer.md b/docs/rules/no-new-buffer.md index 10da7f54b6..33c64756df 100644 --- a/docs/rules/no-new-buffer.md +++ b/docs/rules/no-new-buffer.md @@ -2,13 +2,15 @@ Enforces the use of [Buffer.from](https://nodejs.org/api/buffer.html#buffer_class_method_buffer_from_array) and [Buffer.alloc()](https://nodejs.org/api/buffer.html#buffer_class_method_buffer_alloc_size_fill_encoding) instead of [new Buffer()](https://nodejs.org/api/buffer.html#buffer_new_buffer_array), which has been deprecated since Node.js 4. -This rule is fixable. - +This rule is partly fixable. ## Fail ```js const buffer = new Buffer('7468697320697320612074c3a97374', 'hex'); +``` + +``` const buffer = new Buffer([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]); ``` @@ -16,11 +18,13 @@ const buffer = new Buffer([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]); const buffer = new Buffer(10); ``` - ## Pass ```js const buffer = Buffer.from('7468697320697320612074c3a97374', 'hex'); +``` + +```js const buffer = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]) ``` diff --git a/readme.md b/readme.md index d933b45f22..4ee1043694 100644 --- a/readme.md +++ b/readme.md @@ -137,7 +137,7 @@ Configure it in `package.json`. - [no-lonely-if](docs/rules/no-lonely-if.md) - Disallow `if` statements as the only statement in `if` blocks without `else`. *(fixable)* - [no-nested-ternary](docs/rules/no-nested-ternary.md) - Disallow nested ternary expressions. *(partly fixable)* - [no-new-array](docs/rules/no-new-array.md) - Disallow `new Array()`. *(partly fixable)* -- [no-new-buffer](docs/rules/no-new-buffer.md) - Enforce the use of `Buffer.from()` and `Buffer.alloc()` instead of the deprecated `new Buffer()`. *(fixable)* +- [no-new-buffer](docs/rules/no-new-buffer.md) - Enforce the use of `Buffer.from()` and `Buffer.alloc()` instead of the deprecated `new Buffer()`. *(partly fixable)* - [no-null](docs/rules/no-null.md) - Disallow the use of the `null` literal. - [no-object-as-default-parameter](docs/rules/no-object-as-default-parameter.md) - Disallow the use of objects as default parameters. - [no-process-exit](docs/rules/no-process-exit.md) - Disallow `process.exit()`. diff --git a/rules/no-new-buffer.js b/rules/no-new-buffer.js index a05c3ffcab..5c8903dffb 100644 --- a/rules/no-new-buffer.js +++ b/rules/no-new-buffer.js @@ -1,40 +1,91 @@ 'use strict'; +const {getStaticValue} = require('eslint-utils'); const getDocumentationUrl = require('./utils/get-documentation-url'); +const isNewExpressionWithParentheses = require('./utils/is-new-expression-with-parentheses'); -const MESSAGE_ID = 'no-new-buffer'; +const ERROR = 'error'; +const ERROR_UNKNOWN = 'error-unknown'; +const SUGGESTION = 'suggestion'; const messages = { - [MESSAGE_ID]: '`new Buffer()` is deprecated, use `Buffer.{{method}}()` instead.' + [ERROR]: '`new Buffer()` is deprecated, use `Buffer.{{method}}()` instead.', + [ERROR_UNKNOWN]: '`new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.', + [SUGGESTION]: 'Switch to `Buffer.{{method}}()`.', }; -const inferMethod = arguments_ => { - if (arguments_.length > 0) { - const [firstArgument] = arguments_; +const inferMethod = (bufferArguments, scope) => { + if (bufferArguments.length !== 1) { + return 'from'; + } + + const [firstArgument] = bufferArguments; + if (firstArgument.type === 'SpreadElement') { + return; + } + + if (firstArgument.type === 'ArrayExpression') { + return 'from'; + } + + const staticResult = getStaticValue(firstArgument, scope); + if (staticResult) { + const {value} = staticResult; + if (typeof value === 'number') { + return 'alloc'; + } + if ( - firstArgument.type === 'Literal' && - typeof firstArgument.value === 'number' + typeof value === 'string' || + Array.isArray(value) ) { - return 'alloc'; + return 'from'; } } - - return 'from'; }; +function fix(node, sourceCode, method) { + return function * (fixer) { + const [start] = node.range; + let end = start + 3; // `3` = length of `new` + const textAfter = sourceCode.text.slice(end); + const [leadingSpaces] = textAfter.match(/^\s*/); + end += leadingSpaces.length; + yield fixer.removeRange([start, end]); + + yield fixer.insertTextAfter(node.callee, `.${method}`); + + if (!isNewExpressionWithParentheses(node, sourceCode)) { + yield fixer.insertTextAfter(node, '()'); + } + } +} + const create = context => { + const sourceCode = context.getSourceCode(); return { 'NewExpression[callee.name="Buffer"]': node => { - const method = inferMethod(node.arguments); - const range = [ - node.range[0], - node.callee.range[1] - ]; - - context.report({ - node, - messageId: MESSAGE_ID, - data: {method}, - fix: fixer => fixer.replaceTextRange(range, `Buffer.${method}`) - }); + const method = inferMethod(node.arguments, context.getScope()); + + if (method) { + context.report({ + node, + messageId: ERROR, + data: {method}, + fix: fix(node, sourceCode, method) + }); + } else { + context.report({ + node, + messageId: ERROR_UNKNOWN, + suggest: [ + 'from', + 'alloc' + ].map(method => ({ + messageId: SUGGESTION, + data: {method}, + fix: fix(node, sourceCode, method) + })) + }); + } } }; }; diff --git a/test/no-new-buffer.js b/test/no-new-buffer.js index 822216513f..47ee5c36c1 100644 --- a/test/no-new-buffer.js +++ b/test/no-new-buffer.js @@ -1,71 +1,65 @@ import {outdent} from 'outdent'; import {test} from './utils/test.js'; -const allocError = { - messageId: 'no-new-buffer', - data: {method: 'alloc'} -}; - -const fromError = { - messageId: 'no-new-buffer', - data: {method: 'from'} -}; - -test({ +test.snapshot({ valid: [ - 'const buf = Buffer.from(\'buf\')', - 'const buf = Buffer.from(\'7468697320697320612074c3a97374\', \'hex\')', - 'const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72])', - 'const buf = Buffer.alloc(10)' + 'const buffer = Buffer', + 'const buffer = new NotBuffer(1)', + 'const buffer = Buffer.from(\'buf\')', + 'const buffer = Buffer.from(\'7468697320697320612074c3a97374\', \'hex\')', + 'const buffer = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72])', + 'const buffer = Buffer.alloc(10)' ], invalid: [ - { - code: 'const buf = new Buffer()', - errors: [fromError], - output: 'const buf = Buffer.from()' - }, - { - code: 'const buf = new Buffer(\'buf\')', - errors: [fromError], - output: 'const buf = Buffer.from(\'buf\')' - }, - { - code: 'const buf = new Buffer(\'7468697320697320612074c3a97374\', \'hex\')', - errors: [fromError], - output: 'const buf = Buffer.from(\'7468697320697320612074c3a97374\', \'hex\')' - }, - { - code: 'const buf = new Buffer([0x62, 0x75, 0x66, 0x66, 0x65, 0x72])', - errors: [fromError], - output: 'const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72])' - }, - { - code: 'const buf = new Buffer(10)', - errors: [allocError], - output: 'const buf = Buffer.alloc(10)' - }, - { - code: outdent` - const ab = new ArrayBuffer(10); - const buf = new Buffer(ab, 0, 2); - `, - errors: [fromError], - output: outdent` - const ab = new ArrayBuffer(10); - const buf = Buffer.from(ab, 0, 2); - ` - }, - { - code: outdent` - const buf1 = new Buffer('buf'); - const buf2 = new Buffer(buf1); - `, - errors: [fromError, fromError], - output: outdent` - const buf1 = Buffer.from('buf'); - const buf2 = Buffer.from(buf1); - ` - } + // `new Buffer(array)` + // https://nodejs.org/api/buffer.html#buffer_new_buffer_array + 'const buffer = new Buffer([0x62, 0x75, 0x66, 0x66, 0x65, 0x72])', + 'const buffer = new Buffer([0x62, bar])', + outdent` + const array = [0x62]; + const buffer = new Buffer(array); + `, + + // `new Buffer(arrayBuffer[, byteOffset[, length]])` + // https://nodejs.org/api/buffer.html#buffer_new_buffer_arraybuffer_byteoffset_length + outdent` + const arrayBuffer = new ArrayBuffer(10); + const buffer = new Buffer(arrayBuffer); + `, + outdent` + const arrayBuffer = new ArrayBuffer(10); + const buffer = new Buffer(arrayBuffer, 0, ); + `, + outdent` + const arrayBuffer = new ArrayBuffer(10); + const buffer = new Buffer(arrayBuffer, 0, 2); + `, + + // `new Buffer(size)` + // https://nodejs.org/api/buffer.html#buffer_new_buffer_size + 'const buffer = new Buffer(10);', + outdent` + const size = 10; + const buffer = new Buffer(size); + `, + + // `new Buffer(string[, encoding])` + // https://nodejs.org/api/buffer.html#buffer_new_buffer_string_encoding + 'const buffer = new Buffer("string");', + 'const buffer = new Buffer("7468697320697320612074c3a97374", "hex")', + outdent` + const string = "string"; + const buffer = new Buffer(string); + `, + + // Unknown + 'const buffer = new (Buffer)(unknown)', + 'const buffer = new Buffer(unknown, 2)', + 'const buffer = new Buffer(...unknown)', + + // Misc + 'const buffer = new /* comment */ Buffer()', + 'const buffer = new /* comment */ Buffer', ] }); @@ -74,13 +68,8 @@ test.typescript({ invalid: [ { code: 'new Buffer(input, encoding);', - errors: [fromError], - output: 'Buffer.from(input, encoding);' + output: 'Buffer.from(input, encoding);', + errors: 1 } ] }); - -test.snapshot([ - 'const buf = new Buffer()', - 'const buf = new Buffer([0x62, 0x75, 0x66, 0x66, 0x65, 0x72])' -]); diff --git a/test/snapshots/no-new-buffer.js.md b/test/snapshots/no-new-buffer.js.md index 329c957c32..924736dc25 100644 --- a/test/snapshots/no-new-buffer.js.md +++ b/test/snapshots/no-new-buffer.js.md @@ -5,33 +5,282 @@ The actual snapshot is saved in `no-new-buffer.js.snap`. Generated by [AVA](https://avajs.dev). ## Invalid #1 - 1 | const buf = new Buffer() + 1 | const buffer = new Buffer([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]) > Output `␊ - 1 | const buf = Buffer.from()␊ + 1 | const buffer = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72])␊ ` > Error 1/1 `␊ - > 1 | const buf = new Buffer()␊ - | ^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + > 1 | const buffer = new Buffer([0x62, 0x75, 0x66, 0x66, 0x65, 0x72])␊ + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ ` ## Invalid #2 - 1 | const buf = new Buffer([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]) + 1 | const buffer = new Buffer([0x62, bar]) > Output `␊ - 1 | const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72])␊ + 1 | const buffer = Buffer.from([0x62, bar])␊ ` > Error 1/1 `␊ - > 1 | const buf = new Buffer([0x62, 0x75, 0x66, 0x66, 0x65, 0x72])␊ - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + > 1 | const buffer = new Buffer([0x62, bar])␊ + | ^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + ` + +## Invalid #3 + 1 | const array = [0x62]; + 2 | const buffer = new Buffer(array); + +> Output + + `␊ + 1 | const array = [0x62];␊ + 2 | const buffer = Buffer.from(array);␊ + ` + +> Error 1/1 + + `␊ + 1 | const array = [0x62];␊ + > 2 | const buffer = new Buffer(array);␊ + | ^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + ` + +## Invalid #4 + 1 | const arrayBuffer = new ArrayBuffer(10); + 2 | const buffer = new Buffer(arrayBuffer); + +> Error 1/1 + + `␊ + 1 | const arrayBuffer = new ArrayBuffer(10);␊ + > 2 | const buffer = new Buffer(arrayBuffer);␊ + | ^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.␊ + ␊ + --------------------------------------------------------------------------------␊ + Suggestion 1/2: Switch to `Buffer.from()`.␊ + 1 | const arrayBuffer = new ArrayBuffer(10);␊ + 2 | const buffer = Buffer.from(arrayBuffer);␊ + ␊ + --------------------------------------------------------------------------------␊ + Suggestion 2/2: Switch to `Buffer.alloc()`.␊ + 1 | const arrayBuffer = new ArrayBuffer(10);␊ + 2 | const buffer = Buffer.alloc(arrayBuffer);␊ + ` + +## Invalid #5 + 1 | const arrayBuffer = new ArrayBuffer(10); + 2 | const buffer = new Buffer(arrayBuffer, 0, ); + +> Output + + `␊ + 1 | const arrayBuffer = new ArrayBuffer(10);␊ + 2 | const buffer = Buffer.from(arrayBuffer, 0, );␊ + ` + +> Error 1/1 + + `␊ + 1 | const arrayBuffer = new ArrayBuffer(10);␊ + > 2 | const buffer = new Buffer(arrayBuffer, 0, );␊ + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + ` + +## Invalid #6 + 1 | const arrayBuffer = new ArrayBuffer(10); + 2 | const buffer = new Buffer(arrayBuffer, 0, 2); + +> Output + + `␊ + 1 | const arrayBuffer = new ArrayBuffer(10);␊ + 2 | const buffer = Buffer.from(arrayBuffer, 0, 2);␊ + ` + +> Error 1/1 + + `␊ + 1 | const arrayBuffer = new ArrayBuffer(10);␊ + > 2 | const buffer = new Buffer(arrayBuffer, 0, 2);␊ + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + ` + +## Invalid #7 + 1 | const buffer = new Buffer(10); + +> Output + + `␊ + 1 | const buffer = Buffer.alloc(10);␊ + ` + +> Error 1/1 + + `␊ + > 1 | const buffer = new Buffer(10);␊ + | ^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.alloc()` instead.␊ + ` + +## Invalid #8 + 1 | const size = 10; + 2 | const buffer = new Buffer(size); + +> Output + + `␊ + 1 | const size = 10;␊ + 2 | const buffer = Buffer.alloc(size);␊ + ` + +> Error 1/1 + + `␊ + 1 | const size = 10;␊ + > 2 | const buffer = new Buffer(size);␊ + | ^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.alloc()` instead.␊ + ` + +## Invalid #9 + 1 | const buffer = new Buffer("string"); + +> Output + + `␊ + 1 | const buffer = Buffer.from("string");␊ + ` + +> Error 1/1 + + `␊ + > 1 | const buffer = new Buffer("string");␊ + | ^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + ` + +## Invalid #10 + 1 | const buffer = new Buffer("7468697320697320612074c3a97374", "hex") + +> Output + + `␊ + 1 | const buffer = Buffer.from("7468697320697320612074c3a97374", "hex")␊ + ` + +> Error 1/1 + + `␊ + > 1 | const buffer = new Buffer("7468697320697320612074c3a97374", "hex")␊ + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + ` + +## Invalid #11 + 1 | const string = "string"; + 2 | const buffer = new Buffer(string); + +> Output + + `␊ + 1 | const string = "string";␊ + 2 | const buffer = Buffer.from(string);␊ + ` + +> Error 1/1 + + `␊ + 1 | const string = "string";␊ + > 2 | const buffer = new Buffer(string);␊ + | ^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + ` + +## Invalid #12 + 1 | const buffer = new (Buffer)(unknown) + +> Error 1/1 + + `␊ + > 1 | const buffer = new (Buffer)(unknown)␊ + | ^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.␊ + ␊ + --------------------------------------------------------------------------------␊ + Suggestion 1/2: Switch to `Buffer.from()`.␊ + 1 | const buffer = (Buffer.from)(unknown)␊ + ␊ + --------------------------------------------------------------------------------␊ + Suggestion 2/2: Switch to `Buffer.alloc()`.␊ + 1 | const buffer = (Buffer.alloc)(unknown)␊ + ` + +## Invalid #13 + 1 | const buffer = new Buffer(unknown, 2) + +> Output + + `␊ + 1 | const buffer = Buffer.from(unknown, 2)␊ + ` + +> Error 1/1 + + `␊ + > 1 | const buffer = new Buffer(unknown, 2)␊ + | ^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + ` + +## Invalid #14 + 1 | const buffer = new Buffer(...unknown) + +> Error 1/1 + + `␊ + > 1 | const buffer = new Buffer(...unknown)␊ + | ^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.␊ + ␊ + --------------------------------------------------------------------------------␊ + Suggestion 1/2: Switch to `Buffer.from()`.␊ + 1 | const buffer = Buffer.from(...unknown)␊ + ␊ + --------------------------------------------------------------------------------␊ + Suggestion 2/2: Switch to `Buffer.alloc()`.␊ + 1 | const buffer = Buffer.alloc(...unknown)␊ + ` + +## Invalid #15 + 1 | const buffer = new /* comment */ Buffer() + +> Output + + `␊ + 1 | const buffer = /* comment */ Buffer.from()␊ + ` + +> Error 1/1 + + `␊ + > 1 | const buffer = new /* comment */ Buffer()␊ + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + ` + +## Invalid #16 + 1 | const buffer = new /* comment */ Buffer + +> Output + + `␊ + 1 | const buffer = /* comment */ Buffer.from()␊ + ` + +> Error 1/1 + + `␊ + > 1 | const buffer = new /* comment */ Buffer␊ + | ^^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ ` diff --git a/test/snapshots/no-new-buffer.js.snap b/test/snapshots/no-new-buffer.js.snap index e686737633119bd7f0f1c70711bd006c5f2c3c4b..65ca6bc01318d570002ff978734f391c1b2c6f3c 100644 GIT binary patch literal 1120 zcmV-m1fTmsRzV=IpiL!u#aYPLbxvn@oU$KwtyK_koyyUPjwBOS#**ntkhIOKqc=z@ny% z5X=MApqx09QSTia|5KMGZ~gZ^(`5pSMnf?-GXsOl<(wK#m)QLH{I^D~#blSxj!J;oX85mMlT7}J6XqlaUS*+vjk*Z%zU{MV&2tE(Q zB_FQcX6N`U`{kDxzrwrtVkWStBR2#q@Gvk;);+<+_O~%2!*oyli@cRDn82bXP^`tv zz%aip=UKyVKCQ+LKmE8J_U&Q5;{4<7@=u^LeLGg7U zKD}m|f4{ED9}l-*GvB;8qQV3gHQIW;)d0@MxDcR<&ITeq>qh8}v5EyogMNQM#> zK12r!)j~p_=&nRkVi9_eVH(jr28d=FmG}64s6j;K4o<-+UTY)lHE2#F=q2j4<-Lh$ zYM7gtS(sUx8yguwNkbz8bCYD_L?F-HL`g?MDI>K)2`wVe5z!DK)?kuzHLVkX7ixzM z+@1pZ4c4+EBELgaq9>6x41^3O*dv6QOJtZ)El4P>H|LO8Z)%X7EU4Co{e`EmrU7kL mXpqrW8@BCHcnE1AsX_{(!PC0La4A?Bl2ZX&mbWz`761TF&G_N~ literal 259 zcmV+e0sQ_!RzVZ@?`QwbFz$t}1Ca@?M zBLv?DVrB+*ur5Yc20=zeE(HZcg&KwA{Ji24g{0Cn1zQED(zLYHBE7Vt{9Fx9E)?Ze zTy_}B^HR&9T7aq*fS^VJ8N?w0g#={92@09T3Mr`tMXAY&C8;So3Z=!V3JEB-1C;T_jn}SF)Gb9o$Vr~?R>NTcA4EX& Date: Tue, 19 Jan 2021 15:25:13 +0800 Subject: [PATCH 2/5] Fix style --- rules/no-new-buffer.js | 4 +- test/no-new-buffer.js | 2 +- test/snapshots/no-new-buffer.js.md | 259 --------------------------- test/snapshots/no-new-buffer.js.snap | Bin 1120 -> 274 bytes 4 files changed, 3 insertions(+), 262 deletions(-) diff --git a/rules/no-new-buffer.js b/rules/no-new-buffer.js index 5c8903dffb..2e2d6c874c 100644 --- a/rules/no-new-buffer.js +++ b/rules/no-new-buffer.js @@ -9,7 +9,7 @@ const SUGGESTION = 'suggestion'; const messages = { [ERROR]: '`new Buffer()` is deprecated, use `Buffer.{{method}}()` instead.', [ERROR_UNKNOWN]: '`new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.', - [SUGGESTION]: 'Switch to `Buffer.{{method}}()`.', + [SUGGESTION]: 'Switch to `Buffer.{{method}}()`.' }; const inferMethod = (bufferArguments, scope) => { @@ -56,7 +56,7 @@ function fix(node, sourceCode, method) { if (!isNewExpressionWithParentheses(node, sourceCode)) { yield fixer.insertTextAfter(node, '()'); } - } + }; } const create = context => { diff --git a/test/no-new-buffer.js b/test/no-new-buffer.js index 47ee5c36c1..b91238762f 100644 --- a/test/no-new-buffer.js +++ b/test/no-new-buffer.js @@ -59,7 +59,7 @@ test.snapshot({ // Misc 'const buffer = new /* comment */ Buffer()', - 'const buffer = new /* comment */ Buffer', + 'const buffer = new /* comment */ Buffer' ] }); diff --git a/test/snapshots/no-new-buffer.js.md b/test/snapshots/no-new-buffer.js.md index 924736dc25..09236bd323 100644 --- a/test/snapshots/no-new-buffer.js.md +++ b/test/snapshots/no-new-buffer.js.md @@ -5,57 +5,6 @@ The actual snapshot is saved in `no-new-buffer.js.snap`. Generated by [AVA](https://avajs.dev). ## Invalid #1 - 1 | const buffer = new Buffer([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]) - -> Output - - `␊ - 1 | const buffer = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72])␊ - ` - -> Error 1/1 - - `␊ - > 1 | const buffer = new Buffer([0x62, 0x75, 0x66, 0x66, 0x65, 0x72])␊ - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ - ` - -## Invalid #2 - 1 | const buffer = new Buffer([0x62, bar]) - -> Output - - `␊ - 1 | const buffer = Buffer.from([0x62, bar])␊ - ` - -> Error 1/1 - - `␊ - > 1 | const buffer = new Buffer([0x62, bar])␊ - | ^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ - ` - -## Invalid #3 - 1 | const array = [0x62]; - 2 | const buffer = new Buffer(array); - -> Output - - `␊ - 1 | const array = [0x62];␊ - 2 | const buffer = Buffer.from(array);␊ - ` - -> Error 1/1 - - `␊ - 1 | const array = [0x62];␊ - > 2 | const buffer = new Buffer(array);␊ - | ^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ - ` - -## Invalid #4 1 | const arrayBuffer = new ArrayBuffer(10); 2 | const buffer = new Buffer(arrayBuffer); @@ -76,211 +25,3 @@ Generated by [AVA](https://avajs.dev). 1 | const arrayBuffer = new ArrayBuffer(10);␊ 2 | const buffer = Buffer.alloc(arrayBuffer);␊ ` - -## Invalid #5 - 1 | const arrayBuffer = new ArrayBuffer(10); - 2 | const buffer = new Buffer(arrayBuffer, 0, ); - -> Output - - `␊ - 1 | const arrayBuffer = new ArrayBuffer(10);␊ - 2 | const buffer = Buffer.from(arrayBuffer, 0, );␊ - ` - -> Error 1/1 - - `␊ - 1 | const arrayBuffer = new ArrayBuffer(10);␊ - > 2 | const buffer = new Buffer(arrayBuffer, 0, );␊ - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ - ` - -## Invalid #6 - 1 | const arrayBuffer = new ArrayBuffer(10); - 2 | const buffer = new Buffer(arrayBuffer, 0, 2); - -> Output - - `␊ - 1 | const arrayBuffer = new ArrayBuffer(10);␊ - 2 | const buffer = Buffer.from(arrayBuffer, 0, 2);␊ - ` - -> Error 1/1 - - `␊ - 1 | const arrayBuffer = new ArrayBuffer(10);␊ - > 2 | const buffer = new Buffer(arrayBuffer, 0, 2);␊ - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ - ` - -## Invalid #7 - 1 | const buffer = new Buffer(10); - -> Output - - `␊ - 1 | const buffer = Buffer.alloc(10);␊ - ` - -> Error 1/1 - - `␊ - > 1 | const buffer = new Buffer(10);␊ - | ^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.alloc()` instead.␊ - ` - -## Invalid #8 - 1 | const size = 10; - 2 | const buffer = new Buffer(size); - -> Output - - `␊ - 1 | const size = 10;␊ - 2 | const buffer = Buffer.alloc(size);␊ - ` - -> Error 1/1 - - `␊ - 1 | const size = 10;␊ - > 2 | const buffer = new Buffer(size);␊ - | ^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.alloc()` instead.␊ - ` - -## Invalid #9 - 1 | const buffer = new Buffer("string"); - -> Output - - `␊ - 1 | const buffer = Buffer.from("string");␊ - ` - -> Error 1/1 - - `␊ - > 1 | const buffer = new Buffer("string");␊ - | ^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ - ` - -## Invalid #10 - 1 | const buffer = new Buffer("7468697320697320612074c3a97374", "hex") - -> Output - - `␊ - 1 | const buffer = Buffer.from("7468697320697320612074c3a97374", "hex")␊ - ` - -> Error 1/1 - - `␊ - > 1 | const buffer = new Buffer("7468697320697320612074c3a97374", "hex")␊ - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ - ` - -## Invalid #11 - 1 | const string = "string"; - 2 | const buffer = new Buffer(string); - -> Output - - `␊ - 1 | const string = "string";␊ - 2 | const buffer = Buffer.from(string);␊ - ` - -> Error 1/1 - - `␊ - 1 | const string = "string";␊ - > 2 | const buffer = new Buffer(string);␊ - | ^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ - ` - -## Invalid #12 - 1 | const buffer = new (Buffer)(unknown) - -> Error 1/1 - - `␊ - > 1 | const buffer = new (Buffer)(unknown)␊ - | ^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.␊ - ␊ - --------------------------------------------------------------------------------␊ - Suggestion 1/2: Switch to `Buffer.from()`.␊ - 1 | const buffer = (Buffer.from)(unknown)␊ - ␊ - --------------------------------------------------------------------------------␊ - Suggestion 2/2: Switch to `Buffer.alloc()`.␊ - 1 | const buffer = (Buffer.alloc)(unknown)␊ - ` - -## Invalid #13 - 1 | const buffer = new Buffer(unknown, 2) - -> Output - - `␊ - 1 | const buffer = Buffer.from(unknown, 2)␊ - ` - -> Error 1/1 - - `␊ - > 1 | const buffer = new Buffer(unknown, 2)␊ - | ^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ - ` - -## Invalid #14 - 1 | const buffer = new Buffer(...unknown) - -> Error 1/1 - - `␊ - > 1 | const buffer = new Buffer(...unknown)␊ - | ^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.␊ - ␊ - --------------------------------------------------------------------------------␊ - Suggestion 1/2: Switch to `Buffer.from()`.␊ - 1 | const buffer = Buffer.from(...unknown)␊ - ␊ - --------------------------------------------------------------------------------␊ - Suggestion 2/2: Switch to `Buffer.alloc()`.␊ - 1 | const buffer = Buffer.alloc(...unknown)␊ - ` - -## Invalid #15 - 1 | const buffer = new /* comment */ Buffer() - -> Output - - `␊ - 1 | const buffer = /* comment */ Buffer.from()␊ - ` - -> Error 1/1 - - `␊ - > 1 | const buffer = new /* comment */ Buffer()␊ - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ - ` - -## Invalid #16 - 1 | const buffer = new /* comment */ Buffer - -> Output - - `␊ - 1 | const buffer = /* comment */ Buffer.from()␊ - ` - -> Error 1/1 - - `␊ - > 1 | const buffer = new /* comment */ Buffer␊ - | ^^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ - ` diff --git a/test/snapshots/no-new-buffer.js.snap b/test/snapshots/no-new-buffer.js.snap index 65ca6bc01318d570002ff978734f391c1b2c6f3c..6301920ac16e65b622e0bc476e48404c205cf077 100644 GIT binary patch literal 274 zcmV+t0qy=lRzVjUb9w`-A5Fd*O00000000A1 zU|?WiWH`gL%C2)-y}Y>h@vjT@ccd~hfWSf~1_ovZb}*Zfl|hhc5)+q#f}uiA;KGK&>bQVWVwlM_o)Q*;zci&GU6AhLRiIXU^sAT{|#aIv(a{9Ld$pvzJd zQ}npFbg2xuf=koWQ;SP7^Yau8^^L3)g3B{Yk~0)a^3ffkM{1}lU<*}bGf{(;rd~6` Y?loALQ`K(}Ls2~k0MhTpbHM@t0M(#wCjbBd literal 1120 zcmV-m1fTmsRzV=IpiL!u#aYPLbxvn@oU$KwtyK_koyyUPjwBOS#**ntkhIOKqc=z@ny% z5X=MApqx09QSTia|5KMGZ~gZ^(`5pSMnf?-GXsOl<(wK#m)QLH{I^D~#blSxj!J;oX85mMlT7}J6XqlaUS*+vjk*Z%zU{MV&2tE(Q zB_FQcX6N`U`{kDxzrwrtVkWStBR2#q@Gvk;);+<+_O~%2!*oyli@cRDn82bXP^`tv zz%aip=UKyVKCQ+LKmE8J_U&Q5;{4<7@=u^LeLGg7U zKD}m|f4{ED9}l-*GvB;8qQV3gHQIW;)d0@MxDcR<&ITeq>qh8}v5EyogMNQM#> zK12r!)j~p_=&nRkVi9_eVH(jr28d=FmG}64s6j;K4o<-+UTY)lHE2#F=q2j4<-Lh$ zYM7gtS(sUx8yguwNkbz8bCYD_L?F-HL`g?MDI>K)2`wVe5z!DK)?kuzHLVkX7ixzM z+@1pZ4c4+EBELgaq9>6x41^3O*dv6QOJtZ)El4P>H|LO8Z)%X7EU4Co{e`EmrU7kL mXpqrW8@BCHcnE1AsX_{(!PC0La4A?Bl2ZX&mbWz`761TF&G_N~ From bd98e5d47d8e67fc6bd1cfc1108d998dd6444150 Mon Sep 17 00:00:00 2001 From: fisker Date: Tue, 19 Jan 2021 15:30:17 +0800 Subject: [PATCH 3/5] Recognize `TemplateLiteral` --- rules/no-new-buffer.js | 2 +- test/no-new-buffer.js | 2 + test/snapshots/no-new-buffer.js.md | 275 +++++++++++++++++++++++++++ test/snapshots/no-new-buffer.js.snap | Bin 274 -> 1169 bytes 4 files changed, 278 insertions(+), 1 deletion(-) diff --git a/rules/no-new-buffer.js b/rules/no-new-buffer.js index 2e2d6c874c..61610b2942 100644 --- a/rules/no-new-buffer.js +++ b/rules/no-new-buffer.js @@ -22,7 +22,7 @@ const inferMethod = (bufferArguments, scope) => { return; } - if (firstArgument.type === 'ArrayExpression') { + if (firstArgument.type === 'ArrayExpression' || firstArgument.type === 'TemplateLiteral') { return 'from'; } diff --git a/test/no-new-buffer.js b/test/no-new-buffer.js index b91238762f..0a41226fe9 100644 --- a/test/no-new-buffer.js +++ b/test/no-new-buffer.js @@ -51,6 +51,8 @@ test.snapshot({ const string = "string"; const buffer = new Buffer(string); `, + // eslint-disable-next-line no-template-curly-in-string + 'const buffer = new Buffer(`${unknown}`)', // Unknown 'const buffer = new (Buffer)(unknown)', diff --git a/test/snapshots/no-new-buffer.js.md b/test/snapshots/no-new-buffer.js.md index 09236bd323..693b9678a8 100644 --- a/test/snapshots/no-new-buffer.js.md +++ b/test/snapshots/no-new-buffer.js.md @@ -5,6 +5,57 @@ The actual snapshot is saved in `no-new-buffer.js.snap`. Generated by [AVA](https://avajs.dev). ## Invalid #1 + 1 | const buffer = new Buffer([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]) + +> Output + + `␊ + 1 | const buffer = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72])␊ + ` + +> Error 1/1 + + `␊ + > 1 | const buffer = new Buffer([0x62, 0x75, 0x66, 0x66, 0x65, 0x72])␊ + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + ` + +## Invalid #2 + 1 | const buffer = new Buffer([0x62, bar]) + +> Output + + `␊ + 1 | const buffer = Buffer.from([0x62, bar])␊ + ` + +> Error 1/1 + + `␊ + > 1 | const buffer = new Buffer([0x62, bar])␊ + | ^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + ` + +## Invalid #3 + 1 | const array = [0x62]; + 2 | const buffer = new Buffer(array); + +> Output + + `␊ + 1 | const array = [0x62];␊ + 2 | const buffer = Buffer.from(array);␊ + ` + +> Error 1/1 + + `␊ + 1 | const array = [0x62];␊ + > 2 | const buffer = new Buffer(array);␊ + | ^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + ` + +## Invalid #4 1 | const arrayBuffer = new ArrayBuffer(10); 2 | const buffer = new Buffer(arrayBuffer); @@ -25,3 +76,227 @@ Generated by [AVA](https://avajs.dev). 1 | const arrayBuffer = new ArrayBuffer(10);␊ 2 | const buffer = Buffer.alloc(arrayBuffer);␊ ` + +## Invalid #5 + 1 | const arrayBuffer = new ArrayBuffer(10); + 2 | const buffer = new Buffer(arrayBuffer, 0, ); + +> Output + + `␊ + 1 | const arrayBuffer = new ArrayBuffer(10);␊ + 2 | const buffer = Buffer.from(arrayBuffer, 0, );␊ + ` + +> Error 1/1 + + `␊ + 1 | const arrayBuffer = new ArrayBuffer(10);␊ + > 2 | const buffer = new Buffer(arrayBuffer, 0, );␊ + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + ` + +## Invalid #6 + 1 | const arrayBuffer = new ArrayBuffer(10); + 2 | const buffer = new Buffer(arrayBuffer, 0, 2); + +> Output + + `␊ + 1 | const arrayBuffer = new ArrayBuffer(10);␊ + 2 | const buffer = Buffer.from(arrayBuffer, 0, 2);␊ + ` + +> Error 1/1 + + `␊ + 1 | const arrayBuffer = new ArrayBuffer(10);␊ + > 2 | const buffer = new Buffer(arrayBuffer, 0, 2);␊ + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + ` + +## Invalid #7 + 1 | const buffer = new Buffer(10); + +> Output + + `␊ + 1 | const buffer = Buffer.alloc(10);␊ + ` + +> Error 1/1 + + `␊ + > 1 | const buffer = new Buffer(10);␊ + | ^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.alloc()` instead.␊ + ` + +## Invalid #8 + 1 | const size = 10; + 2 | const buffer = new Buffer(size); + +> Output + + `␊ + 1 | const size = 10;␊ + 2 | const buffer = Buffer.alloc(size);␊ + ` + +> Error 1/1 + + `␊ + 1 | const size = 10;␊ + > 2 | const buffer = new Buffer(size);␊ + | ^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.alloc()` instead.␊ + ` + +## Invalid #9 + 1 | const buffer = new Buffer("string"); + +> Output + + `␊ + 1 | const buffer = Buffer.from("string");␊ + ` + +> Error 1/1 + + `␊ + > 1 | const buffer = new Buffer("string");␊ + | ^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + ` + +## Invalid #10 + 1 | const buffer = new Buffer("7468697320697320612074c3a97374", "hex") + +> Output + + `␊ + 1 | const buffer = Buffer.from("7468697320697320612074c3a97374", "hex")␊ + ` + +> Error 1/1 + + `␊ + > 1 | const buffer = new Buffer("7468697320697320612074c3a97374", "hex")␊ + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + ` + +## Invalid #11 + 1 | const string = "string"; + 2 | const buffer = new Buffer(string); + +> Output + + `␊ + 1 | const string = "string";␊ + 2 | const buffer = Buffer.from(string);␊ + ` + +> Error 1/1 + + `␊ + 1 | const string = "string";␊ + > 2 | const buffer = new Buffer(string);␊ + | ^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + ` + +## Invalid #12 + 1 | const buffer = new Buffer(`${unknown}`) + +> Output + + `␊ + 1 | const buffer = Buffer.from(`${unknown}`)␊ + ` + +> Error 1/1 + + `␊ + > 1 | const buffer = new Buffer(`${unknown}`)␊ + | ^^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + ` + +## Invalid #13 + 1 | const buffer = new (Buffer)(unknown) + +> Error 1/1 + + `␊ + > 1 | const buffer = new (Buffer)(unknown)␊ + | ^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.␊ + ␊ + --------------------------------------------------------------------------------␊ + Suggestion 1/2: Switch to `Buffer.from()`.␊ + 1 | const buffer = (Buffer.from)(unknown)␊ + ␊ + --------------------------------------------------------------------------------␊ + Suggestion 2/2: Switch to `Buffer.alloc()`.␊ + 1 | const buffer = (Buffer.alloc)(unknown)␊ + ` + +## Invalid #14 + 1 | const buffer = new Buffer(unknown, 2) + +> Output + + `␊ + 1 | const buffer = Buffer.from(unknown, 2)␊ + ` + +> Error 1/1 + + `␊ + > 1 | const buffer = new Buffer(unknown, 2)␊ + | ^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + ` + +## Invalid #15 + 1 | const buffer = new Buffer(...unknown) + +> Error 1/1 + + `␊ + > 1 | const buffer = new Buffer(...unknown)␊ + | ^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.␊ + ␊ + --------------------------------------------------------------------------------␊ + Suggestion 1/2: Switch to `Buffer.from()`.␊ + 1 | const buffer = Buffer.from(...unknown)␊ + ␊ + --------------------------------------------------------------------------------␊ + Suggestion 2/2: Switch to `Buffer.alloc()`.␊ + 1 | const buffer = Buffer.alloc(...unknown)␊ + ` + +## Invalid #16 + 1 | const buffer = new /* comment */ Buffer() + +> Output + + `␊ + 1 | const buffer = /* comment */ Buffer.from()␊ + ` + +> Error 1/1 + + `␊ + > 1 | const buffer = new /* comment */ Buffer()␊ + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + ` + +## Invalid #17 + 1 | const buffer = new /* comment */ Buffer + +> Output + + `␊ + 1 | const buffer = /* comment */ Buffer.from()␊ + ` + +> Error 1/1 + + `␊ + > 1 | const buffer = new /* comment */ Buffer␊ + | ^^^^^^^^^^^^^^^^^^^^^^^^ `new Buffer()` is deprecated, use `Buffer.from()` instead.␊ + ` diff --git a/test/snapshots/no-new-buffer.js.snap b/test/snapshots/no-new-buffer.js.snap index 6301920ac16e65b622e0bc476e48404c205cf077..81653b702f539be6356b1374124196ef5d4e77d3 100644 GIT binary patch literal 1169 zcmV;C1aA95RzVC$XOoSpCq}qd5>MU`IKeb-q$uaEfjbee-syBH%_^bZ>YLqeIzEI;F0*ksr@hc!+&}lRG>QuXwnwTQd^nrZ(1 zx+Z@-+TWWdHbA-ql0v_e3VJXe1Pih%hi*lh8k> zympahaP^aWf6^smn82bzQ2Y~!nHku@X@ilKL6FgdOF_X29(&`T@I&((-Fs4z3qQ81`5HwBSqW=JGh#M~%WlMC5YrV|WYcG!%~OD%^QO{A#` zKv1KA2I5Er3JFN|Y9=UT7AvHr78Io>Czhn9=qQvHrz#{Mdl;ky=3I zR&i!kD$q}c2G&4fBb;HFn3I#AtN~K2X^k363mI^kXNS!^Bu_w1BPw)A@IAz-IK7{W z;@rfdqQpukWXCxoL^KQyH1P)uIHZxx07kivf)RQUU1A{BPC`M4%}UZ!8P$@MF5&#A zR9sS&nU}7F9ySvRXEG$MMEj9iUSpcXM8mivG1kb*1o=g{J<6p^Wxy3&nx39oT#}ie zr(mdWWTg;Xo>`Kdp-_^K?g%|v=0c!yntII$yVqc0PF24_3`O-EO5QWVp7->%fFilM zsd*&|TKXsfg;vYWz>@*78A4h)L$x9%h33UJddYNw=A||{g*Md!l+tuFhs1QFL2^5Y zYF^bNTs@WMW#{FW=YeWcRBuipTt6Y}CBchS^PU@KIt4lq+%%0PHXooT{^eK_Ka!zD zrF5c`H`PKypXh!-QeqK$bAKAq&3%Yw8r9tRnfDwoMCo2x%ax zLJFe6(@?;0DOeejQ&AGaKRgKm8jX5-dSs-85s(y+6(I-GAWRD=s*v4^QtoLGp&8sl zK}kYwgbO@qONwCHpLw{kP~u4dk2E0KDHi|$X3G-t literal 274 zcmV+t0qy=lRzVjUb9w`-A5Fd*O00000000A1 zU|?WiWH`gL%C2)-y}Y>h@vjT@ccd~hfWSf~1_ovZb}*Zfl|hhc5)+q#f}uiA;KGK&>bQVWVwlM_o)Q*;zci&GU6AhLRiIXU^sAT{|#aIv(a{9Ld$pvzJd zQ}npFbg2xuf=koWQ;SP7^Yau8^^L3)g3B{Yk~0)a^3ffkM{1}lU<*}bGf{(;rd~6` Y?loALQ`K(}Ls2~k0MhTpbHM@t0M(#wCjbBd From a3068bf94d250181959227f20ce13b445d83ee55 Mon Sep 17 00:00:00 2001 From: fisker Date: Tue, 19 Jan 2021 17:55:18 +0800 Subject: [PATCH 4/5] Extract `switchNewExpressionToCallExpression` --- rules/new-for-builtins.js | 16 +++------------- rules/no-new-buffer.js | 14 ++------------ .../switch-new-expression-to-call-expression.js | 17 +++++++++++++++++ 3 files changed, 22 insertions(+), 25 deletions(-) create mode 100644 rules/utils/switch-new-expression-to-call-expression.js diff --git a/rules/new-for-builtins.js b/rules/new-for-builtins.js index 8faf1a380f..e91dd78f99 100644 --- a/rules/new-for-builtins.js +++ b/rules/new-for-builtins.js @@ -2,7 +2,7 @@ const getDocumentationUrl = require('./utils/get-documentation-url'); const builtins = require('./utils/builtins'); const isShadowed = require('./utils/is-shadowed'); -const isNewExpressionWithParentheses = require('./utils/is-new-expression-with-parentheses'); +const switchNewExpressionToCallExpression = require('./utils/switch-new-expression-to-call-expression'); const messages = { enforce: 'Use `new {{name}}()` instead of `{{name}}()`.', @@ -40,7 +40,7 @@ const create = context => { } }, NewExpression: node => { - const {callee, range} = node; + const {callee} = node; const {name} = callee; if (disallowNew.has(name) && !isShadowed(context.getScope(), callee)) { @@ -52,17 +52,7 @@ const create = context => { if (name !== 'String' && name !== 'Boolean' && name !== 'Number') { problem.fix = function * (fixer) { - const [start] = range; - let end = start + 3; // `3` = length of `new` - const textAfter = sourceCode.text.slice(end); - const [leadingSpaces] = textAfter.match(/^\s*/); - end += leadingSpaces.length; - - yield fixer.removeRange([start, end]); - - if (!isNewExpressionWithParentheses(node, sourceCode)) { - yield fixer.insertTextAfter(node, '()'); - } + yield * switchNewExpressionToCallExpression(node, sourceCode, fixer); }; } diff --git a/rules/no-new-buffer.js b/rules/no-new-buffer.js index 61610b2942..7927820b55 100644 --- a/rules/no-new-buffer.js +++ b/rules/no-new-buffer.js @@ -1,7 +1,7 @@ 'use strict'; const {getStaticValue} = require('eslint-utils'); const getDocumentationUrl = require('./utils/get-documentation-url'); -const isNewExpressionWithParentheses = require('./utils/is-new-expression-with-parentheses'); +const switchNewExpressionToCallExpression = require('./utils/switch-new-expression-to-call-expression'); const ERROR = 'error'; const ERROR_UNKNOWN = 'error-unknown'; @@ -44,18 +44,8 @@ const inferMethod = (bufferArguments, scope) => { function fix(node, sourceCode, method) { return function * (fixer) { - const [start] = node.range; - let end = start + 3; // `3` = length of `new` - const textAfter = sourceCode.text.slice(end); - const [leadingSpaces] = textAfter.match(/^\s*/); - end += leadingSpaces.length; - yield fixer.removeRange([start, end]); - + yield * switchNewExpressionToCallExpression(node, sourceCode, fixer); yield fixer.insertTextAfter(node.callee, `.${method}`); - - if (!isNewExpressionWithParentheses(node, sourceCode)) { - yield fixer.insertTextAfter(node, '()'); - } }; } diff --git a/rules/utils/switch-new-expression-to-call-expression.js b/rules/utils/switch-new-expression-to-call-expression.js new file mode 100644 index 0000000000..c7a19e397c --- /dev/null +++ b/rules/utils/switch-new-expression-to-call-expression.js @@ -0,0 +1,17 @@ +'use strict'; +const isNewExpressionWithParentheses = require('./is-new-expression-with-parentheses'); + +function * switchNewExpressionToCallExpression(node, sourceCode, fixer) { + const [start] = node.range; + let end = start + 3; // `3` = length of `new` + const textAfter = sourceCode.text.slice(end); + const [leadingSpaces] = textAfter.match(/^\s*/); + end += leadingSpaces.length; + yield fixer.removeRange([start, end]); + + if (!isNewExpressionWithParentheses(node, sourceCode)) { + yield fixer.insertTextAfter(node, '()'); + } +} + +module.exports = switchNewExpressionToCallExpression; From 1f2348a70f33db76f2aefdf505c44c047f8b4394 Mon Sep 17 00:00:00 2001 From: fisker Date: Tue, 19 Jan 2021 18:03:53 +0800 Subject: [PATCH 5/5] Fix order --- rules/no-new-buffer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules/no-new-buffer.js b/rules/no-new-buffer.js index 7927820b55..24aaea7394 100644 --- a/rules/no-new-buffer.js +++ b/rules/no-new-buffer.js @@ -44,8 +44,8 @@ const inferMethod = (bufferArguments, scope) => { function fix(node, sourceCode, method) { return function * (fixer) { - yield * switchNewExpressionToCallExpression(node, sourceCode, fixer); yield fixer.insertTextAfter(node.callee, `.${method}`); + yield * switchNewExpressionToCallExpression(node, sourceCode, fixer); }; }