mirror of
https://github.com/danbulant/oxc
synced 2026-05-25 04:42:10 +00:00
feat(linter) eslint plugin unicorn: no new buffer (#1174)
This commit is contained in:
parent
033a112a83
commit
8f93891dc7
3 changed files with 193 additions and 0 deletions
|
|
@ -149,6 +149,7 @@ mod unicorn {
|
|||
pub mod no_instanceof_array;
|
||||
pub mod no_invalid_remove_event_listener;
|
||||
pub mod no_new_array;
|
||||
pub mod no_new_buffer;
|
||||
pub mod no_object_as_default_parameter;
|
||||
pub mod no_static_only_class;
|
||||
pub mod no_thenable;
|
||||
|
|
@ -282,6 +283,7 @@ oxc_macros::declare_all_lint_rules! {
|
|||
unicorn::no_instanceof_array,
|
||||
unicorn::no_invalid_remove_event_listener,
|
||||
unicorn::no_new_array,
|
||||
unicorn::no_new_buffer,
|
||||
unicorn::no_object_as_default_parameter,
|
||||
unicorn::no_static_only_class,
|
||||
unicorn::no_thenable,
|
||||
|
|
|
|||
88
crates/oxc_linter/src/rules/unicorn/no_new_buffer.rs
Normal file
88
crates/oxc_linter/src/rules/unicorn/no_new_buffer.rs
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
use oxc_ast::{ast::Expression, AstKind};
|
||||
use oxc_diagnostics::{
|
||||
miette::{self, Diagnostic},
|
||||
thiserror::Error,
|
||||
};
|
||||
use oxc_macros::declare_oxc_lint;
|
||||
use oxc_span::Span;
|
||||
|
||||
use crate::{context::LintContext, rule::Rule, AstNode};
|
||||
|
||||
#[derive(Debug, Error, Diagnostic)]
|
||||
#[error("eslint-plugin-unicorn(no-new-buffer): Use `Buffer.alloc()` or `Buffer.from()` instead of the deprecated `new Buffer()` constructor.")]
|
||||
#[diagnostic(
|
||||
severity(warning),
|
||||
help("`new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.")
|
||||
)]
|
||||
struct NoNewBufferDiagnostic(#[label] pub Span);
|
||||
|
||||
#[derive(Debug, Default, Clone)]
|
||||
pub struct NoNewBuffer;
|
||||
|
||||
declare_oxc_lint!(
|
||||
/// ### What it does
|
||||
///
|
||||
/// Disallows the deprecated `new Buffer()` constructor.
|
||||
///
|
||||
/// ### Why is this bad?
|
||||
///
|
||||
/// Enforces the use of [Buffer.from](https://nodejs.org/api/buffer.html#static-method-bufferfromarray) and [Buffer.alloc()](https://nodejs.org/api/buffer.html#static-method-bufferallocsize-fill-encoding) instead of [new Buffer()](https://nodejs.org/api/buffer.html#new-bufferarray), which has been deprecated since Node.js 4.
|
||||
///
|
||||
/// ### Example
|
||||
/// ```javascript
|
||||
/// // Bad
|
||||
/// const buffer = new Buffer(10);
|
||||
///
|
||||
/// // Good
|
||||
/// const buffer = Buffer.alloc(10);
|
||||
/// ```
|
||||
NoNewBuffer,
|
||||
pedantic
|
||||
);
|
||||
|
||||
impl Rule for NoNewBuffer {
|
||||
fn run<'a>(&self, node: &AstNode<'a>, ctx: &LintContext<'a>) {
|
||||
let AstKind::NewExpression(new_expr) = node.kind() else { return };
|
||||
|
||||
let Expression::Identifier(ident) = &new_expr.callee.without_parenthesized() else {
|
||||
return;
|
||||
};
|
||||
if ident.name != "Buffer" {
|
||||
return;
|
||||
}
|
||||
ctx.diagnostic(NoNewBufferDiagnostic(ident.span));
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test() {
|
||||
use crate::tester::Tester;
|
||||
|
||||
let pass = vec![
|
||||
r#"const buffer = Buffer"#,
|
||||
r#"const buffer = new NotBuffer(1)"#,
|
||||
r#"const buffer = Buffer.from('buf')"#,
|
||||
r#"const buffer = Buffer.from('7468697320697320612074c3a97374', 'hex')"#,
|
||||
r#"const buffer = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72])"#,
|
||||
r#"const buffer = Buffer.alloc(10)"#,
|
||||
];
|
||||
|
||||
let fail = vec![
|
||||
r#"const buffer = new Buffer([0x62, 0x75, 0x66, 0x66, 0x65, 0x72])"#,
|
||||
r#"const buffer = new Buffer([0x62, bar])"#,
|
||||
r#"const buffer = new Buffer(10);"#,
|
||||
r#"new Buffer(foo.length)"#,
|
||||
r#"new Buffer(Math.min(foo, bar))"#,
|
||||
r#"const buffer = new Buffer("string");"#,
|
||||
r#"const buffer = new Buffer("7468697320697320612074c3a97374", "hex")"#,
|
||||
r#"const buffer = new Buffer(`${unknown}`)"#,
|
||||
r#"const buffer = new (Buffer)(unknown)"#,
|
||||
r#"const buffer = new Buffer(unknown, 2)"#,
|
||||
r#"const buffer = new Buffer(...unknown)"#,
|
||||
r#"const buffer = new /* comment */ Buffer()"#,
|
||||
r#"const buffer = new /* comment */ Buffer"#,
|
||||
r#"new Buffer(input, encoding);"#,
|
||||
];
|
||||
|
||||
Tester::new_without_config(NoNewBuffer::NAME, pass, fail).test_and_snapshot();
|
||||
}
|
||||
103
crates/oxc_linter/src/snapshots/no_new_buffer.snap
Normal file
103
crates/oxc_linter/src/snapshots/no_new_buffer.snap
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
---
|
||||
source: crates/oxc_linter/src/tester.rs
|
||||
expression: no_new_buffer
|
||||
---
|
||||
⚠ eslint-plugin-unicorn(no-new-buffer): Use `Buffer.alloc()` or `Buffer.from()` instead of the deprecated `new Buffer()` constructor.
|
||||
╭─[no_new_buffer.tsx:1:1]
|
||||
1 │ const buffer = new Buffer([0x62, 0x75, 0x66, 0x66, 0x65, 0x72])
|
||||
· ──────
|
||||
╰────
|
||||
help: `new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.
|
||||
|
||||
⚠ eslint-plugin-unicorn(no-new-buffer): Use `Buffer.alloc()` or `Buffer.from()` instead of the deprecated `new Buffer()` constructor.
|
||||
╭─[no_new_buffer.tsx:1:1]
|
||||
1 │ const buffer = new Buffer([0x62, bar])
|
||||
· ──────
|
||||
╰────
|
||||
help: `new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.
|
||||
|
||||
⚠ eslint-plugin-unicorn(no-new-buffer): Use `Buffer.alloc()` or `Buffer.from()` instead of the deprecated `new Buffer()` constructor.
|
||||
╭─[no_new_buffer.tsx:1:1]
|
||||
1 │ const buffer = new Buffer(10);
|
||||
· ──────
|
||||
╰────
|
||||
help: `new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.
|
||||
|
||||
⚠ eslint-plugin-unicorn(no-new-buffer): Use `Buffer.alloc()` or `Buffer.from()` instead of the deprecated `new Buffer()` constructor.
|
||||
╭─[no_new_buffer.tsx:1:1]
|
||||
1 │ new Buffer(foo.length)
|
||||
· ──────
|
||||
╰────
|
||||
help: `new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.
|
||||
|
||||
⚠ eslint-plugin-unicorn(no-new-buffer): Use `Buffer.alloc()` or `Buffer.from()` instead of the deprecated `new Buffer()` constructor.
|
||||
╭─[no_new_buffer.tsx:1:1]
|
||||
1 │ new Buffer(Math.min(foo, bar))
|
||||
· ──────
|
||||
╰────
|
||||
help: `new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.
|
||||
|
||||
⚠ eslint-plugin-unicorn(no-new-buffer): Use `Buffer.alloc()` or `Buffer.from()` instead of the deprecated `new Buffer()` constructor.
|
||||
╭─[no_new_buffer.tsx:1:1]
|
||||
1 │ const buffer = new Buffer("string");
|
||||
· ──────
|
||||
╰────
|
||||
help: `new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.
|
||||
|
||||
⚠ eslint-plugin-unicorn(no-new-buffer): Use `Buffer.alloc()` or `Buffer.from()` instead of the deprecated `new Buffer()` constructor.
|
||||
╭─[no_new_buffer.tsx:1:1]
|
||||
1 │ const buffer = new Buffer("7468697320697320612074c3a97374", "hex")
|
||||
· ──────
|
||||
╰────
|
||||
help: `new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.
|
||||
|
||||
⚠ eslint-plugin-unicorn(no-new-buffer): Use `Buffer.alloc()` or `Buffer.from()` instead of the deprecated `new Buffer()` constructor.
|
||||
╭─[no_new_buffer.tsx:1:1]
|
||||
1 │ const buffer = new Buffer(`${unknown}`)
|
||||
· ──────
|
||||
╰────
|
||||
help: `new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.
|
||||
|
||||
⚠ eslint-plugin-unicorn(no-new-buffer): Use `Buffer.alloc()` or `Buffer.from()` instead of the deprecated `new Buffer()` constructor.
|
||||
╭─[no_new_buffer.tsx:1:1]
|
||||
1 │ const buffer = new (Buffer)(unknown)
|
||||
· ──────
|
||||
╰────
|
||||
help: `new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.
|
||||
|
||||
⚠ eslint-plugin-unicorn(no-new-buffer): Use `Buffer.alloc()` or `Buffer.from()` instead of the deprecated `new Buffer()` constructor.
|
||||
╭─[no_new_buffer.tsx:1:1]
|
||||
1 │ const buffer = new Buffer(unknown, 2)
|
||||
· ──────
|
||||
╰────
|
||||
help: `new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.
|
||||
|
||||
⚠ eslint-plugin-unicorn(no-new-buffer): Use `Buffer.alloc()` or `Buffer.from()` instead of the deprecated `new Buffer()` constructor.
|
||||
╭─[no_new_buffer.tsx:1:1]
|
||||
1 │ const buffer = new Buffer(...unknown)
|
||||
· ──────
|
||||
╰────
|
||||
help: `new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.
|
||||
|
||||
⚠ eslint-plugin-unicorn(no-new-buffer): Use `Buffer.alloc()` or `Buffer.from()` instead of the deprecated `new Buffer()` constructor.
|
||||
╭─[no_new_buffer.tsx:1:1]
|
||||
1 │ const buffer = new /* comment */ Buffer()
|
||||
· ──────
|
||||
╰────
|
||||
help: `new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.
|
||||
|
||||
⚠ eslint-plugin-unicorn(no-new-buffer): Use `Buffer.alloc()` or `Buffer.from()` instead of the deprecated `new Buffer()` constructor.
|
||||
╭─[no_new_buffer.tsx:1:1]
|
||||
1 │ const buffer = new /* comment */ Buffer
|
||||
· ──────
|
||||
╰────
|
||||
help: `new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.
|
||||
|
||||
⚠ eslint-plugin-unicorn(no-new-buffer): Use `Buffer.alloc()` or `Buffer.from()` instead of the deprecated `new Buffer()` constructor.
|
||||
╭─[no_new_buffer.tsx:1:1]
|
||||
1 │ new Buffer(input, encoding);
|
||||
· ──────
|
||||
╰────
|
||||
help: `new Buffer()` is deprecated, use `Buffer.alloc()` or `Buffer.from()` instead.
|
||||
|
||||
|
||||
Loading…
Reference in a new issue