Skip to content

Commit b7f81ae

Browse files
BamiehMylesBorins
authored andcommitted
tools: add lint fixer for require-buffer
Adds `require-buffer` lint fixer. If the buffer module is not required while `Buffer` is used, require the `buffer` module. If the file has a `'use strict';` line, add the require after it on a separate line. If the file does not have any (currently impossible with the `strict` rule) add it after the first comment (before the real code starts). Fixes: #16636 PR-URL: #17144 Reviewed-By: Michaël Zasso <[email protected]>
1 parent 06da8a7 commit b7f81ae

File tree

2 files changed

+42
-5
lines changed

2 files changed

+42
-5
lines changed

‎test/parallel/test-eslint-require-buffer.js‎

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,36 @@ const ruleTester = new RuleTester({
1212
constmessage="Use const Buffer = require('buffer').Buffer; "+
1313
'at the beginning of this file';
1414

15+
constuseStrict='\'use strict\'\n\n';
16+
constbufferModule='const{Buffer } = require(\'buffer\');\n';
17+
constmockComment='// Some Comment\n//\n// Another Comment\n\n';
18+
constuseBuffer='Buffer;';
1519
ruleTester.run('require-buffer',rule,{
1620
valid: [
1721
'foo',
18-
'const Buffer = require("Buffer"); Buffer;'
22+
'const Buffer = require("Buffer"); Buffer;',
23+
'const{Buffer } = require(\'buffer\'); Buffer;',
1924
],
2025
invalid: [
2126
{
22-
code: 'Buffer;',
23-
errors: [{ message }]
24-
}
27+
code: useBuffer,
28+
errors: [{ message }],
29+
output: bufferModule+useBuffer,
30+
},
31+
{
32+
code: useStrict+useBuffer,
33+
errors: [{ message }],
34+
output: useStrict+bufferModule+useBuffer,
35+
},
36+
{
37+
code: mockComment+useBuffer,
38+
errors: [{ message }],
39+
output: mockComment+bufferModule+useBuffer,
40+
},
41+
{
42+
code: mockComment+useStrict+useBuffer,
43+
errors: [{ message }],
44+
output: mockComment+useStrict+bufferModule+useBuffer,
45+
},
2546
]
2647
});

‎tools/eslint-rules/require-buffer.js‎

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,26 @@
11
'use strict';
2+
constBUFFER_REQUIRE='const{Buffer } = require(\'buffer\');\n';
23

34
module.exports=function(context){
5+
46
functionflagIt(reference){
57
constmsg='Use const Buffer = require(\'buffer\').Buffer; '+
68
'at the beginning of this file';
7-
context.report(reference.identifier,msg);
9+
10+
context.report({
11+
node: reference.identifier,
12+
message: msg,
13+
fix: (fixer)=>{
14+
constsourceCode=context.getSourceCode();
15+
16+
constuseStrict=/'usestrict';\n\n?/g;
17+
consthasUseStrict=!!useStrict.exec(sourceCode.text);
18+
constfirstLOC=sourceCode.ast.range[0];
19+
constrangeNeedle=hasUseStrict ? useStrict.lastIndex : firstLOC;
20+
21+
returnfixer.insertTextBeforeRange([rangeNeedle],BUFFER_REQUIRE);
22+
}
23+
});
824
}
925

1026
return{

0 commit comments

Comments
(0)