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

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

15+
const useStrict = '\'use strict\';\n\n';
16+
const bufferModule = 'const { Buffer } = require(\'buffer\');\n';
17+
const mockComment = '// Some Comment\n//\n// Another Comment\n\n';
18+
const useBuffer = '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

+17-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,26 @@
11
'use strict';
2+
const BUFFER_REQUIRE = 'const { Buffer } = require(\'buffer\');\n';
23

34
module.exports = function(context) {
5+
46
function flagIt(reference) {
57
const msg = '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+
const sourceCode = context.getSourceCode();
15+
16+
const useStrict = /'use strict';\n\n?/g;
17+
const hasUseStrict = !!useStrict.exec(sourceCode.text);
18+
const firstLOC = sourceCode.ast.range[0];
19+
const rangeNeedle = hasUseStrict ? useStrict.lastIndex : firstLOC;
20+
21+
return fixer.insertTextBeforeRange([rangeNeedle], BUFFER_REQUIRE);
22+
}
23+
});
824
}
925

1026
return {

0 commit comments

Comments
 (0)