mirror of
https://github.com/oxc-project/oxc.git
synced 2026-09-14 19:36:11 +08:00
0b4e2e67f4
# Oxlint ### 🚀 Features -60b945dlinter/nextjs/no-typos: Implement suggestion (#26091) (Mikhail Baev) ### 🐛 Bug Fixes -33ac4b0linter/lsp: Prevent tsgolint from holding onto processes (#25570) (Adrian Schaedle) -baf4b1elinter/import/no-empty-named-blocks: Make empty value import removal a suggestion (#26155) (camc314) -77cfaeclinter/eslint/object-shorthand: Preserve `__proto__` semantics (#26154) (camc314) -fa3c082linter/unicorn/prefer-set-size: Ignore shadowed `Set` constructors (#26153) (camc314) -e412cf2linter: Clamp invalid JS plugin locations (#26144) (camc314) -d86c113linter: Normalize reversed JS plugin locations (#26138) (camc314) -73c09b2linter/eslint/no-use-before-define: Run on JS, JSX files (#26114) (camc314) -03ef0f2linter/unicorn/no-useless-spread: Treat typed arrays as a distinct value hint (#26067) (Aadharsh Pannirselvam) -bd15905linter/react/no-unstable-nested-components: Check nested component object property names (#26101) (camc314) -3910e2blinter/eslint/no-unassigned-vars: Skip Svelte and Vue files (#26042) (Hamody We) -047f7calinter/plugins: Fix interaction between JS plugins and Vue rules (#26080) (overlookmotel) -8531b9blinter/plugins: Alter method for obtaining mutable `Program` when sending AST to JS plugins (#26077) (overlookmotel) -dc464fflinter/unicorn/prefer-math-min-max: Avoid unsafe autofix (#26060) (camc314) ### 📚 Documentation -464ddd1linter: Support a shared short description for jest/vitest rules (#26186) (connorshea) -9db5ad3linter: Add short description to `vue/no-dupe-keys` (#26183) (connorshea) -db66f58linter: Correct export/import mismatch in bar and foo example (#25927) (billychannnnnn) -d5be037linter/typescript/switch-exhaustiveness-check: Clarify default case comment pattern (#26100) (camc314) # Oxfmt ### 🚀 Features -1fb37b6formatter/css: Format declaration-shaped raw-prelude rules (postcss nested config blocks) (#26194) (leaysgur) ### 🐛 Bug Fixes -57e8e22formatter_css: Space a folded sign after a call in Less operations (#26134) (leaysgur) -e4298fbformatter/jsdoc: Follow CommonMark for interrupting lists and guard wrapping from creating them (#26098) (leaysgur) -a1e21c2formatter: Apply head body policy everywhere (#26074) (leaysgur) -676b7e1formatter: Keep comments in their for-head slot, before an empty-statement body and do-while (#26073) (leaysgur) -3bbcea6formatter: Keep comments between a head and its body out of the braces across all constructs (#26071) (leaysgur) -57537a2formatter: Place comments between a head and open paren (#26058) (leaysgur) -e2d53e7formatter: Place comments between a statement head and its body (#26043) (leaysgur) -662556cformatter: Print the idempotent placement for comments in dropped parens (#26041) (leaysgur) -faf11d9formatter_yaml: Keep trailing whitespace in block scalars (#26072) (leaysgur) ### ⚡ Performance -ac4785adiagnostics: Use fixed ANSI styles (#26130) (Boshen) ### 📚 Documentation -b879608formatter,formatter_graphql,formatter_yaml: Annotate own-line comment inlining as known policy violation (#26131) (leaysgur) -181953boxfmt,formatter_core,formatter,formatter_yaml,formatter_css,formatter_graphql: Extract `DIVERGENCES.md` out from `AGENTS.md` (#26121) (leaysgur) -a67cb9dformatter,formatter_core: Document comment moving policy (#26075) (leaysgur) -fc175b0formatter_core: Clarify idempotency test infra (#26069) (leaysgur)
@oxlint/plugins
Plugin utilities for Oxlint.
This package provides optional functions to assist in creating Oxlint JS plugins and rules.
Installation
npm install @oxlint/plugins
Usage
Define functions
Use definePlugin and defineRule if authoring your plugin in TypeScript for type safety.
import { definePlugin, defineRule } from "@oxlint/plugins";
const rule = defineRule({
create(context) {
return {
Program(node) {
// Rule logic here
},
};
},
});
export default definePlugin({
meta: { name: "oxlint-plugin-amazing" },
rules: { amazing: rule },
});
Types
This package also includes types for plugins and rules.
import type { Context, Rule, ESTree } from "@oxlint/plugins";
const rule: Rule = {
create(context: Context) {
return {
Program(node: ESTree.Program) {
// Rule logic here
},
};
},
};
ESLint compatibility
If your plugin uses Oxlint's alternative createOnce API,
use eslintCompatPlugin to convert the plugin so it will also work with ESLint.
import { eslintCompatPlugin } from "@oxlint/plugins";
const rule = {
createOnce(context) {
return {
Program(node) {
// Rule logic here
},
};
},
};
export default eslintCompatPlugin({
meta: { name: "oxlint-plugin-amazing" },
rules: { amazing: rule },
});
Node.js version
This package requires Node.js 12.22.0+, 14.17.0+, 16.0.0+, or later. This matches the minimum Node.js version required by ESLint 8.
This package provides both ESM and CommonJS entry points.
So a plugin which depends on @oxlint/plugins can be:
- Used with any version of Oxlint.
- Used with ESLint 8+.
- Published as either ESM or CommonJS.
Docs
For full documentation, see Oxlint JS Plugins docs.