Commit Graph

49 Commits

Author SHA1 Message Date
Donny/강동윤
ec0d6d5a0d
feat(es/minifier): Improve trivial rules () 2022-10-13 23:34:30 +00:00
Austaras
5a23949f12
feat(es/minifier): Inline and remove vars in one pass () 2022-10-12 01:52:58 +00:00
Donny/강동윤
6365acc9f5
test(es/minifier): Organize terser tests ()
**Description:**

Our minifier is better than terser in some cases, so we don't need to match the output of terser exactly.
2022-10-11 08:25:11 +00:00
Austaras
61807abf6e
feat(es/minifier): Inline function calls in more cases () 2022-10-01 18:18:45 +09:00
Austaras
31ffd5a01d
fix(es/renamer): Use a separate scope for the name of FnExpr () 2022-10-01 12:33:19 +09:00
Donny/강동윤
8c4873f81e
test(es/minifier): Remove mangle-only snapshots ()
**Description:**

We don't have to store snapshots of all fixtures.
2022-09-28 21:35:52 +09:00
Donny/강동윤
dcd516d2bd
feat(es/minifier): Ignore more expressions in sequential inliner ()
**Description:**

We can skip **member access** to `console` as it does not have any side effects.
2022-09-27 07:45:44 +00:00
Donny/강동윤
48cddc16f6
test(es/minifier): Categorize terser tests ()
**Description:**

I'm going to focus on rules enabled by default. I updated some tests because our one was better, and postponed `unsafe` tests.
2022-09-27 15:18:57 +09:00
Donny/강동윤
93964a82ea
test(es/minifier): Remove analysis snapshot ()
**Description:**

This PR removes analysis snapshots as it disturbs code review process
2022-09-23 13:14:42 +09:00
Donny/강동윤
5314ac5d02
feat(es/minifier): Use char frequency data for property manglers () 2022-09-22 22:14:26 +09:00
Donny/강동윤
e9c704182b
feat(es/minifier): Improve analysis of reassignments () 2022-09-22 10:22:18 +00:00
Donny/강동윤
e303f7e853
fix(es/minifier): Fix analysis of assignments ()
**Related issue:**

 - Closes https://github.com/swc-project/swc/issues/5910
2022-09-21 11:33:25 +00:00
Donny/강동윤
a9873e505d
perf(es/minifier): Optimize analyzer () 2022-09-20 08:21:39 +00:00
Donny/강동윤
aacf7aaf80
feat(es/minifier): Drop function identifier in a single pass ()
**Description:**

We only inline function declarations if `ref_count` is 1, so we don't need to preserve the name of the function.

**Related issue:**

 - Closes https://github.com/swc-project/swc/issues/5682.
2022-09-19 15:07:56 +00:00
Alexander Akait
7f62fa6227
perf(html): Reduce memory usage () 2022-09-15 04:17:05 +00:00
Alexander Akait
ccd618ce54
perf(html/minifier): Improve performance () 2022-09-13 14:01:41 +09:00
Austaras
8567a38c4a
feat(es/minifier): Extend inlining of identifiers to multi-usage () 2022-09-13 03:52:47 +00:00
Austaras
ee26337a25
feat(es/minifier): Inline lazily initialized variables ()
Safety:

For a function-local variable, an expression with side-effects would be a call, including an indirect one with a member expression.

 - If the call is function-local, it will be analyzed by the analyzer and inliner will not work.
 - If the call is not a function-local one, it cannot modify the local variable.
2022-09-08 08:07:43 +00:00
Austaras
90852f5aa6
fix(es/minifier): Fix analysis of assignments and classes () 2022-09-07 03:51:42 +00:00
Donny/강동윤
60ce462215
feat(es/minifier): Align name mangler with terser () 2022-09-06 21:37:58 +09:00
Austaras
4ef99f346b
feat(es/minifier): Relax function inline requirement () 2022-09-01 19:36:16 +09:00
Donny/강동윤
a06e6e9ce5
fix(es/minifier): Fix alias analyzer () 2022-08-26 10:06:25 +00:00
Donny/강동윤
d44bbffa02
fix(es/minifier): Revert alias analyzer work () 2022-08-26 08:45:49 +00:00
Donny/강동윤
00e635b9ea
fix(es/minifier): Improve alias analyzer () 2022-08-26 07:56:40 +00:00
Donny/강동윤
d81fe67e4b
feat(es/minifier): Improve gzipped size () 2022-08-26 05:23:01 +00:00
Austaras
d2f3e29bb0
feat(es/minifier): Ignore recursive usage for function calls and pure calls () 2022-08-17 23:24:10 +00:00
Austaras
ca21fd0c4d
fix(es/minifier): Inline vars declared in conditional paths () 2022-08-05 13:25:28 +00:00
Donny/강동윤
3943eb24d1
feat(es/minifier): Consider char frequencies () 2022-08-03 10:20:17 +00:00
Austaras
9519e801ea
fix(es/resolver): Fix handling of block scoped functions () 2022-07-05 05:04:49 +00:00
Donny/강동윤
36d960c7e9
perf(es/hygiene): Make hygiene faster () 2022-06-15 14:36:57 +00:00
Donny/강동윤
7f69b9c80f
test(es/minifier): Add snapshots for the mangler ()
I found a way to make the name mangler parallel, but I want to ensure that we don't break anything.
2022-05-27 07:32:23 +00:00
Donny/강동윤
4b27df9f12
perf(es/minifier): Make more passes parallel () 2022-05-27 06:48:08 +00:00
Donny/강동윤
49b3c2715c
refactor(es/minifier): Make rust-analyzer fast, really () 2022-05-23 16:16:05 +09:00
Donny/강동윤
47e6cc5190
refactor(es/minifier): Make rust-analyzer faster ()
- We now use a separate crate for testing the minifier. This makes IDE much faster.
2022-05-23 15:53:01 +09:00
Donny/강동윤
73dfa95e5a
fix(es/minifier): Fix analysis of assignment patterns () 2022-05-19 05:10:12 +00:00
Donny/강동윤
36ff4f735f
test(es/minifier): Add size tests using dbg-swc () 2022-05-16 03:01:53 +00:00
Donny/강동윤
6a97c7bef8
fix(es/utils): Fix wrong apis ()
# API Changes

## `swc_ecma_utils`

### Renames

 - `find_ids` => `find_pat_ids`
 - `prepend` => `prepend_stmt`
 - `as_bool` => `cast_to_bool`
 - `as_number` => `as_pure_number`
 - `as_string` => `cast_to_string`
 - (`as_pure_bool`, `cast_to_number` is not renamed)
 - `UsageFinder` => `IdentUsageFinder`.
 - `IdentFinder` => `IdentRefFinder`.

## Changes

 - Re-export of `HANDLER` from `swc_common::errors` is removed. Use `swc_common::error::HANDLER` instead.
 - Re-export of `Id` from `swc_ecma_ast` is removed. Use `swc_ecma_ast::Id` instead.
 - `ExprCtx` is used for apis related to `Expr`.
 - `preserve_effects` is now a method of `ExprCtx`. It was a top-level function.
 - `extract_side_effects_to` is now a method of `ExprCtx`. It was a top-level function.
 - `IdentUsageFinder` (previously `UsageFinder`) now takes `Id` instead of `Ident`.
 - `IdentRefFinder` (previously `IdentFinder`) now takes `Id` instead of `Ident`.
 - `ExprExt::is_ident_ref_to` is removed.
 - `Expr::is_global_ref_to` is added.
 - `:🆔:id` is removed. Use `Ident::to_id()` instead.
2022-05-11 04:36:22 +00:00
Donny/강동윤
097ff1ddc1
fix(es/minifier): Fix with and NaN () 2022-05-10 03:21:43 +00:00
Donny/강동윤
9e79f9ced6
fix(es/resolver): Fix handling of a complex try catch () 2022-05-08 10:12:50 +00:00
Donny/강동윤
53610fdafc
feat(es/resolver): Use different syntax context for unresolved refs ()
- We don't need a list of bindings to check if an identifier is unresolved.
 - Checking if an identifier is unresolved is now one CPU instruction.
   - Previously it was one hashmap operation.
 - This PR also improves performance, by removing the hashmaps mentioned above.
2022-04-26 07:38:50 +00:00
Donny/강동윤
9733917cc7
fix(es/minifier): Fix analysis of update expressions () 2022-04-25 12:07:27 +00:00
Austaras
df0d572b4f
chore(es/minifier): Update terser test references () 2022-04-10 06:50:52 +00:00
Donny/강동윤
4701da576f
feat(es/minifier): Improve inliner and evaluator () 2022-04-05 06:25:23 +00:00
Donny/강동윤
be09ea6991
feat(es/minifier): Drop noop calls () 2022-03-15 16:23:32 +09:00
Donny/강동윤
a2643608a7
feat(es/minifier): Implement pure_getters partially () 2022-03-05 20:18:52 +00:00
Donny/강동윤
364532e9a7
feat(es/minifier): Improve sequential inlining () 2022-03-03 19:18:43 +00:00
Donny/강동윤
ac1d4058f2
fix(es/minifier): Fix analyzer ()
swc_ecma_utils:
 - `collect_decls`: Support paramters of arrow expressions.

swc_ecma_minifier:
 - `analyzer`: Fix `has_property_mutation`.
2022-02-14 15:47:16 +09:00
Donny/강동윤
73e9185bba
test(es/minifier): Add snapshot testing for the analyzer () 2022-02-11 18:33:08 +09:00
Donny/강동윤
2b2f6955f2
refactor: Flatten ecmascript () 2021-11-10 19:00:54 +09:00