Commit graph

5733 commits

Author SHA1 Message Date
DonIsaac
acc2d16b41 docs(ast): document most TypeScript AST nodes (#5983)
Part of #5870
2024-09-23 01:25:34 +00:00
Boshen
07f34c51d8
chore(renovate): ignore unicode-width update, which is pinned to miette 2024-09-23 09:24:28 +08:00
camchenry
0a5a4a9812 refactor(linter): use parsed patterns for unicorn/no-hex-escape (#5985)
- part of https://github.com/oxc-project/oxc/issues/5416

This pull request includes significant improvements to the `no_hex_escape` rule in the `oxc_linter` crate. The changes enhance the detection and replacement of hexadecimal escapes within regular expressions by introducing a more comprehensive AST traversal.

  - Implemented a new `visit_terms` function and its helper functions to traverse the regex AST and apply checks on individual terms.
  - Introduced the `check_character` function to replace hexadecimal escapes with Unicode escapes within regex patterns.
  - Updated snapshots to reflect the new diagnostic messages and replacements for hexadecimal escapes in regex patterns.
2024-09-23 01:11:02 +00:00
camchenry
b681c9a12c test(linter): import test cases for no-empty-character-class (#5981)
improved test coverage for this rule by importing the newer test cases from 27383226b8/tests/lib/rules/no-empty-character-class.js (L4)
2024-09-23 00:33:29 +00:00
camchenry
2cf2edd6bf refactor(linter): use parsed patterns in no-empty-character-class rule (#5980)
- part of https://github.com/oxc-project/oxc/issues/5416

Uses the parsed regular expression patterns for detecting empty character classes. This is more robust than the handwritten pattern matching from before and allows us to provide more accurate diagnostics and actually point to the empty character class in the literal.
2024-09-23 00:33:29 +00:00
DonIsaac
d24985ed51 feat(linter): add oxc-security/api-keys (#5906)
## What This PR does
Adds a new `oxc-security/api-key` rule that scans for hard-coded API keys.

It is broken up into "secret rules", where each one is responsible for finding a different kind of key. It is architecturally identical to how lint rules themselves. This PR also includes the first of these rules, for AWS access key IDs.

Logic and rules are based on [keyhunter](https://github.com/Donisaac/keyhunter). I've licensed that repo under GNU GPLv3, but it's my code and I can do what I want with it 😈 (read: I'm fine with it being MIT for oxc).

This PR is a complete feature in its own right, but does not represent the end of this work. See https://github.com/oxc-project/backlog/issues/116 to track overall progress.
2024-09-22 22:39:56 +00:00
camchenry
767602b56d test(linter): add regression test for #5227 (#5975)
- closes https://github.com/oxc-project/oxc/issues/5227
2024-09-22 22:25:25 +00:00
DonIsaac
84b7d1ac8b test(index): add unit tests to oxc_index (#5979)
Trying to improve `oxc_index`'s code coverage.
2024-09-22 22:10:04 +00:00
camchenry
f9b44c5738 feat(linter): add unicode sets support to no-useless-escape rule (#5974)
- part of https://github.com/oxc-project/oxc/issues/5416

Replaces the handwritten regex parsing logic with the `oxc_regular_expression` parser, which should be more accurate and enables support for unicode sets.
2024-09-22 21:19:15 +00:00
DonIsaac
74d8714d5a feat(semantic): add help message for invalid let x?: number (#5969) 2024-09-22 15:59:49 +00:00
DonIsaac
47c2faa7a9 docs(ast): document TryStatement and related nodes (#5970)
Part of #5870
2024-09-22 15:54:27 +00:00
Boshen
612f638bcd
chore: change just c to run cargo conformance 2024-09-22 23:50:30 +08:00
Boshen
362c427b94 fix(mangler,codegen): do not mangle top level symbols (#5965) 2024-09-22 13:45:54 +00:00
Dunqing
fd1c46ca9e fix(isolated-declarations): infer failed if there are two setter/getter methods that need to be inferred (#5967) 2024-09-22 13:41:47 +00:00
Dunqing
c84bd28a9c refactor(isolated-declarations): simplify to infer the getter and setter methods (#5966) 2024-09-22 13:02:46 +00:00
Dunqing
6df82eee28 fix(isolated-declarations): false positive for class private method that has arguments without type annotations (#5964)
close: #5874
2024-09-22 10:10:52 +00:00
Dunqing
6a9e71da46 fix(isolated-declarations): wrap TSFunctionType in parentheses if it is inside the TSUnionType (#5963) 2024-09-22 10:10:52 +00:00
camchenry
eed9ac7c46 fix(linter): include actual span size in no-regex-spaces diagnostic (#5957) 2024-09-22 04:45:40 +00:00
camchenry
a9a8e2ad41 refactor(linter): use regex parser in eslint/no-regex-spaces (#5952)
- part of https://github.com/oxc-project/oxc/issues/5416

Use the `oxc_regular_expression` parser to make these checks more robust. a few snapshots are updated because they now output more accurate diagnostics based on the regex AST. for example, `/   ?/` now correctly only highlights two spaces rather than three (because the last one is part of a quantifier)
2024-09-22 04:33:46 +00:00
DonIsaac
40c89c2c5f fix(linter): move promise/avoid-new to style category (#5961) 2024-09-22 04:25:48 +00:00
DonIsaac
f1551d64bc fix(semantic): ? on variable declaration type annotations is a syntax error (#5956)
Closes #5955
2024-09-22 00:01:47 +00:00
camchenry
05f592b834 refactor(linter): Use parsed patterns in unicorn/prefer-string-starts-ends-with (#5949)
- part of https://github.com/oxc-project/oxc/issues/5416

This change enhances the accuracy of the `prefer_string_starts_ends_with` rule by using the parsed regex patterns for analysis. It allows for more precise detection of patterns that can be replaced with `startsWith()` and `endsWith()` methods, reducing false positives and improving the overall effectiveness of the linter.

### What changed?

- Replaced the simple string-based regex analysis with a more robust AST-based approach.
- Removed the `is_simple_string` function as it's no longer needed.
2024-09-21 18:15:07 +00:00
camchenry
3273b64a0f refactor(linter): Use parsed patterns for unicorn/prefer-string-replace-all rule (#5943)
- part of https://github.com/oxc-project/oxc/issues/5416

Replaces the `is_simple_string` method with a more robust check against the parsed terms from the regular expression.
2024-09-21 18:02:59 +00:00
Boshen
c477424bab perf(mangler): use sort_unstable_by_key instead of sort_by (#5948) 2024-09-21 16:44:02 +00:00
Dunqing
4a62703d88 feat(isolated-declarations): handle export in the namespace correctly (#5950)
Previous I didn't follow the behavior of `TypeScript` to handle `export` in `namespace` as I thought no one used this
2024-09-21 16:39:58 +00:00
Alexander S.
463c24e5ec
fix(prettier): handle TSTypeLiteral as an object (#5946)
- [x] semi is optional with the right configuration
2024-09-21 23:27:12 +08:00
Boshen
f4aefb57d8 fix(codegen): print let[0] as (let)[0] (#5947) 2024-09-21 15:09:55 +00:00
overlookmotel
7085829885 docs(transformer): arrow function transform: comment about incomplete implementation (#5945) 2024-09-21 14:08:56 +00:00
overlookmotel
87323c6220 fix(transformer): arrow function transform: prevent stack getting out of sync (#5941)
Fix tiny bug in arrow function transform.

Similar to #5828 - cannot assume that other transforms haven't altered AST between `enter_*` and `exit_*`. In this case, pushing/popping to the stack cannot depend on `func.body.is_some()`, as that could change in between `enter_function` and `exit_function`.
2024-09-21 14:08:56 +00:00
overlookmotel
155d7fcba3 refactor(transformer): arrow function transform: ignore type fields when finding enclosing arrow function (#5944)
Follow-on after #5850.

No need to check type fields of `Function` or `ArrowFunctionExpression` when tracing up ancestors from a `this` expression - these fields cannot contain a `ThisExpression`. https://github.com/oxc-project/oxc/pull/5850#pullrequestreview-2319531991
2024-09-21 09:41:34 +00:00
Boshen
9076deefca feat(minifier): implement part of StatementFusion (#5936) 2024-09-21 09:24:01 +00:00
Dunqing
ff7d9c19c1 perf(transformer): arrow function transform: calculate whether this is in arrow function lazily (#5850)
I initially added `inside_arrow_function_stack` as we haven't got `TraverseCtx` in `Transformer`. Now we can use `ctx.current_scope_flags().is_arrow()` directly instead
2024-09-21 09:01:54 +00:00
Dunqing
ea32d5b156 fix(isolated-declarations): should print constructor assignments first (#5934) 2024-09-21 07:52:51 +00:00
overlookmotel
4e9e838838 fix(transformer): fix arrow function transform (#5933)
Fix arrow function transform's treatment of `this` within classes.
2024-09-21 07:48:18 +00:00
Boshen
12d4888120 chore(prettier): remove incorrect comment printing logic (#5889)
Remove the previous incorrect implementation, cc @leaysgur
2024-09-21 04:45:18 +00:00
Dunqing
a23879cb96 fix(semantic): analyze ReferenceFlags incorrectly when there are nested AssignmentTarget (#5847)
close: #5801
2024-09-21 04:13:24 +00:00
Dunqing
c3e0fb68c5 perf(semantic): simplify resetting ReferenceFlags in AssignmentExpression (#5846) 2024-09-21 04:13:23 +00:00
overlookmotel
15743344b1 test(transformer): add test for arrow function transform (#5932)
Add test for `this` in nested block inside arrow function.
2024-09-21 00:53:43 +00:00
camchenry
0f19848263 feat(linter): Implement no-unexpected-multiline rule (#5911)
- part of https://github.com/oxc-project/oxc/issues/479

The bulk of this rule is closely based on the logic from the original ESLint rule. One major difference between this implementation and the original though is the lack of a tokenizer. ESLint uses a proper tokenizer to find identifers, parentheses, brackets, and other tokens. For this rule, I opted to just manually search for the characters we might expect to find. I'm not sure how this will hold up in the real world, I expect it could lead to some missing cases potentially, but it at least works for all of the given test cases.
2024-09-20 23:05:02 +00:00
Boshen
e148c80fcb
fix(isolated_declarations): try fix fixtures 2024-09-21 01:27:56 +08:00
Boshen
9b3f763a49
fix(isolated_declarations): try fix new line issue 2024-09-21 01:14:40 +08:00
Boshen
ee748b0c05
fix(isolated_declarations): fix fixture spacing 2024-09-21 00:42:59 +08:00
Dunqing
0f96b59990 fix(isolated-declarations): missing print comments in class's private method (#5931) 2024-09-20 15:12:01 +00:00
Dunqing
8780c5440f fix(isolated-declarations): do not union a undefined when the param type is any or unknown (#5930) 2024-09-20 15:12:01 +00:00
Boshen
d901772daa feat(codegen): implement minify number from terser (#5929) 2024-09-20 14:42:28 +00:00
Boshen
6757c5829f
chore(transform_conformance): remove unused snapshots/typescript.snap.md
closes #5922
2024-09-20 22:41:41 +08:00
Dunqing
f07ff14876 fix(isolated-declarations): should not transform signature that has type annotation (#5927) 2024-09-20 14:19:04 +00:00
Dunqing
b6a9178075 fix(isolated-declarations): don't collect references when ExportNamedDeclaration has source (#5926) 2024-09-20 14:19:03 +00:00
Dunqing
756a571432 fix(isolated-declarations): missing empty export when has an export declare (#5925) 2024-09-20 14:19:02 +00:00
overlookmotel
b80a9eec7f refactor(ast_tools): shorten code (#5915)
#5904 reduced the generated code for `Visit` trait. Shorten the codegen a little after that change.
2024-09-20 14:15:11 +00:00