+
Skip to content
This repository was archived by the owner on Aug 31, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,8 @@ multiple files:
- inside an export default function
- for React.use* hooks

- Fix [`noInvalidConstructorSuper`](https://docs.rome.tools/lint/rules/noinvalidconstructorsuper/) rule that erroneously reported generic parents [#4624](https://github.com/rome/tools/issues/4624).

- Relax [`noBannedTypes`](https://docs.rome.tools/lint/rules/nobannedtypes/) and improve documentation

The rule no longer reports a user type that reuses a banned type name.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,9 @@ impl Rule for NoInvalidConstructorSuper {

fn is_valid_constructor(expression: AnyJsExpression) -> Option<bool> {
match expression.omit_parentheses() {
AnyJsExpression::JsAwaitExpression(await_expression) => {
is_valid_constructor(await_expression.argument().ok()?)
}
AnyJsExpression::JsThisExpression(_)
| AnyJsExpression::JsFunctionExpression(_)
| AnyJsExpression::JsCallExpression(_)
Expand All @@ -168,7 +171,6 @@ fn is_valid_constructor(expression: AnyJsExpression) -> Option<bool> {
}
AnyJsExpression::JsAssignmentExpression(assignment) => {
let operator = assignment.operator().ok()?;

if matches!(
operator,
JsAssignmentOperator::Assign
Expand All @@ -195,6 +197,40 @@ fn is_valid_constructor(expression: AnyJsExpression) -> Option<bool> {
AnyJsExpression::JsSequenceExpression(sequence_expression) => {
is_valid_constructor(sequence_expression.right().ok()?)
}
_ => Some(false),
AnyJsExpression::JsTemplateExpression(template_expression) => {
// Tagged templates can return anything
Some(template_expression.tag().is_some())
}
AnyJsExpression::TsInstantiationExpression(instantiation_expression) => {
is_valid_constructor(instantiation_expression.expression().ok()?)
}
AnyJsExpression::TsAsExpression(type_assertion) => {
is_valid_constructor(type_assertion.expression().ok()?)
}
AnyJsExpression::TsNonNullAssertionExpression(type_assertion) => {
is_valid_constructor(type_assertion.expression().ok()?)
}
AnyJsExpression::TsSatisfiesExpression(type_assertion) => {
is_valid_constructor(type_assertion.expression().ok()?)
}
AnyJsExpression::TsTypeAssertionExpression(type_assertion) => {
is_valid_constructor(type_assertion.expression().ok()?)
}
AnyJsExpression::JsComputedMemberExpression(_)
| AnyJsExpression::AnyJsLiteralExpression(_)
| AnyJsExpression::JsArrayExpression(_)
| AnyJsExpression::JsArrowFunctionExpression(_)
| AnyJsExpression::JsBinaryExpression(_)
| AnyJsExpression::JsBogusExpression(_)
| AnyJsExpression::JsInstanceofExpression(_)
| AnyJsExpression::JsObjectExpression(_)
| AnyJsExpression::JsPostUpdateExpression(_)
| AnyJsExpression::JsPreUpdateExpression(_)
| AnyJsExpression::JsSuperExpression(_)
| AnyJsExpression::JsUnaryExpression(_)
| AnyJsExpression::JsxTagExpression(_) => Some(false),
AnyJsExpression::JsInExpression(_) => None,
// Should not be triggered because we called `omit_parentheses`
AnyJsExpression::JsParenthesizedExpression(_) => None,
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
---
source: crates/rome_js_analyze/tests/spec_tests.rs
assertion_line: 96
expression: invalid.js
---
# Input
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,41 @@ export class A extends mod.B {
super();
}
}

// Regression test for https://github.com/rome/tools/issues/4624
class ExtendGeneric
extends A<number>
implements I {

constructor() {
super();
}
}

class ExtendTaggesTemplate extends tag`something` {
constructor() {
super();
}
}

class ExtendUntaggedTemplate extends `something` {
constructor() {}
}

class ExtendNullAssertion extends A! {
constructor() {
super();
}
}

class ExtendTypeAssertion extends (A as A) {
constructor() {
super();
}
}

class ExtendStatisfiesExpression extends (A satisfies A) {
constructor() {
super();
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
---
source: crates/rome_js_analyze/tests/spec_tests.rs
assertion_line: 96
expression: valid.js
expression: valid.ts
---
# Input
```js
Expand Down Expand Up @@ -49,6 +48,44 @@ export class A extends mod.B {
}
}

// Regression test for https://github.com/rome/tools/issues/4624
class ExtendGeneric
extends A<number>
implements I {

constructor() {
super();
}
}

class ExtendTaggesTemplate extends tag`something` {
constructor() {
super();
}
}

class ExtendUntaggedTemplate extends `something` {
constructor() {}
}

class ExtendNullAssertion extends A! {
constructor() {
super();
}
}

class ExtendTypeAssertion extends (A as A) {
constructor() {
super();
}
}

class ExtendStatisfiesExpression extends (A satisfies A) {
constructor() {
super();
}
}

```


点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载