Commit Graph

154 Commits

Author SHA1 Message Date
Dunqing 134fb2228d fix(isolated-declarations): preserve unresolved parameter types (#25909)
#25292 made isolated declaration emit report a false TS9025 for a defaulted parameter whose annotation is an indexed access type. This breaks Vite's `UserConfig["base"]` case when Rolldown upgrades Oxc, even though the indexed property already includes `undefined`.

Oxc's isolated declaration emitter has no type checker, so it cannot safely resolve indexed accesses, type references, conditional types, or similar annotations. This change uses a syntax-only classification: widen or diagnose types whose syntax is conclusive, and preserve checker-dependent types rather than emit an unstable error. The union/intersection rules retain the distinct behavior of `any`, `never`, `unknown`, and `void`, and an explicit `undefined` union member is never duplicated.

Regression coverage includes the Rolldown/Vite case and a compact matrix of the relevant type algebra. The implementation and tests were reduced to one commit after review.

Validated with the isolated-declarations tests, strict Clippy, the all-features workspace suite, lint, docs, AST generation, and TypeScript 5.6.1-rc/6.0.3 type-algebra checks. The full local `just ready` run stopped only at a runner-dependent source-map snapshot because the repository expects Node 26.5.0 and this machine has 25.8.1; the remaining suite passed with that and the known terminal-color snapshot group skipped.

Follow-up to #25292. Related Rolldown failure: https://github.com/rolldown/rolldown/actions/runs/32158377691/job/95782148042?pr=10707

Disclosure: this change was prepared and verified with AI assistance (Codex).
2026-08-19 07:36:24 +00:00
camc314 53f9295ac5 fix(isolated-declarations): preserve undefined for defaulted any (#25292)
## Summary

- emit `any | undefined` for default-initialized `any` parameters followed by required parameters
- add a regression fixture for #25290 and update the existing parameter snapshot
- preserve the existing handling of `unknown`

Closes #25290
2026-08-17 09:43:42 +00:00
camc314 b846abc2a4 fix(isolated-declarations): handle ambient expando properties (#25655)
## Summary

- treat value declarations in ambient namespaces as implicitly exported for expando-function validation
- preserve local versus exported namespace visibility to match TypeScript declaration merging
- add regression coverage for accepted ambient value declarations and rejected local or type-only declarations

## TypeScript compatibility

The regression fixture was checked with TypeScript 6.0.3. TypeScript and Oxc produce TS9023 only for the exported-function/local-namespace mismatch and the type-only namespace property.

Closes #24975
2026-08-17 02:25:03 +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
camc314 468b970613 fix(isolated-declarations): strip re-export attributes (#25090)
## Summary

- transform declaration-less named exports instead of cloning them unchanged
- preserve re-export specifiers, source, and type modifiers while omitting import attributes from declaration output
- retain existing empty-export marker behavior

Stacked on #25089.
2026-07-29 17:25:26 +00:00
camc314 ecc666a4b1 test(isolated-declarations): cover re-export syntax (#25089)
## Summary

- cover statement-level and specifier-level type-only re-exports
- cover string-named export specifiers
- cover re-exports using import attributes
2026-07-29 16:54:39 +00:00
camc314 99b1dc4773 fix(isolated-declarations): separate static accessors (#24716)
## Summary

- keep static and instance accessors with the same key in separate inference pairs
- retain property-key normalization while adding staticness to the pairing identity
- cover both instance-getter/static-setter and static-getter/instance-setter directions

## Root cause

Accessor pairing identified entries by property key alone. A same-named accessor in the opposite staticness domain could therefore provide an inferred type, even though TypeScript treats the static and instance properties independently.

[TS Playground](https://www.typescriptlang.org/play/?isolatedDeclarations=true)

Current behaviour (oxc is before, ts (correct) is after.

```diff
@@ -1,8 +1,8 @@
 declare class InstanceGetterStaticSetter {
-       get value(): string;
+       get value();
        static set value(value: string);
 }
 declare class StaticGetterInstanceSetter {
-       static get value(): number;
+       static get value();
        set value(value: number);
 }
```
2026-07-20 13:31:53 +00:00
Cameron 0e9b46079a fix(isolated-declarations): normalize accessor keys (#24690)
## Summary

- normalize equivalent static accessor keys before getter/setter pairing
- retain structural matching for computed symbol keys
- cover identifier/string and numeric/template accessor pairs

## Root cause

Accessor pairing compared the AST key nodes structurally, so equivalent
JavaScript property names expressed with different key syntax did not
match.

[TS
Playground](https://www.typescriptlang.org/play/?isolatedDeclarations=true#code/MYGwhgzhAEDCD2BbADgVwC4FMAmBldATgJYB2A5gOKbpYHQDeAUNNGddAG5giqYAUASgbMW0AtVQES0AERcemGQG4RAXxER2AbTndeMgLp8OQpi3XrGoSDAQoMOfMXK5qtAEzCWbdNB3B4VBJ0Q0EvUXF0SWkZEnh0AFp0AAtMBOxMawIwdCJ4EiSAT2RFFXMNdgCg9GMALmgSVEQAI0wCUzVGS2soOCQ0LGwAOSa2omAqGjaAZnCfPwBGIw7RMQkpaEJeMuh1Fk1fLQADBaOjE3CLRiA)

Current behaviour (oxc is before, ts (correct) is after.

```diff
@@ -1,12 +1,12 @@
 declare class ComputedStringGetter {
        get value(): string;
-       set ["value"](v);
+       set ["value"](v: string);
 }
 declare class ComputedStringSetter2 {
-       get ["count"](): string;
+       get ["count"](): number;
        set count(v: number);
 }
 declare class ComputedNumericGetter3 {
        get [1](): boolean;
-       set [`1`](v);
+       set [`1`](v: boolean);
 }
```
2026-07-20 11:13:55 +01:00
camc314 a2ef382fe6 fix(isolated-declarations): reject window.Symbol as global symbol reference (#24689)
## Summary
- Align computed property validation with TypeScript: allow Symbol and globalThis.Symbol keys, but reject window.Symbol keys.
- Add an isolated-declarations regression fixture covering all three forms.

[TS Playground](https://www.typescriptlang.org/play/?isolatedDeclarations=true#code/FAUwHgDg9gTgLgAgMYBsCGBnDCDKBPAWwCMoUBpEPDARgQG9gEEBtfY0gOgEs4QY04sALoAKAJQAuBAEle-QTAA8AVwB2Aa1VQA7qoB89RkwQwQcZTFUshrQiRTc5A4eIDcRgL7Av4aPGToWLh2pBRUAEyGTMwA5ihQRGgoACoAFlwYHGz2jnzOMKKSMk4KKhpaugYMxiZmFlbMNtmcPHkKhe5MXj6QsIiomNjN5JQYAMxRLNpcqgAmOlkhDq3yLkWybbBlmjr6k0ym5pbWtuzLJWudCN1AA)
2026-07-19 21:21:11 +00:00
camc314 b14d52e647 refactor(parser): move require after optional param check to parser (#24600)
## Summary
- report TS1016 while parsing formal parameter lists
- preserve initialized-parameter and rest-parameter behavior
- remove the equivalent semantic check and diagnostic
- update parser and semantic coverage snapshots

Follows #24596, which has now merged.
2026-07-16 15:50:50 +00:00
camc314 f17514b21c fix(isolated-declarations): emit const readonly fields as types (#24288)
## Summary

Fixes #24284.

TypeScript 6.0.3 emits bare readonly literal class fields as value initializers, but emits readonly `as const` literal fields as type annotations. Oxc previously unwrapped `as const` in the readonly class-property initializer path, so `static readonly A = "a" as const` became `static readonly A = "a";` instead of `static readonly A: "a";`.

This changes the readonly class-property handling to preserve value initializers only for bare literals. Const assertions now flow through the existing const-expression type conversion.
2026-07-08 10:55:22 +00:00
Boshen 777f02ae10 refactor(diagnostics)!: return a Diagnostics type instead of Vec<OxcDiagnostic> (#23217)
## Summary

Introduces `oxc_diagnostics::Diagnostics` — a `Vec<OxcDiagnostic>` newtype that knows the difference between errors and warnings — and makes it the standard diagnostics return value across oxc.

- **New type**: `Diagnostics` with `has_errors()`, `has_warnings()`, `errors()`, `warnings()`, plus `Vec`-like ergonomics (Deref, `IntoIterator`, `Extend`, `From`/`Into<Vec>`) so most call sites are unchanged.
- **Return types**: `ParserReturn`, `SemanticBuilderReturn`, `IsolatedDeclarationsReturn`, the React Compiler `TransformResult`/`LintResult`, and `TransformerReturn` now expose `diagnostics: Diagnostics` instead of `errors: Vec<OxcDiagnostic>` (the React Compiler's separate `errors`/`warnings` are merged into one severity-tagged list).
- **Behaviour**: a React Compiler **error** now stops the transform (no output), while **warnings** flow through and the transform continues. `compile()` aborts codegen only when `diagnostics.has_errors()` — warnings alone no longer abort (previously any diagnostic did).

## Breaking change

Consumers reading `*.errors` on these return values must read `*.diagnostics`. React Compiler consumers that read `.errors`/`.warnings` separately should use `diagnostics.has_errors()` / `diagnostics.errors()` / `diagnostics.warnings()`.

Parser/semantic/isolated-declarations fatality is otherwise unchanged. Builds on the React Compiler transform feature (#23201).

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-10 14:46:52 +00:00
Boshen 8b631bfeca fix(codegen): remove stray space before mapped type value colon (#23010)
## What

`TSMappedType` printed a `soft_space` immediately before the value colon, so the colon was spaced off from the key:

| Input | Before | After |
| --- | --- | --- |
| `{ [K in U]: V }` | `{ [K in U] : V }` | `{ [K in U]: V }` |
| `{ [K in U]?: V }` | `{ [K in U]? : V }` | `{ [K in U]?: V }` |
| `{ -readonly [K in U]-?: V }` | `{ -readonly [K in U]-? : V }` | `{ -readonly [K in U]-?: V }` |

Every other member colon (object types, interfaces) is printed as `key: value`; mapped types now match. Minified output was already correct (`[K in U]?:V`).

The stray `print_soft_space()` before `print_colon()` is removed.
2026-06-06 11:23:46 +00:00
camc314 49e63f77a0 fix(isolated-declarations): require annotations for satisfies initializers (#22898)
Fixes an isolated declarations gap where exported variables initialized with a `satisfies` expression were being inferred instead of requiring an explicit annotation.

TypeScript reports TS9010 for cases like:

```ts
export const x = { a: 1 } satisfies { a: number };
```

but Oxc previously emitted an inferred declaration. This changes isolated declaration inference so `satisfies` initializers do not unwrap to the inner expression for variable type inference, matching TypeScript’s behavior.

Added a regression fixture covering:
- object literal `satisfies` initializer
- primitive `satisfies` initializer
- explicitly annotated `satisfies` initializer, which should still emit normally

[TypeScript playground](https://www.typescriptlang.org/play/?isolatedDeclarations=true#code/KYDwDg9gTgLgBAYwgOwM7xHAvHA3nAQwC44BGOAXzlQJgEtUAzO4VPQk5AVwFsAjYFEoBuAFBA)
2026-06-03 04:08:02 +00:00
camc314 8c936018d1 fix(isolated-declarations): allow unknown enum initializer in non-const enum (#22900)
Fixes an isolated declarations diagnostic mismatch for enum initializers.

TypeScript allows runtime enum initializers under `--isolatedDeclarations` for regular enums and emits the declaration without initializer values:

[TS playground](https://www.typescriptlang.org/play/?isolatedDeclarations=true#code/KYDwDg9gTgLgBMAdgVwLZwEIEMAmBRFdAbwCg44BBOAXjgFksYALAOii0RwlQAoBKADRlMNSnADUcAIxCAviRKhIsOAGMIiAM7wkaTLgDCG7QT2lyVWg2ZsOXXoOEZRVSTJLygA)

```ts
export enum BadEnum {
  A = Math.random(),
  B = A + 1,
}
```

```ts
export declare enum BadEnum {
  A,
  B
}
```

Oxc already emitted the same declaration shape, but also reported TS9020. This PR narrows that diagnostic behavior so regular enum runtime initializers are omitted without an isolated declarations error.

For `const enum`, TypeScript still reports `TS2474` because const enum initializers must be constant expressions:

[TS playground](https://www.typescriptlang.org/play/?isolatedDeclarations=true#code/KYDwDg9gTgLgBMAdgVwLZwEIEMAmBRFdAbwCg44BBOAXjgFksYALAOii0RwlQAoBKADRlMNSnADUcAIxCAviRKhIsOAGMIiAM7wkaTLgDCG7QT2lyVWg2ZsOXXoOEZRVSTJLygA)

```ts
export const enum BadConstEnum {
  A = Math.random(),
  B = A + 1,
}
```

This PR keeps that error behavior aligned by reporting `TS2474` for non-constant `const enum` initializers.
2026-06-03 02:37:22 +00:00
camc314 070eb9e66f fix(isolated-declarations): omit public accessor modifier (#22880)
Accessor property declaration emit preserved an explicit `public` modifier because it passed `property.accessibility` through unchanged. Property and method declarations already normalize public accessibility away with `transform_accessibility`, so accessors should use the same path.

This applies `Self::transform_accessibility` when emitting accessor properties and adds a fixture case for `public accessor i!: string`, which now snapshots as `accessor i: string;`.

Stacked on #22878.
2026-06-01 14:07:33 +00:00
camc314 a3ae099ff3 fix(isolated-declarations): omit definite assertion from private declarations (#22878)
Declaration emit currently preserves the definite assignment marker on private modifier class fields after erasing their type annotation. That can produce invalid `.d.ts` output like `private _prop!;`, while TypeScript emits the type-erased private member as `private _prop;`.

This clears the emitted `definite` flag when isolated declaration emit type-erases private modifier properties, and uses the same helper for accessor properties. The regression fixture covers the issue sample, and the existing accessor fixture now covers the same behavior for `private accessor`.

fixes #22877
2026-06-01 13:57:23 +00:00
Dunqing 48967e8325 fix(isolated_declarations): drop required type check for private parameter properties on private constructors (#21515)
## Summary

A private parameter property on a private constructor doesn't need an explicit type annotation:

- The constructor signature is collapsed to `private constructor();` — the parameter is never emitted.
- The parameter-property class member is emitted as `private readonly name;` — type-erased.

Since the parameter's type does not appear in the `.d.ts` output in either place, no type is needed. This matches `tsc --isolatedDeclarations`. Non-private parameter properties on a private constructor still require a type, because the class member keeps the type.

## Example

```ts
export class GreyhoundServer {
  private constructor(
    private readonly logger = new ConsoleLogger(['greyhound-server']),
  ) {}
}
```

Before: `TS9011: Parameter must have an explicit type annotation`.
After: no error — emits `private readonly logger;` and `private constructor();`, matching tsc.

## Test plan

- [x] Added snapshot fixtures covering both the no-error case (private param property) and the still-errors case (public param property on private constructor)
- [x] `cargo test -p oxc_isolated_declarations`

Closes #21503 (case 1)
2026-04-20 08:33:55 +00:00
Dunqing 065ce47714 fix(isolated_declarations): collect types from private accessors for paired inference (#21516)
## Summary

A public (or protected) getter paired with a `private set(v: T)` should get its return type from the setter's parameter annotation — that's the standard `isolatedDeclarations` accessor-pair inference rule ("one annotated side is enough"). Previously, `collect_accessor_annotations` skipped any accessor with a `private` modifier, so the pairing never happened and `TS9009` fired on the untyped getter.

This change:

- No longer skips `private`-modifier accessors when collecting annotations for paired inference.
- For private **setters**, collects the explicit parameter type annotation — same behavior as before for non-private setters (no body inference).
- For private **getters**, only uses an explicit return type annotation. Running body inference would surface errors like `TS9038` on the private accessor's body, which is irrelevant because the private accessor is emitted as a type-erased class member anyway.

## Example

```ts
export class MockProxy {
  get isRunning() {
    return this._state.isRunning;
  }

  private set isRunning(val: boolean) {
    this._state.isRunning = val;
  }
}
```

Before: `TS9009: At least one accessor must have an explicit return type annotation`.
After: no error — emits `get isRunning(): boolean;` and `private set isRunning(value);`, matching tsc.

## Test plan

- [x] Added fixtures for both a public getter + private setter pair and a protected getter + private setter pair
- [x] `cargo test -p oxc_isolated_declarations` — no regression on existing private-accessor snapshots

Closes #21503 (case 2)
2026-04-20 04:51:23 +00:00
camc314 c4a3677ad4 feat(parser): report error for initializer in ambient context (#19187) 2026-02-23 20:00:54 +00:00
camc314 3e0e5ba49f fix(isolated-declarations): align readonly class array initializer diagnostics with tsc (#19218) 2026-02-10 14:51:49 +00:00
camc314 a7514e4b25 fix(isolated-declarations): preserve const context in literal type inference (#19178)
TypeScript:

![Screenshot 2026-02-09 at 12.23.39.png](https://app.graphite.com/user-attachments/assets/0f4738f8-9ab8-42be-a737-d5eaf9674997.png)

Us before: (we incorrectly add `readonly` on `a` when `readonly `should only be on the top level object

![Screenshot 2026-02-09 at 12.23.55.png](https://app.graphite.com/user-attachments/assets/7d56a8dc-30a1-40b6-8c7d-b9a595fd8889.png)

Us after:

![Screenshot 2026-02-09 at 12.25.03.png](https://app.graphite.com/user-attachments/assets/a5a95deb-0e5a-4c62-9170-16c451a88507.png)
2026-02-10 02:06:13 +00:00
camc314 312e7565e2 fix(isolated-declarations): preserve readonly literal initializers (#19177)
This is the cause of the current monitor oxc failure

TS's Behaviour:

![Screenshot 2026-02-09 at 12.18.51.png](https://app.graphite.com/user-attachments/assets/858f029d-5427-4593-95c1-ae5efd3239e1.png)

Us Before:

![Screenshot 2026-02-09 at 12.18.17.png](https://app.graphite.com/user-attachments/assets/a4df3235-e4cd-4526-b632-df7371181922.png)

Us After:

```
export declare class ReadonlyLiteralInitializers {

	readonly directTrue = true;
	readonly constAssertTrue = true;
	writableTrue: boolean;
}
```
2026-02-10 02:06:13 +00:00
camc314 d0ca8d0077 fix(isolated-declarations): skip parenthesis when inferring type (#19176)
before:

![Screenshot 2026-02-09 at 12.16.13.png](https://app.graphite.com/user-attachments/assets/2853a2bc-daba-4f78-885c-ef534055652a.png)

TS

After:

Isolated declaration emit succeeds.
2026-02-10 02:06:12 +00:00
camc314 0600df3c88 fix(isolated_declarations): only print jsdoc comments (#17748)
fixes https://github.com/oxc-project/oxc/issues/17666
2026-01-08 02:56:38 +00:00
camc314 ab5e4ca39f fix(isolated-declarations): strip default values from rest parameter binding patterns (#17602)
Closes #17598
2026-01-03 15:28:36 +00:00
Copilot f5646872a7 fix(isolated-declarations): preserve variable declarations when type with same name is referenced in implements clause (#16328)
- [x] Understand the issue: variable declarations with shadowed type
names are dropped when the type is referenced in implements clause
- [x] Identify root cause: `add_reference` and `resolve_references` were
overwriting flags instead of combining them
- [x] Implement fix: use bitwise OR to combine `KindFlags` when adding
references and merging scopes
- [x] Add test case to fixtures (extended shadowed.ts with issue #10996
test case)
- [x] Run tests and update snapshots
- [x] Run code review 
- [x] Run CodeQL security check (no issues found)
- [x] Verify fix manually with original issue example
- [x] Reverted .gitignore change per reviewer feedback

## Summary

This PR fixes issue #10996 where variable declarations with shadowed
type names were incorrectly dropped when the type was referenced in a
class `implements` clause.

### Problem
When a variable name is shadowed by a type alias and that type is
referenced in `implements`, the variable declaration was missing from
`.d.ts` output.

### Root Cause
`ScopeTree` used `HashMap::insert()` which overwrites reference flags.
When a name had both `KindFlags::Value` (from `typeof Test2`) and
`KindFlags::Type` (from `implements Thing<Test2>`), only the last one
was preserved.

### Fix
Changed `add_reference()` and `resolve_references()` to combine flags
using bitwise OR (`|=`) instead of overwriting.

<!-- START COPILOT CODING AGENT SUFFIX -->



<details>

<summary>Original prompt</summary>

> 
> ----
> 
> *This section details on the original issue you should resolve*
> 
> <issue_title>[isolatedDeclarations] variable emit is dropped if the
variable is shadowed as a type name and the type is part of a class
implements interface</issue_title>
> <issue_description># Repo
> 
> ```ts
> export interface Thing<T> {}
> 
> /** WORKS */
> 
> const Test1 = 'test1' as const;
> export type Test1 = typeof Test1;
> export class Class1 {
>   readonly id: 'test1' = Test1;
> }
> 
> /** DOES NOT WORK */
> 
> const Test2 = 'test2' as const;
> export type Test2 = typeof Test2;
> export class Class2 implements Thing<Test2> {
>   readonly id: 'test2' = Test2;
> }
> ```
> 
> # Expected
> 
> ```ts
> export interface Thing<T> {
> }
> /** WORKS */
> declare const Test1: "test1";
> export type Test1 = typeof Test1;
> export declare class Class1 {
>     readonly id: 'test1';
> }
> /** DOES NOT WORK */
> declare const Test2: "test2";
> export type Test2 = typeof Test2;
> export declare class Class2 implements Thing<Test2> {
>     readonly id: 'test2';
> }
> export {};
> ```
> [ts
playground](https://www.typescriptlang.org/play/?#code/KYDwDg9gTgLgBASwHY2FAZgQwMbDgFQAtkBzAHnwD44BvAXwCgGB6AKlbgHUB5AJQGkAynFbMm2CEgDO8fMBkBGOAF44AclSK1cTFLgTpMANxxmzODGJ6SwGHuABbBDFQATBqEiwLATzB45RRVffwh0AnkYBSMPcGh4bAAbXT0AYWSpKSUaBjg4KGBMV0lEn0RXAC51TSjtVUComMYWdjgAEW4AUWEAOW58Lj5+ETEGAxkImQAmYI1Iqe1dfUkZEzM4Yvk4JAh4G3hHZzdYr3gYPwD54PPQ8IapmM94-Qy015mEBzBEx2AUPSIpAo82oOTyBSKJTKCEq1XmdUmMAeDGaQA)
> 
> # Actual
> 
> ```ts
> export interface Thing<T> {}
> /** WORKS */
> declare const Test1: "test1";
> export type Test1 = typeof Test1;
> export declare class Class1 {
> 	readonly id: "test1";
> }
> export type Test2 = typeof Test2;
> export declare class Class2 implements Thing<Test2> {
> 	readonly id: "test2";
> }
> export {};
> ```
> [oxc
playground](https://playground.oxc.rs/#eNp1VE1PGzEQ/SuWL5UQVSBSJRRKpQqIVJUSSqJyycXZnU0MXntrzxKiKP+9z5u1idr0ktjz+ebN825lIUeS3hrnWWjL5CtVkJittF1+nn0R293czu3g5EQ8TR6/T8XJIN4LZwOLGQU+F1fiA8fDB6GC6ByXYjAQvNJBLImDoFozUzm3fRfeNGjQ58aLq/bXyxxSGBWCuI6/52I7t0J4UqWzZiN0OcoNr3JeRnkzuZ2K+8msg/sP2mFCO/wLbekoCOs4Iv4/4Jh+AHh4FPBQ6LoxVJPF7D2PMRhcHh8EWPaDxHrdIPJUOjnaSt/a+GewFzli39KprJyvFdB5OaqUCbCwVzZEc7bo4IzCADcEWF6xxpgpf73S6Nlgxzm8VnZp3q+FqxtPARm9IRSugXufHzb1wpl0K6plH7Y7lY3yIeLaQk5MNqAtpMXhDeMoY9z6kbj1dtJy0CWNW1tEZKlU7En+lR6UR26ydnm/Lr5Z9hoVi+wIBNisi1vvne+twBCp6jDgfEDVVraBZmrxPhSrxZMueSVHw1NJtpxUd9piSmkqwG3QjXv/xRm6YYuGfraO33l6Dm/TI+bf8fbgXYNeUoWPlqikEjWxJw14y2tX1yr6jIEVc+g8LGZZp/nhX6tNQMjCq+KFeIqlIT0FJ6uqaY+87+8Wz1Twk1cNaiRSY6MO61cGkYsWCMkfpIGtLKM9X6w8nkL8NITh2fknFACDN1QhZ+x8J/SxJlPmheAhkNdR9cpAeA66y4uBF08qW38Qq1IxSOi3dlywWxkAtsHuyVsFzSWohStpSd3TsHHHWY7PoXT4nPVsWrznrlayGFqm2K5K0nkUS3oEmNw1d/RKuegLUXMPlpN2ulTo0ZkxtBkzXskvXDjgUtu4g+jKpx3MZUdfNOfTLtojzWmm3R88D/Yg)
> 
> Note the missing emit of `declare const Test2:
"test2";`</issue_description>
> 
> ## Comments on the Issue (you are @copilot in this section)
> 
> <comments>
> </comments>
> 


</details>

- Fixes oxc-project/oxc#16314

<!-- START COPILOT CODING AGENT TIPS -->
---

✨ Let Copilot coding agent [set things up for
you](https://github.com/oxc-project/oxc/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Dunqing <29533304+Dunqing@users.noreply.github.com>
2025-12-01 21:29:46 +08:00
sapphi-red b3d6f45d37 test(all): check parse errors existence (#15865)
Added `assert!(ret.errors.is_empty());` in many places so that invalid inputs are caught properly.
2025-11-19 13:56:55 +00:00
copilot-swe-agent 7d1ebadbb5 fix(isolated-declarations): incorrect nested namespace output in isolated declarations (#15800)
Dotted namespace syntax `export namespace X.Y.Z {}` was incorrectly transformed to `export declare namespace Y.Z.Z {}` instead of `export declare namespace X.Y.Z {}`.

**Root cause:** Variable shadowing in `transform_ts_module_declaration`. When processing nested `TSModuleDeclaration` bodies, the pattern match variable `decl` shadowed the function parameter, causing the inner namespace name to be used instead of the outer one.

**Changes:**
- Renamed pattern match variable from `decl` to `inner_decl` to preserve access to outer declaration's identifier
- Added test coverage for dotted namespace syntax with varying nesting depths

**Example:**
```ts
// Input
export namespace X.Y.Z {}

// Before: Y.Z.Z (incorrect)
// After: X.Y.Z (correct)
export declare namespace X.Y.Z {
  export {};
}
```

<!-- START COPILOT CODING AGENT SUFFIX -->

<details>

<summary>Original prompt</summary>

>
> ----
>
> *This section details on the original issue you should resolve*
>
> <issue_title>Isolated declarations: Incorrect output for nested `namespace`</issue_title>
> <issue_description>Input:
>
> ```ts
> //               _____
> export namespace X.Y.Z {}
> ```
>
> Isolated declarations output:
>
> ```ts
> //                       _____
> export declare namespace Y.Z.Z {
>   export {};
> }
> ```
>
> [Playground](https://playground.oxc.rs/#eNptU01v2zAM/SuBzlnRFRhQ5Da0CzCgW7J1WLdhF1pmXKWy6FF00sLIfx/lWEoK9GT5Ufx4j0+DsWZh8LkjllmAFmMHFme/Ln5f/JkNh7/BzA2ZxWC4D+njXRCz2ICPODcb4hZEkAsiDCEmuCAukgfB+hatBwZxFKJZCPca2z86OTYs11sIjT/9Wmo7xqgZExAtdRo+5seXtiKf/+ymma4d5qYDjmmuQbkJhqhtladEpQPe0/47Ss9h1Ut0NS77YNNguVJqibzDNbCmZnTM+3n9OQg7LWhLIKJOLc5+YiaeUB0hSTWOoOczpQbTR/wB1YmTQPXgank0i6u5wVCvNncuKEnjNzpup91kil9fajeXFPrWk5xk2sbn+zfgf+lvzdRpLwPxXUCssdaauian4zU31LaQYt4rqjxcIatc9pm/xvfwkrSrGOwTyr3uTNPz5YyqfY6TT/2p2qKVB4ZOa2RRU6Nx1o+iQla9Toj8Kk3diOxaDAJ+pUcQ4jVFd1xRUsiopMVqR1EFuEG1psF4dfn+g3ZRmW9xo4WXxDceYlw69HXZ2nkXNSeNbU7R1klBv6BADaJKTat929SDicqoU4MgB1BfZjNaqrHB8f2EZIRi2W2sSd/fJHkIJGOtjHhs8t2xSn4LyVH5oShz6u5wh6XoE2L3Nb3k8wHUtOSXauCUsUOuKGbBE5+QFpVC5XRQuB7lS3A5HRKeZM6cDv8BbLGFnw==)
>
> Maybe this code is the cause?
>
> https://github.com/oxc-project/oxc/blob/4608549fc7715ee76c4a6d7a78069ff339f52267/crates/oxc_isolated_declarations/src/lib.rs#L521-L523
>
> Looks fishy! Shouldn't it walk down to find the nested `TSModuleBlock` when `decl.body` is a `TSModuleDeclarationBody::TSModuleDeclaration`?</issue_description>
>
> ## Comments on the Issue (you are @copilot in this section)
>
> <comments>
> </comments>
>

</details>

- Fixes oxc-project/oxc#15729

<!-- START COPILOT CODING AGENT TIPS -->
---

💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more [Copilot coding agent tips](https://gh.io/copilot-coding-agent-tips) in the docs.
2025-11-18 03:39:03 +00:00
Copilot 2c23e15fc0 fix(isolated-declarations): incorrectly dropping namespace even if it is being referenced (#15123)
When an exported type references a namespaced type (e.g., `export type A
= Foo.Bar`), the namespace declaration was being dropped from the
output, causing the type reference to resolve to `any`.

```typescript
// Input
export type A = Foo.Bar;

namespace Foo {
  export type Bar = "bar"
}

// Before: namespace dropped
export type A = Foo.Bar;

// After: namespace included
export type A = Foo.Bar;
declare namespace Foo {
  type Bar = "bar";
}
export {};
```

## Changes

- **`declaration.rs`**: Changed namespace inclusion check from
`has_value_reference()` to `has_reference()` to account for
type-position references. This aligns with enum handling, which also
uses `has_reference()` since both can serve dual roles as types and
values.

- **Test coverage**: Added test cases for simple, nested, and multiple
namespace references in various type positions (aliases, unions,
interfaces).

## Technical Details

Namespaces are bound with `KindFlags::All` (both type and value), but
the transform logic was only checking for value references. Type
references like `Foo.Bar` are tracked as `KindFlags::Type` through
`visit_ts_type_name()`, so the previous check excluded legitimately
referenced namespaces.

<!-- START COPILOT CODING AGENT SUFFIX -->



<details>

<summary>Original prompt</summary>

> 
> ----
> 
> *This section details on the original issue you should resolve*
> 
> <issue_title>Isolated declarations emit drops namespaced
types</issue_title>
> <issue_description>When an exported type references a namespaced one,
the namespace is not included in the output.
> 
> ```ts
> // This ends up being `any` 
> export type A = Foo.Bar;
> 
> namespace Foo {
>   export type Bar = "bar"
> }
> ```
> emits:
> ```ts
> // This ends up being `any`
> export type A = Foo.Bar;
> ```
> 
>
[playground](https://playground.oxc.rs/#eNptVE1v2zAM/SuCThuQtUNPRYYd+rEAA7q1W4v1kkNpm07VyqJH0UmDIP99lGM5CdZLKz+RfOTjUza2tFN7emoenl00GKpoutYU6MLCPEFYP5l5wLeWWIysWzQX5quZEZ1cAn+Zh3kI0GBsocSEms08GHMYrmGaMLcF8Nym+G36k+lWxK/R1C7gMcml5qQD1anq2Ylm/092dsRWd6EUR8Fo7IePU7MkV5mNsm3txJKdbix3If3zLoid1uAjTmxN3IAI8ogIQ4gJHhEXyYNgdY2lB4ZEEu1UuNO71bOTXUdjeANh4fefJTUtY9SMAYgltXq9y4/rpiCfv8p6MYRtJ7YFjqmvjcU3wRCVVhclUccB72n1G6XjcNtJdBXOhulzpUSJvMQ7YE3NaJ/35/x7EHZasBwvImrX4spvzMQDqi0kqfoW9Hyg1MZ2ER+g2M8kUDy6Sp7t9Gxi1UO39Y3uVNv1tbbbKpsM9+eflU295fFXR7KX6SW+3b8D/01fd0ytclmInwJihZXW1DU5bW9xRU0D6c57RXUONw6rs6zy/Hq/gnXSrmAoX1HudWeanoMzqv7adT7wU/GCpTwytFoji5qI+l4vRIUsOu0Q+ShNPYnsGgwC/laPIMR3FN1uRUkhq5KOVtuJKsALVGtajPoYRFlU5mtMr2NGfOUhxplDX41bO2RRc1JPs79tnIzoDxSoQFSpYbXvm3pjo07UqkGQA6gvsxlLqnCB/fsJyQijZV9iRfoDMkgeAklfKyMeFzm2r5LfQnJUfig6ObU3uMSx6Cti+zM99cMG1LTkZ2rglLFELihmwdM8IS0qXY2nrcJVL1+Cx9M24UnmPNP2H1mEya8=)</issue_description>
> 
> <agent_instructions>We should look into the `oxc_isolated_declaration`
crate to fix this bug.</agent_instructions>
> 
> ## Comments on the Issue (you are @copilot in this section)
> 
> <comments>
> </comments>
> 


</details>

- Fixes oxc-project/oxc#15028

<!-- START COPILOT CODING AGENT TIPS -->
---

💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Dunqing <29533304+Dunqing@users.noreply.github.com>
2025-10-31 14:14:37 +08:00
copilot-swe-agent 8f533aaceb fix(codegen): correct CRLF handling in comment processing (#13169)
The oxc-transform's isolated declaration feature was incorrectly handling Windows line endings (`\r\n`) in comments, generating double newlines in the output. Consider:

```typescript
import { isolatedDeclaration } from 'oxc-transform'

console.log([
	isolatedDeclaration('a.ts',
		// Simulates windows file line-ending.
		[
			'/**',
			' * Comment.',
			' */',
			'export const a: number = 1;'
		].join('\r\n')
	).code
])
// Before: [ '/**\n\n* Comment.\n\n*/\nexport declare const a: number;\n' ]
// After:  [ '/**\n* Comment.\n*/\nexport declare const a: number;\n' ]
```

## Root Cause

The issue was in the comment processing logic in `oxc_codegen/src/comment.rs`. The `split(is_line_terminator)` function treats both `\r` and `\n` as separate line terminators, causing `\r\n` sequences to split incorrectly with empty strings between them, leading to double newlines in the output.

## Solution

Implemented an allocation-free approach using a custom `LineTerminatorSplitter` iterator that:

1. Handles CRLF sequences correctly by treating `\r\n` as a single line terminator
2. Eliminates performance overhead from string allocations during comment processing
3. Processes line terminators on-demand without creating temporary strings

This approach provides better performance compared to the previous normalization function while correctly handling Windows line endings.

## Additional Changes

- Converted all single-line block comments (`/** comment */`) to multiline format in test fixtures to better verify the CRLF fix
- Updated corresponding test snapshots to reflect the improved comment formatting

## Testing

- Added comprehensive tests covering Windows line endings, mixed line endings, and standalone CR handling
- All existing tests continue to pass (codegen, isolated declarations, transform)
- Verified the exact reproduction case from the issue works correctly
- Confirmed zero allocation overhead in comment processing

Fixes #13059.

<!-- START COPILOT CODING AGENT TIPS -->
---

💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click [here](https://survey.alchemer.com/s3/8343779/Copilot-Coding-agent) to start the survey.
2025-08-18 11:50:39 +00:00
leaysgur 306b023302 feat(isolated-declarations)!: Rewrite declare module X to declare namespace X (#12845)
May fix #12844

At first glance, it looked like a simple change, so I created a PR.

But sorry, I think I'm not familiar with the context, so please feel free to close if not appropriate. 😓
2025-08-07 11:54:53 +00:00
Boshen 3eed87a610 fix(codegen): wrap parens for TSUnionType (#12830) 2025-08-05 12:17:54 +00:00
renovate[bot] b4c9e7419f chore(deps): update crate-ci/typos action to v1.35.1 (#12811)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [crate-ci/typos](https://redirect.github.com/crate-ci/typos) | action
| minor | `v1.34.0` -> `v1.35.1` |

---

### Release Notes

<details>
<summary>crate-ci/typos (crate-ci/typos)</summary>

###
[`v1.35.1`](https://redirect.github.com/crate-ci/typos/blob/HEAD/CHANGELOG.md#014---2019-11-03)

[Compare
Source](https://redirect.github.com/crate-ci/typos/compare/v1.35.0...v1.35.1)

##### Bug Fixes

- Ignore numbers as identifiers
([a00831c8](https://redirect.github.com/crate-ci/typos/commit/a00831c847b7efd81be520ea9b5d02f70555351f))
- Improve the organization of --help
([a48a457c](https://redirect.github.com/crate-ci/typos/commit/a48a457cc3ca817850118e2a2fb8b20fecdd40b8))

##### Features

- Dump files, identifiers, and words
([ce365ae1](https://redirect.github.com/crate-ci/typos/commit/ce365ae12e12fddfb6fc42a7f1e5ea71834d6051),
closes
[#&#8203;41](https://redirect.github.com/crate-ci/typos/issues/41))
- Give control over allowed identifier characters for leading vs rest
([107308a6](https://redirect.github.com/crate-ci/typos/commit/107308a655a425eb593bf5e4928572c16e6a9bdd))

##### Performance

- Use standard identifier rules to avoid doing umber checks
([107308a6](https://redirect.github.com/crate-ci/typos/commit/107308a655a425eb593bf5e4928572c16e6a9bdd))
- Only do hex check if digits are in identifiers
([68cd36d0](https://redirect.github.com/crate-ci/typos/commit/68cd36d0de90226dbc9d31c2ce6d8bf6b69adb5c))

<!-- next-url -->

[Unreleased]:
https://redirect.github.com/crate-ci/typos/compare/v1.35.1...HEAD

[1.35.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.35.0...v1.35.1

[1.35.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.34.0...v1.35.0

[1.34.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.33.1...v1.34.0

[1.33.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.33.0...v1.33.1

[1.33.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.32.0...v1.33.0

[1.32.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.31.2...v1.32.0

[1.31.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.31.1...v1.31.2

[1.31.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.31.0...v1.31.1

[1.31.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.30.3...v1.31.0

[1.30.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.30.2...v1.30.3

[1.30.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.30.1...v1.30.2

[1.30.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.30.0...v1.30.1

[1.30.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.29.10...v1.30.0

[1.29.10]:
https://redirect.github.com/crate-ci/typos/compare/v1.29.9...v1.29.10

[1.29.9]:
https://redirect.github.com/crate-ci/typos/compare/v1.29.8...v1.29.9

[1.29.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.29.7...v1.29.8

[1.29.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.29.6...v1.29.7

[1.29.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.29.5...v1.29.6

[1.29.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.29.4...v1.29.5

[1.29.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.29.3...v1.29.4

[1.29.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.29.2...v1.29.3

[1.29.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.29.1...v1.29.2

[1.29.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.29.0...v1.29.1

[1.29.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.28.4...v1.29.0

[1.28.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.28.3...v1.28.4

[1.28.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.28.2...v1.28.3

[1.28.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.28.1...v1.28.2

[1.28.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.28.0...v1.28.1

[1.28.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.27.3...v1.28.0

[1.27.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.27.2...v1.27.3

[1.27.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.27.1...v1.27.2

[1.27.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.27.0...v1.27.1

[1.27.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.26.8...v1.27.0

[1.26.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.26.7...v1.26.8

[1.26.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.26.6...v1.26.7

[1.26.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.26.5...v1.26.6

[1.26.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.26.4...v1.26.5

[1.26.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.26.3...v1.26.4

[1.26.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.26.2...v1.26.3

[1.26.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.26.1...v1.26.2

[1.26.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.26.0...v1.26.1

[1.26.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.25.0...v1.26.0

[1.25.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.24.6...v1.25.0

[1.24.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.24.5...v1.24.6

[1.24.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.24.4...v1.24.5

[1.24.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.24.3...v1.24.4

[1.24.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.24.2...v1.24.3

[1.24.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.24.1...v1.24.2

[1.24.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.24.0...v1.24.1

[1.24.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.23.7...v1.24.0

[1.23.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.23.6...v1.23.7

[1.23.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.23.5...v1.23.6

[1.23.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.23.4...v1.23.5

[1.23.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.23.3...v1.23.4

[1.23.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.23.2...v1.23.3

[1.23.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.23.1...v1.23.2

[1.23.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.23.0...v1.23.1

[1.23.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.22.9...v1.23.0

[1.22.9]:
https://redirect.github.com/crate-ci/typos/compare/v1.22.8...v1.22.9

[1.22.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.22.7...v1.22.8

[1.22.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.22.6...v1.22.7

[1.22.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.22.5...v1.22.6

[1.22.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.22.4...v1.22.5

[1.22.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.22.3...v1.22.4

[1.22.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.22.2...v1.22.3

[1.22.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.22.1...v1.22.2

[1.22.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.22.0...v1.22.1

[1.22.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.21.0...v1.22.0

[1.21.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.20.10...v1.21.0

[1.20.10]:
https://redirect.github.com/crate-ci/typos/compare/v1.20.9...v1.20.10

[1.20.9]:
https://redirect.github.com/crate-ci/typos/compare/v1.20.8...v1.20.9

[1.20.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.20.7...v1.20.8

[1.20.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.20.6...v1.20.7

[1.20.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.20.5...v1.20.6

[1.20.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.20.4...v1.20.5

[1.20.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.20.3...v1.20.4

[1.20.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.20.2...v1.20.3

[1.20.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.20.1...v1.20.2

[1.20.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.20.0...v1.20.1

[1.20.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.19.0...v1.20.0

[1.19.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.18.2...v1.19.0

[1.18.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.18.1...v1.18.2

[1.18.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.18.0...v1.18.1

[1.18.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.17.2...v1.18.0

[1.17.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.17.1...v1.17.2

[1.17.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.17.0...v1.17.1

[1.17.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.26...v1.17.0

[1.16.26]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.25...v1.16.26

[1.16.25]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.24...v1.16.25

[1.16.24]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.23...v1.16.24

[1.16.23]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.22...v1.16.23

[1.16.22]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.21...v1.16.22

[1.16.21]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.20...v1.16.21

[1.16.20]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.19...v1.16.20

[1.16.19]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.18...v1.16.19

[1.16.18]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.17...v1.16.18

[1.16.17]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.16...v1.16.17

[1.16.16]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.15...v1.16.16

[1.16.15]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.14...v1.16.15

[1.16.14]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.13...v1.16.14

[1.16.13]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.12...v1.16.13

[1.16.12]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.11...v1.16.12

[1.16.11]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.10...v1.16.11

[1.16.10]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.9...v1.16.10

[1.16.9]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.8...v1.16.9

[1.16.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.7...v1.16.8

[1.16.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.6...v1.16.7

[1.16.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.5...v1.16.6

[1.16.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.4...v1.16.5

[1.16.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.3...v1.16.4

[1.16.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.2...v1.16.3

[1.16.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.1...v1.16.2

[1.16.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.0...v1.16.1

[1.16.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.15.10...v1.16.0

[1.15.10]:
https://redirect.github.com/crate-ci/typos/compare/v1.15.9...v1.15.10

[1.15.9]:
https://redirect.github.com/crate-ci/typos/compare/v1.15.8...v1.15.9

[1.15.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.15.7...v1.15.8

[1.15.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.15.6...v1.15.7

[1.15.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.15.5...v1.15.6

[1.15.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.15.4...v1.15.5

[1.15.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.15.3...v1.15.4

[1.15.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.15.2...v1.15.3

[1.15.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.15.1...v1.15.2

[1.15.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.15.0...v1.15.1

[1.15.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.12...v1.15.0

[1.14.12]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.11...v1.14.12

[1.14.11]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.10...v1.14.11

[1.14.10]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.9...v1.14.10

[1.14.9]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.8...v1.14.9

[1.14.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.7...v1.14.8

[1.14.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.6...v1.14.7

[1.14.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.5...v1.14.6

[1.14.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.4...v1.14.5

[1.14.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.3...v1.14.4

[1.14.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.2...v1.14.3

[1.14.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.1...v1.14.2

[1.14.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.0...v1.14.1

[1.14.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.26...v1.14.0

[1.13.26]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.25...v1.13.26

[1.13.25]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.24...v1.13.25

[1.13.24]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.23...v1.13.24

[1.13.23]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.22...v1.13.23

[1.13.22]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.21...v1.13.22

[1.13.21]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.20...v1.13.21

[1.13.20]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.19...v1.13.20

[1.13.19]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.18...v1.13.19

[1.13.18]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.17...v1.13.18

[1.13.17]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.16...v1.13.17

[1.13.16]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.15...v1.13.16

[1.13.15]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.14...v1.13.15

[1.13.14]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.13...v1.13.14

[1.13.13]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.12...v1.13.13

[1.13.12]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.11...v1.13.12

[1.13.11]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.10...v1.13.11

[1.13.10]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.9...v1.13.10

[1.13.9]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.8...v1.13.9

[1.13.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.7...v1.13.8

[1.13.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.6...v1.13.7

[1.13.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.5...v1.13.6

[1.13.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.4...v1.13.5

[1.13.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.3...v1.13.4

[1.13.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.2...v1.13.3

[1.13.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.1...v1.13.2

[1.13.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.0...v1.13.1

[1.13.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.14...v1.13.0

[1.12.14]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.13...v1.12.14

[1.12.13]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.12...v1.12.13

[1.12.12]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.11...v1.12.12

[1.12.11]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.10...v1.12.11

[1.12.10]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.9...v1.12.10

[1.12.9]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.8...v1.12.9

[1.12.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.7...v1.12.8

[1.12.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.6...v1.12.7

[1.12.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.5...v1.12.6

[1.12.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.4...v1.12.5

[1.12.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.3...v1.12.4

[1.12.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.2...v1.12.3

[1.12.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.1...v1.12.2

[1.12.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.0...v1.12.1

[1.12.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.11.5...v1.12.0

[1.11.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.11.4...v1.11.5

[1.11.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.11.3...v1.11.4

[1.11.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.11.2...v1.11.3

[1.11.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.11.1...v1.11.2

[1.11.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.11.0...v1.11.1

[1.11.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.10.3...v1.11.0

[1.10.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.10.2...v1.10.3

[1.10.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.10.1...v1.10.2

[1.10.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.10.0...v1.10.1

[1.10.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.9.0...v1.10.0

[1.9.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.8.1...v1.9.0

[1.8.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.8.0...v1.8.1

[1.8.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.7.3...v1.8.0

[1.7.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.7.2...v1.7.3

[1.7.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.7.1...v1.7.2

[1.7.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.7.0...v1.7.1

[1.7.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.6.0...v1.7.0

[1.6.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.5.0...v1.6.0

[1.5.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.4.1...v1.5.0

[1.4.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.4.0...v1.4.1

[1.4.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.3.9...v1.4.0

[1.3.9]:
https://redirect.github.com/crate-ci/typos/compare/v1.3.8...v1.3.9

[1.3.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.3.7...v1.3.8

[1.3.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.3.6...v1.3.7

[1.3.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.3.5...v1.3.6

[1.3.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.3.4...v1.3.5

[1.3.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.3.3...v1.3.4

[1.3.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.3.2...v1.3.3

[1.3.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.3.1...v1.3.2

[1.3.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.3.0...v1.3.1

[1.3.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.2.1...v1.3.0

[1.2.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.2.0...v1.2.1

[1.2.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.1.9...v1.2.0

[1.1.9]:
https://redirect.github.com/crate-ci/typos/compare/v1.1.8...v1.1.9

[1.1.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.1.7...v1.1.8

[1.1.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.1.6...v1.1.7

[1.1.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.1.5...v1.1.6

[1.1.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.1.4...v1.1.5

[1.1.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.1.3...v1.1.4

[1.1.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.1.2...v1.1.3

[1.1.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.1.1...v1.1.2

[1.1.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.1.0...v1.1.1

[1.1.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.11...v1.1.0

[1.0.11]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.10...v1.0.11

[1.0.10]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.9...v1.0.10

[1.0.9]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.8...v1.0.9

[1.0.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.7...v1.0.8

[1.0.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.6...v1.0.7

[1.0.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.5...v1.0.6

[1.0.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.4...v1.0.5

[1.0.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.3...v1.0.4

[1.0.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.2...v1.0.3

[1.0.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.1...v1.0.2

[1.0.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.0...v1.0.1

[1.0.0]:
https://redirect.github.com/crate-ci/typos/compare/v0.4.0...v1.0.0

[0.4.0]:
https://redirect.github.com/crate-ci/typos/compare/v0.3.0...v0.4.0

[0.3.0]:
https://redirect.github.com/crate-ci/typos/compare/v0.2.0...v0.3.0

[0.2.0]:
https://redirect.github.com/crate-ci/typos/compare/v0.1.4...v0.2.0

###
[`v1.35.0`](https://redirect.github.com/crate-ci/typos/blob/HEAD/CHANGELOG.md#014---2019-11-03)

[Compare
Source](https://redirect.github.com/crate-ci/typos/compare/v1.34.0...v1.35.0)

##### Bug Fixes

- Ignore numbers as identifiers
([a00831c8](https://redirect.github.com/crate-ci/typos/commit/a00831c847b7efd81be520ea9b5d02f70555351f))
- Improve the organization of --help
([a48a457c](https://redirect.github.com/crate-ci/typos/commit/a48a457cc3ca817850118e2a2fb8b20fecdd40b8))

##### Features

- Dump files, identifiers, and words
([ce365ae1](https://redirect.github.com/crate-ci/typos/commit/ce365ae12e12fddfb6fc42a7f1e5ea71834d6051),
closes
[#&#8203;41](https://redirect.github.com/crate-ci/typos/issues/41))
- Give control over allowed identifier characters for leading vs rest
([107308a6](https://redirect.github.com/crate-ci/typos/commit/107308a655a425eb593bf5e4928572c16e6a9bdd))

##### Performance

- Use standard identifier rules to avoid doing umber checks
([107308a6](https://redirect.github.com/crate-ci/typos/commit/107308a655a425eb593bf5e4928572c16e6a9bdd))
- Only do hex check if digits are in identifiers
([68cd36d0](https://redirect.github.com/crate-ci/typos/commit/68cd36d0de90226dbc9d31c2ce6d8bf6b69adb5c))

<!-- next-url -->

[Unreleased]:
https://redirect.github.com/crate-ci/typos/compare/v1.35.0...HEAD

[1.35.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.34.0...v1.35.0

[1.34.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.33.1...v1.34.0

[1.33.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.33.0...v1.33.1

[1.33.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.32.0...v1.33.0

[1.32.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.31.2...v1.32.0

[1.31.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.31.1...v1.31.2

[1.31.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.31.0...v1.31.1

[1.31.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.30.3...v1.31.0

[1.30.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.30.2...v1.30.3

[1.30.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.30.1...v1.30.2

[1.30.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.30.0...v1.30.1

[1.30.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.29.10...v1.30.0

[1.29.10]:
https://redirect.github.com/crate-ci/typos/compare/v1.29.9...v1.29.10

[1.29.9]:
https://redirect.github.com/crate-ci/typos/compare/v1.29.8...v1.29.9

[1.29.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.29.7...v1.29.8

[1.29.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.29.6...v1.29.7

[1.29.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.29.5...v1.29.6

[1.29.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.29.4...v1.29.5

[1.29.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.29.3...v1.29.4

[1.29.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.29.2...v1.29.3

[1.29.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.29.1...v1.29.2

[1.29.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.29.0...v1.29.1

[1.29.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.28.4...v1.29.0

[1.28.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.28.3...v1.28.4

[1.28.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.28.2...v1.28.3

[1.28.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.28.1...v1.28.2

[1.28.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.28.0...v1.28.1

[1.28.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.27.3...v1.28.0

[1.27.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.27.2...v1.27.3

[1.27.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.27.1...v1.27.2

[1.27.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.27.0...v1.27.1

[1.27.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.26.8...v1.27.0

[1.26.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.26.7...v1.26.8

[1.26.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.26.6...v1.26.7

[1.26.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.26.5...v1.26.6

[1.26.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.26.4...v1.26.5

[1.26.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.26.3...v1.26.4

[1.26.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.26.2...v1.26.3

[1.26.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.26.1...v1.26.2

[1.26.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.26.0...v1.26.1

[1.26.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.25.0...v1.26.0

[1.25.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.24.6...v1.25.0

[1.24.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.24.5...v1.24.6

[1.24.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.24.4...v1.24.5

[1.24.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.24.3...v1.24.4

[1.24.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.24.2...v1.24.3

[1.24.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.24.1...v1.24.2

[1.24.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.24.0...v1.24.1

[1.24.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.23.7...v1.24.0

[1.23.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.23.6...v1.23.7

[1.23.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.23.5...v1.23.6

[1.23.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.23.4...v1.23.5

[1.23.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.23.3...v1.23.4

[1.23.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.23.2...v1.23.3

[1.23.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.23.1...v1.23.2

[1.23.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.23.0...v1.23.1

[1.23.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.22.9...v1.23.0

[1.22.9]:
https://redirect.github.com/crate-ci/typos/compare/v1.22.8...v1.22.9

[1.22.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.22.7...v1.22.8

[1.22.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.22.6...v1.22.7

[1.22.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.22.5...v1.22.6

[1.22.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.22.4...v1.22.5

[1.22.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.22.3...v1.22.4

[1.22.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.22.2...v1.22.3

[1.22.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.22.1...v1.22.2

[1.22.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.22.0...v1.22.1

[1.22.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.21.0...v1.22.0

[1.21.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.20.10...v1.21.0

[1.20.10]:
https://redirect.github.com/crate-ci/typos/compare/v1.20.9...v1.20.10

[1.20.9]:
https://redirect.github.com/crate-ci/typos/compare/v1.20.8...v1.20.9

[1.20.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.20.7...v1.20.8

[1.20.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.20.6...v1.20.7

[1.20.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.20.5...v1.20.6

[1.20.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.20.4...v1.20.5

[1.20.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.20.3...v1.20.4

[1.20.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.20.2...v1.20.3

[1.20.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.20.1...v1.20.2

[1.20.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.20.0...v1.20.1

[1.20.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.19.0...v1.20.0

[1.19.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.18.2...v1.19.0

[1.18.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.18.1...v1.18.2

[1.18.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.18.0...v1.18.1

[1.18.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.17.2...v1.18.0

[1.17.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.17.1...v1.17.2

[1.17.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.17.0...v1.17.1

[1.17.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.26...v1.17.0

[1.16.26]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.25...v1.16.26

[1.16.25]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.24...v1.16.25

[1.16.24]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.23...v1.16.24

[1.16.23]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.22...v1.16.23

[1.16.22]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.21...v1.16.22

[1.16.21]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.20...v1.16.21

[1.16.20]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.19...v1.16.20

[1.16.19]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.18...v1.16.19

[1.16.18]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.17...v1.16.18

[1.16.17]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.16...v1.16.17

[1.16.16]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.15...v1.16.16

[1.16.15]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.14...v1.16.15

[1.16.14]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.13...v1.16.14

[1.16.13]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.12...v1.16.13

[1.16.12]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.11...v1.16.12

[1.16.11]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.10...v1.16.11

[1.16.10]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.9...v1.16.10

[1.16.9]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.8...v1.16.9

[1.16.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.7...v1.16.8

[1.16.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.6...v1.16.7

[1.16.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.5...v1.16.6

[1.16.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.4...v1.16.5

[1.16.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.3...v1.16.4

[1.16.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.2...v1.16.3

[1.16.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.1...v1.16.2

[1.16.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.16.0...v1.16.1

[1.16.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.15.10...v1.16.0

[1.15.10]:
https://redirect.github.com/crate-ci/typos/compare/v1.15.9...v1.15.10

[1.15.9]:
https://redirect.github.com/crate-ci/typos/compare/v1.15.8...v1.15.9

[1.15.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.15.7...v1.15.8

[1.15.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.15.6...v1.15.7

[1.15.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.15.5...v1.15.6

[1.15.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.15.4...v1.15.5

[1.15.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.15.3...v1.15.4

[1.15.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.15.2...v1.15.3

[1.15.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.15.1...v1.15.2

[1.15.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.15.0...v1.15.1

[1.15.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.12...v1.15.0

[1.14.12]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.11...v1.14.12

[1.14.11]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.10...v1.14.11

[1.14.10]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.9...v1.14.10

[1.14.9]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.8...v1.14.9

[1.14.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.7...v1.14.8

[1.14.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.6...v1.14.7

[1.14.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.5...v1.14.6

[1.14.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.4...v1.14.5

[1.14.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.3...v1.14.4

[1.14.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.2...v1.14.3

[1.14.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.1...v1.14.2

[1.14.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.14.0...v1.14.1

[1.14.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.26...v1.14.0

[1.13.26]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.25...v1.13.26

[1.13.25]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.24...v1.13.25

[1.13.24]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.23...v1.13.24

[1.13.23]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.22...v1.13.23

[1.13.22]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.21...v1.13.22

[1.13.21]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.20...v1.13.21

[1.13.20]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.19...v1.13.20

[1.13.19]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.18...v1.13.19

[1.13.18]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.17...v1.13.18

[1.13.17]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.16...v1.13.17

[1.13.16]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.15...v1.13.16

[1.13.15]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.14...v1.13.15

[1.13.14]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.13...v1.13.14

[1.13.13]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.12...v1.13.13

[1.13.12]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.11...v1.13.12

[1.13.11]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.10...v1.13.11

[1.13.10]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.9...v1.13.10

[1.13.9]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.8...v1.13.9

[1.13.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.7...v1.13.8

[1.13.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.6...v1.13.7

[1.13.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.5...v1.13.6

[1.13.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.4...v1.13.5

[1.13.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.3...v1.13.4

[1.13.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.2...v1.13.3

[1.13.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.1...v1.13.2

[1.13.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.13.0...v1.13.1

[1.13.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.14...v1.13.0

[1.12.14]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.13...v1.12.14

[1.12.13]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.12...v1.12.13

[1.12.12]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.11...v1.12.12

[1.12.11]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.10...v1.12.11

[1.12.10]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.9...v1.12.10

[1.12.9]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.8...v1.12.9

[1.12.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.7...v1.12.8

[1.12.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.6...v1.12.7

[1.12.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.5...v1.12.6

[1.12.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.4...v1.12.5

[1.12.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.3...v1.12.4

[1.12.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.2...v1.12.3

[1.12.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.1...v1.12.2

[1.12.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.12.0...v1.12.1

[1.12.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.11.5...v1.12.0

[1.11.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.11.4...v1.11.5

[1.11.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.11.3...v1.11.4

[1.11.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.11.2...v1.11.3

[1.11.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.11.1...v1.11.2

[1.11.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.11.0...v1.11.1

[1.11.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.10.3...v1.11.0

[1.10.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.10.2...v1.10.3

[1.10.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.10.1...v1.10.2

[1.10.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.10.0...v1.10.1

[1.10.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.9.0...v1.10.0

[1.9.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.8.1...v1.9.0

[1.8.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.8.0...v1.8.1

[1.8.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.7.3...v1.8.0

[1.7.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.7.2...v1.7.3

[1.7.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.7.1...v1.7.2

[1.7.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.7.0...v1.7.1

[1.7.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.6.0...v1.7.0

[1.6.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.5.0...v1.6.0

[1.5.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.4.1...v1.5.0

[1.4.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.4.0...v1.4.1

[1.4.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.3.9...v1.4.0

[1.3.9]:
https://redirect.github.com/crate-ci/typos/compare/v1.3.8...v1.3.9

[1.3.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.3.7...v1.3.8

[1.3.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.3.6...v1.3.7

[1.3.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.3.5...v1.3.6

[1.3.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.3.4...v1.3.5

[1.3.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.3.3...v1.3.4

[1.3.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.3.2...v1.3.3

[1.3.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.3.1...v1.3.2

[1.3.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.3.0...v1.3.1

[1.3.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.2.1...v1.3.0

[1.2.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.2.0...v1.2.1

[1.2.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.1.9...v1.2.0

[1.1.9]:
https://redirect.github.com/crate-ci/typos/compare/v1.1.8...v1.1.9

[1.1.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.1.7...v1.1.8

[1.1.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.1.6...v1.1.7

[1.1.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.1.5...v1.1.6

[1.1.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.1.4...v1.1.5

[1.1.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.1.3...v1.1.4

[1.1.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.1.2...v1.1.3

[1.1.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.1.1...v1.1.2

[1.1.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.1.0...v1.1.1

[1.1.0]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.11...v1.1.0

[1.0.11]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.10...v1.0.11

[1.0.10]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.9...v1.0.10

[1.0.9]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.8...v1.0.9

[1.0.8]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.7...v1.0.8

[1.0.7]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.6...v1.0.7

[1.0.6]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.5...v1.0.6

[1.0.5]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.4...v1.0.5

[1.0.4]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.3...v1.0.4

[1.0.3]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.2...v1.0.3

[1.0.2]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.1...v1.0.2

[1.0.1]:
https://redirect.github.com/crate-ci/typos/compare/v1.0.0...v1.0.1

[1.0.0]:
https://redirect.github.com/crate-ci/typos/compare/v0.4.0...v1.0.0

[0.4.0]:
https://redirect.github.com/crate-ci/typos/compare/v0.3.0...v0.4.0

[0.3.0]:
https://redirect.github.com/crate-ci/typos/compare/v0.2.0...v0.3.0

[0.2.0]:
https://redirect.github.com/crate-ci/typos/compare/v0.1.4...v0.2.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/oxc-project/oxc).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS41MS4xIiwidXBkYXRlZEluVmVyIjoiNDEuNTEuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Cameron Clark <cameron.clark@hey.com>
2025-08-04 18:55:04 +01:00
Dunqing 3cdac4ce74 fix(isolated-declarations): optional parameter property misses undefined type (#12579)
[TypeScript Playground](https://www.typescriptlang.org/play/?#code/KYDwDg9gTgLgBAYwDYEMDOa4AUoEsBuKMwAwhAHZoxQCuCM0A6rjABYDyYMuFKSWKKCgC2wYlEwBvAFABIMHkLFEFKrXrQAFHNlRgARxq49AEwBccNbnIBzADQ6IXHuT4B+C+RrCARsCgOsvI0Pki4CHBgIWEInNy8SB5wPhAQSMAo5IHyikTAkbnEcS7uFla22XooJhRIAJ5wVTXk9cUJSV6+-oEAlHCSAL7SA0A)

Input:
```ts
export class PrivateConstructorWithOptionalParameters {
	private constructor(
		required: string,
		optional?: number,
		public publicOptional?: boolean,
		private privateOptional?: string,
		readonly readonlyOptional?: number,
	) {}
}
```

Output:

```ts
export declare class PrivateConstructorWithOptionalParameters {
    publicOptional?: boolean | undefined;
    private privateOptional?;
    readonly readonlyOptional?: number | undefined;
    private constructor();
}
```

optional parameter property should union the original type with `undefined`
2025-07-28 13:23:20 +00:00
Dunqing 4f9cb0b37b fix(isolated-declarations): crash when transforming a class with a parameter property in a private constructor (#12578)
* close #12557
2025-07-28 13:23:20 +00:00
Dunqing 9a9d78d71a fix(isolated-declarations): transformed parameter property has an incorrect type annotation (#12450)
* close #12361

Regressed by https://github.com/oxc-project/oxc/pull/12046
2025-07-23 13:43:52 +00:00
Dunqing 89da0272bc fix(isolated-declarations): incorrect error when exported type is locally shadowed by an unexported variable (#12466)
* close #12465

`Variable`, `Function`, and `TSModuleDeclaration` can be shadowed by type declaration, so we should check if there is a value reference to decide whether it should be retained.

Others like `Enum` and `Class` don't allow redeclaration, so don't need to check.
2025-07-23 10:35:00 +00:00
Dunqing 42976a8ed4 fix(isolated-declarations): produce incorrect types when getter/setter with different types (#12046)
close: #12023
2025-07-03 06:41:28 +00:00
Dunqing 957a3d5d88 fix(isolated-declarations): missing parameter properties of constructor overload (#11852)
close: #11784

The parameter properties of the constructor overload should be retained anyway.
2025-06-23 04:32:33 +00:00
Dunqing b8b3530cd1 fix(isolated-declarations): don't transform constructor params if they don’t have accessbility (#11842)
close: #11663
2025-06-22 10:59:31 +00:00
Boshen 25167f23ec perf(parser): parse ts type signature without rewind (#11443)
part of #11334
2025-06-02 14:49:00 +00:00
Dunqing 03e8aa9d24 test(isolated-declarations): fix multiline comment mismatch in windows (#11373)
Fixes https://github.com/oxc-project/oxc/actions/runs/15327109307/job/43124348533

I don't know why it failed in Windows, I just follow the Boshen way to solve the problem.
2025-05-29 15:29:47 +00:00
magic-akari daaa8f522e fix(parser): correctly parse decorators of property declaration (#11370)
- Closes: #11367

---------

Co-authored-by: Dunqing <dengqing0821@gmail.com>
2025-05-29 23:12:54 +08:00
magic-akari e93caa40de fix(isolated-declarations): Omit empty variable declarations (#11372)
- Closes: #11371
2025-05-29 22:44:18 +08:00
magic-akari 3249ab641e fix(isolated-declarations): correctly emit string property keys for non-identifiable name (#11329)
- Closes: #11318
- Closes: https://github.com/oxc-project/oxc/issues/11338
2025-05-28 10:46:34 +08:00
Dunqing 7126adb5e8 fix(isolated-declarations): type of class setter/getter cannot be inferred when the key is a global Symbol.xxx expression (#11236)
Similar to #11229, using `PropertyKey` to store accessor annotation because `[Symbol.xxx]` is not a static name.
2025-05-23 11:51:29 +00:00
Dunqing ac9638ec0f fix(isolated-declarations): object property key was generated incorrectly (#11231)
Just for aligning with `TypeScript`, the object key should be converted to a static property key when possible

```ts
const ObjectKeys = {
	a: 0,
	["b"]: 1,
	[`c`]: 2,
	[3]: 3,
	[-3]: 4,
	[4n]: 5,
};
```

```ts
declare const ObjectKeys: {
	a: number
	b: number
	c: number
	3: number
	[-3]: number
};
```

`BigInt` is invalid as a property key in TypeScript, so `4n` doesn't emit.
2025-05-23 11:51:28 +00:00
Dunqing 123e63c731 feat(isolated-declarations): report an error for object methods whose return type cannot be inferred (#11230)
The same as `class`, if the method's return type cannot be inferred, it should report an error.

```ts
const A = {
  method() {
//^^^^^^^ Method must have an explicit return type annotation with --isolatedDeclarations.
  }
}
```
2025-05-23 11:51:28 +00:00
Dunqing 9ec85003bc fix(isolated-declarations): incorrect type of object property accessor (#11229)
close: #11186
2025-05-23 11:51:28 +00:00