oxc-guard
b4da00b621
release(apps): oxlint v1.82.0 && oxfmt v0.67.0 ( #26384 )
...
# Oxlint
### 🚀 Features
- 6a0e19c linter/eslint/no-unmodified-loop-condition: Support `checkConditionalExpressions` option (#26249 ) (camc314)
### 🐛 Bug Fixes
- 562dd14 jsx-a11y/anchor-has-content: Allow anchors passed as custom component props (#26360 ) (Mikhail Baev)
- 253cdb2 linter/eslint/id-length: Exempt TS interface/type-literal members with never (#26310 ) (Pearce Ropion)
- 8c7ea76 ast_visit: Account for trimmed source offsets (#26223 ) (Cameron)
- 5f9cffc linter/typescript/no-explicit-any: Fix rest parameter to `unknown[]` (#26279 ) (camc314)
- 4de9fa3 linter/react/jsx-no-literals: Check nested JSX expression literals (#26253 ) (camc314)
- 07851b9 parser: Fix debug assert failure when lexer error with tokens enabled (#26229 ) (overlookmotel)
- 9cee146 oxlint/lsp: Don't try to parse fix message, always fallback (#26204 ) (Sysix)
- a662c40 linter/eslint/no-useless-assignment: Handle destructuring assignments (#25925 ) (camc314)
- 304bd9a linter/eslint/no-array-constructor: Handle ASI hazards in fixer (#26166 ) (Hamody We)
- b41bb35 linter: Qualify rules in rules output (#26250 ) (camc314)
- 895c685 linter/typescript/no-extraneous-class: Avoid deleting class expressions (#26231 ) (camc314)
- 4ba33c8 linter/eslint/no-unused-vars: Handle stored arrow references (#26225 ) (camc314)
### 🛡️ Security
- 9a612d5 deps: Update npm packages (#26178 ) (renovate[bot])
# Oxfmt
### 💥 BREAKING CHANGES
- 2c9a947 parser: [**BREAKING**] Reduce `MAX_LEN` to 256 bytes below `u32::MAX` (#26352 ) (overlookmotel)
### 🚀 Features
- 68e12ab formatter_css: Follow the oxc-css-parser's acceptance line (#26337 ) (leaysgur)
### 🐛 Bug Fixes
- f7acdc0 formatter: Treat a JSDoc cast target as opaque in chain layouts (#26375 ) (leaysgur)
- 104061b formatter: Keep JSDoc cast parens with a comment inside them (#26374 ) (leaysgur)
- 3d00a76 formatter_css: Keep comment inside important and simple-vars colon (#26370 ) (leaysgur)
- 172ddb6 formatter_css: Keep a same-line line comment on its line (#26321 ) (leaysgur)
- cafaf32 formatter_css: Never drop comments inside an at-rule prelude (#26320 ) (leaysgur)
- 534a0fe formatter_css: Keep a line comment on its comma's line (#26319 ) (leaysgur)
- 99cfd75 formatter_css: Hide raw comment printing API, use strcut instead (#26316 ) (leaysgur)
- 2028896 formatter_css: Preserve comments around SCSS/Less variable values (#26276 ) (leaysgur)
- 6752abc formatter_css: Keep leading comments before (#26272 ) (leaysgur)
- 3b054de formatter_graphql: Align comment printing after open `{` (#26271 ) (leaysgur)
- b3c287a formatter_css: Fix SCSS bracket list printing (#26270 ) (leaysgur)
- bac770a formatter_css: Preserve comment in SCSS paren comma list (#26269 ) (leaysgur)
- c7b57ef formatter_css: Print SCSS map consisntent with and without comment (#26268 ) (leaysgur)
- 063e2b6 formatter_css: Preserve trailing comma in single-item scss lists (#26245 ) (leaysgur)
- 5f9580d oxfmt: Bump prettier-plugin-tailwindcss (#26273 ) (leaysgur)
### ⚡ Performance
- 1cad286 oxfmt: Match editorconfig once per file (#26239 ) (Yuji Sugiura)
- 260c5eb oxfmt: Match `overrides` once per file (#26238 ) (leaysgur)
- 61565bc oxfmt: Share resolved `FormatConfig` via `Arc` instead of cloning per file (#26237 ) (leaysgur)
### 📚 Documentation
- 32084d4 formatter_core: Clarify printer hard_line compression (#26312 ) (leaysgur)
- 4fabdcc formatter,formatter_css,formatter_graphql,formatter_yaml: Update DIVERGENCES.md (#26267 ) (leaysgur)
- 26a1fa4 formatter_core: Refine FORMATTER_POLICY (#26266 ) (leaysgur)
### 🛡️ Security
- 9a612d5 deps: Update npm packages (#26178 ) (renovate[bot])
2026-09-07 14:13:57 +00:00
leaysgur
0f4af5d7df
test(formatter_tests): assert fingerprint survives formatting ( #26322 )
...
Historically, only JS formatter has had the `detect_code_removal` feature, which uses CI to check for missing nodes or comments.
While this would be useful in other languages (especially CSS), but setting up the mechanism is difficult. For now, just start with something simple that just guarantees the number of comments.
That said, even with a mechanism in place, it can't detect anything unless the cases are fully covered by fixtures, so this only tells us that the current state is problem-free.
2026-09-04 07:14:53 +00:00
leaysgur
3b054de895
fix(formatter_graphql): align comment printing after open { ( #26271 )
...
Aligned the handling of line comments immediately following an opening `{`.
(For GraphQL only,) previously kept their own line, now matches other languages by inserting a line break and treating them as leading comments for the next element.
This brings it in line with Prettier's style. The only drawback is that the behavior of `-line` style comments. However, since most of these can be replaced with `-next-line` style comments, we are going to standardize on this consistent behavior for now.
prettier/prettier#1267 (won't fix)
2026-09-03 08:17:35 +00:00
leaysgur
4fabdcca11
docs(formatter,formatter_css,formatter_graphql,formatter_yaml): update DIVERGENCES.md ( #26267 )
...
Update each document following #26266 policy.
2026-09-03 08:17:34 +00:00
oxc-guard
0b4e2e67f4
release(apps): oxlint v1.81.0 && oxfmt v0.66.0 ( #26199 )
...
# Oxlint
### 🚀 Features
- 60b945d linter/nextjs/no-typos: Implement suggestion (#26091 ) (Mikhail Baev)
### 🐛 Bug Fixes
- 33ac4b0 linter/lsp: Prevent tsgolint from holding onto processes (#25570 ) (Adrian Schaedle)
- baf4b1e linter/import/no-empty-named-blocks: Make empty value import removal a suggestion (#26155 ) (camc314)
- 77cfaec linter/eslint/object-shorthand: Preserve `__proto__` semantics (#26154 ) (camc314)
- fa3c082 linter/unicorn/prefer-set-size: Ignore shadowed `Set` constructors (#26153 ) (camc314)
- e412cf2 linter: Clamp invalid JS plugin locations (#26144 ) (camc314)
- d86c113 linter: Normalize reversed JS plugin locations (#26138 ) (camc314)
- 73c09b2 linter/eslint/no-use-before-define: Run on JS, JSX files (#26114 ) (camc314)
- 03ef0f2 linter/unicorn/no-useless-spread: Treat typed arrays as a distinct value hint (#26067 ) (Aadharsh Pannirselvam)
- bd15905 linter/react/no-unstable-nested-components: Check nested component object property names (#26101 ) (camc314)
- 3910e2b linter/eslint/no-unassigned-vars: Skip Svelte and Vue files (#26042 ) (Hamody We)
- 047f7ca linter/plugins: Fix interaction between JS plugins and Vue rules (#26080 ) (overlookmotel)
- 8531b9b linter/plugins: Alter method for obtaining mutable `Program` when sending AST to JS plugins (#26077 ) (overlookmotel)
- dc464ff linter/unicorn/prefer-math-min-max: Avoid unsafe autofix (#26060 ) (camc314)
### 📚 Documentation
- 464ddd1 linter: Support a shared short description for jest/vitest rules (#26186 ) (connorshea)
- 9db5ad3 linter: Add short description to `vue/no-dupe-keys` (#26183 ) (connorshea)
- db66f58 linter: Correct export/import mismatch in bar and foo example (#25927 ) (billychannnnnn)
- d5be037 linter/typescript/switch-exhaustiveness-check: Clarify default case comment pattern (#26100 ) (camc314)
# Oxfmt
### 🚀 Features
- 1fb37b6 formatter/css: Format declaration-shaped raw-prelude rules (postcss nested config blocks) (#26194 ) (leaysgur)
### 🐛 Bug Fixes
- 57e8e22 formatter_css: Space a folded sign after a call in Less operations (#26134 ) (leaysgur)
- e4298fb formatter/jsdoc: Follow CommonMark for interrupting lists and guard wrapping from creating them (#26098 ) (leaysgur)
- a1e21c2 formatter: Apply head body policy everywhere (#26074 ) (leaysgur)
- 676b7e1 formatter: Keep comments in their for-head slot, before an empty-statement body and do-while (#26073 ) (leaysgur)
- 3bbcea6 formatter: Keep comments between a head and its body out of the braces across all constructs (#26071 ) (leaysgur)
- 57537a2 formatter: Place comments between a head and open paren (#26058 ) (leaysgur)
- e2d53e7 formatter: Place comments between a statement head and its body (#26043 ) (leaysgur)
- 662556c formatter: Print the idempotent placement for comments in dropped parens (#26041 ) (leaysgur)
- faf11d9 formatter_yaml: Keep trailing whitespace in block scalars (#26072 ) (leaysgur)
### ⚡ Performance
- ac4785a diagnostics: Use fixed ANSI styles (#26130 ) (Boshen)
### 📚 Documentation
- b879608 formatter,formatter_graphql,formatter_yaml: Annotate own-line comment inlining as known policy violation (#26131 ) (leaysgur)
- 181953b oxfmt,formatter_core,formatter,formatter_yaml,formatter_css,formatter_graphql: Extract `DIVERGENCES.md` out from `AGENTS.md` (#26121 ) (leaysgur)
- a67cb9d formatter,formatter_core: Document comment moving policy (#26075 ) (leaysgur)
- fc175b0 formatter_core: Clarify idempotency test infra (#26069 ) (leaysgur)
2026-09-01 08:25:16 +00:00
leaysgur
b8796080d5
docs(formatter,formatter_graphql,formatter_yaml): annotate own-line comment inlining as known policy violation ( #26131 )
2026-08-27 06:29:50 +00:00
leaysgur
f94b22296c
test(formatter,formatter_css,formatter_json,formatter_yaml): restore coverage lost in fixture consolidation ( #26129 )
...
- Restore wrongly consolidated fixtures
- State new fixtures policy and apply
- Check `endOfLine` option and output at test harness level
2026-08-27 06:12:52 +00:00
leaysgur
69b9a0ed81
test(formatter_graphql, formatter_yaml): consolidate fixtures and fix crlf coverage gap ( #26123 )
...
GQL: Consolidate redundant fixtures
YAML: Just add notes
2026-08-27 05:33:59 +00:00
leaysgur
181953b92d
docs(oxfmt,formatter_core,formatter,formatter_yaml,formatter_css,formatter_graphql): extract DIVERGENCES.md out from AGENTS.md ( #26121 )
...
- Extract "known divergences" section from `AGENTS.md` to explicit `DIVERGENCES.md` with code example
- Update all anchors
- Add missing pinned fixtures
2026-08-27 05:33:58 +00:00
oxc-guard
97e99b8548
release(apps): oxlint v1.80.0 && oxfmt v0.65.0 ( #26045 )
...
# Oxlint
### 🚀 Features
- 70c3e35 linter/typescript/no-confusing-non-null-assertion: Implement suggestion (#26012 ) (Mikhail Baev)
### 🐛 Bug Fixes
- 8a353a7 linter/eslint/no-control-regex: Refine help message text (#25996 ) (Rahul Mishra)
- 8a9bdbd estree: Include decorators in `FormalParameterRest ` spans (#26021 ) (camc314)
- 8d94cd1 linter/eslint/no-useless-rename: Preserve type modifiers (#26020 ) (Cameron)
- 2cde1f6 rust: Address nightly deprecations (#25998 ) (Boshen)
- 51d36d7 linter/vue: Resolve `vue` imports via shared import helpers (#25903 ) (Connor Shea)
- 83a68d2 linter/react/no-react-children: Resolve `react` imports by symbol (#25901 ) (Connor Shea)
- 124e196 linter: Resolve globals by reference, not by name (#25905 ) (Connor Shea)
- a701bcc linter: Remove invalid React compiler doc links (#25900 ) (Boshen)
### 📚 Documentation
- 9b7e153 linter: Set `version` to 1.79.0 for rules shipped in 1.79.0 (#25902 ) (connorshea)
# Oxfmt
### 🐛 Bug Fixes
- bf37dd5 formatter: Preserve class decorators before export when the statement is suppressed (#26034 ) (leaysgur)
2026-08-24 11:33:15 +00:00
oxc-guard[bot]
0db127cc16
release(apps): oxlint v1.79.0 && oxfmt v0.64.0 ( #25866 )
...
# Oxlint
### 💥 BREAKING CHANGES
- 8c4552d linter: [**BREAKING**] Split react/react-compiler into
per-category rules (#25500 ) (Boshen)
### 🚀 Features
- 9b7394e linter/typescript/no-empty-object-type: Implement suggestion
(#25833 ) (Mikhail Baev)
### 🐛 Bug Fixes
- 345f981 react_compiler: Skip node_modules by default (#25859 ) (Boshen)
- 2f40afa linter/unicorn/no-array-callback-reference: Ignore effect
library imports (#25857 ) (Michaël Bitard)
- 7b565a0 linter: Align React Compiler rule categories (#25840 ) (Boshen)
- 228e8e0 linter: Resolve inactive React compiler rules (#25830 )
(Boshen)
- f8e4884 linter/eslint/no-useless-constructor: Allow parameter
properties (#25811 ) (camc314)
- e4b6993 linter: Report exhaustive effect dependencies (#25829 )
(Boshen)
- 742e25f linter/eslint/no-return-assign: Anchor diagnostic on return
stmt (#25803 ) (camc314)
- b831ca8 react-compiler: Improve derived state diagnostic (#25804 )
(Boshen)
- 5908c87 linter/jest/prefer-mock-return-shorthand: Preserve
implementations using this (#25802 ) (camc314)
- f6b2265 linter/eslint/no-redeclare: Run in ES modules, skipping only
the globals check (#25691 ) (Hamody We)
- ca9f553 linter/unicorn/prefer-default-parameters: Mark fixer as a
suggestion (#25801 ) (camc314)
- aa49d86 linter: Allow spread rule options in config types (#25675 )
(ch3rry)
- d5483f8 linter/typescript/no-useless-empty-export: Skip TS declaration
files (#25789 ) (Evyatar Daud)
- 57f2199 linter/typescript/no-useless-empty-export: Report after
imports (#25786 ) (camc314)
- 633bc19 linter/typescript/no-unnecessary-type-conversion: Mark fixer
as `suggestion` (#25787 ) (camc314)
- dea3339 linter/typescript/explicit-module-boundary-types: Anchor
diagnostics on arrows (#25779 ) (camc314)
- 5cd6f02 linter/eslint/array-callback-return: Anchor diagnostic on
callback (#25780 ) (camc314)
- ef8cebf linter/eslint/preserve-caught-error: Handle AggregateError
options (#25775 ) (camc314)
- c108d5c linter: Improve React Compiler diagnostics (#25742 ) (Boshen)
- c9ec55e react-compiler: Improve diagnostic spans (#25731 ) (Boshen)
- 1cbbcb7 linter/unicorn/prefer-string-replace-all: Apply fixes in one
pass (#25709 ) (Mikhail Baev)
- dec0a86 react-compiler: Standardize diagnostics (#25702 ) (Boshen)
- 5fd77f7 linter/react/display-name: Report curried HOC inner component
(#25662 ) (camc314)
- 4dbb80e linter/import/no-named-as-default: Report local export
conflicts (#25658 ) (camc314)
- e8a7214 linter/react/rules-of-hooks: Report hooks inside try blocks
(#25670 ) (camc314)
- 36f8451 linter/eslint/no-eval: Align indirect default with ESLint
(#25656 ) (camc314)
- d901d24 linter/react/exhaustive-deps: Handle destructured object
dependencies (#25669 ) (camc314)
- beb724d linter/eslint/no-unused-vars: Report bare underscore
parameters (#25663 ) (camc314)
- fa36f26 linter/react/no-this-in-sfc: Detect this in nested arrow
callbacks (#25653 ) (camc314)
- 44d1be3 linter/typescript/no-var-requires: Run rule on JavaScript
(#25664 ) (camc314)
- 4004c10 linter/eslint/no-irregular-whitespace: Check comments by
default (#25660 ) (camc314)
- 625401d linter/import/no-named-default: Flag type-only named defaults
(#25661 ) (camc314)
- 8eacb2d linter/typescript/no-non-null-asserted-optional-chain: Detect
assertions after continued optional chains (#25659 ) (camc314)
- d55b76c linter/react/no-direct-mutation-state: Detect computed state
mutations (#25654 ) (camc314)
- f92c651 linter/unicorn/no-abusive-eslint-disable: Use directive prefix
in diagnostic (#25657 ) (camc314)
- ee44996 linter/eslint/max-classes-per-file: Anchor diagnostic at
program start (#25652 ) (camc314)
- 403ec40 linter/eslint/no-multi-assign: Handle parenthesized declarator
initializers (#25651 ) (camc314)
- 6c9ba37 linter/jest/expect-expect: Detect assertions in nested
function declarations (#25650 ) (camc314)
- 285820e linter/no-large-snapshots: Precompile and document allowed
snapshot matchers (#25611 ) (Mikhail Baev)
- 1be1e20 linter/eslint/prefer-promise-reject-errors: Report on spread
arguments (#25648 ) (Mikhail Baev)
- a38f7b3 oxlint,oxfmt: Apply .gitignore only to walk targets, not
explicitly named files (#25531 ) (leaysgur)
- 509931b semantic: Classify global references per identifier (#25608 )
(camc314)
- 0c68b7f estree: Emit `decorators` on `FormalParameterRest` (#25582 )
(camc314)
- 1d22912 linter/plugins: Parse rule-less directive justifications
(#25559 ) (camc314)
- eaf80d8 linter/unicorn/prefer-node-protocol: Validate exact Node.js
built-in specifiers (#25558 ) (camc314)
- 57b94af linter/promise/no-multiple-resolved: Ignore unresolved globals
(#25530 ) (Tushar Singh)
- 80e64c2 linter/expect-expect: Validate assertion regex (#25504 )
(Mikhail Baev)
- 7830604 linter/react/exhaustive-deps: Treat binary expressions as a
stable dependency (#25508 ) (Hamody We)
- 4df5835 linter: Allow capitalized built-in calls (#25516 ) (Boshen)
- 9d49d27 react_compiler: Bail out instead of panicking on "Expected a
node for all scopes" (#25506 ) (Boshen)
- d43b562 linter/vitest/prefer-expect-assertions: Handle parameterized
Vitest assertion suggestions (#25476 ) (camc314)
### ⚡ Performance
- e8303d6 linter: Shrink rule serialization dispatch (#25818 ) (Boshen)
- c84ede3 estree_tokens: Share JS token update entry point (#25826 )
(Boshen)
- 35c8eb2 linter: Compute sort keys once with sort_by_cached_key
(#25821 ) (Boshen)
- f0121ed linter: Share config deserialization entry point (#25820 )
(Boshen)
- 2dacf7a oxlint: Reduce debug formatting code size (#25797 ) (Boshen)
- 9ed10b7 linter: Use unstable sorts for unique keys (#25778 ) (Boshen)
- 63ff8ef linter: Outline diagnostic construction (#25762 ) (Boshen)
- 2dd7446 diagnostics: Preallocate graphical output (#25721 ) (Boshen)
- 9c8abab diagnostics: Batch graphical reports (#25710 ) (Boshen)
- 8e9b95f linter: Use table for rule names (#25458 ) (Boshen)
# Oxfmt
### 🚀 Features
- c07fe7c oxfmt: Support `experimentalOperatorPosition` (#25643 )
(leaysgur)
- 2adb8fb formatter: Implement `operatorPosition` option (#25581 )
(leaysgur)
### 🐛 Bug Fixes
- 44231fb formatter: Fix comment and indent issues around unions
(#25665 ) (leaysgur)
- 2465e87 formatter: Keep comments in place when dropping
`EmptyStatement` (#25730 ) (leaysgur)
- 7e4f3b7 formatter: Print `JSDocUnknownType` (#25729 ) (leaysgur)
- 5238d9e formatter: Keep nested awaited-paren member chain grouped in
call arguments (#25646 ) (leaysgur)
- a38f7b3 oxlint,oxfmt: Apply .gitignore only to walk targets, not
explicitly named files (#25531 ) (leaysgur)
- 5c0a5ff formatter_css: Fill own-line block comments inside
space-separated values (#25578 ) (leaysgur)
- 53debfa formatter_css: Keep trailing comma and indent after
comment-preceded last map value (#25577 ) (leaysgur)
- 1a83a8d oxfmt: Mirror printer line suppression and restore
dedent-to-root (#25573 ) (leaysgur)
- 7f350d1 formatter: Keep unary comment and print only needed parens
(#25526 ) (leaysgur)
- f405789 formatter_yaml: Consistent chomped eos behavior (#25523 )
(leaysgur)
- a243311 formatter_yaml: Bump oxc-yaml-parser for contentless block
scalar (#25519 ) (leaysgur)
- 40d38a0 formatter_css: Keep multi value function args intact after
leading comment (#25518 ) (leaysgur)
### 📚 Documentation
- 223e785 oxfmt/conformance: Update notes on conformance (#25757 ) (Yuji
Sugiura)
- 673dc6d oxfmt: Move some docs from AGENTS.md to code comment (#25649 )
(leaysgur)
- fed6681 oxfmt: Skip expanding overrides options (#25572 ) (leaysgur)
Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com >
2026-08-18 22:27:08 +08:00
leaysgur
b297fb1cb8
refactor(formatter,formatter_tests): fix up ( #25478 )
...
Cleaning up after the series of migrations.
- Docs clean up
- More strict `jsdoc` option handling in fixture tests
2026-08-12 00:48:33 +00:00
leaysgur
e4437275de
refactor(formatter_css,formatter_json,formatter_graphql,formatter_tests): move out prettier CSS,JSON,GraphQL conformance from tasks/ ( #25472 )
...
Migration from tasks/prettier_conformance to each crate test using oxc_formatter_tests, for CSS, JSON, and GraphQL.
2026-08-12 00:48:32 +00:00
leaysgur
6e1b4ddceb
refactor(formatter_core,formatter_tests): extract oxc_formatter_tests crate from oxc_formatter_core ( #25465 )
...
- Extract `test_harness` feature as crate `oxc_formatter_tests`
- This crate will also provide infra for `tasks/prettier_conformance` later
2026-08-12 00:40:59 +00:00
oxc-guard
c42d6397ea
release(apps): oxlint v1.78.0 && oxfmt v0.63.0 ( #25473 )
...
# Oxlint
### 💥 BREAKING CHANGES
- a33788e ast: [**BREAKING**] Group class heritage into `ClassHeritage` (#25360 ) (camc314)
- 5c5cdcd ast: [**BREAKING**] Narrow `TSInterfaceHeritage::expression` to TSTypeName (#24360 ) (camc314)
- 6be314f ast: [**BREAKING**] Remove duplicated `VariableDeclarator::kind` (#25319 ) (camc314)
- 44fd320 ast: [**BREAKING**] Split TS external modules & Namespace Declarations (#25284 ) (camc314)
### 🚀 Features
- ccb8fe8 linter/jsdoc: Implement `no-blank-blocks` rule (#25207 ) (Mikhail Baev)
- d4a897c linter/eslint: Implement `one-var` rule (#24470 ) (Cole Ellison)
- 5ab9340 linter/jsx-a11y/anchor-has-content: Add options to match eslint (#24571 ) (Cole Ellison)
### 🐛 Bug Fixes
- b746e00 linter/eslint/no-implicit-coercion: Preserve template coercion whitespace (#25470 ) (camc314)
- a92c541 linter: Preserve source text for JS plugin ignore fixes (#25280 ) (Norcleeh)
- 675c840 linter/eslint/prefer-promise-reject-errors: Handle parenthesized calls (#25378 ) (camc314)
- 1703739 linter/unicorn/new-for-builtins: Ignore optional chains (#25411 ) (tanakalucky)
- 95ece63 linter/unicorn/prefer-code-point: Downgrade the auto-fix to dangerous (#25412 ) (leemr)
- c451a0e linter/vitest: Validate `consistent-test-filename` regex patterns (#25408 ) (Mikhail Baev)
- 937825c react_compiler: Disable exhaustive memo validation by default (#25417 ) (Boshen)
- f0f7dae linter/eslint/no-unused-vars: Report invalid regex options (#25380 ) (Cameron)
- 44e73fd linter/unicorn/prefer-array-flat: Fix `concat.apply` suggestions (#25373 ) (Cameron)
- 6846a9a linter/react/rules-of-hooks: Detect constructor callbacks (#25377 ) (camc314)
- b247a9d linter/unicorn/new-for-builtins: Support `Float16Array` (#25382 ) (tanakalucky)
- 19109cd linter/unicorn/error-message: Support `SuppressedError` messages (#25375 ) (camc314)
- 9c13f5e linter: Assert token lookup invariants (#25368 ) (camc314)
- bc35f83 linter/eslint/no-unused-vars: Bound catch parameter lookup (#25367 ) (camc314)
- c159fb9 linter/unicorn/switch-case-braces: Bound token lookup (#25363 ) (camc314)
- 03b2eb2 linter/unicorn/no-static-only-class: Bound token lookup (#25361 ) (camc314)
- 0afc59e linter/unicorn/empty-brace-spaces: Bound token lookup (#25353 ) (camc314)
- 2963d98 linter/eslint/no-unreachable-loop: Do not report loops whose body has a finally block (#25335 ) (Todor Andonov)
- 589e5fb linter/eslint/no-param-reassign: Validate `ignorePropertyModificationsForRegex` property (#25346 ) (Mikhail Baev)
- aae5d8b linter/eslint/no-throw-literal: False positive on variable declared without initializer (#25275 ) (cjnoname)
- 6b1c479 oxlint: Normalize customized rule names (#25316 ) (camc314)
- d494eb5 linter/unicorn/consistent-existence-index-check: Bound token lookup (#25325 ) (camc314)
- 4266037 linter/typescript/prefer-namespace-keyword: Bound token lookup (#25322 ) (camc314)
- 4745b4e linter/typescript/no-namespace: Bound token lookup (#25321 ) (camc314)
- 648a481 linter/eslint/one-var: Avoid joining exported declarations (#25314 ) (camc314)
- 9573937 linter/typescript: Validate `ban-ts-comment` description_format (#25320 ) (Mikhail Baev)
- ebf7d18 linter/typescript/consistent-type-definitions: Bound token lookup (#25281 ) (camc314)
- 1501ccf linter/typescript/consistent-generic-constructors: Bound token lookup (#25258 ) (camc314)
### ⚡ Performance
- 8f784f3 linter: Reduce rule config dispatch size (#25461 ) (Boshen)
- 2de4ec2 linter: Reduce visitor code size (#25441 ) (Boshen)
- 6fb7f47 linter/unicorn/prefer-export-from: Narrow `ExportFromDeclaration` lookup (#25381 ) (camc314)
- e3f6263 linter/unicorn/prefer-default-parameters: Avoid reference allocation (#25379 ) (camc314)
- d863473 linter/vue/max-props: Narrow AST dispatch (#25372 ) (camc314)
- 273d867 linter: Avoid diagnostic sorting after applying fixes (#25079 ) (Sysix)
- 4ec9189 oxlint/lsp: Avoid second lock for getting/removing unused directives (#25350 ) (Sysix)
- 6c0d01b oxlint/lsp: Preallocate fix-content vec (#25351 ) (Sysix)
- 3a94055 linter: Avoid per-call heap allocations in jest and unicorn helpers (#25210 ) (Connor Shea)
- 4abff11 linter: Avoid redundant message work in the agent reporter (#25315 ) (Connor Shea)
- 6bb5421 linter: Hoist `current_dir` out of the stylish reporter loop (#25313 ) (Connor Shea)
- 9a7c323 linter: Compute diagnostic `Info` once per diagnostic in junit reporter (#25312 ) (Connor Shea)
- 1cf7dde oxlint: Render JSON report into a single buffer (#25295 ) (connorshea)
- 8492cfd linter/typescript/ban-ts-comment: Bail early with substring guard (#25301 ) (Jacob Asper)
- 7607f04 linter/typescript/ban-tslint-comment: Replace regex with manual parser (#25299 ) (Jacob Asper)
# Oxfmt
### 💥 BREAKING CHANGES
- a33788e ast: [**BREAKING**] Group class heritage into `ClassHeritage` (#25360 ) (camc314)
- 5c5cdcd ast: [**BREAKING**] Narrow `TSInterfaceHeritage::expression` to TSTypeName (#24360 ) (camc314)
- 6be314f ast: [**BREAKING**] Remove duplicated `VariableDeclarator::kind` (#25319 ) (camc314)
- 44fd320 ast: [**BREAKING**] Split TS external modules & Namespace Declarations (#25284 ) (camc314)
### 🚀 Features
- fd02a89 oxfmt: Dispatch yaml-in-css(frontmatter) to `oxc_formatter_yaml` (#25336 ) (leaysgur)
- ab12665 formatter_core: Add `hardlineWithoutBreakParent` equivalent IR (#25273 ) (leaysgur)
### 🐛 Bug Fixes
- 95dc917 oxfmt: Drop IR Space at line start for js-in-xxx (#25460 ) (leaysgur)
- b63eccc formatter: Keep comments after TS this_param (#25459 ) (leaysgur)
- ab52a59 formatter: Format xxx-in-js inside JSDoc js fence (#25414 ) (leaysgur)
- 1a2c64a formatter,oxfmt: Apply effective print width for JSDoc fence (#25413 ) (leaysgur)
- 2eaede9 formatter_core: Unify leading-BOM handlings (#25340 ) (leaysgur)
- ef1d04b formatter: Break mapped type brackets (#25297 ) (leaysgur)
- 4e6f3f1 formatter: Break index signature brackets (#25296 ) (leaysgur)
- e23dccf formatter_css: Bump oxc-css-parser to accept unknown at-rule with interpolated (#25277 ) (leaysgur)
- c29b587 formatter_core: Measure decided-flat fill separator as flat during group re-measure (#25276 ) (leaysgur)
- f3c6953 formatter_yaml: Don't rewrite overflowing key to implicit (#25274 ) (leaysgur)
### ⚡ Performance
- c9d1a5b oxfmt: Spawn tinypool lazily (#25298 ) (leaysgur)
### 📚 Documentation
- 6eae5c9 formatter,oxfmt: Record embed-layer decisions in place (#25422 ) (leaysgur)
- 51224a7 formatter_yaml: Pin EOF blank lines divergence (#25269 ) (leaysgur)
2026-08-10 10:03:34 +00:00
Boshen
030857b509
refactor(diagnostics): update oxc-miette to v4 ( #25395 )
...
Remove the miette `Report` wrapper and update oxc-miette to v4's narrowed diagnostic and source protocol.
AI-assisted by OpenAI Codex.
2026-08-10 07:48:02 +00:00
leaysgur
2eaede9b0b
fix(formatter_core): unify leading-BOM handlings ( #25340 )
...
Follow up on #25333 .
2026-08-09 14:32:09 +00:00
leaysgur
52b146f025
refactor(formatter_core): share split_bom helper ( #25333 )
...
In order to standardise the handling of front matter, it was also necessary to standardise the handling of the BOM, which may appear before the FM.
2026-08-09 13:06:35 +00:00
leaysgur
b3ad060cfd
refactor(formatter): migrate embedded entries to FormatSession ( #25332 )
...
Apply `FormatSession` everywhere introduced in #25329 .
2026-08-09 13:06:35 +00:00
leaysgur
8e779c946b
refactor(formatter_core): finalize documents once at print time ( #25328 )
...
Call `propagate_expand()` inside `Formatted`, here is the only place to finalize IRs.
2026-08-09 12:33:39 +00:00
oxc-guard
9a423f2f48
release(apps): oxlint v1.77.0 && oxfmt v0.62.0 ( #25251 )
...
# Oxlint
### 💥 BREAKING CHANGES
- 4120da0 semantic: [**BREAKING**] Return borrowed JSDoc so the parse cache works (#25186 ) (Connor Shea)
- 067da8c ast: [**BREAKING**] Store single parameter in `TSIndexSignature::parameter` (#25154 ) (camc314)
- 1bdedd1 ast: [**BREAKING**] Introduce `ExportDeclaration`, `ExportFromDeclaration` (#25095 ) (camc314)
- c917f20 ast: [**BREAKING**] Introduce `ArrowFunctionBody` enum (#24987 ) (camc314)
### 🚀 Features
- 0b9f83c linter/oxc/bad-char-at-comparison: Expand coverage (#25001 ) (Mikhail Baev)
- 1fb3d70 oxlint: Show file:line:col in github format annotation messages (#25020 ) (Faris Tristan Fabian)
### 🐛 Bug Fixes
- 9d4592c linter: Reject duplicate JS plugin names (#25243 ) (camc314)
- 3213e7a linter: Ignore unsigned shifts in prefer-math-trunc (#25240 ) (camc314)
- 06579da linter/eslint/prefer-promise-reject-errors: Handle ambient error variables (#25238 ) (camc314)
- 6a7cd90 linter/oxc/no-async-await: Bound token lookup (#25222 ) (camc314)
- d8e390a linter/oxc/bad-bitwise-operator: Bound token lookups (#25220 ) (camc314)
- 351a777 linter/import/no-duplicates: Bound token lookup (#25219 ) (camc314)
- 4f70fb6 linter/import/consistent-type-specifier-style: Bound token lookup (#25218 ) (camc314)
- b89113c linter/eslint/yoda: Bound token lookup (#25202 ) (camc314)
- 7c7cda7 linter/oxc/no-map-spread: Avoid recursive declaration traversal (#25200 ) (camc314)
- 99efb30 linter/eslint/prefer-promise-reject-errors: Move category to `pedantic` (#25201 ) (camc314)
- 8edad2a linter/eslint/require-await: Bound token lookup (#25199 ) (camc314)
- 5aaec85 linter/eslint/prefer-template: Bound token lookup (#25197 ) (camc314)
- 0ea1af4 linter/unicorn/new-for-builtins: Align Date() diagnostic message with upstream (#25166 ) (tanakalucky)
- f6c8575 linter/eslint/prefer-object-spread: Bound token lookup (#25195 ) (camc314)
- 20f68e7 oxlint,oxfmt: Respect `.gitignore` for walk targets and explicit paths (#25133 ) (leaysgur)
- b83993b linter/eslint/prefer-const: Bound token lookup (#25194 ) (camc314)
- aeabf63 linter/eslint/object-shorthand: Bound token lookups (#25193 ) (camc314)
- 48f302c linter/eslint/no-var: Bound token lookup (#25192 ) (camc314)
- 1f595de linter/eslint/no-unused-vars: Bound token lookups (#25191 ) (camc314)
- e52f4c4 linter/eslint/no-unexpected-multiline: Use bounded token lookup (#25190 ) (camc314)
- ca80338 linter/eslint/eqeqeq: Use bounded token lookup (#25189 ) (camc314)
- df91684 linter: Make the remaining token lookups comment-aware (#25182 ) (connorshea)
- 2401bb8 linter/eslint/prefer-const: Skip Svelte and Vue files (#25148 ) (Pitiș Radu)
- b870897 linter: Don't match tokens inside comments when locating spans (#25181 ) (connorshea)
- b474da1 linter/typescript/consistent-type-imports: Make token lookups comment-aware (#25180 ) (connorshea)
- 81f82db linter: Don't insert an ASI semicolon into an unbraced statement body (#25160 ) (Vladexy88x)
- 31333be linter/no-magic-array-flat-depth: Scan for `(` by byte offset instead of character count (#25130 ) (connorshea)
- 56e9c83 linter: Index source text by byte offset instead of char count (#25131 ) (connorshea)
- 5c0fa61 linter/eslint/no-warning-comments: Unify config structs and remove manual options docs (#25151 ) (Mikhail Baev)
- a922355 docs: Incorrect quotations in `role_supports_aria_props.rs` (#25077 ) (Maximilian Franzke)
- e8c4c05 linter/eslint/no-unreachable-loop: Handle caught errors correctly (#25071 ) (camc314)
- 2b02711 oxlint: Correct --warn flag help text (#25059 ) (Faris Tristan Fabian)
- 97f084f linter/eslint/no-control-regex: Allow null escape (#25070 ) (camc314)
### ⚡ Performance
- 224c21a linter/vue/no-side-effects-in-computed-properties: Borrow property names in the mutation walk (#25212 ) (connorshea)
- d36e9c9 linter/unicorn/prefer-export-from: Skip non-violating imports early (#25183 ) (connorshea)
- 6f2b933 linter/import/no-cycle: Drop two Vec allocations per graph edge (#25004 ) (Connor Shea)
- 79ddb18 linter/import/no-cycle: Skip the graph walk for acyclic modules (#25003 ) (Connor Shea)
### 📚 Documentation
- f8392cd linter/eslint/prefer-promise-reject-errors: Recommend type aware rule (#25241 ) (camc314)
- 9dc7756 linter/typescript/no-unnecessary-condition: Clarify options (#25110 ) (camc314)
# Oxfmt
### 💥 BREAKING CHANGES
- 067da8c ast: [**BREAKING**] Store single parameter in `TSIndexSignature::parameter` (#25154 ) (camc314)
- a0c7788 ast: [**BREAKING**] Change `TSIndexSignatureName::name` to `Ident` (#25150 ) (camc314)
- 1bdedd1 ast: [**BREAKING**] Introduce `ExportDeclaration`, `ExportFromDeclaration` (#25095 ) (camc314)
- c917f20 ast: [**BREAKING**] Introduce `ArrowFunctionBody` enum (#24987 ) (camc314)
- 0c16cb5 oxfmt: [**BREAKING**] Format parser:yaml files by oxc_formatter_yaml (#24890 ) (leaysgur)
### 🚀 Features
- 1b57f78 oxfmt: Support tsx-in-vue (#25063 ) (leaysgur)
- be7f6da oxfmt: Colorize diff file list in check mode (#25061 ) (leaysgur)
### 🐛 Bug Fixes
- 68146bd formatter_css: Preserve glued plugin words in grid values (#25225 ) (leaysgur)
- 20f68e7 oxlint,oxfmt: Respect `.gitignore` for walk targets and explicit paths (#25133 ) (leaysgur)
- a9e76e9 oxfmt: Rework tsx-in-vue support (#25106 ) (leaysgur)
- dd28596 formatter_css: Bump oxc-css-parser for substituted at-rule preludes (#25104 ) (leaysgur)
- ca1ba71 formatter: Hug arrows with type-reference return annotations (#25044 ) (Pitiș Radu)
- f56009a oxfmt: Correct prose about comment width in fits measurement (#25054 ) (leaysgur)
- 22fdda4 oxfmt/conformance: Fix typo (#25053 ) (leaysgur)
- ee344bd formatter_yaml: Break long keys off a block scalar header (#25014 ) (leaysgur)
- d5e3476 formatter_yaml: Let ancestor collection values claim end comments after block scalars (#24897 ) (leaysgur)
- ec05297 formatter_yaml: Align sequence container end comments to the dash width (#24891 ) (leaysgur)
- e6e584b oxfmt: Type jsdoc. enum options (#25008 ) (leaysgur)
### ⚡ Performance
- b91d5a8 formatter_css,formatter_graphql,formatter_yaml,formatter_json: Pre alloc IR buffers (#25234 ) (leaysgur)
### 📚 Documentation
- eaa7c69 formatter_core: Extract FORMATTER_POLICY (#25233 ) (leaysgur)
- a1842e2 formatter_json: Fix outdated separeted.rs comments (#25144 ) (leaysgur)
- 193e16f formatter/jsdoc: Correct `str_width` attribution (#25142 ) (leaysgur)
2026-08-03 11:15:35 +00:00
leaysgur
b91d5a8afe
perf(formatter_css,formatter_graphql,formatter_yaml,formatter_json): Pre alloc IR buffers ( #25234 )
...
As like `oxc_formatter`(js).
2026-08-03 06:26:00 +00:00
leaysgur
eaa7c692d2
docs(formatter_core): extract FORMATTER_POLICY ( #25233 )
2026-08-03 05:56:42 +00:00
leaysgur
9329862e3d
refactor(formatter_core): share comment cursor via SpanCursor ( #25228 )
...
Standardising the logic for adjusting comment positions using `Span`.
2026-08-03 02:49:00 +00:00
leaysgur
96a9744198
refactor(formatter_core): export apply_core_options for tests ( #25139 )
...
The same as #25138 , for fixture tests.
2026-07-31 08:11:23 +00:00
leaysgur
acfbf46767
refactor(formatter_core): add CoreFormatOptions and FormatOptions::apply_core ( #25138 )
...
These common, core format options:
- LineEnding
- LineWidth
- IndentWidth
- IndentStyle
should be defined in core, and to be shared.
2026-07-31 08:11:23 +00:00
leaysgur
7041ea70f1
refactor(formatter_css,formatter_graphql,formatter_yaml): move Gap utils to core ( #25137 )
...
CSS, GraphQL, YAML formatters had the same logic to inspect source blank lines.
2026-07-31 08:11:22 +00:00
oxc-guard
65fe65d842
release(apps): oxlint v1.76.0 && oxfmt v0.61.0 ( #24976 )
...
# Oxlint
### 🚀 Features
- 8d31dfa linter: Verify eslint/no-restricted-globals config schema (#24598 ) (vigneshwar)
- 7069621 linter: Verify jest/vitest prefer-lowercase-title config schema (#24724 ) (Bartok)
- 016cf2a linter/oxc: Add bad-match-all-arg rule (#24900 ) (camc314)
- cdc941e linter/n: Implement `exports-style` rule (#24087 ) (Mikhail Baev)
- 1ad6f6c linter/eslint: Implement `id-denylist` rule (#24632 ) (Mikhail Baev)
- 678bbb5 linter/typescript-eslint: Implement suggestion for `class-literal-property-style` rule (#24766 ) (Mikhail Baev)
### 🐛 Bug Fixes
- a5f3a0e linter: Mark missing suggestions as pending (#24956 ) (Mikhail Baev)
- a065946 oxlint: Absolutize explicit CLI paths even with --no-ignore (#24646 ) (Bez Sahara)
- 17688bb linter/jsx-a11y/interactive-supports-focus: Match eslint behavior for custom components (#24780 ) (Cole Ellison)
- 0aef19e linter/typescript/no-confusing-non-null-assertion: Report `in` and `instanceof` (#24825 ) (Mikhail Baev)
- 361dce9 linter: Unicorn/no-array-reverse and no-array-sort replacements should be suggestions (#24848 ) (klem)
- 9213560 config: Preserve defineConfig field JSDoc (#24326 ) (周星星同学)
- 334d884 linter/node/no-top-level-await: Clarify diagnostic (#24803 ) (camc314)
- b9fc6af linter/eslint/func-names: Ignore overloads (#24801 ) (camc314)
- e80574f estree: Handle empty spans serializing `ImportMeta` and `NewTarget` (#24775 ) (overlookmotel)
### ⚡ Performance
- c75dc60 linter: Avoid `Vec` allocations via `bound_names` (#24959 ) (connorshea)
- 9f9f39d linter/eslint/no-const-assign: Avoid `Vec` allocation per `const` declarator (#24953 ) (connorshea)
- 10a621e linter/typescript/adjacent-overload-signatures: Avoid collecting vec in some cases (#24874 ) (connorshea)
- ed167e1 linter/node/exports-style: Iterate once over global references (#24877 ) (connorshea)
- 69908fe linter: Avoid allocations in jest/no-deprecated-functions (#24866 ) (Connor Shea)
- a3585d7 linter: Speed up jest/vitest prefer-each (#24872 ) (Connor Shea)
- 62fe640 linter/eslint/prefer-rest-params: Run once per file (#24873 ) (Connor Shea)
- 7a7aa54 linter/eslint/no-this-before-super: Skip files without classes (#24869 ) (Connor Shea)
- 4ad0c94 linter/plugins: Faster copying comments to JS allocator (#24858 ) (overlookmotel)
- 4c25b91 linter/plugins: Test booleans with explicit `=== false` (#24830 ) (overlookmotel)
- b7add00 linter/plugins: Remove check in loop in `getDisableDirectives` (#24833 ) (overlookmotel)
### 📚 Documentation
- 3ff2e0e linter: Clarify config extends types (#24936 ) (Boshen)
# Oxfmt
### 🚀 Features
- eabfe01 oxfmt/lsp: Support `oxc.fmt.disableNestedConfig` (#24965 ) (leaysgur)
- 2357a10 formatter_yaml: Implement YAML formatter (#24534 ) (leaysgur)
### 🐛 Bug Fixes
- 761a882 formatter_css: Keep leading `+` in An+B to enable idempotency check (#24973 ) (leaysgur)
- e037709 formatter: Stop preserving indent for embedded template exprs (#24972 ) (leaysgur)
- ae1a39b formatter_css: Align wrapped selector-arg indent (#24971 ) (leaysgur)
- 143fd1f formatter: Align quoted `new` signature (#24883 ) (leaysgur)
- 07ff12f formatter_yaml: Fix indent, blank, and spacing issues (#24837 ) (leaysgur)
- d076b40 formatter: Check calee chain is_simple (#24871 ) (leaysgur)
- fb34196 formatter_css: Keep non-ASCII strings with quotes (#24870 ) (leaysgur)
- 9213560 config: Preserve defineConfig field JSDoc (#24326 ) (周星星同学)
- 31783e9 formatter_css: Print nested SCSS map with consistent indent (#24789 ) (leaysgur)
- 8eb9eca formatter/jsdoc: Respect `singleQuote` option in `@import` (#24787 ) (leaysgur)
- 6f05ac4 formatter: Fix template literal formatting (#24786 ) (leaysgur)
### ⚡ Performance
- bb73b23 formatter_core: Bound the thread-local scratch cache (#24793 ) (leaysgur)
- a5f7b15 formatter: Stage assignment-like left hand side on the heap (#24613 ) (leaysgur)
- 94de05f formatter: Accumulate JSX child-list builders on the heap (#24585 ) (leaysgur)
- 7810e8a formatter_core: Share one thread-cached scratch vector across staging buffers (#24583 ) (leaysgur)
- c191f51 formatter_core: Stage IR buffers on the heap to reduce arena memory (#24582 ) (leaysgur)
### 📚 Documentation
- 69126a0 formatter_css,fomatter_graphql,formatter_yaml: Update AGENTS.md (#24821 ) (leaysgur)
2026-07-27 15:17:12 +00:00
leaysgur
dbf85def42
refactor(formatter_graphql): rework comment printing ( #24970 )
...
Also fixes #24927
- rework comment printing to follow the rules and align with other formatters
- bump `oxc-graphql-parser`
- to track comments inside a node's span more accurately
2026-07-27 05:31:01 +00:00
leaysgur
9bf5c71ac7
refactor(formatter_core): introduce exact_line_breaks builder ( #24865 )
...
Introduce `exact_line_breaks(count)` IR builder.
This produces a line element that prints exactly `count` line breaks, exempt from the printer's hardline collapsing / empty-line capping.
Blank runs inside verbatim values (YAML block/flow scalars, GraphQL block strings) are the value itself and must not be normalized.
Previously this was emulated by emitting raw `\n` text followed by a re-arming `hard_line_break()`..., hack.
Also removed the printer behavior that trims end of line whitespaces.
2026-07-24 04:05:12 +00:00
leaysgur
69126a0413
docs(formatter_css,fomatter_graphql,formatter_yaml): update AGENTS.md ( #24821 )
2026-07-23 05:22:31 +00:00
oxc-guard[bot]
83abe3b49c
release(apps): oxlint v1.75.0 && oxfmt v0.60.0 ( #24713 )
...
# Oxlint
### 💥 BREAKING CHANGES
- 54cc121 ast: [**BREAKING**] Split `MetaProperty` into `ImportMeta` and
`NewTarget` (#24557 ) (camc314)
### 🚀 Features
- 7b045cd minfier: Drop last break from last switch case (#24673 )
(Armano)
- dd18383 linter/node: Implement no-top-level-await rule (#24634 )
(Connor Shea)
- 16a65f2 linter/react: Implement function-component-definition rule
(#24471 ) (Cole Ellison)
- 7f1f585 linter: Reuse `jest/padding-around-test-blocks` for
`vitest/padding-around-test-blocks` (#24519 ) (Mikhail Baev)
- 99978a8 linter/import/consistent-type-specifier-style: Support
`prefer-top-level-if-only-type-imports` option (#24502 ) (camc314)
### 🐛 Bug Fixes
- 0184ad6 linter/unicorn/no-useless-undefined: Preserve valid parameter
defaults (#24686 ) (camc314)
- 8694167 linter/eslint/prefer-destructuring: Handle typed declarations
(#24616 ) (camc314)
- 477cf0f linter/eslint/no-throw-literal: Handle assigned errors
(#24561 ) (Cole Ellison)
- ac9200a linter: Detect React components from returned JSX (#24521 )
(camc314)
- c0a6522 linter/eslint/no-useless-computed-key: Allow TS syntax in
computed keys (#24524 ) (Cole Ellison)
### ⚡ Performance
- 346eed1 linter/unicorn/prefer-event-target: Only run on `Class` and
`NewExpression` nodes (#24685 ) (Mikhail Baev)
- 7be5cf0 oxlint/lsp: Only invoke lint on code actions when document is
not opened (#24676 ) (Sysix)
- d3f07a0 diagnostics: Box OxcDiagnosticInner to reduce binary size
(#24665 ) (Boshen)
- 90ae040 linter/reporter/stylish: Compute diagnostic Info once per
diagnostic (#24525 ) (connorshea)
### 📚 Documentation
- e6f7174 linter/valid-expect: Fix correct example being identical to
incorrect one (#24468 ) (mkan0141)
# Oxfmt
### 💥 BREAKING CHANGES
- 54cc121 ast: [**BREAKING**] Split `MetaProperty` into `ImportMeta` and
`NewTarget` (#24557 ) (camc314)
### 🚀 Features
- 3d22307 parser: Add `ParseOptions::enable_ident_hashes` (#24491 )
(Boshen)
### 🐛 Bug Fixes
- 6fe866a oxfmt: Keep tailwind classes glued to template expr with
`preserveWhitespace` (#24609 ) (leaysgur)
- 33e32d8 formatter_css: Use `line_suffix` for EOL line comment (#24580 )
(leaysgur)
- 5f76998 formatter_graphql: Keep same line comments pending across
intervening tokens (#24579 ) (leaysgur)
Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com >
Co-authored-by: Cameron <cameron.clark@hey.com >
2026-07-21 16:10:25 +01:00
leaysgur
1e50a2d6a0
chore(formatter_graphql): fix comment ( #24581 )
...
Follow up previous PR: #24579
2026-07-16 01:51:36 +00:00
leaysgur
5f76998fe7
fix(formatter_graphql): keep same line comments pending across intervening tokens ( #24579 )
...
Ensure consistent behavior across all formatters.
Line comments at the EOL are not included in the calculation of `print-width`.
2026-07-16 01:37:30 +00:00
oxc-guard[bot]
2d4e8d2064
release(apps): oxlint v1.74.0 && oxfmt v0.59.0 ( #24454 )
...
# Oxlint
### 🚀 Features
- 0433a83 linter/eslint/no-inner-declarations: Add `namespaces` option
(#24044 ) (Boshen)
- 92f154a oxlint,oxfmt: Auto-discover `.mts` config files (#24357 )
(camc314)
- 8c1d74b linter/import/no-duplicates: Add autofix logic (#24273 ) (Cole
Ellison)
### 🐛 Bug Fixes
- 0b086de linter/jest/prefer-lowercase-title: False positive when
`lowercaseFirstCharacterOnly` is false (#24414 ) (Connor Shea)
- 097cb95 linter: Allow `vite-plus/test` and `@effect as Vitest source
(#24196 ) (Liang)
- 8337835 linter: Error on `ignorePatterns` that cannot match files
aoutside the config directory (#24341 ) (leaysgur)
- 9ba30e5 linter/oxc/bad-replace-all-arg: Add note to enhance diagnostic
(#24346 ) (camc314)
- 2ce5a33 linter: Resolve `ignorePatterns` relative to the config dir
(#24339 ) (leaysgur)
- ab90eed linter/eslint/no-loop-func: Do not error on catch variables
(#24316 ) (Chris Opperwall)
- b67f0a6 linter/eslint/no-unused-vars: Count default parameter updates
as usage (#24323 ) (camc314)
- d193f8e linter: Detect Junie agent env vars (#24277 ) (Jeevan Mohan
Pawar)
- 2aecf60 linter/eslint/no-unreachable: Handle `break` in switch stmts
correctly (#24260 ) (camc314)
### ⚡ Performance
- 7f80cac linter/vue/prop-name-casing: Precompile `ignoreProps` regex
pattern (#24413 ) (connorshea)
- 6272051 linter/typescript/no-require-imports: Compile allow patterns
once (#24417 ) (connorshea)
- fb1edf1 linter: Compute comment fix span only for directive comments
(#24419 ) (connorshea)
- 33805b9 linter/jsdoc/require-param: Compile checkTypesPattern regex
once (#24420 ) (connorshea)
- 8de6fca linter/jest/valid-title: Compile disallowedWords regex once
(#24412 ) (Connor Shea)
- 4a0d8dc linter/eslint/no-underscore-dangle: Avoid String clone per
identifier (#24371 ) (Ian Macalinao)
- f3ab04c linter/typescript/consistent-type-imports: Remove redundant
Vec per violation (#24370 ) (Ian Macalinao)
- 4d2d78d linter/typescript/prefer-ts-expect-error: Avoid String clone
per comment (#24369 ) (Ian Macalinao)
# Oxfmt
### 🚀 Features
- 3a7fe74 formatter_css: Update oxc-css-parser to 0.0.7 (#24434 )
(leaysgur)
- 0173cd3 formatter_css: Format Less :extend and merge props (#24358 )
(leaysgur)
- 92f154a oxlint,oxfmt: Auto-discover `.mts` config files (#24357 )
(camc314)
- df250df formatter: Support `quoteProps` for TS enum and methods
(#24309 ) (leaysgur)
- a9a5cd6 formatter_core: Expose `SourceText::as_str()` (#24281 )
(leaysgur)
### 🐛 Bug Fixes
- 162bddf formatter: Add required parens for conditional type in type
parameter constraint (#24450 ) (leaysgur)
- 2d22a91 formatter: Determine type cast target from span instead of
lexical scan (#24447 ) (leaysgur)
- 25306e9 formatter: Do not add extra parens with type cast comment
(#24444 ) (leaysgur)
- bd6edfe formatter: Break arrow signature that exactly fills the line
when cond body may hug (#24440 ) (leaysgur)
- a99ef41 formatter: Keep quotes on method signature named new (#24432 )
(leaysgur)
- fcc28df formatter_css: Keep glued-braket-value tight (#24352 )
(leaysgur)
- 8337835 linter: Error on `ignorePatterns` that cannot match files
aoutside the config directory (#24341 ) (leaysgur)
- b7c7e15 formatter: Add parens for import and private field in new
callee chain (#24320 ) (leaysgur)
- 0c8f6e4 formatter: Update detect_code_removal for #24309 (#24314 )
(leaysgur)
- a85aad0 formatter: Fix member-chain and non-null parens (#24312 )
(leaysgur)
- 1c29c73 formatter: Preserve `TSNonNullExpression` in chain expression
(#24311 ) (leaysgur)
- 8933c0e formatter: Keep comment inside of empty `switch` block
(#24308 ) (leaysgur)
- ec26af2 formatter: Preserve blank lines between JSX attrs (#24290 )
(leaysgur)
- 70bd54d formatter: Keep arrow function body comment (#24287 )
(leaysgur)
- 415fe1e oxfmt: Error on ignorePatterns that cannot match files outside
the config directory (#24286 ) (leaysgur)
- eeabc4a formatter_css: Bail on EOF-recovered parse errors (#24282 )
(leaysgur)
- 42ec8de formatter: Keep comments inside surviving parens and
suppressed statement terminators (#24253 ) (leaysgur)
- 1343779 formatter: Keep comment inline for empty statements (#24249 )
(leaysgur)
- b996579 formatter: Print ; before trailing comments part 2 (#24246 )
(leaysgur)
- 4f86e8c formatter: Print `;` before trailing comments (#24244 )
(leaysgur)
- 01252e4 formatter: Add or remove parens for `let` declaration (#24215 )
(leaysgur)
### ⚡ Performance
- eeb1913 formatter_core: Avoid per-call `Vec` work-stack in soft-line
removal (#23775 ) (Marius Schulz)
- a2f255b formatter: Use `SmallVec` for `MemberChain` collections
(#23776 ) (Marius Schulz)
### 📚 Documentation
- b52d0f5 formatter: Add TODO comment about unsound code (#24372 )
(overlookmotel)
Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com >
2026-07-14 15:02:14 +08:00
oxc-guard[bot]
39677ba50d
release(apps): oxlint v1.73.0 && oxfmt v0.58.0 ( #24219 )
...
# Oxlint
### 🚀 Features
- 7db7a29 allocator: Add `ReplaceWith` trait (#24012 ) (overlookmotel)
- a2c97f3 linter/unicorn: Implement `explicit-timer-delay` rule (#23612 )
(Mikhail Baev)
- 85735cb linter/unicorn: Implement `no-confusing-array-with` rule
(#23638 ) (Shekhu☺️ )
- cb4fbb9 linter/eslint: Implement no-unreachable-loop rule (#23975 )
(Todor Andonov)
- dc32112 linter/eslint/no-constant-binary-expression: Check relational
comparisons (#24088 ) (camc314)
- 439c344 linter/jsdoc: Added missing options to `jsdoc/require-param`
rule (#23364 ) (kapobajza)
- 62af717 linter/unicorn/filename-case: Add `lowercase` and
`screamingSnakeCase` (#24045 ) (Boshen)
- d963967 linter/unicorn/no-array-sort: Add `allowAfterSpread` option
(#24043 ) (Boshen)
- 0a75682 linter: Add per-rule timings for type-aware linting (#22488 )
(camchenry)
- 743e222 linter/react: Add `disallowedValues` option for
`forbid-dom-props` rule (#23970 ) (Mikhail Baev)
### 🐛 Bug Fixes
- 7b80010 linter: Use direct binding symbol ids (#24216 ) (camc314)
- 8f94b49 linter/import/no-duplicates: Don't flag a type-only import
beside a side-effect import (#24030 ) (Boshen)
- d8c3fee linter/react/rules-of-hooks: Flag `useEffectEvent` escapes
(#23764 ) (Rayan Salhab)
- 0a7312b linter/no-deprecated-functions: Map `require.requireActual` to
`jest.requireActual` (#23627 ) (Jerry Zhao)
- d9e3ab3 linter/eslint/no-useless-return: Handle switch case
continuation (#23984 ) (camc314)
- 0b25582 ast: Type binding node `typeAnnotation` as `TSTypeAnnotation |
null` (#23113 ) (Boshen)
- 122d112 linter/eslint/no-restricted-imports: Flag dynamic import()
expressions (#24029 ) (Boshen)
- 59b6b83 linter: Avoid `OnceLock` re-entry on cyclic `export *`
re-exports (#23632 ) (Jerry Zhao)
- dd09af0 linter/import/namespace: Avoid panic on destructuring of an
unresolvable namespace re-export (#23626 ) (Jerry Zhao)
- bdb51c7 linter/jest/prefer-ending-with-an-expect: Validate config
patterns (#24122 ) (camc314)
- e383843 linter/unicorn/prefer-modern-dom-apis: Skip fixer for non
identifier arguments (#23630 ) (Jerry Zhao)
- 0ac4c83 linter: Detect circular config extends (#24115 ) (camc314)
- bae1edf linter/import/namespace: Check namespace imports after named
imports (#24094 ) (camc314)
- cd8fdfe linter/eslint/no-eval: Recognize Array.from family thisArg
(#24091 ) (camc314)
- 851ee43 linter/eslint/no-eval: Resolve this binding for functions
returned from an IIFE (#23643 ) (Jerry Zhao)
- 002ab35 linter/unicorn: Avoid prefer-array-find rest destructuring
false positive (#23654 ) (ColemanDunn)
- 01c8775 linter/unicorn/filename-case: Keep digits attached in
screamingSnakeCase (#24056 ) (Boshen)
- f256941 linter: Recognize `@effect/vitest` as a vitest import source
(#24025 ) (Boshen)
- 73eeb1d linter/import/extensions: Honor per-extension `never` for
explicit extensions (#24031 ) (Boshen)
- d4ebe1f linter: Reject non-object oxlint config files (#24026 )
(Boshen)
- 45d607d linter/react/forbid-component-props: Make allow/disallow lists
optional in schema (#24024 ) (Boshen)
- 54076ad linter/unicorn/no-array-for-each: Suggest entries loop for
index callbacks (#24004 ) (camc314)
- d057736 linter/jsdoc: Avoid param root underflow (#23945 ) (camc314)
- 29c76bf linter/unicorn/prefer-at: Skip object numeric-key access
(#23909 ) (Gaurav Dubey)
### ⚡ Performance
- 657a8fc linter/oxc/bad-array-method-on-arguments: Only run on member
expressions instead of all identifiers (#24164 ) (camchenry)
- 073d9e7 linter/eslint/prefer-rest-params: Run on functions instead of
all identifiers (#24163 ) (camchenry)
- e5a4162 linter/jest/no-confusing-set-timeout: Early exit fast path
(#24092 ) (camc314)
- bca7ce5 linter: Only run react-perf rules on JSX attribute nodes
(#24083 ) (camchenry)
- 6881bf6 linter: Compute `apply_overrides` rule set lazily (#23648 )
(Jerry Zhao)
- 911c106 linter/eslint/no-obj-calls: Use resolved reference instead of
scope walk (#23895 ) (Marius Schulz)
- dc8fd9a linter/unicorn/prefer-dom-node-text-content: Change dispatch
to run only on less common node types (#23897 ) (Connor Shea)
- fdbd34d linter/eslint/no-useless-call: Fast-path static callees
(#24077 ) (camc314)
- b1be114 linter/import/extensions: Skip empty config and borrow
extensions (#24075 ) (camc314)
- 4781b2d linter/eslint/no-obj-calls: Use direct global matches (#24076 )
(camc314)
- e6cee89 linter: Avoid node-chain allocation for non-Jest calls
(#23907 ) (Yagiz Nizipli)
- 30dc517 linter/typescript/no-restricted-types: O(1) banned-type
lookups (#23827 ) (Yagiz Nizipli)
### 📚 Documentation
- 6ca9125 linter/typescript: Clarify consistent-type-imports behavior
(#23972 ) (camc314)
# Oxfmt
### 🚀 Features
- 4f4313e formatter_css: Update oxc-css-parser 0.0.5 (#24120 ) (leaysgur)
- 0ccd8a1 formatter_graphql: Update oxc-graphql-parser 0.0.5 (#24106 )
(leaysgur)
- 89ec3d9 formatter_core: Add literal line and root indention primitives
(#24051 ) (leaysgur)
- 213a96b formatter_core: Add no-expand-parent for multiline text
(#24050 ) (leaysgur)
- 0e5bcc9 formatter_graphql: Update oxc-graphql-parser 0.0.4 (#24039 )
(leaysgur)
- e0b35a1 formatter_css: Update `oxc-css-parser@0.0.3` (#23974 )
(leaysgur)
### 🐛 Bug Fixes
- 1fe6546 formatter: Omit unneeded `;` for type members with `no-semi`
(#24212 ) (leaysgur)
- 0ad7316 formatter: Print space for `ForStatement`.`update` only if
exists (#24211 ) (leaysgur)
- 3abbed5 formatter: Print `;` before jsdoc type-cast parens with
no-semi (#24208 ) (leaysgur)
- 9af3833 formatter_css: Make scss formatter consistent (#24207 )
(leaysgur)
- 46d7194 formatter_css: Use fill IR for `@forward` members (#24206 )
(leaysgur)
- e31038f formatter_css: Keep comment inside sass config list (#24205 )
(leaysgur)
- d3b9591 formatter: Add parens around `await/yield` with `<T>` (#24202 )
(leaysgur)
- 2121a55 oxfmt: Reuse tinypool process during the same LSP process
(#24197 ) (leaysgur)
- 9bf4b4a formatter_css: Align CSS output to Prettier 3.9.1 (#24100 )
(leaysgur)
- cd2452e formatter_css: Align SCSS output to Prettier 3.9.1 (#24097 )
(leaysgur)
- 4ee8745 formatter_css: Keep selector value contain line-break without
breaking line (#24055 ) (leaysgur)
- e1ece97 formatter_graphql: Break `implements` list by print-width
(#23997 ) (leaysgur)
- 0a6b16c formatter_json: Preserve key and literal value for
json-stringify (#23996 ) (leaysgur)
- 903ab6e formatter_css: Preserve newlines in css-in-js selector list
(#23992 ) (leaysgur)
- ea5d095 oxfmt: Update `--migrate prettier` (#23963 ) (leaysgur)
### ⚡ Performance
- 468e1e3 formatter_core: Make printer queues cursor-based (#24098 )
(Boshen)
- c59f2fe rust: Return impl ExactSizeIterator from slice-backed
accessors (#24144 ) (Boshen)
- c292fb2 formatter: Inline fits element dispatcher (#23982 ) (camc314)
Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com >
2026-07-06 23:26:00 +08:00
leaysgur
0ccd8a14b7
feat(formatter_graphql): update oxc-graphql-parser 0.0.5 ( #24106 )
...
Part of #23923
Supports more syntax like:
- Fragment arguments
- Extends directives
2026-07-03 10:11:20 +00:00
leaysgur
e1ece97823
fix(formatter_graphql): break implements list by print-width ( #23997 )
...
Part of #23923
Now `implements` long list are broken on print-width.
```gql
type LongNoDirective implements Node &
RequirableByPullRequest &
UniformResourceLocatable &
ExtraLongInterface {
id: ID!
}
```
2026-07-03 07:22:01 +00:00
leaysgur
0e5bcc9a8e
feat(formatter_graphql): update oxc-graphql-parser 0.0.4 ( #24039 )
...
Updated from 0.0.1 -> 0.0.4.
As part of the process of improving performance, all CST were rewritten as AST.
Whilst this involved a major rewrite for the formatter, it had no impact on the user side.
2026-07-02 04:52:35 +00:00
oxc-guard[bot]
5306f24d9e
release(apps): oxlint v1.72.0 && oxfmt v0.57.0 ( #23935 )
...
# Oxlint
### 💥 BREAKING CHANGES
- 88f4455 str: [**BREAKING**] `Str` and `Ident` methods take
`&GetAllocator` (#23781 ) (overlookmotel)
### 🚀 Features
- f2091b3 ast: Unify old and new `AstBuilder`s (#23875 ) (overlookmotel)
- 1c8f50c linter: Add schema for `eslint/no-restricted-import` (#23642 )
(Sysix)
### 🐛 Bug Fixes
- 7cb85c4 linter/eslint/no-negated-condition: Add autofix for negated
conditions (#23825 ) (Yagiz Nizipli)
- f7d1f50 oxlint, oxfmt: Enable `disable_old_builder` Cargo feature for
`oxc_ast` crate (#23886 ) (overlookmotel)
- d891990 linter/jsx-a11y/role-supports-aria-props: Ignore nullish prop
values (#23865 ) (Mikhail Baev)
- 94b6599 linter: Deduplicate missing plugin errors (#23853 ) (camc314)
- eff3eff linter/oxc/branches-sharing-code: Avoid else-if false
positives (#23843 ) (camc314)
- 2a2d3b9 linter/eslint/prefer-destructuring: Skip
`AssignmentExpression` autofixes (#23818 ) (camc314)
- ddc24ae linter/eslint/id-length: Respect checkGeneric for mapped type
keys (#23802 ) (bab)
- cd89202 linter/react/exhaustive-deps: Skip wrapper expression when
analyzing hook initializers (#23793 ) (camc314)
- 20e8285 linter/unicorn/prefer-native-coercion-function: Allow ts type
predicates (#23774 ) (camc314)
- d86f60b lsp: Normalize user config path to watch pattern (#23723 )
(Sysix)
- 52032cf linter: Newline-terminate tsgolint errors (#23762 ) (Mikhail
Baev)
- 368fda7 linter/eslint/no-warning-comments: Avoid dropping generated
regex patterns (#23741 ) (camc314)
- ce44fbd linter/valid-title: Escape disallowed words regex (#23742 )
(camc314)
- 3100d11 linter/prefer-called-exactly-once-with: Avoid out-of-bounds
slice panic at end of file (#23625 ) (Jerry Zhao)
- 742be36 refactor/node/handle-callback-err: Reject invalid regex config
(#23740 ) (camc314)
- d7be179 linter/eslint/no-restricted-globals: Handle shadowed locals
(#23736 ) (camc314)
- b3b1ff8 linter/vitest/expect-expect: Handle global vitest detection
correctly (#23734 ) (camc314)
### ⚡ Performance
- 68f9472 linter/jsx-a11y: Skip lowercasing non-aria attribute names
(#23906 ) (Lawrence Lin)
- b9312b4 linter/unicorn/prefer-export-from: Use keyed binding lookup
(#23893 ) (Marius Schulz)
- cd5204e linter/typescript/no-unsafe-declaration-merging: Use keyed
binding lookup (#23894 ) (Marius Schulz)
- e948498 linter/eslint/prefer-named-capture-group: Only dispatch for
relevant node types (#23868 ) (Connor Shea)
- 4ac7a8e linter/eslint/max-depth: Derive node types (#23896 ) (Connor
Shea)
- daeed09 linter/eslint/no-restricted-globals: Only scan unresolved
references (#23890 ) (camc314)
- e808514 linter/jest-vitest: Speed up no-standalone-expect (#23883 )
(camc314)
- 8b165e5 linter/react/exhaustive-deps: Skip non-reactive calls early
(#23882 ) (camc314)
- 54005e7 linter/eslint/no-unused-vars: Precompute exported bindings
(#23881 ) (camc314)
- 9bc2f8c linter/unicorn/prefer-number-properties: Speed up global
checks (#23880 ) (camc314)
- 4ff104f linter: Optimize `require-hook` and `prefer-mock-*` rules to
run on specific node types (#23871 ) (Connor Shea)
- cc2213b linter: Run `no-underscore-dangle` only when relevant node
types are present (#23867 ) (Connor Shea)
- 3e55c21 linter/promise/always-return: Narrow to function node types
(#23878 ) (Connor Shea)
- 7136182 linter/jest-vitest: Speed up no-commented-out-tests (#23864 )
(camc314)
- f138264 linter/eslint/no-script-url: Match javascript: prefix without
allocating (#23861 ) (Lawrence Lin)
- 7ef6895 linter/react/no-array-index-key: Delay index symbol lookup
(#23857 ) (camc314)
- 26bc171 linter/react/no-array-index-key: Match callback methods
directly (#23856 ) (camc314)
- 44fbbda linter/jsx-a11y/interactive-supports-focus: Check cheap
conditions first (#23854 ) (camc314)
- 84a5aa3 linter/eslint/no-extend-native: Skip lowercase references
early (#23851 ) (camc314)
- 88a74b2 linter/eslint/no-nonoctal-decimal-escape: Scan decimal escapes
as bytes (#23850 ) (camc314)
- fca69a8 linter: Skip traversal without this expressions (#23845 )
(camc314)
- 838fd63 linter: Reduce preallocation for per-file diagnostics `Vec`
(#23705 ) (Marius Schulz)
- 417b506 linter/typescript/array-type: Remove full source text clone
(#23751 ) (Marius Schulz)
### 📚 Documentation
- 57e4469 linter/unicorn: Update prefer-dom-node-text-content rationale
(#23933 ) (Mikhail Baev)
- 3d61dea all: Correct capitalization in comments (#23887 )
(overlookmotel)
### 🛡️ Security
- 3cdd18f deps: Update npm packages (#23690 ) (renovate[bot])
# Oxfmt
### 💥 BREAKING CHANGES
- 259e0cd oxfmt,formatter_graphql: [**BREAKING**] Support draft syntax
with removing prettier fallback (#23326 ) (leaysgur)
- accbc49 oxfmt: [**BREAKING**] Format `parser:css,less,scss` files +
css-in-js by `oxc_formatter_css` (#23321 ) (leaysgur)
### 🚀 Features
- dffa4b3 formatter_css: Implement `oxc_formatter_css` (#23320 )
(leaysgur)
- 01de9ec oxfmt: Format `parser:graphql` files by
`oxc_formatter_graphql` (#23318 ) (leaysgur)
- 4e66212 formatter_graphql: Implement oxc_formatter_graphql (#23317 )
(leaysgur)
### 🐛 Bug Fixes
- 67325ae formatter_css: Handle frontmatter language (#23819 ) (leaysgur)
- 3f355e5 formatter_graphql: Improve major prettier diffs (#23419 )
(leaysgur)
- 48e2d78 formatter_css: Improve major prettier diffs (#23327 )
(leaysgur)
- 8c07cad all: Enable `disable_old_builder` Cargo feature for `oxc_ast`
crate in tests (#23888 ) (overlookmotel)
- f7d1f50 oxlint, oxfmt: Enable `disable_old_builder` Cargo feature for
`oxc_ast` crate (#23886 ) (overlookmotel)
- d86f60b lsp: Normalize user config path to watch pattern (#23723 )
(Sysix)
### ⚡ Performance
- 4ddcba0 formatter_core: Add printable-ASCII fast path to TextWidth
(#23913 ) (Lawrence Lin)
### 📚 Documentation
- b4d0dc9 oxfmt,formatter,formatter_css,formatter_core: Update AGENTS.md
(#23814 ) (leaysgur)
Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com >
Co-authored-by: Cameron <cameron.clark@hey.com >
2026-06-29 20:11:12 +01:00
leaysgur
2dc451ca8b
chore(formatter_graphql): use oxc-graphql-parser ( #23919 )
2026-06-29 04:15:34 +00:00
leaysgur
cc8db2b11c
refactor(formatter_graphql): fix up code and comments ( #23488 )
...
Finally fixed up Fable's work.
2026-06-29 03:15:27 +00:00
leaysgur
3f355e5c22
fix(formatter_graphql): improve major prettier diffs ( #23419 )
...
Fixed some minor formatting diffs by checking real world repo.
2026-06-29 03:15:26 +00:00
leaysgur
259e0cdf60
feat(oxfmt,formatter_graphql)!: support draft syntax with removing prettier fallback ( #23326 )
...
- Fork `apollo-rs` to be compatible with Prettier(`latest` for now)
- https://github.com/leaysgur/apollo-rs
- By doing this, Prettier fallback is no longer needed
- And now all prettier_conformance are passed, no parse error skip
> [!WARNING]
> TODO: Move fork under `oxc-project` org and replace refs
2026-06-29 03:15:25 +00:00
leaysgur
72a5d0887a
refactor(oxfmt): use unified embedded ir results ( #23325 )
...
- Add `EmbeddedIr` struct in `oxc_formatter_core`
- Each `format_to_ir` implementation returns this as unified result
2026-06-29 03:15:25 +00:00
leaysgur
a7fd35e7df
refactor(oxfmt): handle gql-in-js by oxc_formatter_graphql ( #23319 )
...
- To use `oxc_formatter_graphql` in gql-in-js context, ground level refactoring was needed
- Extracted common logic for handling embeddings into `oxc_formatter_core`
- Updated other `xxx-in-js` callers to reflect these changes
- Added a `format_to_ir()` method to each formatter in addition to the existing `format()` method
2026-06-29 02:55:31 +00:00
leaysgur
4e66212c28
feat(formatter_graphql): implement oxc_formatter_graphql ( #23317 )
...
- Implement `oxc_formatter_graphql` crate
- Use `apollo-parser` crate from `apollo-rs`
- https://github.com/apollographql/apollo-rs
- Which follows Oct2021 spec
- Prettier uses `graphql-js` and implements more and more syntax
- v16 for `latest = 3.8.4` and v17 for `main = 3.9.x`
NOTE: So at the point of this PR, diffs can be seen as skipped in prettier_conformance.
Will be addressed in later PR by forking `apollo-parser`.
2026-06-29 02:38:28 +00:00