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
5c0a5ff7bf
fix(formatter_css): fill own-line block comments inside space-separated values ( #25578 )
...
Fixed idempotency issue.
Block comment is a normal fill item in values.
2026-08-13 07:45:25 +00:00
leaysgur
53debfa10e
fix(formatter_css): keep trailing comma and indent after comment-preceded last map value ( #25577 )
...
Fixed idempotency issue.
```scss
$with-comment_n_comma: (
a: (
x: 1,
),
/* This comment should not affect trailing comma, indent depth */
b: (
x: 2,
),
);
```
2026-08-13 07:45:25 +00:00
leaysgur
40d38a0813
fix(formatter_css): keep multi value function args intact after leading comment ( #25518 )
...
Fixes #25480
2026-08-12 05:36:15 +00:00
leaysgur
4544183058
test(formatter_tests,formatter,formatter_css): always track idempotency violations in snapshots ( #25512 )
...
Trackable easier than before.
2026-08-12 02:25:55 +00:00
leaysgur
b63e88a0b4
test(formatter_css): pin more known divergence ( #25479 )
...
Found cases that had been discarded due to runner bugs before.
2026-08-12 00:48:33 +00: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
leaysgur
b37b9f05b6
refactor(formatter_core): rename DispatchXxx ( #25436 )
...
Pure renaming.
- `DispatchOutcome` -> `DispatchResponse` (counter part of `DispatchRequest`)
- `DispatchResult` -> `DispatchPayload` (lives in `DispatchResponse`)
2026-08-09 15:07:42 +00:00
leaysgur
4ae3abbd22
refactor(formatter_core): share frontmatter writer in core ( #25433 )
...
FM support will be needed by Markdown formatting too.
2026-08-09 15:07:41 +00:00
leaysgur
d9749a747d
refactor(formatter_core,formatter): enforce finalize-once behind the print ( #25425 )
...
Follow the rule, #25328 .
2026-08-09 14:59:36 +00:00
leaysgur
8213e72f37
refactor(formatter,oxfmt): flatten embedded dispatch contract ( #25391 )
...
Due to historical reasons, the IR was passed as `[Doc, (Doc, ...Doc)]` only when processing `gql-in-js`, whilst for other cases such as `css-in-js` and `html-in-js`, it was always `[Doc]`.
Now, every result is single `Doc`.
2026-08-09 14:32:11 +00:00
leaysgur
465b723d04
refactor(formatter,oxfmt): unify host services as SessionServices on FormatSession ( #25388 )
...
- dispatcher
- string_embedder
- tailwind_sorter
Group these 3 together as `SessionServices`, make them available to `FormatSession`, and pass them around.
2026-08-09 14:32:10 +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
fd02a8956e
feat(oxfmt): dispatch yaml-in-css(frontmatter) to oxc_formatter_yaml ( #25336 )
...
Using the `Dispatcher` set up so far, detect the YAML front matter and process it using `oxc_formatter_yaml`.
2026-08-09 14:15:05 +00:00
leaysgur
567089f3c5
refactor(oxfmt): route JSDoc fence through the dispatcher ( #25334 )
...
Markdown code fences can also be written in JSDoc, and other languages can be formatted as inline code within them.
2026-08-09 13:54:12 +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
leaysgur
e23dccf338
fix(formatter_css): bump oxc-css-parser to accept unknown at-rule with interpolated ( #25277 )
...
Fixes #25272
2026-08-04 06:39:46 +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
8c2ed1a04f
test(formatter_css): add grid arg re-wrap fixture ( #25229 )
...
Follow up #25226
2026-08-03 02:49:01 +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
68146bd3b9
fix(formatter_css): preserve glued plugin words in grid values ( #25225 )
...
Fixes #25223
2026-08-03 02:00: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
leaysgur
dd28596d0a
fix(formatter_css): bump oxc-css-parser for substituted at-rule preludes ( #25104 )
...
Fixes #25075
2026-07-30 03:28:44 +00:00
leaysgur
f56009a676
fix(oxfmt): correct prose about comment width in fits measurement ( #25054 )
...
Audited every formatter crate against the trailing-comment width discipline.
- same-line trailing line comments ride `line_suffix` and are excluded from the fits measurement
- while trailing block comments print inline and count
Corrected the prose that misstated it.
2026-07-29 02:57:17 +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
69450f4012
refactor(formatter_css): use cow_to_ascii_lowercase in normalize_an_plus_b ( #24974 )
2026-07-27 09:14:31 +00:00
leaysgur
761a882a49
fix(formatter_css): keep leading + in An+B to enable idempotency check ( #24973 )
...
Keep `:nth-child(+3n + 1)` as-is, NOT `:nth(+ 3n + 1)` which is not allowed.
2026-07-27 09:07:31 +00:00
leaysgur
ae1a39b71c
fix(formatter_css): align wrapped selector-arg indent ( #24971 )
...
Fixes #24843
---
Tracing back to the root cause, this is also related to what had diverged because of Prettier's inconsistent behavior.
Since I cannot determine for sure how it should be output in more complex cases (like that issue) at this point, decided to revert to being Prettier-compatible.
2026-07-27 06:47:19 +00:00
leaysgur
f5bfec5014
chore(oxfmt): update prettier to 3.9.6 ( #24880 )
...
https://github.com/prettier/prettier/blob/3.9.6/CHANGELOG.md#396
2026-07-24 05:39:15 +00:00
leaysgur
fb34196ec7
fix(formatter_css): keep non-ASCII strings with quotes ( #24870 )
...
Fixes #24841
2026-07-24 02:13:21 +00:00
leaysgur
69126a0413
docs(formatter_css,fomatter_graphql,formatter_yaml): update AGENTS.md ( #24821 )
2026-07-23 05:22:31 +00:00
leaysgur
cb9655da3e
test(formatter_core): assert fixture idempotency in test harness ( #24819 )
...
Automatically test idempotency with fixture tests.
Currently, JS and CSS formatter have the issue, will fix later to enable.
2026-07-23 04:51:26 +00:00
leaysgur
31783e997c
fix(formatter_css): print nested SCSS map with consistent indent ( #24789 )
...
Fixes #24773
2026-07-22 01:58:53 +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
fd7cf5b500
fix(formatter_css): update oxc-css-parser to 0.0.9 ( #24745 )
...
Fixes #24726
2026-07-21 04:52:30 +00:00
leaysgur
c399367877
fix(formatter_css): update oxc-css-parser to 0.0.8 ( #24725 )
...
This also fixes #24723
2026-07-20 13:37:52 +00:00
leaysgur
33e32d8e51
fix(formatter_css): use line_suffix for EOL line comment ( #24580 )
...
The same motivation as #24579
2026-07-16 01:37:31 +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
leaysgur
3b7fb916ee
docs(formatter_css): update AGENTS.md and examples ( #24488 )
...
Use `printWidth: 80` for examples.
2026-07-14 06:28:50 +00:00
leaysgur
95262b9d94
fix(formatter_css): keep more value comments before comma ( #24487 )
...
Follow up on #24484 .
Apply the same rule for all call sites.
2026-07-14 06:28:50 +00:00
leaysgur
cd53d98460
fix(formatter_css): keep value comments before comma ( #24484 )
...
Fixes #24469
This keeps comments before/after `,` stay the same position.
2026-07-14 06:28:49 +00:00