Commit graph

1521 commits

Author SHA1 Message Date
Boshen
8347e2225c
Release crates v0.4.0 2023-12-08 17:20:37 +08:00
Boshen
7ebe81d7ba
chore(linter): clean up the files a little bit 2023-12-08 16:50:06 +08:00
msdlisper
d88f4f4983
feat(linter): eslint-plugin-jsx-a11y no-autofocus (#1641)
impl linter for #1141
2023-12-08 16:43:14 +08:00
Dunqing
6e5aad2639
feat(prettier): add ConditionalGroup command (#1635) 2023-12-07 20:12:45 +08:00
Cameron
86fe7e3a3d
feat(linter) eslint plugin unicorn: no useless spread (#1638) 2023-12-07 17:31:22 +08:00
Wenzhe Wang
0dec110790
refactor(prettier): move the format of Function's key to PropertyKey (#1639) 2023-12-07 17:30:48 +08:00
Miles Johnson
c6ad6603a4
feat(semantic): support scope descendents starting from a certain scope. (#1629)
@Boshen 

The `ScopeTree.descendants` function would return all scopes starting
from the root, and wasn't truly descendants from a specific scope. To
improve this, I've renamed this function to `descendants_from_root` and
have introduced a new `descendants` function that does support from a
specific scope.

Furthermore, I've introduced helper functions to `SymbolTree` to make
reading symbols/scopes easier.

To verify this functionality, I enabled the `function_name` transformer
(and fixed it), and ran some example transforms. Here's the input:

```js
let fn;

fn = function (a, b, c) {
  const d = "";
};

const func = function (arg) {
  {
    const value = "";
  }
};

const f = function (f) {};
```

And the output using _the old implementation_. Note that all function
names are suffixed with a number, this is incorrect, since it was
inheriting far too many scopes.

```js
let fn;
fn = function fn1(a, b, c) {
	const d = '';
};
const func = function func1(arg) {
	{
		const value = '';
	}
};
const f = function f2(f) {
};
```

And here's the output with the new implementation. Note that only `f` is
suffixed with a number. That's because it has a shadowed argument of the
same name.

```js
let fn;
fn = function fn(a, b, c) {
	const d = '';
};
const func = function func(arg) {
	{
		const value = '';
	}
};
const f = function f1(f) {
};
```
2023-12-07 17:29:11 +08:00
Boshen
be731fe90c
chore: move oxc_resolver to https://github.com/oxc-project/oxc_resolver (#1636)
It is moved to https://github.com/oxc-project/oxc_resolver
2023-12-06 18:52:59 +08:00
Shinobu Hayashi
ddb3c62b87
feat(linter): eslint-plugin-jsx-a11y scope rule (correctness) (#1609)
## Summary

partof: #1141

I re-implemented scope rule for jsx_a11y in Rust same as the original JS
one, and moved also the test related to the rule to here.

originals:
- doc:
https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/scope.md
- code:
https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/src/rules/scope.js
- test:
https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/__tests__/src/rules/scope-test.js
2023-12-06 18:24:29 +08:00
Boshen
2e42e10a1b
feat(resolver): add a realpath to package.json (#1634)
Using the `realpath` for resolving browser field will lead to missing
queries.

This fixes a cases where `browserField` fails to read.

---

`styled-components` is using a trick for loading browser modules:

---

7c065e0b6f/packages/styled-components/package.json (L6C1-L12C5)

```json
  "main": "dist/styled-components.cjs.js",
  "module": "./dist/styled-components.esm.js",
  "browser": {
    "./dist/styled-components.esm.js": "./dist/styled-components.browser.esm.js",
    "./dist/styled-components.cjs.js": "./dist/styled-components.browser.cjs.js"
  },
```

Module resolution has to go from `"module":
"./dist/styled-components.esm.js"`, then to `browser`'s
`"./dist/styled-components.esm.js":
"./dist/styled-components.browser.esm.js"` part in order for things to
get resolved correctly.

---

Fixtures are hard to setup for this test case due to needing symlinks,
I've created https://github.com/oxc-project/oxc_resolver for tacking
such cases.
2023-12-06 12:25:44 +08:00
Wenzhe Wang
286644714f
feat(prettier): wrap parameters in indent (#1633) 2023-12-06 10:20:31 +08:00
Wenzhe Wang
633455aba6
refactor(prettier): add print_method_value (#1632) 2023-12-06 10:16:09 +08:00
Wenzhe Wang
2aa5f7db91
feat(prettier): finish should_hug_the_only_function_parameter (#1626) 2023-12-05 22:55:12 +08:00
Don Isaac
795db7c5b7
feat(linter): cxc: no accumulating spread (#1607)
Creates a new nursery-level rule, `no-reduce-spread`, that prevents
spreading accumulator objects/arrays in `Array.prototype.reduce`.

The Tl;Dr of why this should be avoided is because it drastically
increases time/memory complexity in reductions. In general, it turns
potentially `O(1)`/`O(n)` memory operations into `O(n)`/`O(n^2)`, and
`O(n)` time into `O(n^2)`. For more details, refer to [this helpful blog
post](https://prateeksurana.me/blog/why-using-object-spread-with-reduce-bad-idea/).

Note that this rule doesn't exist in ESLint's default rule set or any
other ESLint plugin, although it looks like [there's been some interest
in it in the past](https://github.com/vercel/style-guide/issues/18).
Since there is no reference implementation to compare against, and thus
this could potentially have bugs, I've decided to make this a
nursery-level rule until we're sure it's stable and useful.

---

Edit: 

- [ ] Sync with Biome -
https://biomejs.dev/linter/rules/no-accumulating-spread/

---------

Co-authored-by: Cameron Clark <cameron.clark@hey.com>
2023-12-05 17:25:40 +08:00
IWANABETHATGUY
b5f8a65352
refactor: improve pattern match of prefer-reflect-apply (#1630) 2023-12-05 15:18:50 +08:00
RiESAEX
c8e2ef62a8
feat(linter): eslint-plugin-unicorn: explicit-length-check (#1617)
[Rule](https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/explicit-length-check.md)
#684 
It's harder than I thought.
Test cases that require a vue parser have been skipped
Some test case needs
[getStaticValue](https://github.com/eslint-community/eslint-utils/blob/main/src/get-static-value.mjs#L672)
to pass.
2023-12-05 13:55:56 +08:00
Ken-HH24
519b5f266b
feat(linter): eslint-plugin-unicorn prefer-reflect-apply(style) (#1628)
[prefer-reflect-apply](https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/prefer-reflect-apply.md)
for #684 .
2023-12-05 13:52:49 +08:00
Boshen
32504cadb7
feat(linter): add a perf category (#1625)
relates to #1607
2023-12-04 17:31:34 +08:00
dependabot[bot]
09618e9db0
chore(deps): bump the dependencies group with 2 updates (#1623) 2023-12-04 15:26:44 +08:00
Miles Johnson
6cbc5dd75b
feat(transformer): Start on function_name transform. (#1510)
Co-authored-by: Boshen <boshenc@gmail.com>
2023-12-04 13:35:44 +08:00
IWANABETHATGUY
872e8ad4ae
feat: eslint-plugin-unicorn (recommended) prefer-node-protocol (#1618)
part of https://github.com/oxc-project/oxc/issues/684
2023-12-03 17:06:47 +00:00
Cameron
f74fa975b1
feat(linter) eslint plugin unicorn: prefer number properties (#1614) 2023-12-03 16:24:40 +00:00
Cameron
e881ee253c
feat(linter) eslint plugin unicorn: no array foreach (#1613) 2023-12-03 16:17:37 +00:00
Cameron
eaffb1d87c
feat(linter) eslint plugin unicorn: no array reduce (restriction) (#1610) 2023-12-03 17:03:23 +08:00
Shinobu Hayashi
b573036035
feat(linter): eslint-plugin-jsx-a11y iframe-has-title rule (correctness) (#1589)
## Summary

partof: #1141

I re-implemented iframe-has-title rule for jsx_a11y in Rust same as the
original JS one, and moved also the test related to the rule to here.

originals:
- doc:
https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/iframe-has-title.md
- code:
https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/src/rules/iframe-has-title.js
- test:
https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/__tests__/src/rules/iframe-has-title-test.js
2023-12-03 15:30:30 +08:00
Cameron
b7b3073f3f
feat(prettier) port should_break_after_operator (#1606) 2023-12-02 20:40:25 +08:00
Ken-HH24
967aa35526
feat(linter): eslint-plugin-unicorn require-array-join-separator(style) (#1608)
Try to implement require-array-join-separator for #684
2023-12-02 11:26:14 +00:00
Cameron
502d61dc9f
fix(prettier) fix use chain formatting (#1605) 2023-12-02 15:44:25 +08:00
Boshen
811b219b27
feat(prettier): add parens to new class {} (#1604) 2023-12-01 21:36:01 +08:00
Boshen
bb61f10399
feat(prettier): handle parens for (x % y) % z (#1603) 2023-12-01 21:29:56 +08:00
Cameron
b4e90a723a
feat(prettier): implement has_comment, improve blank lines when printing arrays (#1601) 2023-12-01 20:52:26 +08:00
Cameron
deac95e274
feat(prettier): print blank lines when printing array concisely (#1600) 2023-12-01 20:48:10 +08:00
Boshen
f4f392e19f
feat(prettier): add parens to left of instanceof (#1602) 2023-12-01 19:08:45 +08:00
Cameron
66452c95f5
fix(prettier) print computed object property key correctly (#1599) 2023-12-01 18:36:38 +08:00
Cameron
0134211b6f
fix(prettier) use print_assignment for ObjectProperty (#1598) 2023-12-01 18:32:03 +08:00
Boshen
da87b9b29e
feat(prettier): binaryish expressions with parens (#1597) 2023-12-01 13:52:22 +08:00
Ken-HH24
ba5b13da2c
feat(linter): eslint-plugin-unicorn no-unreadable-array-destructuring (style) (#1594)
Try to implement `no-unreadable-array-destructuring` for #684
2023-12-01 09:57:20 +08:00
Boshen
e3c54b92c9
fix(prettier): object pattern in function parameters (#1595) 2023-11-30 23:49:24 +08:00
Wenzhe Wang
9f38072002
feat(tasks): add visualize_end_of_line (#1593) 2023-11-30 23:42:57 +08:00
Dunqing
39188d00e1
feat(prettier): support arrowParens option (#1592) 2023-11-30 17:41:34 +08:00
Boshen
8d8276ae52
Release oxc_resolver v0.5.5 2023-11-30 17:16:04 +08:00
Boshen
085021ab85
fix(resolver): resolve query and fragments with unicode filenames (#1591) 2023-11-30 17:01:53 +08:00
Shinobu Hayashi
a6142558ce
feat(linter): eslint-plugin-jsx-a11y img-redundant-alt (correctness) (#1571)
originals:
- doc:
https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/img-redundant-alt.md
- code:
https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/src/rules/img-redundant-alt.js
- test:
https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/__tests__/src/rules/img-redundant-alt-test.js
2023-11-30 15:59:39 +08:00
Jon Surrell
8bef1f1964
feat(linter): eslint-plugin-unicorn numeric-separators-style (style) (#1490)
Part of #684.
2023-11-30 15:58:46 +08:00
Boshen
6ec257ba2d
feat(prettier): add --no-semi to prettier example (#1588) 2023-11-29 23:33:35 +08:00
Boshen
1554f7c0d2
feat(parsr): parse let.a = 1 with error recovery (#1587) 2023-11-29 23:21:39 +08:00
Boshen
fd6a3ed918
feat(prettier): format for((async) of and for((let) of (#1586) 2023-11-29 22:55:42 +08:00
Boshen
1bd1c5b51b
feat(prettier): check parens for (let)[a] = 1 (#1585) 2023-11-29 21:57:59 +08:00
Boshen
c50fcececa
feat(prettier): wrap return statements with parentheses (#1583) 2023-11-29 19:31:55 +08:00
Boshen
b8ce6266ad
feat(prettier): handle parens for sequence expression (#1582) 2023-11-29 19:15:57 +08:00