Skip to content

feat(ast, codegen, formatter): add WithClauseKeyword::as_str helper and use it#22791

Merged
graphite-app[bot] merged 1 commit into
mainfrom
codex/with-clause-keyword-as-str
May 28, 2026
Merged

feat(ast, codegen, formatter): add WithClauseKeyword::as_str helper and use it#22791
graphite-app[bot] merged 1 commit into
mainfrom
codex/with-clause-keyword-as-str

Conversation

@camc314

@camc314 camc314 commented May 28, 2026

Copy link
Copy Markdown
Contributor

The following is duplicated across codegen, formatter (and potentially linter in future):

match self {
    Self::With => "with",
    Self::Assert => "assert",
}

This PR adds WithClauseKeyword::as_str method to centralize stringifying this attribute.

as_str aligns with the other helpers such as VariableDeclarationKind::as_str(), ImportPhase::as_str(), TSAccessibility::as_str(), and TSModuleDeclarationKind::as_str(). Operators in oxc_syntax also have the same as_str methods.

@camc314 camc314 self-assigned this May 28, 2026
@github-actions github-actions Bot added A-ast Area - AST A-codegen Area - Code Generation A-formatter Area - Formatter labels May 28, 2026
@camc314 camc314 changed the title refactor(ast): add WithClauseKeyword as_str feat(ast): add WithClauseKeyword::as_str helper May 28, 2026
@camc314 camc314 assigned overlookmotel, leaysgur and Dunqing and unassigned camc314 May 28, 2026
@camc314 camc314 marked this pull request as ready for review May 28, 2026 10:43
Copilot AI review requested due to automatic review settings May 28, 2026 10:43
@camc314 camc314 requested review from Dunqing and leaysgur as code owners May 28, 2026 10:43

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR centralizes stringification of WithClauseKeyword by introducing WithClauseKeyword::as_str, removing duplicated match logic across code generation and formatting.

Changes:

  • Add WithClauseKeyword::as_str() helper in oxc_ast.
  • Update formatter output for WithClause to use keyword().as_str().
  • Update codegen output for WithClause to use keyword.as_str().

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.

File Description
crates/oxc_ast/src/ast_impl/js.rs Adds WithClauseKeyword::as_str() to provide a single source of truth for keyword stringification.
crates/oxc_formatter/src/print/import_declaration.rs Replaces duplicated keyword match with self.keyword().as_str() when printing WithClause.
crates/oxc_codegen/src/gen.rs Replaces duplicated keyword match with self.keyword.as_str() when generating WithClause.

@codspeed-hq

codspeed-hq Bot commented May 28, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 57 untouched benchmarks


Comparing codex/with-clause-keyword-as-str (1efc16c) with main (27268a0)

Open in CodSpeed

@Dunqing Dunqing changed the title feat(ast): add WithClauseKeyword::as_str helper feat(ast, codegen, formatter): add WithClauseKeyword::as_str helper and use it May 28, 2026
@Dunqing Dunqing added the 0-merge Merge with Graphite Merge Queue label May 28, 2026

Dunqing commented May 28, 2026

Copy link
Copy Markdown
Member

Merge activity

… and use it (#22791)

The following is duplicated across codegen, formatter (and potentially linter in future):

```rust
match self {
    Self::With => "with",
    Self::Assert => "assert",
}
```

This PR adds `WithClauseKeyword::as_str` method to centralize stringifying this attribute.

`as_str` aligns with the other helpers such as  `VariableDeclarationKind::as_str()`, `ImportPhase::as_str()`, `TSAccessibility::as_str()`, and `TSModuleDeclarationKind::as_str()`. Operators in `oxc_syntax` also have the same `as_str` methods.
@graphite-app graphite-app Bot force-pushed the codex/with-clause-keyword-as-str branch from 1efc16c to 9c71f2e Compare May 28, 2026 14:21
@graphite-app graphite-app Bot merged commit 9c71f2e into main May 28, 2026
29 checks passed
@graphite-app graphite-app Bot removed the 0-merge Merge with Graphite Merge Queue label May 28, 2026
@graphite-app graphite-app Bot deleted the codex/with-clause-keyword-as-str branch May 28, 2026 14:26
camc314 pushed a commit that referenced this pull request Jun 1, 2026
### 🚀 Features

- 9c71f2e ast, codegen, formatter: Add `WithClauseKeyword::as_str`
helper and use it (#22791) (camc314)

### 🐛 Bug Fixes

- cf5769c parser: Reject TypeScript declarations in single-statement
context (#22827) (Boshen)
- c360fb6 parser: Reject generators in ambient contexts and overload
signatures (TS1221/TS1222) (#22848) (Boshen)
- cc60d8d parser: Reject invalid index signature parameter types
(TS1268/TS1337) (#22852) (Boshen)
- 3d13e29 parser: Reject `declare` in an already-ambient context
(TS1038) (#22850) (Boshen)
- 5152854 parser: Reject statements in ambient contexts (TS1036)
(#22849) (Boshen)
- 4f9afc5 parser: Reject `export as namespace` inside a namespace body
(TS1316) (#22846) (Boshen)
- 2eafea6 parser: Reject function implementations in ambient contexts
(TS1183) (#22845) (Boshen)
- c645615 parser: Reject incompatible class member modifiers (#22843)
(Boshen)
- 276b78b parser: Reject module-referencing imports/exports in a
namespace body (#22836) (Boshen)
- 842ed1c parser: Parse `class implements` with `implements` as the
class name (#22801) (Boshen)

### ⚡ Performance

- 7e3a567 parser: Reuse cached token kind in delimited-list loops
(#22841) (Boshen)
- 9e741c2 parser: Use peek_token instead of lookahead on the modifier
path (#22842) (Boshen)
- 9e496a7 semantic: Defer declare lookup for empty accessors (#22810)
(camc314)
camc314 pushed a commit that referenced this pull request Jun 1, 2026
# Oxlint
### 🚀 Features

- e4b1f46 linter/typescript: Implement `method-signature-style` rule
(#22679) (Mikhail Baev)
- bc462ca linter/vue: Implement no-reserved-component-names rule
(#22741) (bab)
- ef9e751 linter/vue: Implement component-definition-name-casing rule
(#22818) (bab)
- d67f51a linter/vue: Implement require-prop-type-constructor rule
(#22708) (bab)
- 1444f82 linter/promise/spec-only: Add `Promise.try` to `Promise`
static methods (#22812) (Ben Saufley)
- 8422e8b linter/jsdoc: Implement `require-yields-description` rule
(#22805) (Mikhail Baev)
- fe93f97 linter/eslint: Implement `prefer-named-capture-group` rule
(#22759) (Sebastian Poxhofer)
- 1a7798b linter: Add suggestion for `unicorn/no-new-array` (#22682)
(Sysix)

### 🐛 Bug Fixes

- 760a9f9 linter: Report errors when writing to the filesystem (#22881)
(camc314)
- e5a2748 linter: Avoid no-unreachable false positive after conditional
loop (#22869) (camc314)
- 39d92d6 linter/arrow-body-style: Preserve comments within function
(#22854) (Sysix)
- 3d13e29 parser: Reject `declare` in an already-ambient context
(TS1038) (#22850) (Boshen)
- 5152854 parser: Reject statements in ambient contexts (TS1036)
(#22849) (Boshen)
- 2eafea6 parser: Reject function implementations in ambient contexts
(TS1183) (#22845) (Boshen)
- c645615 parser: Reject incompatible class member modifiers (#22843)
(Boshen)
- 4a1ca4a linter/export: Detect duplicate explicit exports (#22798)
(camc314)
- 0a9a735 linter/no-loop-func: Allow safe let closures (#22811)
(camc314)
- 1599f11 linter: Align lsp extends default plugins (#22788) (camc314)
- db32ec9 linter/no-accumulating-spread: Use loop as primary span
(#22800) (camc314)
- 33ec6b4 linter/consistent-test-it: Avoid adjacent describe leakage
(#22796) (camc314)
- 2606069 linter/no-array-sort: Unwrap parenthesized sort args (#22794)
(camc314)
- 9f2f709 linter/no-array-sort: Skip non compare fn sort arguments
(#22752) (Gaurav Dubey)
- 27268a0 linter/no-else-return: Preserve statement boundary in fixer
(#22687) (camc314)
- d9cb6d8 linter/no-empty-function: Allow functions callbacks with
`allow: functions` (#22764) (camc314)
- a40a314 linter/no-shadow-restricted-names: Ignore enum members
(#22762) (camc314)
- 82366d9 linter/no-cond-assign: Align ternary handling (#22761)
(camc314)

### 📚 Documentation

- 5e113ba linter: Add license notices for ported ESLint plugins (#22768)
(Boshen)
# Oxfmt
### 🚀 Features

- d75cbbf oxfmt: Format `parser:json` files by `oxc_formatter_json`
(#22709) (leaysgur)
- 49db054 formatter_json: Implement `oxc_formatter_json` (json variant
only) (#22641) (leaysgur)
- 9c71f2e ast, codegen, formatter: Add `WithClauseKeyword::as_str`
helper and use it (#22791) (camc314)

### 🐛 Bug Fixes

- d3cdd62 oxfmt: Skip formatting for whitespace-only file (#22780)
(leaysgur)
- 23f0cc8 formatter: Don't move comments inside variable declaration in
for in loop (#22776) (leaysgur)
- f200c40 formatter: Don't move comments inside variable declaration in
for of loop (#22773) (Leonabcd123)

### 📚 Documentation

- 845f393 oxfmt,formatter,formatter_json,formatter_core: Add/update
AGENTS.md (#22873) (leaysgur)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-ast Area - AST A-codegen Area - Code Generation A-formatter Area - Formatter

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants