比 Eslint 快 100 倍!新一代 JS Linter 发布!

比 Eslint 快 100 倍!新一代 JS Linter 发布!

在这里插入图片描述

Oxc 是用 Rust 编写的 JavaScript 语言的高性能工具集合。他们的目标是构建 JavaScript 的基本编译器工具:解析器、linter、格式化程序、转译器、压缩器和解析器等等,这次他们发布了一个新的 linter 工具。

Oxlint 是一个由 Rust 编写的新一代 JavaScript linter,旨在帮助开发者捕获错误或无用的代码,默认情况下不需要任何配置。

Oxlint 的三大特点:

  • 性能:处理代码的速度比 ESLint50-100 倍。
  • 安全:Rust 的内存安全保证消除了某些类别的错误。
  • 兼容性:目前内置了超过 200 条规则,且列表还在不断增加,来自 eslint、typescript、eslint-plugin-react、eslint-plugin-jest、eslint-plugin-unicorneslint-plugin-jsx-a11y;支持 .eslintignore 以及 ESLint 的注释忽略规则。

但是对于取代 Eslint ,官方的回答是:

现阶段,oxlint 无意完全取代 ESLint,当 ESLint 的缓慢成为你工作流程中的瓶颈时,它可以作为增强功能。

为了更快的反馈循环,官方建议在 lint 阶段或 CI 设置中的 ESLint 之前运行 oxlint,在大型代码仓库上运行只需要几秒钟。

要在 JavaScript / TypeScript 代码库中测试 oxlint,我们只需在存储库的根目录中执行以下命令:

npx oxlint@latest // npm

pnpm dlx oxlint@latest // pnpm

yarn dlx oxlint@latest  // yarn

bunx oxlint@latest  // bun

deno run oxlint@latest  //  deno

性能

在现实场景中,Shopify 报告称,他们原来需要 75 分钟的 ESLint 运行时间现在仅需 10 秒。

来自有 Shopify 研发经验的 Preact 创建者 Jason Miller 的描述:

Oxlint 对我们在 Shopify 的应用是一个巨大的成功。我们以前的 lint 设置运行需要75分钟,所以我们在 CI 上配置了 40 多个工作节点。而相比之下,Oxlint 在单个工作节点上对同样的代码库进行 lint 检查只需要大约 10 秒,而且输出的结果更易于解读。在我们迁移时,我们甚至发现了一些被我们旧设置隐藏或跳过的错误!

大部分性能提升来自于 Oxlint 被专门设计用于提高性能,而 Rust 和并行处理是其中的关键因素。

根据在不同项目中的实际测试,linter 的速度至少比 ESLint50 倍以上,并且性能随着 CPU 核心数量的增加而继续提升。

这里有一个在 vscode 存储库(一个非常庞大的前端仓库:https://github.com/microsoft/vscode)上运行的示例,它在 0.5 秒内完成了 4000 多个文件的 linting

准确性

Oxlint 在默认识别错误、冗余或混乱的代码的时候,会优先考虑正确性,而不是不必要的挑剔规则(分类为 perf、suspicious、pedanticstyle),这些是默认禁用的。

上手简单

设置新的 JavaScript / TypeScript 代码库变得越来越复杂,你很可能会遇到工具间的兼容性问题,可能会浪费好几个小时的时间。

但是 Oxlint 被设计为开箱即用的零配置,甚至 Node.js 环境都不是必需的,大多数调整可以通过命令行进行,而且目前正在逐步实现从 ESLint 配置文件读取数据。

在没有 Node.js 的环境下,你可以直接从最新的 GitHub 版本(https://github.com/oxc-project/oxc/releases/tag/oxlint_v0.0.20)去下载二进制文件。

易于阅读的检测结果

理解 linter 信息可能很多时候还是挺麻烦的,但是 Oxlint 旨在通过精确定位根本原因并提供有用的信息来简化这个过程,从而省去了阅读繁琐规则文档的需要,节省宝贵的时间。

我们还可以在 vscode 这个仓库中来运行 oxlint -D perf

在这里插入图片描述

整合规则

Oxlint 本身自己还没有提供插件系统,他的思路是整合来自所有热门插件的规则,如 TypeScript,React,Jest,Unicorn,JSX-a11yImport

插件在 JavaScript 生态系统中是非常重要的,所以目前 Oxlint 正在探究基于 DSL 的插件系统。

但是,大家可能会喜欢独立的 linter — 不需要管理插件依赖项的列表,不需要关注兼容性问题,或者由于版本限制而转向 forked 的插件。

命令

  • npx oxlint@latest --rules 获取所有内置规则列表;
  • npx oxlint@latest --help 获取所有配置说明。
Usage: oxlint [-A=NAME | -D=NAME]... [--fix] [PATH]...

Allowing / Denying Multiple Lints
  For example `-D correctness -A no-debugger` or `-A all -D no-debugger`.
  The default category is "-D correctness".
  Use "--rules" for rule names.
  Use "--help --help" for rule categories.
    -A, --allow=NAME          Allow the rule or category (suppress the lint)
    -D, --deny=NAME           Deny the rule or category (emit an error)

Enable Plugins
        --import-plugin       Enable the experimental import plugin and detect ESM problems
        --jest-plugin         Enable the Jest plugin and detect test problems
        --jsx-a11y-plugin     Enable the JSX-a11y plugin and detect accessibility problems

Fix Problems
        --fix                 Fix as many issues as possible. Only unfixed issues are reported in the
                              output

Ignore Files
        --ignore-path=PATH    Specify the file to use as your .eslintignore
        --ignore-pattern=PAT  Specify patterns of files to ignore (in addition to those in .eslintignore)
        --no-ignore           Disables excluding of files from .eslintignore files, --ignore-path flags
                              and --ignore-pattern flags

Handle Warnings
        --quiet               Disable reporting on warnings, only errors are reported
        --deny-warnings       Ensure warnings produce a non-zero exit code
        --max-warnings=INT    Specify a warning threshold, which can be used to force exit with an error
                              status if there are too many warning-level rule violations in your project

Miscellaneous
        --timing              Display the execution time of each lint rule
                              [env:TIMING: not set]
        --rules               list all the rules that are currently registered
        --threads=INT         Number of threads to use. Set to 1 for using only 1 CPU core

Codeowners
        --codeowners-file=PATH  Path to CODEOWNERS file
        --codeowners=NAME     Code owner names, e.g. @Boshen

Available positional items:
    PATH                      Single file, single path or list of paths

Available options:
    -h, --help                Prints help information

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/265728.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3.18 Linux 防火墙

1、iptables 概述 a. 概念介绍 自Centos7.X开始,系统自带的防火墙是filewalld,但是也同样支持iptables, 我们仍然可以用iptables来作为防火墙。 netfilter/iptables:IP信息包过滤系统,它实际上由两个组件netfilter 和 iptables 组成。 netfilter 组件…

Nginx 安装(源码编译安装)

Nginx服务器提供了Windows和Linux版本,本文为Linux环境下Nginx服务器的详细安装步骤。 安装环境: Linux服务器操作系统:CentOs 8.1.1911 Nginx版本:1.21.4(Linux) 安装步骤: 1、安装GCC、aut…

过度加大SSD内部并发何尝不是一种伤害-part1

之前存储随笔有发布过一篇关于如何通过IO并发度提升性能相关的文章: 扩展阅读:SSD基础架构与NAND IO并发问题探讨 SSD整体优化策略就是要低延迟,高带宽,增加NAND的并发度。 本文,我们从另外一个角度来做一些讨论。现…

MySQL代码笔记

欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析(3) 目录 👉🏻表的增删查改创建表格&…

TLC2543(12位A/D转换器)实现将输入的模拟电压显示到数码管上

代码&#xff1a; #include <reg51.h> #define uchar unsigned char #define uint unsigned int// 数码管0-9 unsigned char seg[] {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; sbit SDO P1^0; sbit SDI P1^1; sbit CS P1^2; sbit CLK P1^3; s…

Linux(一)Linux理论

文章目录 一、Linux概述1.1 体系结构1.1.1 Linux内核1.1.2 用户态与内核态1.1.3 交换空间1.1.4 CLI和GUI 1.2 开机启动过程1.3 系统运行级别1.4 Linux进程1.4.1 Linux进程通信的方法1.4.2 Linux进程状态 二、文件2.1 Linux文件系统2.2 目录结构2.3 绝对路径和相对路径2.4 日志文…

增量式旋转编码器在STM32平台上的应用

背景 旋钮是仪器仪表上一种常见的输入设备&#xff0c;它的内部是一个旋转编码器&#xff0c;知乎上的这篇科普文章对其工作原理做了深入浅出的介绍。 我们公司的功率分析仪的前面板也用到了该类设备&#xff0c;最近前面板的MCU从MSP430切换成了STM32&#xff0c;因此我要将…

HarmonyOS 多态样式

还记得我们css中有 按压 失去焦点 点击后 正常状态 的各种样式设置 那么作为前端开发 TS JS的改版 harmonyos自然也有 这里 我们编写代码如下 Entry Component struct Index {build() {Row() {Column() {TextInput()TextInput().stateStyles({//正常状态normal: {.background…

Pytorch项目,肺癌检测项目之四

# 安装图像处理 的两个包 simpleITK 和 ipyvolume # 安装缓存相关的两个包 diskcache 和 cassandra-driver import gzip from diskcache import FanoutCache, Disk from cassandra.cqltypes import BytesType from diskcache import FanoutCache,Disk,core from diskcache…

计算机组成原理第6章-(计算机的运算方法)【上】

机器数与真值 把符号“数字化”的数称为机器数,而把带“+”、“-”符号的数称为真值。 原码表示法 原码是机器数中最简单的一种表示形式,0表示整数,1表示负数。 约定整数的符号位和数值位之间用“逗号”隔开。 在原码中,0有两种表示形式:“+0”和“-0”是不一样的。 反…

C++内存管理和模板初阶

C/C内存分布 请看代码&#xff1a; int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)mallo…

7.5组合总和②(LC40-M)

算法&#xff1a; 相比于上一题&#xff0c;数组candidates有重复元素&#xff0c;而要求不能有重复的组合&#xff0c;所以相对于39.组合总和 (opens new window)难度提升了不少。 如何去重&#xff1f; 先把candidates排序&#xff0c;让重复的元素都在一起 单层递归时&a…

二叉搜索树 --- C++实现

目录 1.二叉搜索树的概念 2.二叉搜索树的操作 3. 二叉树的实现 4.二叉搜索树的应用 5. 二叉树的性能分析 6. 二叉树进阶练习题 1.二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树&#xff1a; 若它的左…

LDO频率补偿

频率补偿 为了维持系统稳定的条件&#xff0c;一般的做法是建立一个低频几点&#xff0c;并把第二个极点放在单位增益频率 f0db 附近。在线性稳压器中&#xff0c;这两个极点是输出极点Po和误差放大器极点Pe。在确定了哪一个极点应该是主极点后&#xff0c;补偿的目的就是理解系…

(Mac上)使用Python进行matplotlib 画图时,中文显示不出来

【问题描述】 ①报错确缺失字体&#xff1a; ②使用matplotlib画图&#xff0c;中文字体显示不出来 【问题思考】 在网上搜了好多&#xff0c;关于使用python进行matplotlib画图字体显示不出来的&#xff0c;但是我试用了下&#xff0c;对我来说都没有。有些仅使用于windows系…

Laravel框架使用phpstudy本地安装的composer用Laravel 安装器进行安装搭建

一、首先需要安装Laravel 安装器 composer global require laravel/installer 二、安装器安装好后&#xff0c;可以使用如下命令创建项目 laravel new sys 三、本地运行 php artisan serve 四、 使用Composer快速安装Laravel5.8框架 安装指定版本的最新版本&#xff08;推荐&a…

2023 年第四季度 Chainlink 产品更新

在回顾 2023 年时&#xff0c;可以明显看到 Chainlink 生态系统所取得的进步是非常显著的。 我们以三个优先事项开始了这一年&#xff1a; 推出了 CCIP&#xff08;我们的跨链互操作协议&#xff09;&#xff0c;使得跨链交易和活动更加安全。推出数据流&#xff08;Data Str…

管理 Jenkins 详细指南

目录 系统配置 安全 状态信息 故障 排除 工具和操作 系统配置 系统&#xff0c;配置全局设置和路径&#xff0c;端口更改&#xff0c;下载地址等。 工具&#xff0c;配置工具、其位置和自动安装程序。 插件&#xff0c;添加、删除、禁用或启用可以扩展 Jenkins 功能的插…

<JavaEE> 网络编程 -- 网络编程和 Socket 套接字

目录 一、网络编程的概念 1&#xff09;什么是网络编程&#xff1f; 2&#xff09;网络编程中的基本概念 1> 收发端 2> 请求和响应 3> 客户端和服务端 二、Socket套接字 1&#xff09;什么是“套接字”&#xff1f; 2&#xff09;Socket套接字的概念 3&…

跨平台应用程序开发软件,携RAD Studio 12新版上线

RAD Studio 是一款专为程序员而准备的跨平台应用程序开发软件&#xff0c;内置Delphi和CBuilder这两种开发工具&#xff0c;另外还提供了新的C功能&#xff0c;扩展了对ExtJS的RAD服务器支持&#xff0c;增强了对vcL的高dpi支持&#xff0c;提高了firemonk (FMX)的质量等等&…