From f92e66a42e09f4a9519d900cbb0d6959fb2b08d8 Mon Sep 17 00:00:00 2001 From: Bryan Mishkin <698306+bmish@users.noreply.github.com> Date: Tue, 16 Aug 2022 14:40:30 -0400 Subject: [PATCH 01/35] Switch to lightbulb emoji to denote rule suggestions (#5473) docs: switch to lightbulb emoji to denote rule suggestions --- packages/website/src/components/RulesTable/index.tsx | 6 +++--- packages/website/src/theme/MDXComponents/RuleAttributes.tsx | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/website/src/components/RulesTable/index.tsx b/packages/website/src/components/RulesTable/index.tsx index 6629637a44b4..05bf38f3e387 100644 --- a/packages/website/src/components/RulesTable/index.tsx +++ b/packages/website/src/components/RulesTable/index.tsx @@ -36,7 +36,7 @@ function RuleRow({ rule }: { rule: RulesMeta[number] }): JSX.Element | null { {rule.fixable ? '🔧\n' : '\n'} - {rule.hasSuggestions ? '🛠' : ''} + {rule.hasSuggestions ? '💡' : ''} {rule.docs.requiresTypeChecking ? '💭' : ''} @@ -168,7 +168,7 @@ export default function RulesTable({ Rule ✅{'\n'}🔒 - 🔧{'\n'}🛠 + 🔧{'\n'}💡 💭 diff --git a/packages/website/src/theme/MDXComponents/RuleAttributes.tsx b/packages/website/src/theme/MDXComponents/RuleAttributes.tsx index 74726a63fc37..f02fe0486485 100644 --- a/packages/website/src/theme/MDXComponents/RuleAttributes.tsx +++ b/packages/website/src/theme/MDXComponents/RuleAttributes.tsx @@ -55,7 +55,7 @@ export function RuleAttributes({ name }: { name: string }): JSX.Element | null {
  • - 🛠 Suggestion Fixer + 💡 Suggestion Fixer
  • From 864dbcfccba274fe1b26eac8aeeaf2a2355b5969 Mon Sep 17 00:00:00 2001 From: YeonJuan Date: Wed, 17 Aug 2022 04:25:21 +0900 Subject: [PATCH 02/35] fix(eslint-plugin): [no-useless-constructor] handle parameter decorator (#5450) * fix(eslint-plugin): [no-useless-constructor] handle parameter decorator * Update packages/eslint-plugin/src/rules/no-useless-constructor.ts Co-authored-by: Josh Goldberg --- .../src/rules/no-useless-constructor.ts | 6 ++++-- .../tests/rules/no-useless-constructor.test.ts | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/eslint-plugin/src/rules/no-useless-constructor.ts b/packages/eslint-plugin/src/rules/no-useless-constructor.ts index 10e55cfbe0eb..3f0b15c9efd6 100644 --- a/packages/eslint-plugin/src/rules/no-useless-constructor.ts +++ b/packages/eslint-plugin/src/rules/no-useless-constructor.ts @@ -31,13 +31,15 @@ function checkAccessibility(node: TSESTree.MethodDefinition): boolean { } /** - * Check if method is not unless due to typescript parameter properties + * Check if method is not useless due to typescript parameter properties and decorators */ function checkParams(node: TSESTree.MethodDefinition): boolean { return ( !node.value.params || !node.value.params.some( - param => param.type === AST_NODE_TYPES.TSParameterProperty, + param => + param.type === AST_NODE_TYPES.TSParameterProperty || + param.decorators?.length, ) ); } diff --git a/packages/eslint-plugin/tests/rules/no-useless-constructor.test.ts b/packages/eslint-plugin/tests/rules/no-useless-constructor.test.ts index 7cedb9151e3e..ea27557d3db2 100644 --- a/packages/eslint-plugin/tests/rules/no-useless-constructor.test.ts +++ b/packages/eslint-plugin/tests/rules/no-useless-constructor.test.ts @@ -206,6 +206,20 @@ class A extends B { ` class A { constructor(foo); +} + `, + ` +class A extends Object { + constructor(@Foo foo: string) { + super(foo); + } +} + `, + ` +class A extends Object { + constructor(foo: string, @Bar() bar) { + super(foo, bar); + } } `, ], From 3ced62fb8474ed377c1336ac3e855f0270ce9beb Mon Sep 17 00:00:00 2001 From: Bartosz <2940958+burtek@users.noreply.github.com> Date: Wed, 17 Aug 2022 11:00:38 +0200 Subject: [PATCH 03/35] fix(ast-spec): NewExpression argument can be SpreadElement now (#5422) --- packages/ast-spec/src/expression/NewExpression/spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ast-spec/src/expression/NewExpression/spec.ts b/packages/ast-spec/src/expression/NewExpression/spec.ts index bb75ae3f4b8f..1ee93ef507dd 100644 --- a/packages/ast-spec/src/expression/NewExpression/spec.ts +++ b/packages/ast-spec/src/expression/NewExpression/spec.ts @@ -1,12 +1,12 @@ import type { AST_NODE_TYPES } from '../../ast-node-types'; import type { BaseNode } from '../../base/BaseNode'; import type { TSTypeParameterInstantiation } from '../../special/TSTypeParameterInstantiation/spec'; -import type { Expression } from '../../unions/Expression'; +import type { CallExpressionArgument } from '../../unions/CallExpressionArgument'; import type { LeftHandSideExpression } from '../../unions/LeftHandSideExpression'; export interface NewExpression extends BaseNode { type: AST_NODE_TYPES.NewExpression; callee: LeftHandSideExpression; - arguments: Expression[]; + arguments: CallExpressionArgument[]; typeParameters?: TSTypeParameterInstantiation; } From 78745c2092064446837b5683892001030a8bb4e2 Mon Sep 17 00:00:00 2001 From: fnx Date: Wed, 17 Aug 2022 11:04:05 +0200 Subject: [PATCH 04/35] fix(scope-manager): visit static blocks (#5489) --- .../src/referencer/ClassVisitor.ts | 8 +++ .../src/scope/ClassStaticBlockScope.ts | 2 +- .../class/declaration/static-block.ts | 3 + .../class/declaration/static-block.ts.shot | 72 +++++++++++++++++++ 4 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 packages/scope-manager/tests/fixtures/class/declaration/static-block.ts create mode 100644 packages/scope-manager/tests/fixtures/class/declaration/static-block.ts.shot diff --git a/packages/scope-manager/src/referencer/ClassVisitor.ts b/packages/scope-manager/src/referencer/ClassVisitor.ts index 92dab53ca90a..47e0bdef41cd 100644 --- a/packages/scope-manager/src/referencer/ClassVisitor.ts +++ b/packages/scope-manager/src/referencer/ClassVisitor.ts @@ -322,6 +322,10 @@ class ClassVisitor extends Visitor { this.visitType(node); } + protected visitStaticBlock(node: TSESTree.StaticBlock): void { + this.#referencer.scopeManager.nestClassStaticBlockScope(node); + } + ///////////////////// // Visit selectors // ///////////////////// @@ -359,6 +363,10 @@ class ClassVisitor extends Visitor { protected PrivateIdentifier(): void { // intentionally skip } + + protected StaticBlock(node: TSESTree.StaticBlock): void { + this.visitStaticBlock(node); + } } /** diff --git a/packages/scope-manager/src/scope/ClassStaticBlockScope.ts b/packages/scope-manager/src/scope/ClassStaticBlockScope.ts index 40a5d54b37cf..2bb3915e966c 100644 --- a/packages/scope-manager/src/scope/ClassStaticBlockScope.ts +++ b/packages/scope-manager/src/scope/ClassStaticBlockScope.ts @@ -6,7 +6,7 @@ import { ScopeManager } from '../ScopeManager'; class ClassStaticBlockScope extends ScopeBase< ScopeType.classStaticBlock, - TSESTree.Expression, + TSESTree.StaticBlock, Scope > { constructor( diff --git a/packages/scope-manager/tests/fixtures/class/declaration/static-block.ts b/packages/scope-manager/tests/fixtures/class/declaration/static-block.ts new file mode 100644 index 000000000000..93b92f6cf1f1 --- /dev/null +++ b/packages/scope-manager/tests/fixtures/class/declaration/static-block.ts @@ -0,0 +1,3 @@ +class A { + static {} +} diff --git a/packages/scope-manager/tests/fixtures/class/declaration/static-block.ts.shot b/packages/scope-manager/tests/fixtures/class/declaration/static-block.ts.shot new file mode 100644 index 000000000000..b49013a55755 --- /dev/null +++ b/packages/scope-manager/tests/fixtures/class/declaration/static-block.ts.shot @@ -0,0 +1,72 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`class declaration static-block 1`] = ` +ScopeManager { + variables: Array [ + ImplicitGlobalConstTypeVariable, + Variable$2 { + defs: Array [ + ClassNameDefinition$1 { + name: Identifier<"A">, + node: ClassDeclaration$1, + }, + ], + name: "A", + references: Array [], + isValueVariable: true, + isTypeVariable: true, + }, + Variable$3 { + defs: Array [ + ClassNameDefinition$2 { + name: Identifier<"A">, + node: ClassDeclaration$1, + }, + ], + name: "A", + references: Array [], + isValueVariable: true, + isTypeVariable: true, + }, + ], + scopes: Array [ + GlobalScope$1 { + block: Program$2, + isStrict: false, + references: Array [], + set: Map { + "const" => ImplicitGlobalConstTypeVariable, + "A" => Variable$2, + }, + type: "global", + upper: null, + variables: Array [ + ImplicitGlobalConstTypeVariable, + Variable$2, + ], + }, + ClassScope$2 { + block: ClassDeclaration$1, + isStrict: true, + references: Array [], + set: Map { + "A" => Variable$3, + }, + type: "class", + upper: GlobalScope$1, + variables: Array [ + Variable$3, + ], + }, + ClassStaticBlockScope$3 { + block: StaticBlock$3, + isStrict: true, + references: Array [], + set: Map {}, + type: "class-static-block", + upper: ClassScope$2, + variables: Array [], + }, + ], +} +`; From 68e288fee40511c0621b6a4a01d7744cc1acc7a0 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Wed, 17 Aug 2022 05:04:26 -0400 Subject: [PATCH 05/35] chore(website): simplify sponsor displays to just minimums (#5476) --- packages/website/data/sponsors.json | 140 ++++-------------- .../FinancialContributors/Sponsor.tsx | 10 +- .../FinancialContributors/Sponsors/index.tsx | 3 - .../Sponsors/styles.module.css | 27 +++- .../FinancialContributors/index.tsx | 30 ++-- .../FinancialContributors/styles.module.css | 21 ++- tools/generate-sponsors.ts | 49 ++---- 7 files changed, 101 insertions(+), 179 deletions(-) diff --git a/packages/website/data/sponsors.json b/packages/website/data/sponsors.json index 30bdac33d5d3..a416ca02959a 100644 --- a/packages/website/data/sponsors.json +++ b/packages/website/data/sponsors.json @@ -12,7 +12,7 @@ "image": "https://images.opencollective.com/nx/0efbe42/logo.png", "name": "Nx (by Nrwl)", "tier": "sponsor", - "totalDonations": 450000, + "totalDonations": 475000, "website": "https://nx.dev" }, { @@ -20,7 +20,7 @@ "image": "https://images.opencollective.com/eslint/96b09dc/logo.png", "name": "ESLint", "tier": "sponsor", - "totalDonations": 155000, + "totalDonations": 170000, "website": "https://eslint.org/" }, { @@ -28,7 +28,7 @@ "image": "https://images.opencollective.com/airbnb/d327d66/logo.png", "name": "Airbnb", "tier": "sponsor", - "totalDonations": 120800, + "totalDonations": 125800, "website": "https://www.airbnb.com/" }, { @@ -44,14 +44,14 @@ "image": "https://images.opencollective.com/n8n/dca2f0c/logo.png", "name": "n8n.io - n8n GmbH", "tier": "sponsor", - "totalDonations": 95000, + "totalDonations": 100000, "website": "https://n8n.io" }, { "id": "EY Doberman", "image": "https://images.opencollective.com/ey-doberman/b269462/logo.png", "name": "EY Doberman", - "tier": "sponsor", + "tier": "supporter", "totalDonations": 80400, "website": "https://doberman.co" }, @@ -59,24 +59,17 @@ "id": "GitBook", "image": "https://images.opencollective.com/gitbook/d35a8e7/logo.png", "name": "GitBook", - "tier": "sponsor", - "totalDonations": 70000, + "tier": "supporter", + "totalDonations": 80000, "website": "https://www.gitbook.com" }, { "id": "Codecademy", "image": "https://images.opencollective.com/codecademy/d56a48d/logo.png", "name": "Codecademy", - "tier": "sponsor", - "totalDonations": 60000, - "website": "https://codecademy.com" - }, - { - "id": "GitHub", - "image": "https://images.opencollective.com/guest-f9980024/avatar.png", - "name": "GitHub", "tier": "supporter", - "totalDonations": 56674 + "totalDonations": 70000, + "website": "https://codecademy.com" }, { "id": "Future Processing", @@ -98,7 +91,7 @@ "id": "Whitebox", "image": "https://images.opencollective.com/whiteboxinc/ef0d11d/logo.png", "name": "Whitebox", - "tier": "supporter", + "tier": "contributor", "totalDonations": 40000, "website": "https://whitebox.com" }, @@ -106,7 +99,7 @@ "id": "Monito", "image": "https://images.opencollective.com/monito/50fc878/logo.png", "name": "Monito", - "tier": "supporter", + "tier": "contributor", "totalDonations": 30000, "website": "https://www.monito.com" }, @@ -114,32 +107,33 @@ "id": "revo.js", "image": "https://images.opencollective.com/revojsro/82623a7/logo.png", "name": "revo.js", - "tier": "supporter", + "tier": "contributor", "totalDonations": 23000, "website": "https://revojs.ro" }, + { + "id": "STORIS", + "image": "https://images.opencollective.com/storis/dfb0e13/logo.png", + "name": "STORIS", + "tier": "contributor", + "totalDonations": 22500, + "website": "https://www.storis.com/" + }, { "id": "Ian MacLeod", "image": "https://images.opencollective.com/nevir/35c52ef/avatar.png", "name": "Ian MacLeod", - "tier": "supporter", + "tier": "contributor", "totalDonations": 22000, "website": "https://twitter.com/nevir" }, { - "id": "STORIS", - "image": "https://images.opencollective.com/storis/dfb0e13/logo.png", - "name": "STORIS", - "tier": "supporter", - "totalDonations": 21000, - "website": "https://www.storis.com/" - }, - { - "id": "Michael Ranciglio", - "image": "https://images.opencollective.com/michael-ranciglio/avatar.png", - "name": "Michael Ranciglio", - "tier": "supporter", - "totalDonations": 16500 + "id": "Sourcegraph", + "image": "https://images.opencollective.com/sourcegraph/8587b83/logo.png", + "name": "Sourcegraph", + "tier": "contributor", + "totalDonations": 20000, + "website": "https://about.sourcegraph.com" }, { "id": "Joe Alden", @@ -154,7 +148,7 @@ "image": "https://images.opencollective.com/blacksheepcode/976d69a/avatar.png", "name": "David Johnston", "tier": "contributor", - "totalDonations": 13000, + "totalDonations": 13500, "website": "https://blacksheepcode.com" }, { @@ -173,21 +167,6 @@ "totalDonations": 10000, "website": "https://www.theguardian.com/" }, - { - "id": "Yuta Fukazawa", - "image": "https://images.opencollective.com/yuta-fukazawa/a337601/avatar.png", - "name": "Yuta Fukazawa", - "tier": "contributor", - "totalDonations": 10000 - }, - { - "id": "Sourcegraph", - "image": "https://images.opencollective.com/sourcegraph/8587b83/logo.png", - "name": "Sourcegraph", - "tier": "sponsor", - "totalDonations": 10000, - "website": "https://about.sourcegraph.com" - }, { "id": "Laserhub", "image": "https://images.opencollective.com/laserhub/bae6275/logo.png", @@ -195,68 +174,5 @@ "tier": "contributor", "totalDonations": 10000, "website": "https://laserhub.com/" - }, - { - "id": "Tripwire, Inc.", - "image": "https://images.opencollective.com/tripwire/7599e30/logo.png", - "name": "Tripwire, Inc.", - "tier": "contributor", - "totalDonations": 8500, - "website": "https://tripwire.com" - }, - { - "id": "Evil Martians", - "image": "https://images.opencollective.com/evilmartians/707ab4d/logo.png", - "name": "Evil Martians", - "tier": "contributor", - "totalDonations": 8000, - "website": "https://evilmartians.com/" - }, - { - "id": "Balsa", - "image": "https://images.opencollective.com/balsa/77de498/logo.png", - "name": "Balsa", - "tier": "contributor", - "totalDonations": 8000, - "website": "https://balsa.com" - }, - { - "id": "Jeffrey Rennie", - "image": "https://images.opencollective.com/jeffrey-rennie/avatar.png", - "name": "Jeffrey Rennie", - "tier": "contributor", - "totalDonations": 7500 - }, - { - "id": "Pete Gonzalez", - "image": "https://images.opencollective.com/octogonz/513f01a/avatar.png", - "name": "Pete Gonzalez", - "tier": "contributor", - "totalDonations": 5000, - "website": "https://github.com/octogonz" - }, - { - "id": "Niklas Fiekas", - "image": "https://images.opencollective.com/niklas-fiekas/ffec4a8/avatar.png", - "name": "Niklas Fiekas", - "tier": "contributor", - "totalDonations": 5000, - "website": "https://backscattering.de" - }, - { - "id": "Corellium", - "image": "https://images.opencollective.com/corellium/aa8c228/logo.png", - "name": "Corellium", - "tier": "contributor", - "totalDonations": 4800, - "website": "https://www.corellium.com" - }, - { - "id": "Alexey Berezin", - "image": "https://images.opencollective.com/beraliv/034d971/avatar.png", - "name": "Alexey Berezin", - "tier": "contributor", - "totalDonations": 1500, - "website": "https://beraliv.dev" } ] diff --git a/packages/website/src/components/FinancialContributors/Sponsor.tsx b/packages/website/src/components/FinancialContributors/Sponsor.tsx index f43b0d3d81ee..4872233a6c92 100644 --- a/packages/website/src/components/FinancialContributors/Sponsor.tsx +++ b/packages/website/src/components/FinancialContributors/Sponsor.tsx @@ -1,18 +1,14 @@ import React from 'react'; import { SponsorData, SponsorIncludeOptions } from './types'; +import styles from './styles.module.css'; interface SponsorProps { - className?: string; include?: SponsorIncludeOptions; sponsor: SponsorData; } -export function Sponsor({ - className, - include = {}, - sponsor, -}: SponsorProps): JSX.Element { +export function Sponsor({ include = {}, sponsor }: SponsorProps): JSX.Element { let children = {`${sponsor.name}; if (include.name) { @@ -27,7 +23,7 @@ export function Sponsor({ if (include.link) { children = (

    {title}

    -

    {description}