Commit graph

7312 commits

Author SHA1 Message Date
overlookmotel
088dd481df refactor(transformer/class-properties): shorten code (#7913)
Use `SymbolTable::symbol_is_mutated`, rather than repeating the same logic.
2024-12-15 16:54:58 +00:00
overlookmotel
f4cb5d3c95 docs(transformer): clarify comment (#7918) 2024-12-15 15:06:27 +00:00
overlookmotel
1317c00a5d docs(transformer/class-properties): clarify doc comments (#7914)
Use `prop` for property name in comments, to match everywhere else in this transform.
2024-12-15 14:54:47 +00:00
overlookmotel
544ffbf6c7 refactor(transformer/class-properties): split up code into multiple files (#7912)
Split out methods from `class.rs` into separate files.

Note: `static_block.rs` is currently very small, but it will get bigger - a new visitor is required here to rename references to class name and `this`.
2024-12-15 14:17:29 +00:00
overlookmotel
9989b58b1c docs(transformer/class-properties): re-order file list in doc comment (#7911)
Re-order list to reflect order transforms occur.
2024-12-15 14:11:47 +00:00
翠 / green
db9e93b554
feat(mangler): mangle top level variables (#7907)
Adds `top_level` option which is similar to [terser's `toplevel`
option](https://terser.org/docs/cli-usage/#cli-mangle-options).

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2024-12-15 21:31:41 +08:00
翠 / green
075bd165a8
feat(minifier): fold bitwise operation (#7908)
This PR implements constant evaluation for bitwise operations (`&`, `|`,
`^`).

I wanted to play around with the minifier a bit 🙂
2024-12-15 21:27:05 +08:00
overlookmotel
dcaf674aa8 refactor(transformer/class-properties): rename file (#7910)
Pure refactor. Rename file for clarity that it relates to transform of private fields (`this.#prop`) and not private property declarations (`#x = 123`).
2024-12-15 13:01:16 +00:00
overlookmotel
73900482c3 docs(transformer/class-properties): reformat doc comment (#7909) 2024-12-15 12:22:31 +00:00
overlookmotel
a5f04a72b5 perf(ast): faster Comment::is_jsdoc (#7905)
Small optimization.

Replace string slice + `starts_with` (at least 3 x bounds checks + 2 x UTF8 character boundary checks) with a single byte read (1 x bounds check).
2024-12-15 04:28:27 +00:00
Alexander S.
b99ee37326
refactor(linter): move rule "no-restricted-imports" to nursery (#7897)
many options are not supported:

https://github.com/oxc-project/oxc/issues/7810#issuecomment-2543182046
2024-12-15 12:26:47 +08:00
Cameron
9c9b73dadb
fix(linter): fix incorrect fixer for prefer-regexp-test (#7898)
closes #7793
2024-12-15 12:06:52 +08:00
overlookmotel
8ca8fce4e1 perf(transformer/class-properties): reduce work updating scopes when transforming static prop initializers (#7904)
Static property initializers need to be modified in various ways. One is to change the parent scope of the first level of scopes in the initializer to the new parent scope.

Lots of nodes which have scopes cannot be the first level. e.g. an `IfStatement` cannot because it would have to be inside a function, and that function would be the first-level scope. The `IfStatement` must be a nested scope, so we know we won't need to update its parent.

Skip checking if we need to update parent scope for all these nodes.
2024-12-15 01:53:14 +00:00
overlookmotel
80d0b3e10f perf(transformer/class-properties): fast path for instance prop initializer scope re-parenting (#7901)
Add a fast path for inserting instance property initializers into constructor, when no existing constructor or constructor has no bindings. This should be reasonably common.

The `Scope flags mismatch` errors are due to #7900.
2024-12-15 01:53:13 +00:00
overlookmotel
feac02e65b feat(transformer/class-properties): only rename symbols if necessary (#7896)
#7872 implements renaming symbols in constructor which shadow references in instance property initializers. But we don't need to rename where the reference in initializer references a symbol which is bound within the initializer itself.

Input:

```js
class C {
  double = n => n * 2;
  constructor(n) {
    console.log(n);
  }
}
```

Output:

```js
class C {
  constructor(n) { // <-- not renamed
    this.double = n => n * 2; // <-- moved into constructor
    console.log(n); // <-- not renamed
  }
}
```

This produces better output, and avoids a traversal of constructor's AST renaming symbols.
2024-12-15 01:53:13 +00:00
overlookmotel
e76fbb0721 fix(transformer/class-properties): fix symbol clashes in instance prop initializers (#7872)
Instance property initializers are moved into constructor. If symbols they reference are shadowed within constructor, rename those symbols.

Input:

```js
class C {
  prop = foo();
  constructor(foo) {
    console.log(foo);
  }
}
```

Output:

```js
class C {
  constructor(_foo) { // <-- renamed
    this.prop = foo(); // <-- moved into constructor
    console.log(_foo); // <-- renamed
  }
}
```
2024-12-15 01:53:12 +00:00
Alexander S.
f0a8d8aab7
refactor(tasks/lint_rules): detect typescript alias from mod.rs file (#7891)
based on #7890

tried graphite, but I do not have write access to this repo.  
Do not know how to create Branches on a Fork and the PRs on the Forked
Project.

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2024-12-15 00:14:15 +08:00
overlookmotel
0804916b28 test(transformer): make update fixtures script .mjs (#7892)
`.mjs` to match `reporter.mjs` in same directory.
2024-12-14 15:29:21 +00:00
overlookmotel
3858221f45 refactor(global): sort imports (#7883)
Pure refactor. Re-order imports for clarity:

1. `std`
2. External crates
3. `oxc_*` crates
4. Current crate `use crate::...`
5. Super `use super::...`
6. Local modules

This order is from "furthest away" to "closest". This makes it clearer to see what is coming from where.

`cargo +nightly fmt` (#7877) did a lot of the work, but unfortunately `rustfmt` does not have an option to (a) put workspace crates in a separate block from external crates and (b) move `mod` statements to after `use` statements.
2024-12-14 15:07:21 +00:00
overlookmotel
2c942362da refactor(transformer): improve encapsulation of transforms (#7888)
Modules in `oxc_transformer` only export the minimum required, to make the transforms less tightly coupled to each other.
2024-12-14 14:48:28 +00:00
overlookmotel
98d794673b refactor(semantic): import flags and ID types from oxc_syntax (#7887)
`oxc_semantic` had a bit of a mess of modules importing and re-exporting symbols from `oxc_syntax` all over the place. I assume this is a leftover from when our crates were structured differently.

Make this consistent by always importing `oxc_syntax`'s symbols from `oxc_syntax`, and only re-export them from the crate root.
2024-12-14 14:48:28 +00:00
overlookmotel
b9322c68e6 feat(semantic): re-export all flags and ID types (#7886)
`oxc_semantic` already re-exports `ScopeId`, `ScopeFlags`, `SymbolId` and `SymbolFlags` from `oxc_syntax`. It seems inconsistent that it doesn't also re-export `ReferenceId`, `ReferenceFlags`, `NodeId` and `NodeFlags` too. Do that.
2024-12-14 14:48:27 +00:00
dalaoshu
ee26b448cc
feat(linter): enhance get_element_type to resolve more element types (#7885)
I think it should if makes sense.

_Originally posted by @Boshen in
https://github.com/oxc-project/oxc/issues/7881#issuecomment-2543108246_
            

Since `jsx-a11y` supports these names, I have aligned them accordingly.
2024-12-14 22:45:37 +08:00
overlookmotel
7637aac21f style(ast_tools): reformat macro (#7884)
Fix indentation in macro definition.
2024-12-14 13:51:50 +00:00
dalaoshu
32935e6875
fix(linter): false positive in jsx-a11y/label-has-associated-control (#7881)
closes #7849

This is essentially because `get_element_type` does not support
recognizing tag names like `<a.b />`. I'm unsure whether we should
support it.
2024-12-14 21:22:31 +08:00
overlookmotel
fb897f6c3a style(data_structures): add line break (#7882) 2024-12-14 13:16:49 +00:00
Boshen
81eedb10c0 feat(parser): 'readonly' type modifier is only permitted on array and tuple literal types. (#7880) 2024-12-14 12:00:52 +00:00
Boshen
7a087b914e
ci: update .github/workflows/ci_security.yml 2024-12-14 17:45:39 +08:00
overlookmotel
38aafa25a6 perf(transformer/class-properties): reduce size of transform_call_expression_for_super_member_expr (#7859)
Follow-on after #7831. Break up `transform_call_expression_for_super_member_expr` into multiple functions, to make `transform_call_expression_for_super_member_expr` as small as possible, to encourage inlining it.
2024-12-14 08:06:33 +00:00
IWANABETHATGUY
9a309103a4
fix(oxc_transformer): inject_global_variables should considering string imported name (#7768)
Co-authored-by: Boshen <boshenc@gmail.com>
2024-12-14 16:05:56 +08:00
Boshen
9d77ab79f1
Update FUNDING.yml 2024-12-14 15:29:41 +08:00
Boshen
7fb9d47460 style(rust): cargo +nightly fmt (#7877) 2024-12-14 06:03:31 +00:00
oxc-bot
b40c410824
release(oxlint): v0.15.2 (#7876)
## [0.15.2] - 2024-12-14

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
2024-12-14 13:37:03 +08:00
Boshen
36ebb3e784
Revert "chore(renovate): temporary "updateNotScheduled": true"
This reverts commit 1bb097d459.
2024-12-14 13:25:22 +08:00
Boshen
20c29a19f3
ci: downgrade action-gh-release
v2.2.0 is broken https://github.com/softprops/action-gh-release/issues/555
2024-12-14 13:24:31 +08:00
Boshen
e62a69a8dc
Revert "ci: persist-credentials: true in release_oxlint"
This reverts commit 0ad4fe9e15.
2024-12-14 13:21:16 +08:00
Boshen
0ad4fe9e15
ci: persist-credentials: true in release_oxlint 2024-12-14 13:17:36 +08:00
Boshen
816cba6f35
Revert "ci(release_oxlint): split out github release job"
This reverts commit 1eab12a03a.
2024-12-14 13:17:35 +08:00
overlookmotel
588df9f366 test(transformer): transformer conformance runner --override output with spaces not tabs (#7865)
When running `just test-transform --override`, generate override files with indentation as double spaces, instead of tabs. This matches our convention for formatting JS files.
2024-12-14 04:57:00 +00:00
overlookmotel
53e2bc0896 feat(traverse): add TraverseScoping::rename_symbol method (#7871)
Add `TraverseScoping::rename_symbol` method. This renames the symbol, and also the binding for that symbol.
2024-12-14 04:28:54 +00:00
overlookmotel
492407386b fix(semantic): ScopeTree::rename_binding preserve order of bindings (#7870)
`ScopeTree::rename_binding` was previously altering the order of bindings in the `FxIndexMap`. Order of bindings matters in the mangler. Reimplement `rename_binding` to preserve original order.
2024-12-14 04:28:53 +00:00
overlookmotel
1cf8f8f2ca refactor(semantic): SymbolTable::set_name return old name (#7869)
`SymbolTable::set_name` return old symbol name. `set_name` is marked `#[inline]`, so where the caller does not use the old name, getting it should be optimized out by the compiler. So it makes the method more flexible, at no cost.
2024-12-14 04:28:52 +00:00
overlookmotel
c0714945b2 refactor(semantic)!: remove SymbolTable::rename method (#7868)
Remove `SymbolTable::rename` method. We also have `SymbolTable::set_name` method which does the same thing.
2024-12-14 04:28:51 +00:00
overlookmotel
624398083a refactor(transformer/class-properties): instance prop inits visitor use Visit (#7867)
Use `Visit` instead of `VisitMut` as `InstanceInitializerVisitor` does not need to mutate the AST.
2024-12-14 04:28:49 +00:00
Boshen
0f540ecc9f
chore(just): remove update_fixtures from just submodules (#7875)
It is replaced by `update-transformer-fixtures`
2024-12-14 12:28:15 +08:00
overlookmotel
c0576faf80 fix(transformer/class-properties): use UID for args in created class constructor (#7866)
When creating class constructor for a class which has super class, use UID `_args` for temp var (rather than `args`). This avoids shadowing a var called `args` used in an instance property initializer.

This diverges from Babel. Babel uses `args` unless it finds a var called `args` in an instance property initializer. But searching the AST of initializers can be fairly expensive, so it's better to skip it. The overrides for test fixtures included in this PR are just to account for that difference.
2024-12-14 04:18:48 +00:00
Boshen
0b67b37584
ci: fix ci_security.yml 2024-12-14 12:17:26 +08:00
Jan Olaf Martin
3659e6d768
fix(cfg): include export default code in CFG instructions (#7862)
Previously any instructions happening inside of the expression passed to
`export default` were invisible in the CFG.

Example:

```
// Uncommenting this line makes the call to bar() disappear from the
// CFG view of the program:
// export default
bar();
```
2024-12-14 12:09:28 +08:00
overlookmotel
eb47d433ff refactor(transformer/class-properties): re-use existing Vec (#7854)
Follow-on after #7831.

Previously this code was:

1. Create a new empty `Vec` (in `move_vec` call).
2. Consume the old `Vec` and create a new `Vec<ArrayExpressionElement>`.
3. Push to the empty `Vec` created in step 1.

Instead:

1. Drain the old `Vec` and create a new `Vec<ArrayExpressionElement>`.
2. The old `Vec` is now empty, but still holds an allocation if it wasn't empty before.
3. Push to the old `Vec` (re-using the existing allocation).

i.e. We create 1 less `Vec`, and re-use an existing allocation if possible.
2024-12-14 03:27:56 +00:00
overlookmotel
1380b7b7e9 refactor(transformer/class-properties): reduce visibility of method (#7858)
Follow-on after #7831. `transform_super_call_expression_arguments` is only used within this file, so does not need to be `pub(super)`.
2024-12-14 03:21:58 +00:00