Commit graph

5445 commits

Author SHA1 Message Date
Boshen
82773cb455 feat(codegen): remove underscore from bigint (#7367)
closes #7285
closes #7286
2024-11-20 09:08:51 +00:00
oxc-bot
b6d5c0f33e
release(oxlint): v0.12.0 (#7366)
## [0.12.0] - 2024-11-20

- 20d9080 linter: [**BREAKING**] Override plugins array when passed in
config file (#7303) (camchenry)

### Features

- 1d9f528 linter: Implement `unicorn/prefer-string-raw` lint rule
(#7335) (Ryan Walker)
- d445e0f linter: Implement `unicorn/consistent-existence-index-check`
(#7262) (Ryan Walker)
- 01ddf37 linter: Add `allowReject` option to
`no-useless-promise-resolve-reject` (#7274) (no-yan)
- 755a31b linter: Support bind function case for compatibility with
`promise/no-return-wrap` (#7232) (no-yan)
- 428770e linter: Add `import/no-namespace` rule (#7229) (Dmitry
Zakharov)
- 9c91151 linter: Implement typescript/no-empty-object-type (#6977)
(Orenbek)
- 2268a0e linter: Support `overrides` config field (#6974) (DonIsaac)
- 3dcac1a linter: React/exhaustive-deps (#7151) (camc314)
- d3a0119 oxlint: Add `cwd` property to `LintRunner` (#7352) (Alexander
S.)

### Bug Fixes

- ba0b2ff editor: Reload workspace configuration after change (#7302)
(Alexander S.)
- bc0e72c linter: Handle user variables correctly for import/no_commonjs
(#7316) (Dmitry Zakharov)
- bf839c1 linter: False positive in `jest/expect-expect` (#7341)
(dalaoshu)
- ff2a1d4 linter: Move `exhaustive-deps` to `react` (#7251) (camc314)
- df5c535 linter: Revert unmatched rule error (#7257) (Cameron A
McHenry)
- c4ed230 linter: Fix false positive in eslint/no-cond-assign (#7241)
(camc314)
- ef847da linter: False positive in `jsx-a11y/iframe-has-title` (#7253)
(dalaoshu)
- 62b6327 linter: React/exhaustive-deps update span for unknown deps
diagnostic (#7249) (camc314)

### Documentation

- 4c124a8 editor/vscode: Update VS Code readme with installation
instructions and available features (#7306) (Nicholas Rayburn)

### Refactor

- c6a4868 linter: Temporarily remove unknown rules checking (#7260)
(camchenry)

### Testing

- 5190b7f editor: Add test setup (#7361) (Alexander S.)

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
2024-11-20 15:45:24 +08:00
overlookmotel
234c7b9fef feat(traverse): implement GatherNodeParts for member expression types (#7363)
`GatherNodeParts` was missing support for these types as entry points for collection.
2024-11-20 03:58:48 +00:00
Dunqing
c587dd3cd6 fix(codegen): do not print parenthesis for in expression in ArrowFunctionExpression (#7360)
Please check out [esbuild](https://esbuild.github.io/try/#dAAwLjI0LjAAACgpID0+ICIiIGluIHt9)
2024-11-19 14:29:18 +00:00
Boshen
d60801218e feat(transform_conformance): snapshot our transformed outputs (#7358) 2024-11-19 12:49:44 +00:00
Dunqing
6cfb5df9b9 feat(transformer): support generate proper binding name from ChainExpression (#7326) 2024-11-19 10:31:54 +00:00
Dunqing
58db9ef322 refactor(codegen): do not print unnecessary parentheses if both sides use the same logical operator (#7325)
As shown by the changing tests, we don't need to print parentheses for them.

### Comparison
In [esbuild](https://esbuild.github.io/try/#dAAwLjI0LjAAAGEgPz8gKGIgPz8gKGMgPz8gZCkpOwooYSA/PyAoYiA/PyAoYyA/PyBkKSkpOwooYSB8fCAoYiB8fCBjKSkgfHwgZDsKYSB8fCAoYiB8fCAoYyB8fCBkKSk7CmEgJiYgKChiICYmIGMpICYmIGQp), it will print parentheses as-is, in [SWC](https://play.swc.rs/?version=1.9.2&code=H4sIAAAAAAAAA0tUsLdX0EgCk8kgMkVT05pLIxGLMES8pgYkDiSTNTVBVIo1F5IgUDFIDKQ2UUFNTUEDKAykkjVBZIomAGEbiHtuAAAA&config=H4sIAAAAAAAAA1VQzW7DIAy%2B9ykin6tlyrHXTb3ttCdA1GmpACPbSIuqvPuAJml6w9%2Bv8ePQdXAXC6fuUZ5lSIYFeZsLIlNU81cQ0CmhWHZJ4biyKpVSztiQ%2BUmAGr6iVhPK8DkMsOJsoozEYd%2BQBb9xdBHPxF%2FeiJwd%2BossuVsVo7G68xXIhUSsv5TZYi27qSY59T1K%2BJBbn56W48vAOaoLTWuyUjDqLCz0%2FPYDTyRVNxovyw4QXHTjtF%2FdUiglIu%2FCKjXx6jf%2FYc1v6RDokhu5HL0etq5U0gLFu8BLuTZu6eDkZ7W3s8%2F%2FYy0r4MUBAAA%3D), we have the same output now
2024-11-19 10:31:53 +00:00
overlookmotel
c335f92ada perf(syntax): reorder operator enum variants (#7351)
Re-order enum variants of `AssignmentOperator`, `BinaryOperator` and `UnaryOperator`.

* `Exponential` moved to after `Remainder` (so with the rest of the arithmetic operators).
* `Shift*` operators follow arithmetic operators.
* `AssignmentOperator::Bitwise*` ops moved to before `Logical*` ops (so all ops which correspond to `BinaryOperator`s are together).
* `*Or` always before `*And`.
* Plus/Addition always before Minus/Subtraction.

The purpose is to make the various methods on these types maximally efficient:

1. Group together variants so that `AssignmentOperator::is_*` methods can be executed with the minimum number of operations (essentially `variant - min <= max`).
2. Align the variants of `AssignmentOperator` and `BinaryOperator` so that conversion methods added in #7350 become very cheap too (essentially `if variant - min <= max { Some(variant + offset) } else { None }`).
2024-11-19 01:23:28 +00:00
Dmitry Zakharov
bc0e72c1e2
fix(linter): handle user variables correctly for import/no_commonjs (#7316)
test case found in `typescript/no-require-imports`
2024-11-19 09:23:16 +08:00
Ryan Walker
1d9f528668
feat(linter): implement unicorn/prefer-string-raw lint rule (#7335)
Implements
[unicorn/refer-string-raw](https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/prefer-string-raw.md)
for #684
2024-11-19 09:22:40 +08:00
overlookmotel
2534cdecb7 feat(syntax): add AssignmentOperator::to_logical_operator and to_binary_operator methods (#7350)
Add methods to convert `AssignmentOperator` to `LogicalOperator` or `BinaryOperator`. e.g. `+=` -> `+`, `&&=` -> `&&`.
2024-11-19 01:12:11 +00:00
overlookmotel
41a0e60c3e refactor(ast)!: remove impl GetAddress for Function (#7343)
`impl GetAddress for Function` was added as a hack, in the absence of another way to get the `Address` of a `&Function` (https://github.com/oxc-project/backlog/issues/140).

Remove it, and use `Address:from_ptr` instead in JSX Refresh transform, which is only place using it.
2024-11-19 01:05:31 +00:00
overlookmotel
b5a202711c style(syntax): improve formatting (#7349)
Style nit. Adjust formatting.
2024-11-18 22:26:30 +00:00
dalaoshu
bf839c1dfa
fix(linter): false positive in jest/expect-expect (#7341)
closes #7237
2024-11-18 15:17:36 +00:00
leaysgur
167d2d560d chore(docs): Replace TAB with SPACE to render markdown correctly (#7337)
Possibly fixes #7336
2024-11-18 11:54:33 +00:00
overlookmotel
c84e892380 perf(ast): AstBuilder::vec1 use Vec::from_array_in (#7334)
`AstBuilder::vec1` can use `Vec::from_array_in` rather than creating a `Vec` and then pushing to it. This should optimize better.
2024-11-18 02:35:46 +00:00
overlookmotel
510b95d6c4 perf(transformer): use AstBuilder::vec_from_array (#7333)
Use `AstBuilder::vec_from_array` introduced in #7331 in the transformer, in place of creating a `Vec` with `Vec::with_capacity` and then pushing values to it.
2024-11-18 02:35:46 +00:00
overlookmotel
39afb48025 feat(allocator): introduce Vec::from_array_in (#7331)
Because we lack specialization in stable Rust, `Vec::from_iter_in` is unable to take advantage of the fact that `[T; N]` has a statically knowable size.

Introduce `Vec::from_array_in` for this case, which should be able to create the `Vec` with a single static-sized memcpy, or may allow the compiler to see that it can construct the array directly in the arena, rather than construct on stack and then copy to the arena.

Also add a corresponding `AstBuilder::vec_from_array` method, and use it in various places in codebase.
2024-11-18 02:35:46 +00:00
overlookmotel
1938a1d6d9 refactor(isolated_declarations): do not copy Vec unnecessarily (#7332)
This function receives an owned `oxc_allocator::Vec`. No need to copy the contents to a new `Vec` with `AstBuilder::vec_from_iter`, can just use the original.
2024-11-18 02:28:38 +00:00
overlookmotel
44fd962fbb perf(transformer/arrow-functions): move arguments transform checks to aid inlining (#7322)
Move the cheap "does arguments need to be transformed" checks introduced in #7321 into `enter_identifier_reference` and `enter_binding_identifier`, and mark those methods `#[inline]`. These hot paths can then usually execute without a function call.

This wins back the other half of the perf hit of #7234.
2024-11-17 10:49:17 +00:00
overlookmotel
26d3e96aca perf(transformer/arrow-functions): store state of whether arguments needs transform (#7321)
Track whether `arguments` needs to be transformed. If it doesn't, can skip expensive checks for whether `IdentifierReference`s and `BindingIdentifier`s names are `arguments` or not.

This recovers about half the performance hit of #7234.
2024-11-17 10:49:16 +00:00
overlookmotel
871e19bea2 refactor(transformer/arrow-function): comments on possible improvement (#7320) 2024-11-17 10:07:35 +00:00
overlookmotel
ea08c1f495 refactor(transformer/arrow-function): reserve correct capacity for Vec (#7319) 2024-11-17 10:07:35 +00:00
overlookmotel
e09d2df448 perf(transformer/arrow-function): create super method binding names lazily (#7313)
Key `super` getter/setter hash map with original property name `&str`, instead of generated binding name. This allows a couple of improvements:

* Generate binding names for `super` getters/setters lazily, only when they're created, rather than every time you encounter a `super`.
* Don't allocate strings into arena which are never used as part of AST. Use `CompactString` for building those strings instead.
2024-11-17 10:07:34 +00:00
overlookmotel
5d853869eb refactor(transformer/arrow-functions): use IndexMap for super getter/setters (#7317)
Generate getter/setter declarations in same order as Babel by using `IndexMap` instead of `HashMap` to store `super` getter/setter method details.
2024-11-17 10:07:34 +00:00
overlookmotel
0a2470399e perf(transformer/arrow-function): optimize generate_super_binding_name (#7312)
Optimize this function in various ways:

* Return a static `Atom` (rather than allocating into arena) if no `property`.
* Reserve capacity for `ArenaString` at start.
* Make path for unicode identifiers (very rare case) `#[cold]` and `#[inline(never)]`.
* Slightly faster uppercase conversion.
2024-11-17 10:07:34 +00:00
overlookmotel
389b84e4ff fix(transformer/arrow-function): handle unicode when capitalizing property name (#7311)
Previously was assuming property name starts with an ASCII character. If it started with a multi-byte unicode char, `&property[1..]` would panic.
2024-11-17 10:07:34 +00:00
overlookmotel
5cfe0b623e refactor(transformer/arrow-function): generate_super_binding_name take &str and &TraverseCtx (#7310)
Pure refactor. Take `&str` rather than `&Atom` (1 less indirection) and `&TraverseCtx<'a>` (more conventional).
2024-11-17 10:07:33 +00:00
Dunqing
7d75130865 fix(transformer/async-to-generator): arguments isn't correct after transformation (#7234)
Fix due to this plugin transforming the async method and async arrow function, it caused arguments no longer point the original function.

For example:

Before

```js
class Cls {
  async method() {
    () => {
    	console.log(arguments)
    }
  }
}
```

After:

```js
class Cls {
  method() {
    var _arguments = arguments;
    return babelHelpers.asyncToGenerator(function* () {
      () => {
        console.log(_arguments);
      };
    })();
  }
}
```

In this way, the `_arguments` is its original function's arguments

### For performance regression

It seems we need to check the IdentifierReference and BindingIdentifier if it's an `arguments`, that causes a significant regression, we may need a cheap way to do checking
2024-11-17 05:01:44 +00:00
Ryan Walker
d445e0f612
feat(linter): implement unicorn/consistent-existence-index-check (#7262)
[unicorn/consistent-existence-index-check](https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/consistent-existence-index-check.md)
for #684

---------

Co-authored-by: Cam McHenry <camchenry@users.noreply.github.com>
2024-11-16 20:07:52 +00:00
Song Gao
cf3415b0e4
chore(doc): replace main/master to tag/commit to make the url always accessible (#7298) 2024-11-16 21:00:30 +08:00
7086cmd
cf99be0a0d fix(minifier): do not compare bigint with object (#7294)
@Boshen, could you please update the snap of runtime and commit to this PR? I want to see the effects after the unit tests are added.
2024-11-16 06:01:06 +00:00
camchenry
20d9080d59 fix(linter)!: override plugins array when passed in config file (#7303)
- fixes https://github.com/oxc-project/oxc/issues/6896

When the `plugins` config property is specified, it will overwrite the default plugins array. This allows the plugins list to be easily customized and allows for disabling default plugins at the same time as enabling non-default ones.

- example: `{ "plugins": [] }` will enable no plugins.
- example: `{ }` will enable default plugins.
- example: `{ "plugins": ["typescript", "import"] }` will enable only the import and typescript plugins.
2024-11-16 05:54:05 +00:00
overlookmotel
d135d3ec48 feat(data_structures): add methods to SparseStack (#7305)
Add methods to `SparseStack` to get the filled entries as a slice, and get their length.
2024-11-16 05:36:36 +00:00
overlookmotel
4acf2db82b refactor(transformer): helper loader methods take Span (#7304)
`TransformCtx::helper_call` and `TransformCtx::helper_call_expr` take a `Span`. Sometimes the helper call replaces some original code, and should have the same span as the original code.
2024-11-16 05:36:35 +00:00
overlookmotel
faf8dde4ff feat(traverse): add methods for creating Expression::Identifiers (#7301)
It's a common pattern in transformer to call `ctx.create_ident_reference()` and then convert to an `Expression` with `Expression::Identifier(ctx.ast.alloc(ident))`.

Add methods to do this in a single method call.
2024-11-16 05:36:35 +00:00
overlookmotel
1cbc624a8b refactor(traverse)!: rename TraverseCtx methods for creating IdentifierReferences (#7300)
`create_reference_id` was a confusing name, as it doesn't return a `ReferenceId`. Rename these methods to more clearly represent what they do.
2024-11-15 16:44:08 +00:00
overlookmotel
a0766e6a7f fix(codegen): fix arithmetic overflow printing unspanned nodes (#7292)
Similar to #7289. Check if `span.end` is 0 before doing `span.end - 1`, to prevent arithmetic overflow.

Also changed all checks to `span.end > 0`, just for consistency.
2024-11-15 16:04:02 +00:00
overlookmotel
33ec4e6182 fix(codegen): fix arithmetic overflow printing unspanned NewExpression (#7289)
`self.span.end - 1` overflows if the `NewExpression` is generated in transformer and has no span, so `self.span.end == 0`.
2024-11-15 02:56:49 +00:00
Song Gao
8da23692fc
build(traverse): generate files in parallel (#7281)
Create type files in parallel. Although it's already pretty fast, always better to be faster.
2024-11-14 23:04:53 +00:00
overlookmotel
f0affa20c6 docs(ast): improve docs examples for PropertyDefinition (#7287) 2024-11-14 22:28:14 +00:00
Boshen
b57d00d6fb fix(tasks/compat_data): fix misplaced features (#7284)
closes #7279
2024-11-14 16:36:16 +00:00
overlookmotel
9f5ae56810 refactor(transformer/nullish-coalescing): split main logic into separate function (#7273)
Small refactor. Move main logic of the transform into a separate function, to allow `enter_expression` to be inlined.
2024-11-14 16:17:23 +00:00
overlookmotel
345fbb9da3 refactor(transformer/nullish-coalescing): avoid repeated symbol lookups (#7272)
`clone_expression` was unnecessarily looking up the `SymbolId` of references multiple times. Use `BoundIdentifier` instead to avoid that.

Notes:

* `create_conditional_expression` has to take all parts as `Expression`s just to support `this ?? something`.
* `TraverseCtx::is_static` also handles `Super`, but can skip that in this case as `super ?? something` is not valid syntax.
2024-11-14 16:17:23 +00:00
overlookmotel
5b5c8a9bdb fix(transformer/nullish-coalescing): correct span (#7269)
Transformed expression inherit same `Span` as the input.
2024-11-14 16:17:22 +00:00
overlookmotel
e219ae8c94 docs(transformer/nullish-coalescing): clarify doc comment (#7268)
Expand doc comment for `create_conditional_expression` to clarify what it does.
2024-11-14 16:17:21 +00:00
no-yan
01ddf37843
feat(linter): add allowReject option to no-useless-promise-resolve-reject (#7274)
followup to #7232.
2024-11-14 14:06:55 +00:00
overlookmotel
84038ee434 refactor(semantic): shorten code (#7277)
Tiny refactor. No need for `matches!` here.
2024-11-14 12:50:06 +00:00
overlookmotel
9e85cc10c9 refactor(semantic): remove duplicated code (#7276)
`if matches!(self.kind, TSModuleDeclarationKind::Global)` at top of function already performed this check, no need to check it again.
2024-11-14 12:50:04 +00:00
no-yan
755a31bda7
feat(linter): support bind function case for compatibility with promise/no-return-wrap (#7232)
part of #4655

### Summary

Logic has been added to handle bind functions, unifying the
implementations of `unicorn/no-useless-promise-resolve-reject` and
`promise/no-return-wrap`.
This enables detection of the following code:

```javascript
foo().then((function() { return Promise.resolve(4) }).bind(this))
```

Merging this PR will allow this rule to pass all test cases of
promise/no-return-wrap without options. Additionally, merging #7274 will
ensure that all test cases are passed.
2024-11-14 19:33:42 +08:00
Dmitry Zakharov
428770edee
feat(linter): add import/no-namespace rule (#7229) 2024-11-14 19:23:56 +08:00
camc314
ff2a1d4937 fix(linter): move exhaustive-deps to react (#7251)
@Boshen lemme know if this is incorrect, but i noticed that `rules-of-hooks` lives inside `react` not `react-hooks`

1f2a6c666f/crates/oxc_linter/src/config/rules.rs (L291-L292)

1f2a6c666f/crates/oxc_linter/src/options/filter.rs (L254)
2024-11-14 08:02:26 +00:00
Alexander S.
216d533b01
fix(language_server): revalidate files when oxlint config is changing (#7259)
![lsp-refresh-files](https://github.com/user-attachments/assets/e6b64f73-966d-490a-9191-b3ec64d3ac1e)

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2024-11-14 10:45:17 +08:00
overlookmotel
10cdce9b67 style(ast): add line break (#7271) 2024-11-13 15:45:44 +00:00
ottomated
897d3b1567 feat(ast): serialize StringLiterals to ESTree without raw (#7263)
#7211 alternative. Makes the `raw` field on estree literals optional.
2024-11-13 15:37:30 +00:00
overlookmotel
e84ea2c3c6 refactor(traverse)!: remove TraverseCtx::clone_identifier_reference (#7266)
Remove `TraverseCtx::clone_identifier_reference`.

This API encourages unnecessary repeated lookups of the `SymbolId` for a reference. It is preferable to use `MaybeBoundIdentifier` which only looks up the `SymbolId` once.
2024-11-13 15:12:35 +00:00
overlookmotel
8c754b1b43 feat(traverse): introduce MaybeBoundIdentifier (#7265)
`MaybeBoundIdentifier` is similar to `BoundIdentifier`, but can be used where the identifier may or may not have have a `SymbolId` (may or may not be bound).

Typical usage:

```rs
// Create `MaybeBoundIdentifier` from an existing `IdentifierReference`
let binding = MaybeBoundIdentifier::from_identifier_reference(ident, ctx);

// Generate `IdentifierReference`s and insert them into AST
assign_expr.left = binding.create_write_target(ctx);
assign_expr.right = binding.create_read_expression(ctx);
```
2024-11-13 15:12:33 +00:00
overlookmotel
de472ca7c0 refactor(ast): move StringLiteral definition higher up (#7270)
Pure refactor. `StringLiteral` definition was sandwiched in the middle of RegExp-related code. Move it higher up in `literal.rs`.

All the rest of the diff is just re-ordering generated code.
2024-11-13 13:37:37 +00:00
overlookmotel
834c94d9d2 docs(traverse): tidy doc comments for TraverseCtx::is_static (#7267)
Better describe what this method does in its doc comment, and tidy up wording a little.
2024-11-13 11:40:07 +00:00
overlookmotel
7a4872818e refactor(traverse): reorder imports (#7264) 2024-11-13 11:02:37 +00:00
Orenbek
9c91151603
feat(linter): implement typescript/no-empty-object-type (#6977) 2024-11-13 09:31:16 +00:00
DonIsaac
2268a0ef90 feat(linter): support overrides config field (#6974)
Part of #5653
2024-11-13 05:40:59 +00:00
camchenry
c6a48684c3 refactor(linter): temporarily remove unknown rules checking (#7260)
I had intended to leave this in until we could rework some of the rule/plugin name resolution code, however this is causing issues with merging https://github.com/oxc-project/oxc/pull/6974. The mutability of `self` is difficult to resolve in that PR without more drastic changes. Since this isn't currently helping us out, I am simply removing the code for now until we can revisit this.
2024-11-13 03:41:03 +00:00
Cameron A McHenry
df5c535dd0
fix(linter): revert unmatched rule error (#7257)
- related to https://github.com/oxc-project/oxc/issues/6988

This is causing a lot of errors currently such as
https://github.com/oxc-project/oxc/issues/7233. I think we need to
handle rule names more robustly first:

- https://github.com/oxc-project/oxc/issues/7240
- https://github.com/oxc-project/oxc/issues/7082
- https://github.com/oxc-project/oxc/discussions/7242

then, I think we can revisit this and maybe implement it as an actual
lint plugin too? https://github.com/oxc-project/oxc/discussions/7086
2024-11-13 09:06:20 +08:00
camc314
c4ed230f8a fix(linter): fix false positive in eslint/no-cond-assign (#7241)
fixes #7238
2024-11-12 14:45:38 +00:00
overlookmotel
740ba4bcbd docs(ast): correct doc comment for StringLiteral (#7255)
Correct doc comment for `StringLiteral`'s `value` field. The doc comment was wrong.
2024-11-12 13:47:16 +00:00
dalaoshu
ef847dab9c
fix(linter): false positive in jsx-a11y/iframe-has-title (#7253)
closes #7243
2024-11-12 13:14:50 +00:00
overlookmotel
44375a5662 refactor(ast)!: rename TSEnumMemberName enum variants (#7250)
Variants of `TSEnumMemberName` were previously only prefixed with `Static` to avoid naming conflicts with the variants inherited from `Expression` for non-static member names. #7219 removed the variants inherited from `Expression`, so all variants are now static. So we can shorten the names again (back to what they were before `inherit_variants!` was introduced).
2024-11-12 12:22:21 +00:00
overlookmotel
d3d58f8ace refactor(ast): remove inherit_variants! from TSEnumMemberName (#7248)
#7219 removed all variants of `TSEnumMemberName` except `IdentifierName` and `StringLiteral`. It no longer inherits variants from `Expression`, so we can remove the `inherit_variants!` macro wrapper.

The discriminants no longer need to avoid clashes with `Expression`'s, so they can start at 0.
2024-11-12 12:22:20 +00:00
camc314
62b6327879 fix(linter): react/exhaustive-deps update span for unknown deps diagnostic (#7249)
Relates to #7246
2024-11-12 11:55:50 +00:00
camc314
3dcac1ae0b feat(linter): react/exhaustive-deps (#7151)
Firstly, a massive thanks to @alisnic for starting this (incredibly complicated) lint rule in https://github.com/oxc-project/oxc/pull/2637 !

still a draft. current state:

3x false positives (all todo with refs)

3x false negatives (TS will catch these
13x false negatvies todo with refs
1x false negative TODO

closes  #2637
relates to #2174
2024-11-12 11:42:47 +00:00
overlookmotel
c5f4ee7a82 fix(transformer): correct code comments (#7247)
Follow-on after #7199. Just correct typos in a couple of comments.
2024-11-12 11:09:22 +00:00
Boshen
20fe3cd6e7
chore(semantic): fix doc 2024-11-12 12:00:16 +08:00
Boshen
4740642926
chore(semantic): rename examples/simple.rs to examples/semantic.rs 2024-11-12 11:55:58 +08:00
Boshen
1282221e36 fix(codegen): print comments when block is empty (#7236)
part of #7190
2024-11-11 11:20:25 +00:00
7086cmd
0d6a66aa9e test(minifier): fix minimize condition tests (#7222) 2024-11-11 08:36:19 +00:00
Boshen
080a67be16 test(semantic): semantic checker store conformance pass/fail info in a separate file (#7235)
closes #6069
2024-11-11 08:13:13 +00:00
oxc-bot
de107246c8
release(crates): v0.36.0 (#7227)
## [0.36.0] - 2024-11-09

- b11ed2c ast: [**BREAKING**] Remove useless `ObjectProperty::init`
field (#7220) (Boshen)

- 0e4adc1 ast: [**BREAKING**] Remove invalid expressions from
`TSEnumMemberName` (#7219) (Boshen)

- 846711c transformer: [**BREAKING**] Change API to take a
`&TransformOptions` instead of `TransformOptions` (#7213) (Boshen)

- 092de67 types: [**BREAKING**] Append `rest` field into `elements` for
objects and arrays to align with estree (#7212) (ottomated)

- d1d1874 ast: [**BREAKING**] Change `comment.span` to real position
that contain `//` and `/*` (#7154) (Boshen)

- 843bce4 ast: [**BREAKING**] `IdentifierReference::reference_id` return
`ReferenceId` (#7126) (overlookmotel)

### Features

- cc8a191 ast: Methods on AST nodes to get `scope_id` etc (#7127)
(overlookmotel)
- dc0215c ast_tools: Add #[estree(append_to)], remove some custom
serialization code (#7149) (ottomated)
- 9d6cc9d estree: ESTree compatibility for all literals (#7152)
(ottomated)
- b74686c isolated-declarations: Support transform TSExportAssignment
declaration (#7204) (Dunqing)
- ad3a2f5 tasks/compat_data: Generate our own compat table (#7176)
(Boshen)
- b4258ee transformer: Add defaulted `Module::Preserve` option (#7225)
(Boshen)
- 324c3fe transformer: Add `TransformOptions::module` option (#7188)
(Boshen)
- a166a4a transformer: Add esbuild comma separated target API
`--target=es2020,chrome58` (#7210) (Boshen)
- 3a20b90 transformer: Add es target to `engineTargets` (#7193) (Boshen)
- 22898c8 transformer: Warn BigInt when targeting < ES2020 (#7184)
(Boshen)
- a579011 transformer: Add features `ES2018NamedCapturingGroupsRegex`
and `ES2018LookbehindRegex` (#7182) (Boshen)
- 8573f79 transformer: Turn on async_to_generator and
async_generator_functions plugins in enable_all (#7135) (Dunqing)
- df77241 transformer: Enable `ArrowFunctionConverter` in
`async-to-generator` and `async-generator-functions` plugins (#7113)
(Dunqing)
- b6a5750 transformer/arrow-function-converter: Move scope to changed
scope for `this_var` if scope have changed (#7125) (Dunqing)
- 1910227 transformer/async-to-generator: Support inferring the function
name from the ObjectPropertyValue's key (#7201) (Dunqing)
- ffa8604 transformer/async-to-generator: Do not transform await
expression if is not inside async function (#7138) (Dunqing)
- e536d47 transformer/babel: Add support for trying to get the `Module`
from `BabelPlugins` (#7218) (Dunqing)
- 5cfdc05 transformer/typescript: Support transform `export =` and
`import = require(...)` when module is commonjs (#7206) (Dunqing)

### Bug Fixes

- c82b273 transformer/async-generator-functions: Only transform object
method in exit_function (#7200) (Dunqing)
- b2a888d transformer/async-generator-functions: Incorrect
transformation for `for await` if it's not placed in a block (#7148)
(Dunqing)
- 19892ed transformer/async-generator-functions: Transform incorrectly
for `for await` if it's in LabeledStatement (#7147) (Dunqing)
- ede10dc transformer/async-to-generator: Incorrect transform when super
expression is inside async method (#7171) (Dunqing)
- 293d072 transformer/async-to-generator: Only transform object method
in exit_function (#7199) (Dunqing)
- ae692d7 transformer/async_to_generator: Fix checking if function is
class method (#7117) (overlookmotel)
- eea4ab8 transformer/helper-loader: Incorrect `SymbolFlags` for default
import when `SourceType` is script (#7226) (Dunqing)

### Refactor

- d27e14f ast: `AstKind::as_*` methods take `self` (#5546)
(overlookmotel)
- fac5042 ast: Use `scope_id` etc methods (#7130) (overlookmotel)
- a297765 minifier: Use `map` and `and_then` instead of let else (#7178)
(7086cmd)
- fc86703 napi/transform: Change test files to TypeScript (#7221)
(Boshen)
- c5485ae semantic: Add `ancestor_kinds` iterator function (#7217)
(camchenry)
- abf1602 semantic: Rename `iter_parents` to `ancestors` (#7216)
(camchenry)
- 42171eb semantic: Rename `ancestors` to `ancestor_ids` (#7215)
(camchenry)
- de56083 transformer: Add `impl TryFrom<EngineTargets> for EnvOptions`
(#7191) (Boshen)
- 0a43c64 transformer: Move `ESTarget` to its own file (#7189) (Boshen)
- 0e1f12c transformer: Remove unimplemented `EnvOptions::bugfixes`
(#7162) (Boshen)
- a981caf transformer: Add `Engine` enum for `EngineTargets` (#7161)
(Boshen)
- 8340243 transformer: Rename `Query` to `BrowserslistQuery` (#7143)
(Boshen)
- 481f7e6 transformer: Change `Targets` to `EngineTargets` (#7142)
(Boshen)
- 55e6989 transformer: Deserialize engine target strings to specific
keys (#7139) (Boshen)
- fdfd9a4 transformer: Use `scope_id` etc methods (#7128)
(overlookmotel)
- ff8bd50 transformer: Move implementation of ArrowFunction to
common/ArrowFunctionConverter (#7107) (Dunqing)
- 4a515be transformer/arrow-function-coverter: Rename function name and
add some comments to explain confusing parts. (#7203) (Dunqing)
- c307e1b transformer/arrow-functions: Pass `ArenaBox` as function param
(#7169) (overlookmotel)
- 217d433 transformer/arrow-functions: Remove unused `&mut self`
function param (#7165) (overlookmotel)
- 426df71 transformer/arrow-functions: Use `scope_id` method (#7164)
(overlookmotel)
- 11c5e12 transformer/arrow-functions: Correct comments (#7163)
(overlookmotel)
- 1238506 transformer/async-generator-function: Remove inactive
`#[allow(clippy::unused_self)]` attrs (#7167) (overlookmotel)
- 84ee581 transformer/async-generator-functions: Simplify identifying
whether within an async generator function (#7170) (overlookmotel)
- 1b12328 transformer/async-generator-functions: Use `clone` not
`clone_in` on `LabelIdentifier` (#7172) (overlookmotel)
- cd1006f transformer/async-generator-functions: Do not transform yield
expression where inside generator function (#7134) (Dunqing)
- 2c5734d transformer/async-generator-functions: Do not transform await
expression where inside ArrowFunctionExpression (#7132) (Dunqing)
- 5ce83bd transformer/async-generator-functions: Remove dead code for
handle await expression (#7131) (Dunqing)
- e04ee97 transformer/async-generator-functions: Move handling of
`MethodDefinition`'s value to `exit_function` (#7106) (Dunqing)
- b57d5a5 transformer/async-to-generator: Remove unused `&self` function
param (#7166) (overlookmotel)
- f80085c transformer/async-to-generator: Move handling of
`MethodDefinition`'s value to `exit_function` (#7105) (Dunqing)
- e2241e6 transformer/jsx-self: Remove unused `&self` function params
(#7159) (overlookmotel)
- 1dfd241 transformer/optional-catch-binding: Remove inactive
`#[allow(clippy::unused_self)]` attr (#7158) (overlookmotel)
- fd9b44c transformer/typescript: Remove inactive
`#[allow(clippy::unused_self)]` attr (#7160) (overlookmotel)
- cacfb9b traverse: Use `symbol_id` etc methods (#7129) (overlookmotel)

### Styling

- 38a6df6 transformer/arrow-functions: Semicolon after return statements
(#7168) (overlookmotel)
- 64b7e3a transformer/async-generator-functions: Import
`oxc_allocator::Vec` as `ArenaVec` (#7173) (overlookmotel)

### Testing

- be819dd napi/transform: Add test for not default es transform (Boshen)

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
2024-11-10 00:31:14 +08:00
Dunqing
eea4ab830a fix(transformer/helper-loader): incorrect SymbolFlags for default import when SourceType is script (#7226) 2024-11-09 14:32:44 +00:00
Boshen
b4258ee58e feat(transformer): add defaulted Module::Preserve option (#7225) 2024-11-09 12:55:13 +00:00
oxc-bot
68dc899887
release(oxlint): v0.11.1 (#7224)
## [0.11.1] - 2024-11-09

### Features

- 4dd9b60 editor/vscode: Replace existing output channel and trace
output channel with a single LogOutputChannel (#7196) (Nicholas Rayburn)
- 1fcd709 linter: Add jsx support for only-used-in-recursion (#7120)
(no-yan)
- 4d577cf linter: Add `import/first` rule (#7180) (Dmitry Zakharov)
- 9b8973f linter: Add `import/unambiguous` rule (#7187) (Dmitry
Zakharov)
- 5ab1ff6 linter: Implement @typescript-eslint/no-unsafe-function-type
(#6989) (Orenbek)

### Bug Fixes

- eea8879 editor/vscode: Update language client id to fix the resolution
of the oxc.trace.server setting (#7181) (Nicholas Rayburn)
- b73cfd9 linter: Fix `is_method_call` with parentheses and chain
expression (#7095) (tbashiyy)

### Refactor

- 8c0a362 linter: Use `ctx.source_range(comment.content_span())` API
(#7155) (Boshen)
- c5485ae semantic: Add `ancestor_kinds` iterator function (#7217)
(camchenry)
- abf1602 semantic: Rename `iter_parents` to `ancestors` (#7216)
(camchenry)
- 42171eb semantic: Rename `ancestors` to `ancestor_ids` (#7215)
(camchenry)

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
2024-11-09 19:57:08 +08:00
7086cmd
a2977655c8 refactor(minifier): use map and and_then instead of let else (#7178)
For the test case, Closure Compiler doesn't handle this at all in the REPL! If it's necessary, I will turn it back.

This PR uses builtin `and_then` and `map` method, which is better instead of a lot of `if let Some`.
2024-11-09 11:48:48 +00:00
overlookmotel
d27e14f065 refactor(ast): AstKind::as_* methods take self (#5546)
Make `AstKind::as_*` methods (e.g. `AstKind::as_boolean_literal`) take `self`, not `&self`.

`AstKind` is `Copy`.

See: https://github.com/oxc-project/oxc/issues/5506#issuecomment-2332912976
2024-11-09 09:39:13 +00:00
Dunqing
5cfdc05d06 feat(transformer/typescript): support transform export = and import = require(...) when module is commonjs (#7206)
close: #7141
2024-11-09 09:32:28 +00:00
no-yan
1fcd70932d
feat(linter): add jsx support for only-used-in-recursion (#7120)
close #5530

This PR adds support for handling recursive JSX components, allowing
detect functions like the one below:

```javascript
function ListItem({ depth }) {
    return <ListItem depth={depth} />
}
```

Some logic is duplicated with the non-JSX case. But the refactor will be
complicated and affects over-all, so we can make it in another PR.

cc: @DonIsaac @camc314

---------

Co-authored-by: Cam McHenry <camchenry@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2024-11-09 17:11:27 +08:00
Dmitry Zakharov
4d577cf69f
feat(linter): add import/first rule (#7180) 2024-11-09 17:10:59 +08:00
Boshen
b11ed2cf7b refactor(ast)!: remove useless ObjectProperty::init field (#7220)
closes https://github.com/oxc-project/backlog/issues/143
2024-11-09 09:00:29 +00:00
Boshen
0e4adc15dd feat(ast)!: remove invalid expressions from TSEnumMemberName (#7219) 2024-11-09 08:48:14 +00:00
Dunqing
e536d47e56 feat(transformer/babel): add support for trying to get the Module from BabelPlugins (#7218)
When configuring a `transform-modules-commonjs` plugin in `options.json`, we should treat it as a `CommonJS` module
2024-11-09 08:38:15 +00:00
Boshen
324c3fe184 feat(transformer): add TransformOptions::module option (#7188) 2024-11-09 08:38:15 +00:00
camchenry
c5485ae7ee refactor(semantic): add ancestor_kinds iterator function (#7217)
for convenience, I've added a new function called `ancestor_kinds` which loops overall `ancestors` and gets their `AstKind`. this is a common pattern in a couple of places. I also did some somewhat related refactoring to remove places where we were manually calling `AstNode::kind` instead of using `ancestor_kinds` or calling `parent_kind`.
2024-11-09 08:04:38 +00:00
camchenry
abf1602f33 refactor(semantic): rename iter_parents to ancestors (#7216)
for consistency with the `ancestor_ids` function, this changes it to use the same terminology but make it clear it actually returns the node, not just the ID.

this is pure refactor, no functional changes here.
2024-11-09 07:07:26 +00:00
camchenry
42171eba94 refactor(semantic): rename ancestors to ancestor_ids (#7215)
pure refactor, renaming this method to make it more clear that it returns only IDs, not nodes. in preparation for the next PR.
2024-11-09 07:00:15 +00:00
Boshen
846711cf41 feat(transformer)!: change API to take a &TransformOptions instead of TransformOptions (#7213)
closes #7185

`TransformOption`s has an initialization cost, it should be initialized once and shared across files.
2024-11-09 06:01:13 +00:00
ottomated
092de67c47 fix(types)!: append rest field into elements for objects and arrays to align with estree (#7212)
Fixes https://github.com/oxc-project/oxc/pull/7149#discussion_r1831677446 and removes the need for some manual typescript.
2024-11-09 05:23:53 +00:00
Boshen
a166a4abd7 feat(transformer): add esbuild comma separated target API --target=es2020,chrome58 (#7210) 2024-11-08 14:09:20 +00:00
Dunqing
b74686c598 feat(isolated-declarations): support transform TSExportAssignment declaration (#7204)
part of #7141
2024-11-08 11:51:41 +00:00
Dunqing
4a515be24e refactor(transformer/arrow-function-coverter): rename function name and add some comments to explain confusing parts. (#7203)
close: #7174
2024-11-08 08:18:46 +00:00
Dunqing
ede10dc030 fix(transformer/async-to-generator): incorrect transform when super expression is inside async method (#7171)
After transformation, super expressions have moved to unexpected places. This PR replaces super expression to call expression, and then inserts the super methods to the top of the method body.

For example:

Before:
```js
class G {
  async method() {
    super.foo()
  }
}
```

After:
```js
class G {
  method() {
    var _superprop_getFoo = () => super.foo,
      _this = this;
    return _asyncToGenerator(function* () {
      _superprop_getFoo().call(_this);
    })();
  }
}```
2024-11-08 08:18:45 +00:00
Dunqing
1910227590 feat(transformer/async-to-generator): support inferring the function name from the ObjectPropertyValue's key (#7201)
Support for inferring function name from ObjectPropertyValue's key

For example:
```js
({ foo: async function() {} })
```

After this, we will able to infer `foo` for the object method
2024-11-08 08:18:44 +00:00
Boshen
3a20b906f4 feat(transformer): add es target to engineTargets (#7193) 2024-11-08 03:25:21 +00:00
Dunqing
c82b273154 fix(transformer/async-generator-functions): only transform object method in exit_function (#7200)
close: #7175
2024-11-08 03:15:28 +00:00
Dunqing
293d072e77 fix(transformer/async-to-generator): only transform object method in exit_function (#7199)
part of #7175
2024-11-08 03:03:27 +00:00
Dmitry Zakharov
9b8973f425
feat(linter): add import/unambiguous rule (#7187) 2024-11-08 08:54:37 +08:00
Orenbek
5ab1ff6f06
feat(linter): implement @typescript-eslint/no-unsafe-function-type (#6989)
Co-authored-by: Cameron Clark <cameron.clark@hey.com>
2024-11-07 17:14:19 +00:00
Boshen
de560837eb refactor(transformer): add impl TryFrom<EngineTargets> for EnvOptions (#7191) 2024-11-07 14:12:31 +00:00
Boshen
0a43c640e6 refactor(transformer): move ESTarget to its own file (#7189) 2024-11-07 11:52:32 +00:00
Boshen
22898c855a feat(transformer): warn BigInt when targeting < ES2020 (#7184)
closes #5822
2024-11-07 08:29:03 +00:00
Boshen
a579011e37 feat(transformer): add features ES2018NamedCapturingGroupsRegex and ES2018LookbehindRegex (#7182) 2024-11-07 07:39:33 +00:00
Boshen
ad3a2f518e feat(tasks/compat_data): generate our own compat table (#7176) 2024-11-07 07:39:33 +00:00
Dmitry Zakharov
500effe5bb
chore(linter): correct links to docs in rules (#7183) 2024-11-07 15:20:47 +08:00
ottomated
9d6cc9d3af feat(estree): ESTree compatibility for all literals (#7152)
Adds some new estree macro directives:
- `#[estree(via = foo::Foo)`: Uses From to convert this struct to foo::Foo before serialization
- `#[estree(add_ts = "foo: string")]`: Adds additional fields to the typescript definitions

Used these to make all different literals estree-compatible.
2024-11-06 21:25:41 +00:00
ottomated
dc0215c906 feat(ast_tools): Add #[estree(append_to)], remove some custom serialization code (#7149)
Removed custom logic for ObjectPattern, ArrayPattern, etc. in favor of a custom attribute macro `#[estree(append_to = "foo")]` as part of #6347
2024-11-06 21:09:45 +00:00
overlookmotel
84ee581980 refactor(transformer/async-generator-functions): simplify identifying whether within an async generator function (#7170)
Follow-on after stack up to #7148.

Split `is_inside_async_generator_function` into 2 functions `yield_is_inside_async_generator_function` and `async_is_inside_async_generator_function`.

There are a couple of differences between `yield` and `await`, which we can leverage to make both these functions simpler:

* `yield` cannot appear at top level (there's no such thing as "top level yield").
* `yield` cannot appear in an arrow function (there's no such thing as a "generator arrow function").

In addition:

* Because each function now handles a specific case, no need to check if function containing `async` is an async function. It must be. Ditto for `yield`.
* Remove the `if ctx.current_scope_flags().is_top()` check. Probably this check costs more than it saves because top level `await` is far less common than `await` within async functions. So this check was optimizing for an uncommon case, at a cost to the common case.
* Add more comments to explain the logic.

This is all quite small optimizations, but I was having difficulty understanding the logic, and found that splitting it up made it clearer (at least for me).
2024-11-06 16:06:51 +00:00
overlookmotel
64b7e3a603 style(transformer/async-generator-functions): import oxc_allocator::Vec as ArenaVec (#7173)
Follow-on after stack up to #7148. Style nit. Following our convention (#6996), import `oxc_allocator::Vec` as `ArenaVec`, to prevent ambiguity.
2024-11-06 16:06:49 +00:00
overlookmotel
1b12328f87 refactor(transformer/async-generator-functions): use clone not clone_in on LabelIdentifier (#7172)
Follow-on after stack up to #7148.

Small optimization. `LabelIdentifier` is `Clone` so we can use `Clone::clone` to clone it, instead of `CloneIn::clone_in`.

The difference is that `clone_in` makes a 2nd copy of the `Atom`'s string in the arena, whereas `clone` creates a new `Atom` referencing the same string. This is an unfortunate shortcoming of `CloneIn` (https://github.com/oxc-project/backlog/issues/96), but the more we can avoid `CloneIn`, the better.
2024-11-06 16:06:48 +00:00
overlookmotel
c307e1b7e8 refactor(transformer/arrow-functions): pass ArenaBox as function param (#7169)
Follow-on after stack up to #7148.

Small optimization. `ArrowFunctionExpression` is 56 bytes, whereas `ArenaBox<ArrowFunctionExpression>` is 8 bytes. So it's preferable to pass the `ArenaBox<ArrowFunctionExpression>` to `transform_arrow_function_expression` and call `unbox` on it there instead of unboxing *before* passing to the function.
2024-11-06 14:08:14 +00:00
overlookmotel
38a6df6f66 style(transformer/arrow-functions): semicolon after return statements (#7168)
Follow-on after stack up to #7148. Style nit. End statements with semi-colons. Usually clippy demands this, not sure why it didn't here.
2024-11-06 14:08:12 +00:00
overlookmotel
1238506980 refactor(transformer/async-generator-function): remove inactive #[allow(clippy::unused_self)] attrs (#7167)
Follow-on after stack up to #7148. Remove 2 x `#[allow(clippy::unused_self)]` attrs where that lint isn't triggered because the functions do use their `&self` param.
2024-11-06 14:08:11 +00:00
overlookmotel
b57d5a5277 refactor(transformer/async-to-generator): remove unused &self function param (#7166)
Follow-on after stack up to #7148. Remove unused `&self` function param. This makes calling this function slightly cheaper, as unused data doesn't get passed to the function.
2024-11-06 14:08:09 +00:00
overlookmotel
217d433eb8 refactor(transformer/arrow-functions): remove unused &mut self function param (#7165)
Follow-on after stack up to #7148. Remove unused `&mut self` function params. This makes calling these functions slightly cheaper, as unused data doesn't get passed to the function.
2024-11-06 14:08:08 +00:00
overlookmotel
426df71c13 refactor(transformer/arrow-functions): use scope_id method (#7164)
Follow-on after #7125. Use `scope_id` method introduced in #7127.
2024-11-06 14:08:06 +00:00
overlookmotel
11c5e1209a refactor(transformer/arrow-functions): correct comments (#7163)
Follow-on after #7113. This comment was outdated after the changes in that PR.
2024-11-06 14:08:04 +00:00
overlookmotel
e2241e6376 refactor(transformer/jsx-self): remove unused &self function params (#7159)
Small nit. Removing the unused `&self` param makes these function calls slightly cheaper.
2024-11-06 13:11:31 +00:00
Boshen
0e1f12c303 refactor(transformer): remove unimplemented EnvOptions::bugfixes (#7162) 2024-11-06 12:54:10 +00:00
Boshen
a981cafd1f refactor(transformer): add Engine enum for EngineTargets (#7161) 2024-11-06 12:40:31 +00:00
overlookmotel
fd9b44cf13 refactor(transformer/typescript): remove inactive #[allow(clippy::unused_self)] attr (#7160) 2024-11-06 12:16:08 +00:00
overlookmotel
1dfd241125 refactor(transformer/optional-catch-binding): remove inactive #[allow(clippy::unused_self)] attr (#7158) 2024-11-06 12:02:09 +00:00
Boshen
8c0a362b8b refactor(linter): use ctx.source_range(comment.content_span()) API (#7155) 2024-11-06 06:25:05 +00:00
Dunqing
b2a888df0d fix(transformer/async-generator-functions): incorrect transformation for for await if it's not placed in a block (#7148)
Found in https://github.com/oxc-project/monitor-oxc/actions/runs/11681867380/job/32527898715
2024-11-06 05:51:01 +00:00
Boshen
d1d187417b feat(ast)!: change comment.span to real position that contain // and /* (#7154)
closes #7150
2024-11-06 05:10:33 +00:00
Dunqing
19892ede40 fix(transformer/async-generator-functions): transform incorrectly for for await if it's in LabeledStatement (#7147)
Found in https://github.com/oxc-project/monitor-oxc/actions/runs/11681867380/job/32527898715
2024-11-06 03:27:14 +00:00
Dunqing
8573f79c6d feat(transformer): turn on async_to_generator and async_generator_functions plugins in enable_all (#7135) 2024-11-06 03:27:13 +00:00
Dunqing
ffa8604556 feat(transformer/async-to-generator): do not transform await expression if is not inside async function (#7138) 2024-11-06 03:27:13 +00:00
Dunqing
cd1006fec1 refactor(transformer/async-generator-functions): do not transform yield expression where inside generator function (#7134) 2024-11-06 03:27:13 +00:00
Dunqing
2c5734d49b refactor(transformer/async-generator-functions): do not transform await expression where inside ArrowFunctionExpression (#7132)
The `await expr` should be transformed in AsyncToGenerator rather than AsyncGeneratorFunctions
2024-11-06 03:27:12 +00:00
Dunqing
5ce83bddc6 refactor(transformer/async-generator-functions): remove dead code for handle await expression (#7131)
I thought wrong previously, this should be transformed in the async-to-generator rather than async-generator-functions
2024-11-06 03:27:12 +00:00
Dunqing
b6a575009a feat(transformer/arrow-function-converter): move scope to changed scope for this_var if scope have changed (#7125)
The scope can be moved or deleted, we need to check whether the scope id is the same as the container's scope id, if not, we need to move the `this_var` to the target scope id.
2024-11-06 03:02:36 +00:00
Dunqing
df772411ea feat(transformer): enable ArrowFunctionConverter in async-to-generator and async-generator-functions plugins (#7113)
Part of https://github.com/oxc-project/oxc/pull/7074

In async-to-generator and async-generator-functions plugins, we may need to transform the async arrow function to a regular generator function, now we can reuse the ability of the ArrowFunction plugin by enabling `ArrowFunctionConverter`.

I will fix semantic errors in the follow-up PR
2024-11-06 03:02:36 +00:00
Boshen
8340243543 refactor(transformer): rename Query to BrowserslistQuery (#7143) 2024-11-05 13:45:12 +00:00
Boshen
481f7e603e refactor(transformer): change Targets to EngineTargets (#7142) 2024-11-05 13:32:11 +00:00
Boshen
55e6989830 refactor(transformer): deserialize engine target strings to specific keys (#7139) 2024-11-05 09:27:01 +00:00
Boshen
9aa34b4896
chore(transformer): remove unused core_js_compat data 2024-11-05 14:25:41 +08:00
overlookmotel
fac5042afa refactor(ast): use scope_id etc methods (#7130)
Utilize the methods added in #7127 in `oxc_ast`.
2024-11-05 02:25:28 +00:00
overlookmotel
cacfb9b326 refactor(traverse): use symbol_id etc methods (#7129)
Utilize the methods added in #7127 in `oxc_traverse`.
2024-11-05 02:25:28 +00:00
overlookmotel
fdfd9a4378 refactor(transformer): use scope_id etc methods (#7128)
Utilize the methods added in #7127 in transformer.
2024-11-05 02:25:27 +00:00
overlookmotel
cc8a1917e5 feat(ast): methods on AST nodes to get scope_id etc (#7127)
Add getter and setter methods to all AST types which have a `ScopeId`, `SymbolId` or `ReferenceId` field to get the contents of that field.

Before:

```rs
let symbol_id = ident.symbol_id.get().unwrap();
```

After:

```rs
let symbol_id = ident.symbol_id();
```

This allows removing boilerplate code from the transformer, and discouraging the anti-pattern of treating these fields as if they may contain either `Some` or `None` (after semantic, they will always be `Some`).
2024-11-05 02:25:27 +00:00
overlookmotel
843bce4d92 refactor(ast)!: IdentifierReference::reference_id return ReferenceId (#7126)
Alter `IdentifierReference::reference_id` to return `ReferenceId`, instead of `Option<ReferenceId>`.

This method is only useful on a post-semantic AST, where it will never return `None`. Returning `ReferenceId` discourages the anti-pattern of treating the result as if it could be either `Some` or `None`, and shortens code.
2024-11-05 02:25:27 +00:00
Dunqing
ff8bd50d38 refactor(transformer): move implementation of ArrowFunction to common/ArrowFunctionConverter (#7107)
Part of #7074

In order can reuse the ability of the `ArrowFunction` plugin, we moved out the implementation to common, then we can use use in other plugins
2024-11-04 16:32:50 +00:00
Dunqing
e04ee97870 refactor(transformer/async-generator-functions): move handling of MethodDefinition's value to exit_function (#7106)
Part of #7074

I have mentioned the reason why I need to move this in https://github.com/oxc-project/oxc/pull/7105
2024-11-04 16:27:21 +00:00
overlookmotel
ae692d70df fix(transformer/async_to_generator): fix checking if function is class method (#7117)
Follow-on after #7105.

Correctly identify when a function is a method definition. `ctx.parent().is_method_definition()` would return `true` for this weird case where the function is the property key of the method, not the method itself:

```js
class C {
    [async function() {}]() {}
}
```

`matches!(ctx.parent(), Ancestor::MethodDefinitionValue(_))` only returns `true` if the function *is* a method definition. Of course, no-one would write such ridiculous code, but we may as well handle whatever is thrown at us.

It's also slightly more performant to check for one specific ancestor type, rather than:

c2802e63fc/crates/oxc_traverse/src/generated/ancestor.rs (L1319-L1326)
2024-11-04 15:46:12 +00:00
Dunqing
f80085c683 refactor(transformer/async-to-generator): move handling of MethodDefinition's value to exit_function (#7105)
Part of #7074

We need to handle this before the `arrow_function` plugin inserts `_this = this` because, in the `async-to-generator` plugin, we will move the body to an inner generator function. However, we don't want `_this = this` moved to the inner generator function as well. So as long as we move first, and then insert, we can fix this problem.

The new semantic error is related to another tricky problem, I will fix it in another PR
2024-11-04 14:32:42 +00:00
oxc-bot
12a6952782
release(crates): v0.35.0 (#7110)
## [0.35.0] - 2024-11-04

- f543a8d ast: [**BREAKING**] Remove `AstBuilder::*_from_*` methods
(#7073) (overlookmotel)

- b8daab3 transformer: [**BREAKING**] API to `TryFrom<&EnvOptions> for
TransformOptions` and `TryFrom<&BabelOptions> TransformOptions` (#7020)
(Boshen)

- 9a6a2f9 semantic: [**BREAKING**] Remove
`SymbolTable::get_symbol_id_from_span` API (#6955) (Boshen)

### Features

- 854870e ast: Label AST fields with #[ts] (#6987) (ottomated)
- ce5b609 ast: Remove explicit untagged marker on enums (#6915)
(ottomated)
- 9725e3c ast_tools: Add #[estree(always_flatten)] to Span (#6935)
(ottomated)
- fbc297e ast_tools: Move tsify custom types to estree attribute macro
(#6934) (ottomated)
- 169fa22 ast_tools: Default enums to rename_all = "camelCase" (#6933)
(ottomated)
- caa4b1f codegen: Improve printing of comments (#7108) (Boshen)
- 001058a codegen: Always print legal comments on its own line (#7089)
(Boshen)
- 413973d codegen: Print linked and external legal comment (#7059)
(Boshen)
- ee27b92 codegen: Print eof legal comments (#7058) (Boshen)
- 6516f9e codegen: Print inline legal comments (#7054) (Boshen)
- 1e2f012 linter: Add `oxc/no-map-spread` (#6751) (DonIsaac)
- 6d97af4 rust: Use `oxc-miette` (#6938) (Boshen)
- bfdbcf1 transformer: Add `EnvOptions::from_browerslist_query` API
(#7098) (Boshen)
- 21b8e49 transformer: Add `ESTarget` (#7091) (Boshen)
- fcaba4a transformer: Add `TransformerOptions::env` with `EnvOptions`
(#7037) (Boshen)
- 1d906c6 transformer: Class properties transform skeleton (#7038)
(overlookmotel)
- 934cb5e transformer: Add `async_generator_functions` plugin (#6573)
(Dunqing)

### Bug Fixes

- 0601271 ast: Fix `StaticMemberExpression.get_first_object` (#6969)
(tomoya yanagibashi)
- da199c7 ecmascript: Allow getting PropName for object methods (#6967)
(camchenry)
- f5a7134 linter/no-unused-vars: False positive for discarded reads
within sequences (#6907) (DonIsaac)
- 9ed9501 module_lexer: Add missing `export * from 'foo';` case (#7103)
(Boshen)
- d15e408 napi/transform: Fix 'typescript.declaration' option not
working (#7012) (Boshen)
- dcdb9ea napi/transform: Fix test (Boshen)
- caaf00e parser: Fix incorrect parsed `TSIndexSignature` (#7016)
(Boshen)
- b188b4a transformer: Fix typescript globals being recognized as
globals (#7100) (Boshen)
- a2244ff transformer/async-to-generator: Output is incorrect when arrow
function without params (#7052) (Dunqing)
- 7d12669 types: Move @oxc-project/types to dependencies (#6909)
(ottomated)

### Performance

- 6ca01b9 ast: Reduce size of `Comment` (#6921) (overlookmotel)
- c58ec89 data_structures: Optimize `NonEmptyStack::pop` (#7021)
(overlookmotel)
- fa9a4ec parser: Check `.` before `[` in `parse_member_expression_rest`
(#6979) (Boshen)

### Refactor

- b0211a1 ast: `StaticMemberExpression::get_first_object` use loop
instead of recursion (#7065) (overlookmotel)
- fc07458 ast: Move custom types `.d.ts` file (#6931) (overlookmotel)
- c41c013 ast: Rename lifetime (#6922) (overlookmotel)
- 335eb38 ast_tools: Faster formatting Rust code (#6972) (overlookmotel)
- 4cf0085 ast_tools: Reorder imports in generated code (#6926)
(overlookmotel)
- dd79c1b codegen: Replace `daachorse` with string match for annotation
comment (#7064) (Boshen)
- 0bb1aa4 codegen: Move options to its own file (#7053) (Boshen)
- b021147 data_structures: Make all methods of `NonNull` shim
`#[inline(always)]` (#7024) (overlookmotel)
- fb1710a data_structures: Add `#[repr(transparent)]` to `NonNull` shim
(#7023) (overlookmotel)
- f1fc8db data_structures: Add `read` method to `NonNull` shim (#7022)
(overlookmotel)
- cea0e6b isolated_declarations: Do not use `AstBuilder::*_from_*`
methods (#7071) (overlookmotel)
- 97caae1 minifier: Do not use `AstBuilder::*_from_*` methods (#7072)
(overlookmotel)
- 2c7ac29 minifier: Remove `Tri`, use `Option<bool>` instead (#6912)
(Boshen)
- 9926990 napi: Move custom types to bottom of file (#6930)
(overlookmotel)
- 23157bd napi: Types file in root of types package (#6929)
(overlookmotel)
- 953b051 parser: Remove `oxc_ecmascript` crate (#7109) (Boshen)
- fdd480d parser: Do not use `AstBuilder::*_from_*` methods (#7068)
(overlookmotel)
- 9e85b10 parser: Add `ParserImpl::alloc` method (#7063) (overlookmotel)
- 17a938e parser: Use function `parse_type_member_semicolon` (#7018)
(Boshen)
- aa1b29c parser: Remove `parse_ts_index_signature_member` function
(#7017) (Boshen)
- 7f1d1fe transform: Deserialize `BabelPreests::env` directly (#7051)
(Boshen)
- 76947e2 transform: Refactor Babel Targets (#7026) (Boshen)
- d03e622 transformer: Do not use `AstBuilder::*_from_*` methods (#7070)
(overlookmotel)
- 9d384ad transformer: Use `identifier_reference_with_reference_id`
builder method (#7056) (overlookmotel)
- 4688a06 transformer: Use `*_with_scope_id` builder methods where
possible (#7055) (overlookmotel)
- 7122e00 transformer: Use `ctx.alloc` over `ctx.ast.alloc` where
possible (#7066) (overlookmotel)
- a3b68b4 transformer: Flatten dir structure of options/babel/env
(#7049) (Boshen)
- 6d92f36 transformer: Deserialize `BabelOptions::compiler_assumptions`
(#7048) (Boshen)
- f83a760 transformer: Deserialize `BabelOptions::presets` (#7047)
(Boshen)
- 52c20d6 transformer: Deserialize `BabelOptions::plugins` (#7045)
(Boshen)
- e921df6 transformer: Rename `EnvOptions` to `BabelEnvOptions` (#7036)
(Boshen)
- af5140f transformer: Isolate babel options logic (#7034) (Boshen)
- 12aa910 transformer: Clean up `env/targets/query.rs` (#7033) (Boshen)
- 3d174bb transformer: Clean up `BabelOptions` (#7029) (Boshen)
- 6284f84 transformer: Use `Browserslist::Version` (#7028) (Boshen)
- 5b11cdf transformer: Clean up TransformerOptions (#7005) (Boshen)
- f0c87d4 transformer: Mark all EnvOptions as not implemented (#7004)
(Boshen)
- d9edef6 transformer: Combine ObjectRestSpread into a single file
(#7002) (Boshen)
- c945fe7 transformer: Import `oxc_allocator::Box` as `ArenaBox` (#6999)
(overlookmotel)
- fc1af2e transformer: Import `oxc_allocator::Vec` as `ArenaVec` (#6998)
(overlookmotel)
- 63e8bfe transformer: Rename `AString` to `ArenaString` (#6997)
(overlookmotel)
- 562bb9a transformer/async-to-generator: Move transform methods to
`AsyncGeneratorExecutor` and make it public (#6992) (Dunqing)
- e23f7e6 transformer/common: `VarDeclarations` insert either `var` or
`let` statements (#7043) (overlookmotel)
- e5ecbb9 transformer/jsx: Return `&mut T` not `&mut ArenaBox<T>`
(#7001) (overlookmotel)
- 9e66c29 transformer/react-refresh: Small refactor (#6973)
(overlookmotel)
- 1ca8cd2 transformer/react-refresh: Avoid panic for `init` of
`VariableDeclarator` isn't a `BindingIdentifier` (#6937) (Dunqing)
- 5f153ac transformer/react-refresh: Use `VarDeclarations` to insert
declarators (#6884) (Dunqing)
- df3b089 transformer/react-refresh: Use `StatementInjector` to insert
statements (#6881) (Dunqing)
- ae22671 transformer/typescript: Pass `&mut T` not `&mut ArenaBox<T>`
(#7000) (overlookmotel)
- 938ee87 traverse: Do not use `AstBuilder::*_from_*` methods (#7069)
(overlookmotel)

### Styling

- 86ab091 transformer/common: Split up `StatementInjectorStore` methods
into blocks (#7042) (overlookmotel)

### Testing

- 64e2499 module_lexer: Use a single integration test for faster
compilation (#7097) (Boshen)
- 6133a50 transformer: Use a single integration test for faster
compilation (#7099) (Boshen)

---------

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2024-11-04 17:40:05 +08:00
Boshen
40d8acfbd1 feat(codegen): improvement printing of legal comments (#7111) 2024-11-04 08:56:00 +00:00
Boshen
03a30856c4
chore(transformer): disable snapshot test in miri 2024-11-04 16:54:52 +08:00
Boshen
953b0516e8
refactor(parser): remove oxc_ecmascript crate (#7109) 2024-11-04 16:29:26 +08:00
Boshen
caa4b1fd2a feat(codegen): improve printing of comments (#7108) 2024-11-04 05:12:59 +00:00
tbashiyy
b73cfd992e
fix(linter): fix is_method_call with parentheses and chain expression (#7095)
I fixed `is_method_call` behavior in specific case below.

For example, when we use `is_method_call(call_expr, None,
Some(&["apply"]), Some(1), Some(1))` for
[`(a?.b.apply)(args)`](https://playground.oxc.rs/#eNpFjkEKg0AMRe+SVQviAdx057alN4gaZWBMJJmxFfHunVG0q+Qnn//fCi1UcMNH2ZQ4TX6531AHu0MBAtUKGjkPWzjgF6qgkQrwjsO5WysTXWIZG/GnCopsvegIVY/eaCtgQjXSnIjey+dNISo/YzDXUR25DU5S3+5OZqVknumFSmxHasrI7XtG2q+K89BKRwNl5iRGx653/xcHFV+n3gwwkzZiCf1g27YfdH1fTA==),
we cannot check correctly.

This is because we don't consider `call_expr` has parentheses and chain
expression.
2024-11-04 11:12:37 +08:00
Boshen
9ed9501bcd fix(module_lexer): add missing export * from 'foo'; case (#7103)
fixes #7039
2024-11-03 16:31:19 +00:00
Boshen
9f611a18cf
chore(transformer): fix typos s/browerslist/browserslist/ 2024-11-03 21:54:54 +08:00
Boshen
b188b4ad75 fix(transformer): fix typescript globals being recognized as globals (#7100)
closes #7090
2024-11-03 13:00:54 +00:00
Boshen
6133a502c6 test(transformer): use a single integration test for faster compilation (#7099) 2024-11-03 12:43:26 +00:00
Boshen
bfdbcf1c6a feat(transformer): add EnvOptions::from_browerslist_query API (#7098) 2024-11-03 12:43:25 +00:00
Boshen
21b8e4988f feat(transformer): add ESTarget (#7091)
closes #6982
2024-11-03 12:21:53 +00:00
Boshen
64e24994e6 test(module_lexer): use a single integration test for faster compilation (#7097) 2024-11-03 12:16:47 +00:00
oxc-bot
2d40b073cb
release(oxlint): v0.11.0 (#7094)
## [0.11.0] - 2024-11-03

- 9fd9f4f linter: [**BREAKING**] Sync sindresorhus/globals; removed
Object.prototype properties from builtin and es* globals (#6991)
(Boshen)

### Features

- 6b619da editor: Listen to config file changes and trigger a
didChangeConfiguration update (#6964) (Nicholas Rayburn)
- 7872927 editor/vscode: Support window/showMessage event (#7085)
(Nicholas Rayburn)
- 2184588 linter: Do not bail for unmatched rules yet (#7093) (Boshen)
- a6fcd81 linter: Add `import/no-commonjs` rule (#6978) (Dmitry
Zakharov)
- 1691cab linter: Support user-configurable secrets for
`oxc-security/api-keys` (#5938) (DonIsaac)
- 610621c linter: Implement `react/style-prop-object` (#6342) (Albert
Kaaman)
- 1e2f012 linter: Add `oxc/no-map-spread` (#6751) (DonIsaac)
- 1c66473 linter: Implement `eslint/prefer-object-has-own` (#6905)
(tomoya yanagibashi)

### Bug Fixes

- ebf3753 editor: Fix onConfigChange to send the correct config for
didChangeConfiguration notification (#6962) (Nicholas Rayburn)
- 79bf74a linter: Check is_reference_to_global_variable in
`no-array-constructor` (#7067) (Naoya Yoshizawa)
- 38d1f78 linter: Remove confusing help text for now (#7081) (Cam
McHenry)
- 147e2e4 linter: Allow replacing rule when none are enabled yet (#7014)
(camchenry)
- 7aa496a linter: Remove unsafe fixer of `no-useless-spread` (#6655)
(dalaoshu)
- f5a7134 linter/no-unused-vars: False positive for discarded reads
within sequences (#6907) (DonIsaac)

### Documentation

- 4551baa linter: Document `rules` (#6983) (Boshen)

### Refactor

- a8dc75d linter: Remove unused CLI result types (#7088) (camchenry)
- 8f1460e linter: Move `LintPlugins` from `LintOptions` to `LintConfig`
(#6932) (DonIsaac)

### Testing

- c35d3f2 linter: Improve test failure output (#6975) (camchenry)

---------

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2024-11-03 11:27:30 +08:00
Boshen
218458811b
feat(linter): do not bail for unmatched rules yet (#7093)
I intend to make a release today, let's hold onto this behaviour.
2024-11-03 11:18:36 +08:00
Naoya Yoshizawa
79bf74a1a1
fix(linter): check is_reference_to_global_variable in no-array-constructor (#7067)
Hello,

I am currently reading through the code as I work on contributing by
creating some ESLint rules.
Along the way, I noticed an incompatibility in certain cases within the
`no-array-constructor` rule.

In this PR, I added test cases and modified the code to include a check
for is_reference_to_global_variable.

The relevant ESLint behavior can be verified in the following
playground.


https://eslint.org/play/#eyJ0ZXh0IjoiLyplc2xpbnQgbm8tYXJyYXktY29uc3RydWN0b3I6IFwiZXJyb3JcIiovXG5cbi8vIGlmIGNvbW1lbnQgb3V0IGJlbG93LCBuZXh0IGxpbmUgYXMgZXJyb3JcbnZhciBBcnJheTsgbmV3IEFycmF5KCk7XG5cbm5ldyBBcnJheSgpOyIsIm9wdGlvbnMiOnsicnVsZXMiOnt9LCJsYW5ndWFnZU9wdGlvbnMiOnsic291cmNlVHlwZSI6Im1vZHVsZSIsInBhcnNlck9wdGlvbnMiOnsiZWNtYUZlYXR1cmVzIjp7fX19fX0=
2024-11-02 18:17:48 +00:00
Dunqing
70e2582726 ci(transformer): enable unfinished plugins in benchmark (#7040)
Even the plugins are unfinished, we still want to enable all of them to track the performance changes during the development.
2024-11-02 15:17:21 +00:00
Boshen
001058a8e4
feat(codegen): always print legal comments on its own line (#7089) 2024-11-02 15:55:23 +08:00
Boshen
dd79c1bfb3
refactor(codegen): replace daachorse with string match for annotation comment (#7064) 2024-11-02 14:16:10 +08:00
Boshen
413973df66 feat(codegen): print linked and external legal comment (#7059)
part of #7050
2024-11-02 04:08:14 +00:00
overlookmotel
f543a8d495 refactor(ast)!: remove AstBuilder::*_from_* methods (#7073)
Remove `AstBuilder::*_from_*` methods for constructing enums. In my opinion, it's not a great pattern, and this removes 2000 of lines of code from [ast_builder.rs](https://github.com/oxc-project/oxc/pull/7073/files#diff-e34fd45077ed0a48b7fee440fdbe4c22a01d787a70a311afebfc1d310785fb70).
2024-11-02 01:22:56 +00:00
overlookmotel
97caae16e2 refactor(minifier): do not use AstBuilder::*_from_* methods (#7072)
Preparation for #7073. Avoid using `AstBuilder::*_from_*` methods to construct enums, use explicit construction instead.

Before:

```rs
let ident = self.ast.binding_pattern_kind_from_binding_identifier(ident);
```

After:

```rs
let ident = BindingPatternKind::BindingIdentifier(ident);
```

Often this produces shorter code, as well as (in my opinion) being easier to read.
2024-11-02 01:22:56 +00:00
overlookmotel
cea0e6b62f refactor(isolated_declarations): do not use AstBuilder::*_from_* methods (#7071)
Preparation for #7073. Avoid using `AstBuilder::*_from_*` methods to construct enums, use explicit construction instead.

Before:

```rs
let ident = self.ast.binding_pattern_kind_from_binding_identifier(ident);
```

After:

```rs
let ident = BindingPatternKind::BindingIdentifier(ident);
```

Often this produces shorter code, as well as (in my opinion) being easier to read.
2024-11-02 01:22:55 +00:00
overlookmotel
d03e622b70 refactor(transformer): do not use AstBuilder::*_from_* methods (#7070)
Preparation for #7073. Avoid using `AstBuilder::*_from_*` methods to construct enums, use explicit construction instead.

Before:

```rs
let ident = self.ast.binding_pattern_kind_from_binding_identifier(ident);
```

After:

```rs
let ident = BindingPatternKind::BindingIdentifier(ident);
```

Often this produces shorter code, as well as (in my opinion) being easier to read.
2024-11-02 01:22:55 +00:00
overlookmotel
938ee8724d refactor(traverse): do not use AstBuilder::*_from_* methods (#7069)
Preparation for #7073. Avoid using `AstBuilder::*_from_*` methods to construct enums, use explicit construction instead.

Before:

```rs
let ident = self.ast.binding_pattern_kind_from_binding_identifier(ident);
```

After:

```rs
let ident = BindingPatternKind::BindingIdentifier(ident);
```

Often this produces shorter code, as well as (in my opinion) being easier to read.
2024-11-02 01:22:55 +00:00
overlookmotel
fdd480d84c refactor(parser): do not use AstBuilder::*_from_* methods (#7068)
Preparation for #7073. Avoid using `AstBuilder::*_from_*` methods to construct enums, use explicit construction instead.

Before:

```rs
let ident = self.ast.binding_pattern_kind_from_binding_identifier(ident);
```

After:

```rs
let ident = BindingPatternKind::BindingIdentifier(ident);
```

Often this produces shorter code, as well as (in my opinion) being easier to read.
2024-11-02 01:22:55 +00:00
overlookmotel
9e85b104e2 refactor(parser): add ParserImpl::alloc method (#7063)
Pure refactor. Introduce `ParserImpl::alloc` method. Shorten `self.ast.alloc(...)` to `self.alloc(...)`.

Also reduce `alloc` calls by using `AstBuilder` methods which already allocate where possible.
2024-11-01 17:09:06 +00:00
overlookmotel
9d384ad6db refactor(transformer): use identifier_reference_with_reference_id builder method (#7056)
Similar to #7055.

In transformer, use `AstBuilder::identifier_reference_with_reference_id` function, instead of creating an `IdentifierReference` and then setting the `reference_id` on it afterwards.
2024-11-01 17:09:05 +00:00
overlookmotel
4688a061ae refactor(transformer): use *_with_scope_id builder methods where possible (#7055)
In transformer, use `AstBuilder::function_with_scope_id` and `AstBuilder::arrow_function_expression_with_scope_id` function where possible, rather than creating a function and then setting the `scope_id` on it afterwards.
2024-11-01 17:09:04 +00:00
Boshen
ee27b92465 feat(codegen): print eof legal comments (#7058)
part of https://github.com/oxc-project/oxc/issues/7050
2024-11-01 16:56:57 +00:00
Boshen
6516f9eabc feat(codegen): print inline legal comments (#7054)
part of https://github.com/oxc-project/oxc/issues/7050
2024-11-01 16:56:56 +00:00
overlookmotel
7122e0074b refactor(transformer): use ctx.alloc over ctx.ast.alloc where possible (#7066)
Pure refactor. Just shorten code a little.
2024-11-01 16:51:20 +00:00
overlookmotel
b0211a1f9e refactor(ast): StaticMemberExpression::get_first_object use loop instead of recursion (#7065)
Follow-on after #6969. Pure refactor. Loops are generally cheaper than recursion.
2024-11-01 16:36:25 +00:00
renovate[bot]
4012e6ba0c
chore(deps): update crate-ci/typos action to v1.27.0 (#7061) 2024-11-01 23:46:54 +08:00
Dunqing
a2244ff089 fix(transformer/async-to-generator): output is incorrect when arrow function without params (#7052) 2024-11-01 15:35:57 +00:00
Boshen
0bb1aa4c64 refactor(codegen): move options to its own file (#7053) 2024-11-01 09:28:59 +00:00
Boshen
7f1d1fe065 refactor(transform): deserialize BabelPreests::env directly (#7051) 2024-11-01 08:09:59 +00:00
Boshen
a3b68b4224 refactor(transformer): flatten dir structure of options/babel/env (#7049) 2024-11-01 07:46:28 +00:00
Boshen
6d92f36ef2 refactor(transformer): deserialize BabelOptions::compiler_assumptions (#7048) 2024-11-01 07:41:01 +00:00
Boshen
f83a760d8a refactor(transformer): deserialize BabelOptions::presets (#7047) 2024-11-01 06:56:27 +00:00
Boshen
52c20d633c refactor(transformer): deserialize BabelOptions::plugins (#7045) 2024-11-01 05:44:57 +00:00
tomoya yanagibashi
0601271b2c
fix(ast): Fix StaticMemberExpression.get_first_object (#6969)
I think `get_first_object` does not return expected expression.

For example, in case of `foo.bar.a`, it doesn't return `foo` but
`foo.bar`.

**Expected**
```
{
  "type": "Identifier",
  "start": 0,
  "end": 3,
  "name": "foo"
}
```

**Actual**
```
{
   "type":"StaticMemberExpression",
   "start":0,
   "end":7,
   "object":{
      "type":"Identifier",
      "start":0,
      "end":3,
      "name":"foo"
   },
   "property":{
      "type":"Identifier",
      "start":4,
      "end":7,
      "name":"bar"
   },
   "optional":false
}
```

---------

Co-authored-by: Dunqing <dengqing0821@gmail.com>
2024-11-01 12:28:48 +08:00
overlookmotel
e23f7e6bc1 refactor(transformer/common): VarDeclarations insert either var or let statements (#7043)
Add ability for `VarDeclarations` to insert `let` declarations as well as `var` declarations. This is required for class properties transform.

Implementation note: `var` and `let` declarators are stored in 2 separate `ArenaVec`s. This allows using those `ArenaVec<Declarator<'a>>`s directly in the AST, rather storing all `Declarator`s in a single `Vec` and having to loop through it when inserting the `var` / `let` statements to split it into 2 `ArenaVec`s of `var` / `let` declarators. I'm not completely sure this is better than using a single `Vec` for both, but I think *probably* it is.
2024-11-01 04:08:59 +00:00
camchenry
1f2a6c666f feat(linter)!: report unmatched rules with error exit code (#7027)
- closes https://github.com/oxc-project/oxc/issues/6988

we now return an error exit code when there are unmatched rules. previously, we would print an error to stderr and continue running. however, this masked errors in some tests that actually had unmatched rules in them. these test cases now trigger a panic (in tests only, not at runtime), and help ensure that we are reporting an error message to the user for unknown rules, which we did not have any tests cases for before.

- fixes https://github.com/oxc-project/oxc/issues/7025

this also fixes https://github.com/oxc-project/oxc/issues/7025, where we were reporting rules as unmatched simply because they had been disabled prior to being configured. similar to https://github.com/oxc-project/oxc/issues/7009.
2024-11-01 03:27:25 +00:00
overlookmotel
86ab091e42 style(transformer/common): Split up StatementInjectorStore methods into blocks (#7042)
Pure refactor. Split up the `impl`s into multiple blocks with comments for each block, to make it clearer.
2024-10-31 19:23:28 +00:00
Boshen
fcaba4a92a feat(transformer): add TransformerOptions::env with EnvOptions (#7037) 2024-10-31 12:30:32 +00:00
Boshen
e921df6199 refactor(transformer): rename EnvOptions to BabelEnvOptions (#7036) 2024-10-31 10:00:52 +00:00
overlookmotel
1d906c64e7 feat(transformer): class properties transform skeleton (#7038)
Skeleton of class properties transform. #7011 contains WIP implementation.
2024-10-31 09:55:41 +00:00
Dunqing
934cb5e746 feat(transformer): add async_generator_functions plugin (#6573)
Passed 15/19 tests. The remaining 4 failed tests related to `this` expression, the problem same as I mentioned in #6658. I will fix them in follow-up PRs.
2024-10-31 09:14:17 +00:00
Boshen
af5140fc3d refactor(transformer): isolate babel options logic (#7034) 2024-10-31 08:04:52 +00:00
Boshen
12aa910508 refactor(transformer): clean up env/targets/query.rs (#7033) 2024-10-31 03:30:08 +00:00
Boshen
3d174bb953 refactor(transformer): clean up BabelOptions (#7029)
part of #6982
2024-10-30 17:14:18 +00:00
Boshen
6284f84f58 refactor(transformer): use Browserslist::Version (#7028) 2024-10-30 14:32:50 +00:00
Boshen
76947e2aec refactor(transform): refactor Babel Targets (#7026)
Found a trick from serde to get us from `BabelTargets` to `Targets`.
2024-10-30 14:08:19 +00:00
overlookmotel
b02114783a refactor(data_structures): make all methods of NonNull shim #[inline(always)] (#7024)
All these methods are trivial and should always be inlined.
2024-10-30 13:00:24 +00:00
overlookmotel
fb1710a8cc refactor(data_structures): add #[repr(transparent)] to NonNull shim (#7023)
Ensure `NonNull` shim is a pure wrapper around `std::ptr::NonNull`. This should be the case anyway, but make sure.
2024-10-30 13:00:22 +00:00
overlookmotel
f1fc8db2fb refactor(data_structures): add read method to NonNull shim (#7022)
Emulate [`NonNull::read`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.read) method in `NonNull` shim. This is more ergonomic, and will be ideal usage once our MSRV reaches 1.80.0 and we can remove the shim.
2024-10-30 13:00:22 +00:00
overlookmotel
c58ec89b81 perf(data_structures): optimize NonEmptyStack::pop (#7021)
Shave a few bytes off `NonEmptyStack::pop`.
2024-10-30 13:00:21 +00:00
Boshen
b8daab3663 refactor(transformer)!: API to TryFrom<&EnvOptions> for TransformOptions and TryFrom<&BabelOptions> TransformOptions (#7020)
…ions` and `TryFrom<&BabelOptions> TransformOptions`
2024-10-30 09:40:09 +00:00
Boshen
17a938ee1f
refactor(parser): use function parse_type_member_semicolon (#7018) 2024-10-30 17:20:03 +08:00
Boshen
aa1b29c0cf
refactor(parser): remove parse_ts_index_signature_member function (#7017) 2024-10-30 17:20:02 +08:00
Boshen
5b11cdf611 refactor(transformer): clean up TransformerOptions (#7005)
This is a work towards https://github.com/oxc-project/oxc/issues/6982

Next PR will try and make sense of env options vs babel options vs targets and bugfixes, I'm super confused right now.
2024-10-30 09:09:38 +00:00
Boshen
caaf00e081 fix(parser): fix incorrect parsed TSIndexSignature (#7016)
closes #6985
2024-10-30 07:34:22 +00:00
ottomated
854870e296 feat(ast): Label AST fields with #[ts] (#6987)
I think I found all of the AST fields that are typescript-only but I could be wrong. I did label decorators as `#[ts]` but not sure if that's correct.
2024-10-30 03:44:05 +00:00
camchenry
147e2e4858 fix(linter): allow replacing rule when none are enabled yet (#7014)
fixes https://github.com/oxc-project/oxc/issues/7009

allows rules to be replaced properly when the `rules_for_override` array is empty (e.g., if you initially disable all rules, then configure them) by checking the `all_rules` array if the first `find` call fails
2024-10-30 03:39:03 +00:00
Boshen
d15e408256 fix(napi/transform): fix 'typescript.declaration' option not working (#7012)
fixes #7010
2024-10-30 03:21:08 +00:00
Dmitry Zakharov
a6fcd812b3
feat(linter): add import/no-commonjs rule (#6978) 2024-10-29 22:15:30 -04:00
Boshen
f0c87d453d refactor(transformer): mark all EnvOptions as not implemented (#7004) 2024-10-29 15:05:18 +00:00
Dunqing
562bb9af7f refactor(transformer/async-to-generator): move transform methods to AsyncGeneratorExecutor and make it public (#6992)
The `AsyncGeneratorExecutor` contains many transform methods which both can used in `async-to-generator` and `async-generator-functions` plugins, because their implementations are almost the same. I am still not sure where is the best place to place it.
2024-10-29 13:54:22 +00:00
Boshen
d9edef6ae1 refactor(transformer): combine ObjectRestSpread into a single file (#7002) 2024-10-29 13:21:46 +00:00
overlookmotel
e5ecbb9bf1 refactor(transformer/jsx): return &mut T not &mut ArenaBox<T> (#7001)
`&mut ArenaBox<T>` is a double-reference. `&mut T` is shorter and easier to read.
2024-10-29 13:00:50 +00:00
overlookmotel
ae226710f2 refactor(transformer/typescript): pass &mut T not &mut ArenaBox<T> (#7000)
`&mut ArenaBox<T>` is a double-reference. `&mut T` is shorter and easier to read.
2024-10-29 13:00:49 +00:00
overlookmotel
c945fe71b3 refactor(transformer): import oxc_allocator::Box as ArenaBox (#6999)
Closes #6996.
2024-10-29 13:00:49 +00:00
overlookmotel
fc1af2e9da refactor(transformer): import oxc_allocator::Vec as ArenaVec (#6998)
Part of #6996.
2024-10-29 13:00:48 +00:00
overlookmotel
63e8bfeeec refactor(transformer): rename AString to ArenaString (#6997)
Part of #6996.
2024-10-29 13:00:48 +00:00
Boshen
9fd9f4f5b9 feat(linter)!: sync sindresorhus/globals; removed Object.prototype properties from builtin and es* globals (#6991) 2024-10-29 04:13:20 +00:00
DonIsaac
8f1460eba3 refactor(linter): move LintPlugins from LintOptions to LintConfig (#6932)
Pure refactor. Moves plugin settings from linter options (which control the linter's behavior on a global level) and linter config ("which may or may not get adjusted on each file).
2024-10-29 01:28:21 +00:00
DonIsaac
1691cab507 feat(linter): support user-configurable secrets for oxc-security/api-keys (#5938) 2024-10-28 18:55:19 +00:00
Boshen
4b450cc985 chore(transformer): mark all CompilerAssumptions as not Implemented (#6984) 2024-10-28 15:35:32 +00:00
Boshen
4551baaf4a docs(linter): document rules (#6983)
closes #6370
2024-10-28 14:49:16 +00:00
camchenry
c35d3f2ea2 test(linter): improve test failure output (#6975)
Improves the test output when a test fails, based on the type of expectation. The output now includes the config that was passed, as well as the source code that failed. Additional formatting makes it a little bit easier to parse.

Before:

<img width="818" alt="Screenshot 2024-10-27 at 11 54 02 PM" src="https://github.com/user-attachments/assets/bac4079c-566a-403b-adde-acdc709baceb">

&nbsp;

<img width="792" alt="Screenshot 2024-10-27 at 11 54 56 PM" src="https://github.com/user-attachments/assets/16074216-00ad-4cdc-9f47-09142242111d">

---

After:

<img width="784" alt="Screenshot 2024-10-27 at 11 49 36 PM" src="https://github.com/user-attachments/assets/5d687562-55f4-4e4f-aa3a-c90b90b714e8">

&nbsp;

<img width="820" alt="Screenshot 2024-10-27 at 11 58 56 PM" src="https://github.com/user-attachments/assets/0725d362-7aed-4fd0-9fab-93a7687aca6d">
2024-10-28 12:55:24 +00:00
Boshen
fa9a4ecd4a perf(parser): check . before [ in parse_member_expression_rest (#6979) 2024-10-28 11:00:28 +00:00
camchenry
da199c7476 fix(ecmascript): allow getting PropName for object methods (#6967)
Working on some lint rules and noticed that PropName didn't seem to be working as intended. According to the spec, we should definitely allow get/set/methods to have prop names:

https://tc39.es/ecma262/#sec-static-semantics-propname

<img width="694" alt="image" src="https://github.com/user-attachments/assets/60fdfeec-2320-4cd9-a786-901728e459b2">

However, we still need to retain this logic for checking `__proto__` because it has special rules.
2024-10-28 09:34:27 +00:00
dalaoshu
7aa496ab33
fix(linter): remove unsafe fixer of no-useless-spread (#6655)
closes #6618

---------

Co-authored-by: Boshen <boshenc@gmail.com>
2024-10-28 17:32:02 +08:00
overlookmotel
9e66c2949d refactor(transformer/react-refresh): small refactor (#6973)
Follow-on after #6937. Refactor 2 small blocks of code.

* Replace 2 `if` statements with 1.
* Obey the mighty clippy!
2024-10-28 02:57:55 +00:00
Albert Kaaman
610621cadf
feat(linter): implement react/style-prop-object (#6342)
Implements not recommended rule `react/style-prop-object`
(https://github.com/oxc-project/oxc/issues/1022)

---------

Co-authored-by: Don Isaac <donald.isaac@gmail.com>
2024-10-27 22:51:09 -04:00
ottomated
9725e3c2ec feat(ast_tools): Add #[estree(always_flatten)] to Span (#6935)
Part of #6347

Other changes:
- added #[estree(skip)] to thisSpan in TSThisParameter
- Flattened the span in BoundaryAssertion (regex)
2024-10-28 02:13:24 +00:00
ottomated
fbc297ec7b feat(ast_tools): Move tsify custom types to estree attribute macro (#6934)
Part of #6347
2024-10-28 01:45:27 +00:00
ottomated
169fa22350 feat(ast_tools): Default enums to rename_all = "camelCase" (#6933)
Part of #6347
2024-10-28 01:39:25 +00:00
Dunqing
1ca8cd2fd9 refactor(transformer/react-refresh): avoid panic for init of VariableDeclarator isn't a BindingIdentifier (#6937)
related: https://github.com/oxc-project/oxc/pull/6881#discussion_r1816597462
2024-10-28 01:19:53 +00:00
Nicholas Rayburn
6cb1973f4a
fix(editor): Publish diagnostics on open for all run modes except disabled (#6965) 2024-10-28 08:39:47 +08:00
DonIsaac
f5a7134834 fix(linter/no-unused-vars): false positive for discarded reads within sequences (#6907)
Fixes a case where no-unused-vars incorectly reports a read as unused in edge
cases where a logical/binary expression is used as a conditional shorthand to
write a variable within sequence expressions.

Some code examples will make this more clear.
```js
function foo(a) {
  let x = somePropertyIWantToCheck();
  (x in a && x.hasPropA = true, console.log(a))
}
```
Since the logical expression is not in the last position within the sequence
expression list, it's getting discarded as unused. However, the right expression
(`x.hasPropA = true`) has side effects, so it _is_ being used.
2024-10-27 17:06:58 +00:00
Boshen
9a6a2f99c6 refactor(semantic)!: remove SymbolTable::get_symbol_id_from_span API (#6955)
closes #6867
2024-10-27 14:31:36 +00:00
Boshen
6d97af46c7 feat(rust): use oxc-miette (#6938) 2024-10-27 13:30:20 +00:00
Dunqing
5f153aca0c refactor(transformer/react-refresh): use VarDeclarations to insert declarators (#6884) 2024-10-27 07:05:24 +00:00
Dunqing
df3b089f29 refactor(transformer/react-refresh): use StatementInjector to insert statements (#6881) 2024-10-27 07:05:24 +00:00
DonIsaac
1e2f012d3c feat(linter): add oxc/no-map-spread (#6751)
Adds a new performance rule that disallows using object and array spreads in `map` and `flatMap` to modify/merge arrays and objects.
I've currently added it to `nursery` so we can battle-harden it before making it generally available as a `perf` rule.

```ts
// needless O(n) spread on `x`, making this an O(n^2) operation
const x = arr.map(x => {
  return { ...x, foo: getFoo(x.id) }
})

// Object.assign is better here
const x = arr.map(x => {
  return Object.assign(x, { foo: getFoo(x.id) })
})
```
2024-10-26 17:41:21 +00:00
overlookmotel
fc07458280 refactor(ast): move custom types .d.ts file (#6931)
We have a few manually-defined TS types in `oxc_ast` crate. Move that `.d.ts` file out of `src` folder, and name it more descriptively.
2024-10-26 17:10:34 +00:00
injuly
aa3222ac88
fix(oxc_language_server): gitignores now applied to their respective files (#6899) 2024-10-26 10:46:35 -04:00
tomoya yanagibashi
1c66473a8f
feat(linter): Implement eslint/prefer-object-has-own (#6905) 2024-10-26 10:45:38 -04:00
overlookmotel
4cf008573e refactor(ast_tools): reorder imports in generated code (#6926)
Pure refactor.
2024-10-26 14:05:18 +00:00
overlookmotel
c41c013b4d refactor(ast): rename lifetime (#6922)
Rename lifetime to make clear it's for a temporary borrow, and not lifetime of the arena (which is what we conventionally use `'a` for).
2024-10-26 12:57:41 +00:00
overlookmotel
6ca01b9c35 perf(ast): reduce size of Comment (#6921)
Reduce `Comment` from 20 bytes to 16. Because `Comment` has `#[ast]` attr, it's `#[repr(C)]` which means the fields don't get re-ordered by the compiler, so it contains excess padding. Moving `attached_to: u32` field removes the padding.

I am in favour of using `oxc_ast_tools` to re-order fields the same way the compiler does, which will solve this problem for all AST types. But may as well fix this one in meantime. Unlike most AST types, field order doesn't matter for `Comment` - it is not visited, so the field order has no semantic meaning.
2024-10-26 12:40:08 +00:00
oxc-bot
1ea0be1b6a
release(oxlint): v0.10.3 (#6911)
## [0.10.3] - 2024-10-26

- 90c786c regular_expression: [**BREAKING**] Support ES2025 Duplicated
named capture groups (#6847) (leaysgur)

- 8032813 regular_expression: [**BREAKING**] Migrate to new regexp
parser API (#6741) (leaysgur)

### Features

- a73c5af linter: Add fixer for `jsx-a11y/no-access-key` rule (#6781)
(Tapan Prakash)
- 2aa763c linter: Warn unmatched rule names (#6782) (Tapan Prakash)
- 0acca58 linter: Support `--print-config all` to print config file for
project (#6579) (mysteryven)

### Bug Fixes

- f49b3e2 linter: `react/iframe-missing-sandbox` ignores vanilla JS APIs
(#6872) (DonIsaac)
- 54a5032 linter: Correct false positive in `no-duplicates` (#6748)
(dalaoshu)
- a47c70e minifier: Fix remaining runtime bugs (#6855) (Boshen)

### Documentation

- 3923e63 linter: Add schema to config examples (#6838) (Dmitry
Zakharov)

### Refactor

- a148023 linter: Dereference IDs as soon as possible (#6821)
(overlookmotel)
- 423d54c rust: Remove the annoying `clippy::wildcard_imports` (#6860)
(Boshen)

---------

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2024-10-26 17:13:06 +08:00
Boshen
cb5cb6287e fix(linter): eprintln unmatched rules warning (#6916)
We can make this a hard error and bail early once stable.
2024-10-26 08:59:12 +00:00
ottomated
ce5b609514 feat(ast): remove explicit untagged marker on enums (#6915)
This assumes that any enums with exactly one field in each variant are untagged, and they're tagged otherwise.
2024-10-26 08:21:40 +00:00
Boshen
2c7ac29ece refactor(minifier): remove Tri, use Option<bool> instead (#6912) 2024-10-26 04:28:34 +00:00
ottomated
7d12669d68
fix(types): move @oxc-project/types to dependencies (#6909)
Hotfix. NPM doesn't install devDependencies automatically, so types were
missing.
2024-10-26 10:26:54 +08:00
oxc-bot
238e0866cb
release(crates): v0.34.0 (#6908)
## [0.34.0] - 2024-10-26

- 4618aa2 transformer: [**BREAKING**] Rename `TransformerOptions::react`
to `jsx` (#6888) (Boshen)

- 90c786c regular_expression: [**BREAKING**] Support ES2025 Duplicated
named capture groups (#6847) (leaysgur)

- 67a7bde napi/parser: [**BREAKING**] Add typings to napi/parser (#6796)
(ottomated)

### Features

- 1145341 ast_tools: Output typescript to a separate package (#6755)
(ottomated)
- 4429754 ecmascript: Constant eval `null` to number (#6879) (Boshen)
- fd57e00 ecmascript: Add abstract_relational_comparison to dce (#6846)
(Boshen)
- 8bcaf59 minifier: Late peeophole optimization (#6882) (Boshen)
- 860cbca minifier: Implement folding simple arrow fns (#6875) (camc314)
- c26020e minifier: Implement folding String.prototype.replaceAll
(#6871) (camc314)
- 50744f3 minifier: Implement folding String.prototype.replace (#6870)
(camc314)
- fccf82e minifier: Implement folding `substring` string fns (#6869)
(camc314)
- e6a5a1b minifier: Implement folding `charCodeAt` string fns (#6475)
(camc314)
- 0d0bb17 transformer: Complete the async-to-generator plugin (#6658)
(Dunqing)
- 419343b traverse: Implement `GetAddress` for `Ancestor` (#6877)
(overlookmotel)

### Bug Fixes

- a47c70e minifier: Fix remaining runtime bugs (#6855) (Boshen)
- 686727f minifier: Reference read has side effect (#6851) (Boshen)
- c658d93 minifier: Keep template literals with expressions (#6849)
(Boshen)
- 4dc5e51 transformer: Only run typescript plugin for typescript source
(#6889) (Boshen)
- 076f5c3 transformer/typescript: Retain ExportNamedDeclaration without
specifiers and declaration (#6848) (Dunqing)
- b075982 types: Change @oxc/types package name (#6874) (ottomated)

### Documentation

- 6eeb0e6 ast: Mention typescript-eslint, field ordering and shape
(#6863) (Boshen)
- 99e3b32 napi: Remove JSON.parse from example (#6836) (ottomated)

### Refactor

- adb5039 allocator: Add `impl GetAddress for Address` (#6891)
(overlookmotel)
- 3e7507f ast_tools: Reduce macro usage (#6895) (overlookmotel)
- 423d54c rust: Remove the annoying `clippy::wildcard_imports` (#6860)
(Boshen)
- 2d95009 transformer: Implement `Debug` on `StatementInjector` internal
types (#6886) (overlookmotel)
- c383c34 transformer: Make `StatementInjectorStore` methods generic
over `GetAddress` (#6885) (overlookmotel)
- 1f29523 transformer: Rename ReactJsx to Jsx (#6883) (Boshen)
- 333b758 transformer: `StatementInjectorStore` methods take
`&Statement` as target (#6858) (overlookmotel)
- c19996c transformer: Add `StatementInjectorStore::insert_many_before`
method (#6857) (overlookmotel)
- 7339dde transformer: `StatementInjectorStore::insert_many_after` take
an iterator (#6856) (overlookmotel)
- 4348eae transformer/typescript: Re-order visitor methods (#6864)
(overlookmotel)
- 3a56d59 transformer/typescript: Insert assignments after super by
`StatementInjector` (#6654) (Dunqing)
- a366fae traverse: Rename
`TraverseScoping::generate_binding_in_current_scope` (#6832)
(overlookmotel)
- 3b99fe6 traverse: Move `generate_binding` to `TraverseScoping` (#6831)
(overlookmotel)
- 60f487a traverse: `TraverseCtx::generate_binding` take an `Atom`
(#6830) (overlookmotel)

### Styling

- 262b2ed ast: Move crate doc comment to top of file (#6890)
(overlookmotel)

---------

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2024-10-26 09:39:53 +08:00
Boshen
741571f645 refactor(minifier): remove extra compress options (#6893)
Closure Compiler and ESBuild does not have these kind of granularity.
2024-10-26 01:30:13 +00:00
overlookmotel
3e7507f9d0 refactor(ast_tools): reduce macro usage (#6895)
1. Reduce the amount of code in `define_derive!` and `define_generator!` macros. This makes the code easier to read, and gives type hints in IDE.
2. Remove `generated_header!` macro and insert header as a blanket action, instead of repeated code in every generator.
2024-10-25 17:42:09 +00:00
Boshen
8bcaf59cf9 feat(minifier): late peeophole optimization (#6882) 2024-10-25 16:12:29 +00:00
overlookmotel
adb50398b8 refactor(allocator): add impl GetAddress for Address (#6891)
This allows passing an `Address` to methods like `StatementInjectorStore::insert_before` if you want to.
2024-10-25 15:20:21 +00:00
overlookmotel
262b2ed1ce style(ast): move crate doc comment to top of file (#6890)
Docs are more important than clippy, so docs go first!
2024-10-25 14:31:35 +00:00
Boshen
6eeb0e6385 docs(ast): mention typescript-eslint, field ordering and shape (#6863)
closes #6453
2024-10-25 14:31:34 +00:00
Boshen
4dc5e51cb1 fix(transformer): only run typescript plugin for typescript source (#6889)
closes #6865

TypeScript plugin changes import / export statements so it needs to be turned off for non-typescript files. This should also give a little performance boost for non-typescript files.
2024-10-25 13:59:31 +00:00
overlookmotel
2d95009bca refactor(transformer): implement Debug on StatementInjector internal types (#6886) 2024-10-25 12:58:28 +00:00
overlookmotel
c383c34a61 refactor(transformer): make StatementInjectorStore methods generic over GetAddress (#6885)
`StatementInjectorStore::insert_before` etc take any `GetAddress`. This allows using them with an `Ancestor` as well as a `Statement`.

Split the implementation of each function into 2 parts - generic outer wrapper and non-generic inner function to allow compiler to make better inlining decisions, and reduced compile time.
2024-10-25 12:50:58 +00:00
Boshen
4618aa22d9 refactor(transformer)!: rename TransformerOptions::react to jsx (#6888) 2024-10-25 12:04:33 +00:00
overlookmotel
419343bdd5 feat(traverse): implement GetAddress for Ancestor (#6877)
Closes #6803. Allow getting `Address` of an `Ancestor`.
2024-10-25 10:52:01 +00:00
Boshen
1f29523fed refactor(transformer): rename ReactJsx to Jsx (#6883)
This plugin is no longer about React.

The next PR will move out the React refresh plugin, which can be turned
on in isolation.
2024-10-25 10:37:28 +00:00
camc314
860cbca446 feat(minifier): implement folding simple arrow fns (#6875)
basically
```ts
const foo = () => {
    return baz
}
```
becomes
```ts
const foo = () => baz
```
2024-10-25 10:26:33 +00:00
Tapan Prakash
a73c5af0f5
feat(linter): Add fixer for jsx-a11y/no-access-key rule (#6781) 2024-10-25 02:48:12 -04:00
Boshen
442975408b feat(ecmascript): constant eval null to number (#6879) 2024-10-25 04:23:24 +00:00
Dunqing
0d0bb17ad9 feat(transformer): complete the async-to-generator plugin (#6658)
In this PR, most of the async functions have transformed correctly. But the async arrow functions don't fully transform correctly yet, it is related to we need to transform the arrow function to the generator function. For example:

Input:
```js
function declaration() {
  const asy = async () => {
  console.log(this.name)
 }
}
```

Output:
```js
function declaration() {
  const asy = babelHelpers.asyncToGenerator(function* () {
     console.log(this.name);
  });
}
```

Expected Output:

```js
function declaration() {
  var _this = this;
  const asy = /*#__PURE__*/function () {
    var _ref = babelHelpers.asyncToGenerator(function* () {
      console.log(_this.name);
    });
    return function asy() {
      return _ref.apply(this, arguments);
    };
  }();
}
```

From the expected output, we haven't handled `this` correctly, which means even if the `arrow-function` plugin doesn't enable, we still need to handle this correctly as the `arrow-function` plugin does, and further question if `arrow-function` plugin is enabled, how to avoid these making conflict?

I thought we may move out the implementation of `arrow-function` and as a common helper, this way every plugin can handle this well
2024-10-25 03:23:31 +00:00
leaysgur
90c786c420 feat(regular_expression)!: Support ES2025 Duplicated named capture groups (#6847)
Closes #6358

@preyneyv I know you've been working on this problem.

This is an implementation that has been dormant on my local for a while.

- All tests are passing
- However, the approach is simple but not general, so there might be some edge cases that were missed
- There's also room for improvement in terms of performance

For these reasons, it was marked as WIP for me.

I believe the test cases and other parts are usable, so feel free to fork and replace them with your implementation if you'd like.
2024-10-25 02:13:57 +00:00
DonIsaac
f49b3e2088 fix(linter): react/iframe-missing-sandbox ignores vanilla JS APIs (#6872)
> Closes #6750

Fixes a false positive in `react/iframe-missing-sandbox` on `document.createElement`, which is not react and has no way of passing a sandbox prop/attribute on creation.
2024-10-25 01:43:55 +00:00
camc314
c26020e553 feat(minifier): implement folding String.prototype.replaceAll (#6871) 2024-10-25 01:29:57 +00:00
camc314
50744f341b feat(minifier): implement folding String.prototype.replace (#6870) 2024-10-25 01:29:57 +00:00
camc314
fccf82e4df feat(minifier): implement folding substring string fns (#6869) 2024-10-25 01:29:56 +00:00
ottomated
b075982eaa fix(types): Change @oxc/types package name (#6874)
Closes #6862.

Possible options:
- `oxc-types`
- `@oxc-project/types`
- `@oxc-ast/types`
- `oxc-ast-types`
2024-10-24 20:04:09 +00:00
camc314
322f9d44b7 chore(minifier): remove planned minification for String.substr as its deprecated (#6868)
According to mdn, `String.prototype.substr()` has been deprecated, hence i do not think it makes sense to attempt to optimize this code.

This pull request removes the test cases along with the placeholder code for minification of this method

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr
2024-10-24 14:53:22 +00:00
camc314
e6a5a1b11c feat(minifier): implement folding charCodeAt string fns (#6475) 2024-10-24 14:37:50 +00:00
overlookmotel
4348eae157 refactor(transformer/typescript): re-order visitor methods (#6864)
It makes more sense for `exit_statement` to be after `enter_statement`.
2024-10-24 14:14:25 +00:00
Boshen
423d54cb74 refactor(rust): remove the annoying clippy::wildcard_imports (#6860) 2024-10-24 13:57:19 +00:00
ottomated
67a7bde4c6 feat(napi/parser)!: add typings to napi/parser (#6796)
- Added TypeScript annotation for `ParseResult.program`
- Modified the entrypoint for `oxc-parser` to allow wrapping the napi functions
- Updated `index.js` to parse the `program` string into a JSON object
- Updated tests
- Added a dependency on `@oxc/types`
2024-10-24 13:08:59 +00:00
ottomated
1145341a92 feat(ast_tools): output typescript to a separate package (#6755)
Part of #6347.

Moves typescript logic from derive_estree into a new ast_tools generator.
2024-10-24 13:08:57 +00:00
overlookmotel
333b758b49 refactor(transformer): StatementInjectorStore methods take &Statement as target (#6858)
This makes the use of `Address` an internal implementation detail of `StatementInjectorStore`. The caller shouldn't need to care about how `StatementInjectorStore` achieves its work. In future it might use `NodeId`, for instance.

We could broaden this in future so these methods take a `&A where A: GetAddress` if we need to, but for now taking a `&Statement` seems OK.
2024-10-24 12:38:57 +00:00
overlookmotel
c19996c2e7 refactor(transformer): add StatementInjectorStore::insert_many_before method (#6857)
This method is not used yet, but it seems natural to provide it as a counterpart to `insert_many_after`.
2024-10-24 12:38:56 +00:00
overlookmotel
7339dde473 refactor(transformer): StatementInjectorStore::insert_many_after take an iterator (#6856)
Follow-on after #6654.

Taking an `IntoIterator` avoids caller needing to construct a temporary `Vec`.
2024-10-24 12:38:54 +00:00
Boshen
a47c70e425 fix(minifier): fix remaining runtime bugs (#6855) 2024-10-24 12:22:18 +00:00
overlookmotel
a366fae8b7 refactor(traverse): rename TraverseScoping::generate_binding_in_current_scope (#6832)
Rename `generate_in_current_scope` to `generate_binding_in_current_scope` - more descriptive name.
2024-10-24 11:00:46 +00:00
Boshen
686727fc96 fix(minifier): reference read has side effect (#6851) 2024-10-24 08:32:38 +00:00
Boshen
c658d9336d fix(minifier): keep template literals with expressions (#6849) 2024-10-24 08:12:44 +00:00
Dunqing
076f5c39f4 fix(transformer/typescript): retain ExportNamedDeclaration without specifiers and declaration (#6848)
close: #6825
2024-10-24 07:59:07 +00:00
Boshen
fd57e00108 feat(ecmascript): add abstract_relational_comparison to dce (#6846)
I removed bigint comparisons because they were incorrect
2024-10-24 06:46:07 +00:00
overlookmotel
3b99fe6d59 refactor(traverse): move generate_binding to TraverseScoping (#6831)
Follow-up after #6830.

Now that `generate_binding` doesn't need access to `AstBuilder`, it can move into `TraverseScoping`.

Occasionally this is helpful when you need to borrows 2 parts of `TraverseCtx` simultaneously. e.g.:

```rs
// This fails to compile because we try to mutably borrow `TraverseCtx`
// while it's already borrowed
if let Ancestor::ProgramBody(body) = ctx.parent() {
    //                               ^^^ immutable borrow
    let binding = ctx.generate_binding(name, scope_id, flags);
    //            ^^^ mutable borrow
}

// Borrow-checker allows this because we borrow fields of `TraverseCtx` separately
if let Ancestor::ProgramBody(body) = ctx.ancestry.parent() {
    let binding = ctx.scoping.generate_binding(name, scope_id, flags);
}
```
2024-10-24 06:19:39 +00:00
Dunqing
3a56d59dce refactor(transformer/typescript): insert assignments after super by StatementInjector (#6654) 2024-10-24 05:14:43 +00:00