Commit graph

4890 commits

Author SHA1 Message Date
Alexander S.
dcddbeb689
chore(linter): add line break for consistent (#6837)
This regex expects always a line break before the closing bracet:
https://github.com/oxc-project/eslint-plugin-oxlint/blob/main/scripts/traverse-rules.ts#L110
2024-10-24 07:36:58 +08:00
Boshen
ec5a19b880 fix(minifier): do not remove binary expressions (#6829) 2024-10-23 16:07:29 +00:00
Tapan Prakash
2aa763c803
feat(linter): warn unmatched rule names (#6782)
Fixes https://github.com/oxc-project/oxc/issues/6763
2024-10-24 00:05:01 +08:00
Dunqing
fdd69e4b3f refactor(transformer/typescript): use TraverseCtx::generate_binding to create a symbol (#6806)
Obviously, we reduce much code after using this API
2024-10-23 15:50:11 +00:00
Dunqing
c96e739b96 feat(traverse): add generate_binding and generate_binding_current_scope APIs in context (#6805)
These two APIs are used to create a symbol with the provided symbol name, The difference from `generate_uid` is that we don't need to create a unique name for the symbol.

If you have a better method name for this, Feel free to edit this PR directly
2024-10-23 15:50:09 +00:00
Boshen
22355f73f3 fix(minifier): do not remove undefined for destructuring patterns (#6828) 2024-10-23 15:42:04 +00:00
Dunqing
5928f043b5 feat(semantic): add move_binding API in ScopeTree (#6808)
Part of #6658

This API is useful when we want to move a scope to another scope
2024-10-23 15:36:30 +00:00
Dunqing
e7e60dab68 feat(semantic): add change_parent_id API in ScopeTree (#6807)
Part of #6658

This API is useful when we want to move a scope to another scope
2024-10-23 15:29:28 +00:00
overlookmotel
e5f4b4a333 refactor(transformer/react-refresh): dereference ScopeId as soon as possible (#6820)
Style nit. Dereference `&ScopeId` to `ScopeId` as early as possible. `&ScopeId` is 8 bytes, whereas `ScopeId` is 4 bytes.

In simple cases like this, compiler will optimize it anyway, but still I think it's a better pattern to dererence early. In more complicated cases, it will be better for performance, and in my opinion, it makes things clearer if vars called `scope_id` are always a `ScopeId`, not sometimes a `&ScopeId`.
2024-10-23 13:26:24 +00:00
overlookmotel
57685b28e8 refactor(transformer/react-refresh): unwrap BindingIdentifier::symbol_id (#6817)
Nit. `BindingIdentifier::symbol_id` should always be `Some`. Panic rather than exiting early  if it's not.
2024-10-23 13:26:23 +00:00
overlookmotel
4f6dc22a38 refactor(transformer/react-refresh): avoid re-creating Atoms (#6816)
Store `BoundIdentifier` in `registrations`. This allows removing the call to `ctx.ast.atom()` which re-allocates a new `Atom` into the arena - unnecessary as it's already been allocated when the UID was created.

It's unfortunate that `Semantic` stores symbol names as `CompactStr`s instead of `Atom`s, otherwise we could get the name as an `Atom` without re-allocating it. Hopefully we can make that change in future, and then reduce `BoundIdentifier` to just contain the `SymbolId`. But for now, we are kind of stuck with it.
2024-10-23 13:26:23 +00:00
overlookmotel
8316069e7d refactor(transformer/react-refresh): shorten code by using BoundIdentifier (#6815)
Pure refactor. Use `BoundIdentifier` for shorter code.
2024-10-23 13:26:22 +00:00
overlookmotel
ce1d8cf20b feat(traverse): add BoundIdentifier::from_binding_ident method (#6814) 2024-10-23 13:26:21 +00:00
overlookmotel
b8dfa191be refactor(transformer): shorten code (#6809)
Use `BoundIdentifier::create_binding_pattern`, rather than writing out the code to create a `BindingPattern` manually each time.
2024-10-23 13:18:09 +00:00
overlookmotel
e59b5d919d refactor(minifier): dereference SymbolId as soon as possible (#6823)
Style nit. Dereference `&SymbolId` to `SymbolId` as early as possible. `&SymbolId` is 8 bytes, whereas `SymbolId` is 4 bytes.

In simple cases like these, compiler will optimize it anyway, but still I think it's a better pattern to dererence early. In more complicated cases, it will be better for performance, and in my opinion, it makes things clearer if vars called `symbol_id` are always a `SymbolId`, and not sometimes a `&SymbolId`.
2024-10-23 13:03:04 +00:00
overlookmotel
a148023fad refactor(linter): dereference IDs as soon as possible (#6821)
Style nit. Dereference `&ScopeId` to `ScopeId` (and other IDs) as early as possible. `&ScopeId` is 8 bytes, whereas `ScopeId` is 4 bytes.

In simple cases like these, compiler will optimize it anyway, but still I think it's a better pattern to dererence early. In more complicated cases, it will be better for performance, and in my opinion, it makes things clearer if vars called `scope_id` are always a `ScopeId`, not sometimes a `&ScopeId`.
2024-10-23 12:57:55 +00:00
Boshen
11077708bb fix(coverage): inject babel helpers for transform (#6818) 2024-10-23 12:43:56 +00:00
overlookmotel
871b9f5abc style(transformer/react-refresh): fix whitespace (#6813)
Style nit. Fix whitespace/indentation. Not sure why `rustfmt` didn't do this automatically.
2024-10-23 11:54:53 +00:00
overlookmotel
759710aa66 refactor(transformer): methods only take &TraverseCtx where possible (#6812)
Methods which only need an immutable ref `&TraverseCtx` take that, instead of unnecessary `&mut TraverseCtx`.
2024-10-23 11:37:27 +00:00
overlookmotel
47bc36832c refactor(traverse): BoundIdentifier methods only take &TraverseCtx (#6811)
These methods don't require a `&mut TraverseCtx`, as they only call methods on `AstBuilder`.
2024-10-23 11:32:01 +00:00
overlookmotel
55c07f2d4c docs(traverse): correct doc comment for BoundIdentifier (#6810)
Docs were out of date. APIs have changed.
2024-10-23 10:47:29 +00:00
Boshen
05ef03dbab fix(codegen): correct print __proto__ shorthand (#6802) 2024-10-23 07:16:00 +00:00
Boshen
1b7897cf01 fix(codegen): print #field in {} << 0; correctly (#6799) 2024-10-23 05:34:22 +00:00
Boshen
2f6ad42348 fix(codegen): print negative bigint 1n- -1n correctly after constant folding (#6798)
closes #6767
2024-10-23 04:56:50 +00:00
camc314
b4bc300ebf feat(minifier): improve folding block stmts (#6793) 2024-10-23 04:13:58 +00:00
camc314
7c51b2fd9d chore(minifier): remove duplicate minifier test (#6792)
these tests already exist below (and have been enabled)
34fe7c00a3/crates/oxc_minifier/src/ast_passes/peephole_remove_dead_code.rs (L576-L597)

i suspect this was left in as a copy/pasta error
2024-10-23 04:07:50 +00:00
overlookmotel
718ccded34 refactor(ast)!: remove unused new methods (#6789) 2024-10-23 03:36:32 +00:00
overlookmotel
4d2d214ec7 refactor(ast, transformer)!: remove StringLiteral::new method (#6788) 2024-10-23 03:36:32 +00:00
overlookmotel
a1ca964560 refactor(ast, parser)!: remove NumericLiteral::new method (#6787) 2024-10-23 03:36:31 +00:00
overlookmotel
aeaa27a618 refactor(ast, parser, transformer, traverse)!: remove BindingIdentifier::new methods (#6786) 2024-10-23 03:36:31 +00:00
overlookmotel
ecc9151f99 refactor(ast, parser, transformer, traverse)!: remove IdentifierReference::new methods (#6785) 2024-10-23 03:36:30 +00:00
overlookmotel
c91ffbcb01 refactor(ast, transformer)!: remove IdentifierName::new method (#6784) 2024-10-23 03:36:30 +00:00
overlookmotel
2bee4e2735 refactor(ast, transformer)!: remove BlockStatement::new methods (#6783)
First of a series of PRs removing `new` and `new_with_scope_id` etc methods from AST types. Following #6760, all AST node creation can now go via the AST builder.

This lays groundwork for Node IDs (#5689), as we'll need `NodeId`s to be generated in `AstBuilder`, so that all nodes receive an ID.
2024-10-23 03:36:30 +00:00
Boshen
8f179534c2 fix(coverage): remove some broken cases (#6797) 2024-10-23 03:10:49 +00:00
mysteryven
0acca58581 feat(linter): support --print-config all to print config file for project (#6579)
Continue work on #4742.

Only `oxlint --print-config all` is supported. It's useful to migrate from command-line interface to config file.

The `--print-config PATH` looks not really useful for us now, I will add it after config file overrides supported.
2024-10-22 17:56:23 +00:00
Dunqing
b711ee1881 fix(transformer): after using StatementInjector, some statements disappeared (#6778) 2024-10-22 14:10:19 +00:00
overlookmotel
91651e0a3b docs(ast): fix comment for ClassElement::r#static (#6771)
Follow-up after #6731. Make a long comment to remove ambiguity about what this method does for once and for all!
2024-10-22 10:38:15 +00:00
dalaoshu
3116fd3dc1
fix(oxc_language_server): correct diagnostic link (#6765) 2024-10-22 06:23:54 -04:00
_Kerman
c916505c42
docs(ast): fix comment of ClassElement::r#static (#6731)
The comment says: `Returns true if this ClassElement is a static block
or has a static modifier.`
2024-10-22 18:05:45 +08:00
leaysgur
8032813bf8 fix(regular_expression)!: Migrate to new regexp parser API (#6741)
Follow up #6635

- [x] Remove old APIs
- [x] Update linter usage
- [x] Update parser usage
- [x] Update transformer usage
2024-10-22 05:34:18 +00:00
dalaoshu
54a50322db
fix(linter): correct false positive in no-duplicates (#6748)
closes #6736 

There may be a better solution. If there is a good way to fix it, please
feel free to close it. I will fix the clippy problem later because I
went back to the dormitory to sleep and my computer was in the studio.

---------

Co-authored-by: Don Isaac <donald.isaac@gmail.com>
2024-10-22 13:34:03 +08:00
oxc-bot
9648e98998
release(oxlint): v0.10.2 (#6764)
## [0.10.2] - 2024-10-22

### Features

- dbe1972 linter: Import/no-cycle should turn on ignore_types by default
(#6761) (Boshen)
- 619d06f linter: Fix suggestion for `eslint:no_empty_static_block` rule
(#6732) (Tapan Prakash)

### Bug Fixes


### Performance

- 8387bac linter: Apply small file optimization, up to 30% faster
(#6600) (camchenry)

### Refactor

- b884577 linter: All ast_util functions take Semantic (#6753)
(DonIsaac)
- 744aa74 linter: Impl `Deref<Target = Semantic>` for `LintContext`
(#6752) (DonIsaac)
- 6ffdcc0 oxlint: Lint/mod.rs -> lint.rs (#6746) (Boshen)

### Testing

- b03cec6 oxlint: Add `--fix` test case (#6747) (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-22 12:31:17 +08:00
overlookmotel
10484cdeeb feat(transformer): class static block transform (#6733)
Add ES2022 class static block transform.
2024-10-22 03:40:02 +00:00
overlookmotel
78fee6ee24 feat(ast): add AstBuilder::*_with_scope_id etc methods (#6760)
Add methods to `AstBuilder` to create AST nodes with `ScopeId`, `SymbolId`, `ReferenceId`, for use in transformer.

e.g. `identifier_reference_with_reference_id`, `binding_identifier_with_symbol_id`, `block_statement_with_scope_id `.
2024-10-22 03:40:02 +00:00
Boshen
dbe1972283 feat(linter): import/no-cycle should turn on ignore_types by default (#6761)
closes #6759
2024-10-22 02:35:28 +00:00
camchenry
8387bac51f perf(linter): apply small file optimization, up to 30% faster (#6600)
Theory: iterating over the rules three times has slightly worse cache locality, because the prior iterations have pushed `rule` out of the cache by the time we iterate over it again. By iterating over each rule only once, we improve cache performance (hopefully). We also don't need to collect rules to a Vec, so it saves some CPU/memory there too.

In practice: the behavior here actually depends on the number of AST nodes that are in the program. If the number of nodes is large, then it's better to iterate over the nodes only once and iterate the rules multiple times. But if the number of nodes is small, then it's better to iterate over nodes multiple times and only iterate over the rules once. See this comment for more context: https://github.com/oxc-project/oxc/pull/6600#issuecomment-2427837715, as well as the comment inside the PR: https://github.com/oxc-project/oxc/pull/6600/files#diff-207225884c5e031ffd802bb99e4fbacbd8364b1343a1cec5485bf50f29186300R131-R143.

In practice, this can make linting a file 1-45% faster, depending on the size of the file, number of AST nodes, number of files, CPU cache size, etc. To accommodate large and small files better, we have an explicit threshold of 200,000 AST nodes, which is an arbitrary number picked based on some benchmarks on my laptop. For large files, the linter behavior doesn't change. For small files, we switch to iterating over nodes in the inner loop and iterating over rules once in the outer loop.
2024-10-22 02:24:41 +00:00
Tapan Prakash
619d06f004
feat(linter): Fix suggestion for eslint:no_empty_static_block rule (#6732)
Relates to https://github.com/oxc-project/oxc/issues/4179

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2024-10-22 09:01:44 +08:00
overlookmotel
ab0353553a docs(transformer): correct typos and reformat doc comments (#6758) 2024-10-22 00:20:55 +00:00
overlookmotel
46720be7af docs(ast): improve formatting of AstBuilder doc comments (#6756) 2024-10-22 00:12:01 +00:00
DonIsaac
b8845773f7 refactor(linter): all ast_util functions take Semantic (#6753)
Needed in `oxc/no-map-spread` rule.
2024-10-21 22:39:39 +00:00