Commit graph

678 commits

Author SHA1 Message Date
Yuto Yoshino
ac704cce14
feat(linter): eslint-plugin-jsx-a11y autocomplete-valid (#1901)
Part of: https://github.com/oxc-project/oxc/issues/1141

Based on:
- doc: https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/autocomplete-valid.md
- code: https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/src/rules/autocomplete-valid.js
- test: https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/__tests__/src/rules/autocomplete-valid-test.js
2024-01-10 10:17:33 +00:00
zhangrunzhao
40dbfae3c2
feat(linter): eslint-plugin-react: no-direct-mutation-state (#1892)
#1022 

Based on:
- code: https://github.com/jsx-eslint/eslint-plugin-react/blob/master/lib/rules/no-direct-mutation-state.js
- doc: https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-direct-mutation-state.md
- test: https://github.com/jsx-eslint/eslint-plugin-react/blob/master/tests/lib/rules/no-direct-mutation-state.js

Co-authored-by: 张润钊 <zhangrunzhao@bytedance.com>
2024-01-10 08:32:19 +00:00
Boshen
856b9a59eb
feat(linter): support overriding oxlint rules by eslint config (#1966)
Previously if .eslintrc.json contains 

```
{
  "rules": {
    "no-empty": "off"
  }
}
```

Then no rules will be enabled.

---

This PR changes how we configure oxlint's rules.

The rules will start with the categories we apply, and then merge all
the configurations stated in the `rules` field.

For example, if we begin with `-D correctness` with 80 rules, then

* `"no-empty-file": "off"` will remove the rule, yielding 79 rules
* `"no-empty": "error"` (restriction) will add the rule, yield 81 rules
* ""no-empty": ["error", { "allowEmptyCatch": true }]` add the rule's
configuration
2024-01-10 15:44:53 +08:00
Boshen
a6717db423
refactor(formatter,linter,codegen): remove oxc_formatter (#1968)
closes #1941
2024-01-10 06:41:20 +00:00
Hao Cheng
b5f4f1eb68
fix(linter): fix plugin name parsing when reading config file (#1972)
This PR fixes the plugin parsing logic when reading a config file.

Specifically, the plugin names defined in `RuleEnum`s use snake-case
("jsx_a11y") while in the config file they are written as "jsx-a11y".
This inconsistency causes some rules to be filtered out.

I tested the change with the config json file provided in #1969.
- Before the change: `Finished in 21ms on 1 file with 157 rules using 8
threads.`
- After the change: `Finished in 23ms on 1 file with 178 rules using 8
threads.`

Related issue: #1969
2024-01-10 11:46:56 +08:00
Cameron
64310fa9b1
refactor(linter): remove duplicate get_jsx_attribute_name (#1971) 2024-01-10 11:45:34 +08:00
kaykdm
78916703c5
feat(linter): eslint-plugin-react: require-render-return (#1946)
Related issue: https://github.com/oxc-project/oxc/issues/1022

Based on:
- doc: https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/require-render-return.md
- code: https://github.com/jsx-eslint/eslint-plugin-react/blob/master/lib/rules/require-render-return.js
2024-01-09 22:50:02 +00:00
keita hino
8d9894ad40
fix(linter): Support cases where aria-hidden includes expressions (#1964)
The rule for
[jsx-a11y/img-redundant-alt](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/img-redundant-alt.md)
states that if aria-hidden is true, the rule will always succeed:

> The rule will first check if aria-hidden is true to determine whether
to enforce the rule. If the image is hidden, then rule will always
succeed.

The [img_redundant_alt
rule](https://github.com/oxc-project/oxc/blob/main/crates/oxc_linter/src/rules/jsx_a11y/img_redundant_alt.rs),
ported to Oxlint, was in an incompatible state because an error occurred
even when including aria-hidden={true}, as demonstrated below:
```jsx
// error
<img alt='photo of cool person' aria-hidden={true} />
```

This issue arose because the
[is_hidden_from_screen_reader](https://github.com/oxc-project/oxc/blob/main/crates/oxc_linter/src/utils/react.rs#L77-L95),
responsible for obtaining the state of aria-hidden, was not handling
cases where aria-hidden includes expressions. This PR addresses the
situation by adding support for cases where expressions are passed to
aria-hidden.
2024-01-09 22:33:55 +00:00
Yuto Yoshino
2b7ca5962f
feat(linter): eslint-plugin-jsx-a11y role-has-required-aria-props (#1881)
partof: https://github.com/oxc-project/oxc/issues/1141

Based on:
- doc: https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/role-has-required-aria-props.md
- code: https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/src/rules/role-has-required-aria-props.js
- test: https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/__tests__/src/rules/role-has-required-aria-props-test.js
2024-01-09 15:21:11 +00:00
Boshen
66e95a5968
fix(linter): change severity of no-sparse-arrays to warnings 2024-01-09 14:41:42 +08:00
Rintaro Itokawa
f6047b6531
feat(linter): eslint-plugin-jsx-a11y role-support-aria-props (#1961)
## Summary

partof: #1141 

I re-implemented role-support-aria-props rule for jsx_a11y.

originals:

- docs:
https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/role-supports-aria-props.md
- code:
https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/src/rules/role-supports-aria-props.js
- test:
https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/__tests__/src/rules/role-supports-aria-props-test.js
2024-01-09 13:54:06 +08:00
Boshen
897869b6d4
Revert "feat(linter): eslint-plugin-jsx-a11y role-support-aria-props" (#1960)
Reverts oxc-project/oxc#1949
2024-01-09 12:41:22 +08:00
Rintaro Itokawa
fd5856e5d1
feat(linter): eslint-plugin-jsx-a11y role-support-aria-props (#1949)
## Summary

partof: #1141 

I re-implemented role-support-aria-props rule for jsx_a11y.

originals:

- docs:
https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/role-supports-aria-props.md
- code:
https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/src/rules/role-supports-aria-props.js
- test:
https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/__tests__/src/rules/role-supports-aria-props-test.js
2024-01-09 12:23:24 +08:00
Cameron
0bcc9e7e6b
feat(linter) eslint-plugin-next no-head-import-in-document (#1957) 2024-01-09 11:41:31 +08:00
Cameron
d9ca086eb6
feat(linter) add support for custom filenames in tests (#1955) 2024-01-09 11:35:34 +08:00
Cameron
18d1c29a62
feat(linter) eslint-plugin-next no-script-component-in-head (#1954) 2024-01-09 11:29:32 +08:00
Cameron
039e6fc9c5
feat(linter) eslint-plugin-next no-sync-scripts (#1953) 2024-01-09 11:22:27 +08:00
Cameron
a3754e20ca
feat(linter) eslint-plugin-next no-title-in-document-head (#1952) 2024-01-09 11:16:42 +08:00
Cameron
bce9060095
feat(linter) eslint-plugin-next no-img-element (#1951) 2024-01-09 11:12:01 +08:00
Cameron
ac3b44bd0c
feat: nextjs plugin (#1948)
https://github.com/oxc-project/oxc/issues/1929#issuecomment-1880369624
2024-01-09 11:08:11 +08:00
dependabot[bot]
b97a536df7
chore(deps): bump the dependencies group with 5 updates (#1943) 2024-01-08 14:54:17 +08:00
Cameron
73a5b7f7da
feat(linter) eslint-plugin-next no-css-tags (#1937) 2024-01-08 12:38:53 +08:00
Cameron
149f53edd6
feat(linter) eslint-plugin-next no-async-client-component (#1936) 2024-01-08 12:13:27 +08:00
Cameron
c06d939460
feat(linter) eslint-plugin-next no-assign-module-variable (#1935) 2024-01-08 12:09:32 +08:00
Cameron
0f15099f6f
feat(linter) eslint-plugin-next next-script-for-ga (#1934) 2024-01-08 12:04:32 +08:00
Cameron
0475bcbd92
feat(linter) eslint-plugin-next inline-script-id (#1933) 2024-01-08 11:59:47 +08:00
Cameron
3d00d31c1e
feat(linter) eslint-plugin-next google-font-preconnect (#1932) 2024-01-08 11:54:30 +08:00
Cameron
d24738d3fc
feat(linter) eslint-plugin-next google-font-display (#1931) 2024-01-08 11:49:40 +08:00
IWANABETHATGUY
fe48bfae0c
feat(lsp): support vue, astro and svelte (#1923)
![image](https://github.com/oxc-project/oxc/assets/17974631/7d49b2a7-b587-45a9-8736-875a2e60f06e)
Closed https://github.com/oxc-project/oxc/issues/1915
2024-01-08 11:38:25 +08:00
Valerii Smirnov
c6eb519417
feat(linter): eslint-plugin-react: no-unknown-property (#1875)
Based on:
- tests: https://github.com/jsx-eslint/eslint-plugin-react/blob/master/tests/lib/rules/no-unknown-property.js
- docs: https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md
- code: https://github.com/jsx-eslint/eslint-plugin-react/blob/master/lib/rules/no-unknown-property.js
2024-01-07 12:23:32 +00:00
Boshen
c2e8ef56a5
feat(linter): disable no-unused-labels for svelte (#1919) 2024-01-07 00:25:52 +08:00
Boshen
f2ed83ca3b
feat(linter): <script> part of svelte file (#1918)
closes #1914
2024-01-07 00:13:44 +08:00
Boshen
450791ddc2
refactor(linter): rename *_partial_loader files (#1916) 2024-01-06 23:56:31 +08:00
Boshen
bb6128bfa8
fix(linter): change no-var to restriction 2024-01-06 23:33:11 +08:00
Cameron
8e4b6d9d7c
fix(linter) fix eslint config for filename case (#1913) 2024-01-06 23:32:20 +08:00
Boshen
24d209cdd4
fix(linter): fix vue parser not working for multiple scripts after <template> (#1904) 2024-01-05 22:45:52 +08:00
zhangrunzhao
55a87b2e02
feat(linter): eslint: no-var (#1890)
This feature is primarily used to supplement eslint no-var rules

- doc:
https://github.com/eslint/eslint/blob/main/docs/src/rules/no-var.md
- code: https://github.com/eslint/eslint/blob/main/lib/rules/no-var.js
- test:
https://github.com/eslint/eslint/blob/main/tests/lib/rules/no-var.js

Co-authored-by: 张润钊 <zhangrunzhao@bytedance.com>
2024-01-05 19:52:38 +08:00
Dunqing
6c5b22f728
refactor(semantic): improve ClassTable implmention and merge properties and methods to elements (#1902) 2024-01-05 18:38:51 +08:00
Boshen
4ea6e5dc3b
fix(linter): do not check empty file for vue / astro files (#1900) 2024-01-05 16:50:26 +08:00
Boshen
497a20796c
feat(linter): parse two script tags from vue (#1899) 2024-01-05 16:44:27 +08:00
Boshen
8a3eff1bee
feat(linter): parse multiple script tags in astro file (#1898) 2024-01-05 16:36:31 +08:00
Boshen
4c5c61e5f9
feat(linter): add support for multiple script tags from vue and stro (#1897)
part of #1896
2024-01-05 16:30:32 +08:00
Cameron
064296cd43
perf(linter) reduce the number of diagnostics for no_sparse_arrays (#1895)
Partially address #1879

See there for more info. but tldr:

Printing a lot of diagnostics takes a lot of time - a lot longer than it
takes to create them

we speed up printing by producing less diagnostics.

we do this by making `no-sparse-arrays` report 1x per array instead of
1x per violation.

This does have the overhead of now every ArrayElement is processed 2x
(1x when we loop through in the rule, 1x when we loop through the ast).
But the perf reduction is negligble compared to the per production of
producing thousands of diagnostics vs 1 diagnostic.

This means that linting nodejs/node now takes ~1.5 seconds vs ~2:30
previously
2024-01-05 10:52:31 +08:00
Deivid Almeida
5f29e3f9f6
feat(linter): no irregular whitespace (#1877)
it was builded a loop that iterates in trivias.irregular-whitespace and
return the warning if contain some specific sequence of chars.

---------

Co-authored-by: Boshen <boshenc@gmail.com>
2024-01-05 02:47:29 +00:00
Boshen
a63490c1c0
feat(linter): support astro front matter --- block (#1893)
closes #1702
2024-01-05 10:05:43 +08:00
Boshen
11ca5c2bad
feat(linter): do not lint when vue file has no js section (#1891) 2024-01-04 21:24:19 +08:00
Boshen
97fa3934a6
deps(rust): bump deps (#1888) 2024-01-04 20:41:31 +08:00
Wenzhe Wang
45156443ed
refactor(linter): get js code slice from vue source code (#1876) 2024-01-04 12:06:04 +08:00
Dunqing
dae5f628b0
perf(semantic): check duplicate parameters in Binder of FormalParameters (#1840) 2024-01-03 12:57:03 +08:00
Boshen
e914159851
chore: fix typos 2024-01-03 11:44:04 +08:00