From 873880c469915bf200ea9e09d428e3d38b1daceb Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Thu, 1 Dec 2022 15:39:53 -0500 Subject: [PATCH 01/11] branding --- .cspell.json | 1 + .markdownlint.json | 6 +-- README.md | 2 +- docs/Contributing.mdx | 2 +- docs/Custom_Rules.md | 14 +++---- docs/Getting_Started.md | 4 +- docs/architecture/TypeScript-ESTree.mdx | 2 +- docs/contributing/Issues.mdx | 2 +- docs/linting/Troubleshooting.md | 2 +- docs/linting/Typed_Linting.md | 2 +- docs/linting/typed-linting/Monorepos.md | 2 +- docs/maintenance/BRANDING.md | 32 ++++++++++++++ packages/eslint-plugin-internal/README.md | 4 +- .../2022-12-05-asts-and-typescript-eslint.md | 6 +-- packages/website/docusaurusConfig.ts | 8 +++- packages/website/sidebars/sidebar.base.js | 1 + .../Sponsors/styles.module.css | 3 +- .../FinancialContributors/styles.module.css | 6 +++ packages/website/src/css/custom.css | 39 ++++++++++-------- packages/website/src/pages/styles.module.css | 8 ++-- packages/website/static/img/favicon.ico | Bin 7406 -> 15086 bytes .../img/favicon/android-chrome-192x192.png | Bin 6533 -> 8007 bytes .../img/favicon/android-chrome-512x512.png | Bin 0 -> 22034 bytes .../static/img/favicon/apple-touch-icon.png | Bin 4836 -> 5935 bytes .../static/img/favicon/favicon-16x16.png | Bin 886 -> 913 bytes .../static/img/favicon/favicon-32x32.png | Bin 1284 -> 1332 bytes .../static/img/favicon/mstile-150x150.png | Bin 5168 -> 5883 bytes .../static/img/favicon/mstile-310x310.png | Bin 2650 -> 12525 bytes .../static/img/favicon/safari-pinned-tab.svg | 34 +++++++++++++++ .../static/img/favicon/site.webmanifest | 15 ++++--- .../website/static/img/logo-twitter-card.png | Bin 10252 -> 6779 bytes packages/website/static/img/logo.png | Bin 4595 -> 23462 bytes packages/website/static/img/logo.svg | 25 +++++++++-- packages/website/static/img/logo_maskable.png | Bin 7709 -> 9823 bytes 34 files changed, 165 insertions(+), 55 deletions(-) create mode 100644 docs/maintenance/BRANDING.md create mode 100644 packages/website/static/img/favicon/android-chrome-512x512.png create mode 100644 packages/website/static/img/favicon/safari-pinned-tab.svg diff --git a/.cspell.json b/.cspell.json index 47e1d390de9e..661909f447c6 100644 --- a/.cspell.json +++ b/.cspell.json @@ -51,6 +51,7 @@ "bigint", "bivariant", "blockless", + "blurple", "camelcase", "Cena", "codebases", diff --git a/.markdownlint.json b/.markdownlint.json index 5d8a01896c6d..d7b5648732a9 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -99,11 +99,11 @@ // MD044/proper-names - Proper names should have the correct capitalization "MD044": { "names": [ + "ESLint", "JavaScript", - "TypeScript", "TSLint", - "ESLint", - "typescript-eslint" + "TypeScript-ESLint", + "TypeScript" ], "code_blocks": false }, diff --git a/README.md b/README.md index 1354292a6be7..e51eb5e5cd97 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

TypeScript ESLint

-

Monorepo for all the tooling which enables ESLint to support TypeScript

+

Monorepo for the tooling that enables ESLint and Prettier to support TypeScript

CI diff --git a/docs/Contributing.mdx b/docs/Contributing.mdx index 35846cdaaae0..ed57351dc880 100644 --- a/docs/Contributing.mdx +++ b/docs/Contributing.mdx @@ -5,7 +5,7 @@ title: Contributing Thank you for your interest in contributing to TypeScript ESLint! 💜 -Although typescript-eslint's packages are already downloaded millions of times per month and power high profile projects across our industry, this is a 100% community-driven project. +Although TypeScript-ESLint's packages are already downloaded millions of times per month and power high profile projects across our industry, this is a 100% community-driven project. From the second you install one of the packages from this monorepo, you are a part of that community. So, from the bottom of our hearts, _thank you_ 💕. diff --git a/docs/Custom_Rules.md b/docs/Custom_Rules.md index 0590398b8188..6c58d8f849c9 100644 --- a/docs/Custom_Rules.md +++ b/docs/Custom_Rules.md @@ -18,17 +18,17 @@ The main three changes to custom rules writing are: ## Utils Package -The [`@typescript-eslint/utils`](./architecture/Utils.mdx) package acts as a replacement package for `eslint` that exports all the same objects and types, but with typescript-eslint support. -It also exports common utility functions and constants most custom typescript-eslint rules tend to use. +The [`@typescript-eslint/utils`](./architecture/Utils.mdx) package acts as a replacement package for `eslint` that exports all the same objects and types, but with TypeScript-ESLint support. +It also exports common utility functions and constants most custom TypeScript-ESLint rules tend to use. :::caution -`@types/eslint` types are based on `@types/estree` and do not recognize typescript-eslint nodes and properties. -You should generally not need to import from `eslint` when writing custom typescript-eslint rules in TypeScript. +`@types/eslint` types are based on `@types/estree` and do not recognize TypeScript-ESLint nodes and properties. +You should generally not need to import from `eslint` when writing custom TypeScript-ESLint rules in TypeScript. ::: ### `RuleCreator` -The recommended way to create custom ESLint rules that make use of typescript-eslint features and/or syntax is with the `ESLintUtils.RuleCreator` function exported by `@typescript-eslint/utils`. +The recommended way to create custom ESLint rules that make use of TypeScript-ESLint features and/or syntax is with the `ESLintUtils.RuleCreator` function exported by `@typescript-eslint/utils`. It takes in a function that transforms a rule name into its documentation URL, then returns a function that takes in a rule module object. `RuleCreator` will infer the allowed message IDs the rule is allowed to emit from the provided `meta.messages` object. @@ -208,7 +208,7 @@ export const rule = createRule({ Read TypeScript's [Compiler APIs > Using the Type Checker](https://github.com/microsoft/TypeScript/wiki/Using-the-Compiler-API#using-the-type-checker) section for how to use a program's type checker. ::: -The biggest addition typescript-eslint brings to ESLint rules is the ability to use TypeScript's type checker APIs. +The biggest addition TypeScript-ESLint brings to ESLint rules is the ability to use TypeScript's type checker APIs. `@typescript-eslint/utils` exports an `ESLintUtils` namespace containing a `getParserServices` function that takes in an ESLint context and returns a `parserServices` object. @@ -220,7 +220,7 @@ That `parserServices` object contains: By mapping from ESTree nodes to TypeScript nodes and retrieving the TypeScript program from the parser services, rules are able to ask TypeScript for full type information on those nodes. -This rule bans for-of looping over an enum by using the type-checker via typescript-eslint and TypeScript APIs: +This rule bans for-of looping over an enum by using the type-checker via TypeScript-ESLint and TypeScript APIs: ```ts import { ESLintUtils } from '@typescript-eslint/utils'; diff --git a/docs/Getting_Started.md b/docs/Getting_Started.md index 91c978322f48..e0c4504969ef 100644 --- a/docs/Getting_Started.md +++ b/docs/Getting_Started.md @@ -59,14 +59,14 @@ ESLint will lint all TypeScript compatible files within the current folder, and - You can read more about configuring ESLint [in their documentation on configuration](https://eslint.org/docs/user-guide/configuring). - You can read more about the rules provided by ESLint [in their documentation on their rules](https://eslint.org/docs/rules/). -- You can read more about the rules provided by typescript-eslint in [our rules documentation](/rules). +- You can read more about the rules provided by TypeScript-ESLint in [our rules documentation](/rules). ### Configuration Values - `parser: '@typescript-eslint/parser'` tells ESLint to use the [`@typescript-eslint/parser`](./architecture/Parser.mdx) package you installed to parse your source files. - This is required, or else ESLint will throw errors as it tries to parse TypeScript code as if it were regular JavaScript. - `plugins: ['@typescript-eslint']` tells ESLint to load the [`@typescript-eslint/eslint-plugin`](./architecture/ESLint_Plugin.mdx) package as a plugin. - - This allows you to use typescript-eslint's rules within your codebase. + - This allows you to use TypeScript-ESLint's rules within your codebase. - `extends: [ ... ]` tells ESLint that your config extends the given configurations. - `eslint:recommended` is ESLint's inbuilt "recommended" config - it turns on a small, sensible set of rules which lint for well-known best-practices. - `plugin:@typescript-eslint/recommended` is our "recommended" config - it's similar to `eslint:recommended`, except it turns on TypeScript-specific rules from our plugin. diff --git a/docs/architecture/TypeScript-ESTree.mdx b/docs/architecture/TypeScript-ESTree.mdx index 066030b0afee..3de33bda9c13 100644 --- a/docs/architecture/TypeScript-ESTree.mdx +++ b/docs/architecture/TypeScript-ESTree.mdx @@ -216,7 +216,7 @@ interface ParseAndGenerateServicesOptions extends ParseOptions { * such as an ESLint CLI invocation, and long-running sessions (such as continuous feedback * on a file in an IDE). * - * When typescript-eslint handles TypeScript Program management behind the scenes, this distinction + * When TypeScript-ESLint handles TypeScript Program management behind the scenes, this distinction * is important because there is significant overhead to managing the so called Watch Programs * needed for the long-running use-case. * diff --git a/docs/contributing/Issues.mdx b/docs/contributing/Issues.mdx index ae61dd0e3123..d58e7541f7a5 100644 --- a/docs/contributing/Issues.mdx +++ b/docs/contributing/Issues.mdx @@ -30,7 +30,7 @@ Please don't: We do not have the bandwidth to handle questions or support requests in the issue tracker. You can instead: -- Ask a question on [StackOverflow](https://stackoverflow.com/questions/tagged/typescript-eslint 'StackOverflow questions tagged with typescript-eslint') using the `typescript-eslint` tag +- Ask a question on [StackOverflow](https://stackoverflow.com/questions/tagged/TypeScript-ESLint 'StackOverflow questions tagged with typescript-eslint') using the `typescript-eslint` tag - Publicly tweet [@tseslint on Twitter](https://twitter.com/tseslint) > Note that requests to add documentation _are_ allowed, even encouraged! 📝 diff --git a/docs/linting/Troubleshooting.md b/docs/linting/Troubleshooting.md index 38d3bf38e710..98bb48044e2a 100644 --- a/docs/linting/Troubleshooting.md +++ b/docs/linting/Troubleshooting.md @@ -212,7 +212,7 @@ If you see more than one version installed, then you will have to either use [ya You can't, and you don't want to. You should use the same version of TypeScript for linting as the rest of your project. -TypeScript versions often have slight differences in edge cases that can cause contradictory information between typescript-eslint rules and editor information. +TypeScript versions often have slight differences in edge cases that can cause contradictory information between TypeScript-ESLint rules and editor information. For example: - `@typescript-eslint/strict-boolean-expressions` might be operating with TypeScript version _X_ and think a variable is `string[] | undefined` diff --git a/docs/linting/Typed_Linting.md b/docs/linting/Typed_Linting.md index 3e1beb396a8a..bac20ddb1b4e 100644 --- a/docs/linting/Typed_Linting.md +++ b/docs/linting/Typed_Linting.md @@ -3,7 +3,7 @@ id: typed-linting title: Linting with Type Information --- -Some typescript-eslint rules utilize the awesome power of TypeScript's type checking APIs to provide much deeper insights into your code. +Some TypeScript-ESLint rules utilize the awesome power of TypeScript's type checking APIs to provide much deeper insights into your code. To tap into TypeScript's additional powers, there are two small changes you need to make to your config file: ```js title=".eslintrc.js" diff --git a/docs/linting/typed-linting/Monorepos.md b/docs/linting/typed-linting/Monorepos.md index e55d20647796..b5fdec443bce 100644 --- a/docs/linting/typed-linting/Monorepos.md +++ b/docs/linting/typed-linting/Monorepos.md @@ -13,7 +13,7 @@ Configurations will look different based on which setup you use: ## One root `tsconfig.json` -If you only have one `tsconfig.json` file _and_ its `include` paths include all the files you'd like to lint, you can directly use it with typescript-eslint without further configuration. +If you only have one `tsconfig.json` file _and_ its `include` paths include all the files you'd like to lint, you can directly use it with TypeScript-ESLint without further configuration. If its `include` paths cannot include all files to be linted, we suggest creating a new config called `tsconfig.eslint.json`, that looks something like this: diff --git a/docs/maintenance/BRANDING.md b/docs/maintenance/BRANDING.md new file mode 100644 index 000000000000..44ee5e1cdf3b --- /dev/null +++ b/docs/maintenance/BRANDING.md @@ -0,0 +1,32 @@ +--- +id: branding +title: Branding +--- + +This document serves as a guide for how we generally describe or represent TypeScript-ESLint. +It's fine if you don't always adhere to it. + +## Terminology + +### Name + +Our project name is **_"TypeScript-ESLint"_**. +We sometimes refer to it as _"TSESLint"_ for short. + +_"`typescript-eslint`"_ refers to the code repository, GitHub organization, and NPM organization. + +### Slogan + +> The tooling that enables ESLint and Prettier to support TypeScript. + +## Visuals + +Our primary brand color is `#2656c7`, the halfway point between ESLint's `#4b32c3` purple and TypeScript's `#007acc` blue. +You can call it _blurple_ if you want. + +Our logo is also a halfway between [ESLint's logo](https://en.wikipedia.org/wiki/ESLint#/media/File:ESLint_logo.svg) and [TypeScript's logo](https://en.wikipedia.org/wiki/TypeScript#/media/File:Typescript.svg): + +TypeScript-ESLint logo + +- [Logo PNG download](/img/logo.png) +- [Logo SVG download](/img/logo.svg) diff --git a/packages/eslint-plugin-internal/README.md b/packages/eslint-plugin-internal/README.md index 7d081266c542..4648ba4edfe7 100644 --- a/packages/eslint-plugin-internal/README.md +++ b/packages/eslint-plugin-internal/README.md @@ -4,7 +4,7 @@ ## ✋ Internal Package -This is an _internal package_ to the [typescript-eslint monorepo](https://github.com/typescript-eslint/typescript-eslint). +This is an _internal package_ to the [`typescript-eslint` monorepo](https://github.com/typescript-eslint/typescript-eslint). You likely don't want to use it directly. -👉 See **https://typescript-eslint.io** for docs on typescript-eslint. +👉 See **https://typescript-eslint.io** for docs on TypeScript-ESLint. diff --git a/packages/website/blog/2022-12-05-asts-and-typescript-eslint.md b/packages/website/blog/2022-12-05-asts-and-typescript-eslint.md index 17da83da75d0..2928278741a3 100644 --- a/packages/website/blog/2022-12-05-asts-and-typescript-eslint.md +++ b/packages/website/blog/2022-12-05-asts-and-typescript-eslint.md @@ -79,14 +79,14 @@ On the other hand, TypeScript's type checking APIs require nodes in the TypeScri ### Enter TSESTree -To resolve the incompatibilities between ESTrees and the TypeScript AST typescript-eslint provides its own [`@typescript-eslint/parser` package](https://typescript-eslint.io/architecture/Parser.mdx) which: +To resolve the incompatibilities between ESTrees and the TypeScript AST TypeScript-ESLint provides its own [`@typescript-eslint/parser` package](https://typescript-eslint.io/architecture/Parser.mdx) which: 1. First parses TypeScript syntax into a TypeScript AST 1. Creates an ESTree AST based on that TypeScript AST 1. Keeps track of equivalent nodes across each AST -By creating both an ESTree AST and a TypeScript AST, the typescript-eslint parser allows ESLint rules to work with TypeScript code. -That's why the [Getting Started guide](https://typescript-eslint.io/getting-started) for typescript-eslint has you specify `parser: '@typescript-eslint/parser'` in your ESLint config! +By creating both an ESTree AST and a TypeScript AST, the TypeScript-ESLint parser allows ESLint rules to work with TypeScript code. +That's why the [Getting Started guide](https://typescript-eslint.io/getting-started) for TypeScript-ESLint has you specify `parser: '@typescript-eslint/parser'` in your ESLint config! We commonly refer to the ESTree format that also includes TypeScript-specific syntax as **TSESTree**. diff --git a/packages/website/docusaurusConfig.ts b/packages/website/docusaurusConfig.ts index 7ad2d275be8a..2a88027f1168 100644 --- a/packages/website/docusaurusConfig.ts +++ b/packages/website/docusaurusConfig.ts @@ -233,7 +233,8 @@ const pluginPwaOptions: PluginPwaOptions = { const config: Config = { title: 'TypeScript ESLint', - tagline: 'Tooling which enables ESLint to support TypeScript', + tagline: + 'The tooling that enables ESLint and Prettier to support TypeScript.', url: 'https://typescript-eslint.io', baseUrl: '/', onBrokenLinks: 'throw', @@ -275,6 +276,11 @@ const config: Config = { rel: 'manifest', href: '/img/favicon/site.webmanifest', }, + { + color: '#2656c7', + href: '/img/favicon/safari-pinned-tab.svg', + rel: 'mask-icon', + }, ], }; diff --git a/packages/website/sidebars/sidebar.base.js b/packages/website/sidebars/sidebar.base.js index 89fa0e543f36..481fe000271d 100644 --- a/packages/website/sidebars/sidebar.base.js +++ b/packages/website/sidebars/sidebar.base.js @@ -67,6 +67,7 @@ module.exports = { }, { items: [ + 'maintenance/branding', 'maintenance/issues', 'maintenance/pull-requests', 'maintenance/releases', diff --git a/packages/website/src/components/FinancialContributors/Sponsors/styles.module.css b/packages/website/src/components/FinancialContributors/Sponsors/styles.module.css index 08e99b16488d..b92051eddcba 100644 --- a/packages/website/src/components/FinancialContributors/Sponsors/styles.module.css +++ b/packages/website/src/components/FinancialContributors/Sponsors/styles.module.css @@ -7,7 +7,7 @@ display: flex; flex-wrap: wrap; justify-content: center; - align-items: flex-end; + align-items: stretch; max-width: 800px; padding: 0; } @@ -19,6 +19,7 @@ } .sponsorsTier img { + background: white; display: block; margin: auto; } diff --git a/packages/website/src/components/FinancialContributors/styles.module.css b/packages/website/src/components/FinancialContributors/styles.module.css index 68821a61f6b4..c5ffc1e26812 100644 --- a/packages/website/src/components/FinancialContributors/styles.module.css +++ b/packages/website/src/components/FinancialContributors/styles.module.css @@ -2,6 +2,7 @@ display: inline-flex; flex-direction: column; gap: 8px; + height: 100%; } .linksArea { @@ -22,6 +23,11 @@ gap: 0.5rem; } +[data-theme='dark'] .linksArea a { + --ifm-font-color-base: var(--ifm-color-white); + --ifm-button-color: var(--ifm-color-white); +} + @media screen and (min-width: 1150px) { .sponsorsContainer { display: grid; diff --git a/packages/website/src/css/custom.css b/packages/website/src/css/custom.css index 9c039bdc6f59..8979a32a8e2a 100644 --- a/packages/website/src/css/custom.css +++ b/packages/website/src/css/custom.css @@ -9,18 +9,21 @@ /* You can override the default Infima variables here. */ html:root { - --ifm-color-primary: #3578e5; - --ifm-color-primary-dark: #1b62d4; - --ifm-color-primary-darker: #1751af; - --ifm-color-primary-darkest: #123f89; - --ifm-color-primary-light: #1b62d4; - --ifm-color-primary-lighter: #80aaef; - --ifm-color-primary-lightest: #a5c3f3; + --color-blurple: #2656c7; + --color-blurple-shadow: #111e80; + + --ifm-color-primary: #3535e5; + --ifm-color-primary-dark: #1b43d4; + --ifm-color-primary-darker: var(--color-blurple); + --ifm-color-primary-darkest: var(--color-blurple-shadow); + --ifm-color-primary-light: #1b3ad4; + --ifm-color-primary-lighter: #8096ef; + --ifm-color-primary-lightest: #a5c2f3; --ifm-code-font-size: 95%; --ifm-color-info: var(--ifm-color-primary-dark); --ifm-link-color: var(--ifm-color-primary-dark); - --code-line-decoration: rgba(53, 120, 229, 0.1); + --code-line-decoration: rgba(112, 53, 229, 0.1); --code-editor-bg: #ffffff; --docsearch-muted-color: #666; @@ -29,15 +32,16 @@ html:root { html[data-theme='dark']:root { --ifm-color-feedback-background: #f0f8ff; - --ifm-color-primary: #4e89e8; - --ifm-color-primary-dark: #144697; - --ifm-color-primary-darker: #0e336e; - --ifm-color-primary-darkest: #0b2652; - --ifm-color-primary-light: #699bec; - --ifm-color-primary-lighter: #77a4ed; - --ifm-color-primary-lightest: #a0c0f3; - - --ifm-code-background: rgb(40, 42, 54); + --ifm-color-primary: #3255bb; + --ifm-color-primary-dark: #1f459d; + --ifm-color-primary-darker: #1f417f; + --ifm-color-primary-darkest: #163162; + --ifm-color-primary-light: #889dfa; + --ifm-color-primary-lighter: #b1c5fd; + --ifm-color-primary-lightest: #c5d1ff; + + --ifm-button-background-color: var(--ifm-color-primary-dark); + --ifm-code-background: rgb(43, 40, 54); --ifm-code-color: rgb(248, 248, 242); --ifm-color-info: var(--ifm-color-primary-light); --ifm-link-color: var(--ifm-color-primary-light); @@ -47,6 +51,7 @@ html[data-theme='dark']:root { --code-line-decoration: rgba(255, 255, 255, 0.1); --code-editor-bg: #1e1e1e; + --ifm-tabs-color-active: var(--ifm-color-primary-light); --ifm-toc-border-color: var(--ifm-background-surface-color); --ifm-footer-background-color: var(--ifm-background-surface-color); diff --git a/packages/website/src/pages/styles.module.css b/packages/website/src/pages/styles.module.css index fe3afa376501..bcd6dd9be994 100644 --- a/packages/website/src/pages/styles.module.css +++ b/packages/website/src/pages/styles.module.css @@ -6,11 +6,11 @@ */ .hero { - background-color: var(--ifm-color-primary-darkest); + background-color: var(--color-blurple-shadow); background-image: linear-gradient( 135deg, - var(--ifm-color-primary-darker) 0%, - var(--ifm-color-primary-darkest) 100% + var(--color-blurple) 0%, + var(--color-blurple-shadow) 100% ); --ifm-font-color-base: var(--ifm-color-white); --ifm-button-color: var(--ifm-color-white); @@ -30,6 +30,8 @@ } .buttons a { + --ifm-font-color-base: var(--ifm-color-white); + --ifm-button-color: var(--ifm-color-white); margin: 1rem 1rem; } diff --git a/packages/website/static/img/favicon.ico b/packages/website/static/img/favicon.ico index 96667461e991aae3641fde3800f5e575b3d7e09e..528a066360e06cd75dd97db45e45eba645659fee 100644 GIT binary patch literal 15086 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 literal 7406 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

3@o>Xt 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 literal 6533 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 A9RL6T diff --git a/packages/website/static/img/favicon/android-chrome-512x512.png b/packages/website/static/img/favicon/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..4e42dbefc7d0839af90ce66fa6a00c15e7580d65 GIT binary patch literal 22034 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 K;c{Ja)PDgr(QG>a literal 0 HcmV?d00001 diff --git a/packages/website/static/img/favicon/apple-touch-icon.png b/packages/website/static/img/favicon/apple-touch-icon.png index 0f5470bfdf9a94b064d95486f874956f2bb23fd6..332e607643d7379cef1105ce4d75f87f036b6daa 100644 GIT binary patch delta 5770 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 U1|~q?U)R7}+rl^T1EuwU0Tkp8umAu6 literal 4836 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 diff --git a/packages/website/static/img/favicon/favicon-16x16.png b/packages/website/static/img/favicon/favicon-16x16.png index c0edc07eb36c98697293a187c93e018715362e1f..d2d807d3fb591bbf939205c58dd20cc130b684d6 100644 GIT binary patch delta 723 zcmeyyHj#Zod_BYe0G|+71_lOW-_17Oht2%#{%menB1I-E83pB^ff4>=+ z0n}v|cF-~65Cg-1v%vi!8OP0h_nOxOmHO|i?6?fnV;TT8!o&|GSk-kUB=h+3b8r9u z|9|S@yV=X{{rdIy*YCf3j=bEo``MAxZzj#ZQ`dL(%FU0pJy-8M__FKJ%iQ`4{c~=w z+Vc4Ok3XNk{%)UoWA^gIOOL$r z`|lM-pFd7}|9#$I@cF&E=8EKbK)sAf-tI0YD>uIU3*>MXctjQh>2eTeoMUt34UoZJ z;_2(k{)~rFoI~+V%=aHaq55r}E{-7*mvj5C2QfJcxXzYg>D2QGDhk@seRfkyfXeD6 z|No1n&Cs21!5>@d9~ypNP3XoO^PH521&`WJ=W_OQ>ye+5nO2Eghm4&cBT$DV$co_nw370~qEv?R@^Zb*yzJuS#DY}4{G#;P M?`)(dvoq%d049-2RsaA1 delta 696 zcmbQp{*7%yd_7}ufKQ04i~Rv-`_s<$C!Ot2IoqFbaX8~*f5XN8nv4Av7l%_W_E%l( zFT2=Za&@@k?sV17@rtd*C1bq{W(F6{jV_w%Uog?T;ADHn(dM$L0g!vq(&VC><24)e zOQnVP49UxqtshdC3Di%gYu<7h9ViM~2?Cx4PWY`1r}= zpWW?GER8StxL>QSdZ?pz?)kI&pQlfLHaEJEmUQRezyD94{5*d2)8YlM%#F^wIGlEK zylQKHIXnICj&1J)eXeJu+}*S5!}+scW=wtV>TuQB?y`%+Nqeh{W`^gTY=L2O$;Rx0 ziT-(0gY(XIms}h!#(tK!VqjokO!9Vj(LH<1(H6*IFY)wsWq-;fC90;pB{%$dJy2|~ zr;B5V#O36KgcK*HGdetLa^9S1Xl|U`J)4>HgF(TjVga!SPnj77j`E8=5ET#+5)%{^ zo<3m;6Q{@N6Q@pUYiMb%Ua@Lrb_0va)-9zaU%&A3^!E7roOOsga#puQckPcgp}9Gx zZyefgSzEla>g2R|y=%v=M%Ev9Y)fqS)|hUVj$1OH!_AB3qNuu#dUg~)Lfa#^HRpfrc82Xq|Hssos~0xvN9A|DE?Uzc1#@T z6V(#eh?11Vl2ohYqEsNoU}RuqsB2)PYh)H;WN2ki3)agG5b%s{Qst?ep7f?RNwyXdQIGIPHuX)F6=Qmi`bmdrf`!I7J)+ zy2i{GsC~bs&t5a26wq1z`)ooESO@I~TF}sc?d|)YuipHK$v<`B+K2!D|DU?}E-d?m zL-@f(Yajmk^Y7R1zx69NJuYs(`0~waCA^j=Vg0;`OI5zjqvX@$1*$#tGM4q7H>-p0EtqU(|fDd*)65lw&vU zd^&XU^_80+??3+f{^PF`=ieSZ^QOGx^1pxor!T&H>W6z1y<)`NOAQQ|iml ze*6CC`K#}L|NXo3;7fkPh1kMVaYd&u-}rd$%KNC?lds?Xbd5gj6nQAV==Axk?>~I{ z)jst`>E&X7V4OLZ1o;Isa44}Tzq%{BVXEyfb;hIX!fn`YpDYX!c*EY6r||tX|I&8D zzjAvPn9Im6G+5mBHHY`bUDklB$NpLEU2gjCN4;XV^tnTG4+@0?&0|dRc6aglo-gnj z$l)yTh%5%u??IUH%EW*RKn8n>r>`sfGag294#hVy-+uu0%1Gj)utb-ye1CO?>z{I~VR#>rC-|bYg`^=aT@1)+fh~O`;1MDCUicY8L5(;$Ckcn#{9X=3A5ejyy3nSTC6#NeZva}E?rB; zPo41#SR>pLqZl=GxEQPy4y^LNBo%dk!*0!bhN?H>(i$5&rEeGISNmA=T$twJpvj=U zad-O#I~kcONru#>06v=s#@784cqFtAF_i3KSLc&l!K2;icQ?J@T!Yri_AF-h9eR4} z4~X7c5^$LDx>>{QXs#=4_ZBYdW87!`viSdlRNqx6ojI!-j#oc*wwlNA>gE2743>(z zhkvh|*EcLn`)2)mX_4GT@h$gVCr`u-L# zg2A?SzEpNan??8kCo4Vo%X_oCr)1jhvtKS;KCR#8x6`7w>+CD}2RVlmzU|-sOaCv^ z<{3xw_PQMgMW0D}wXWO3D+9QW?t2%k?tzvWt@w3sUv+i_&Mm cvylQS3a<)@C<#g|S12gTPs_}iyqqN#0Ggg95C8xG delta 1059 zcmV+;1l;?y3WN%fV1MRNOjJcfK&wMOz(YU0LqEMkKe|Og!bCsZL_gO=KiEV+*+f6p zL_oeoKhi`$(?mbiL_g3(K)*yk(M3SiMnTj>K-5M;)jvAZJvY)lIMO~i(?UJeM?%#? zJ<~ch(m6EIJ2uioKGa4*)mm2BWntW9VcTS2+h1GSVqM!!Nq^Q&NY-<2-+Fi8Z)@I3 zMAh2a_W%F?{QUm?{r~>{|M~g;f`8(Qhvf0_{OaoZdwAhFG}7VV_>76=Eho=}f#Y~| z;DdnUlaS_-j^^9i_ok!ji-_cqjpdb+=V4vj)6(^=s_bfJ-LbFj%E|LwSJ^;2(?vkl zH!;yVG}0_4&VRnV@LpQlE-BAGIn(3g`SS7nK|IqlEzo&&;KRZ3YiHd@L)F~e_nVmL z!ol%rW!yYB(l|5GqMzyd`u^VC_sh!jNIyBKpL)A=3){cwi<>dKa zTG~cI(Ks^FM?%q$jOEnR^;A#TG%wI8BhICw>Xnn{H-9qH!ocyYs_f$8_=$$(ZE4-~ z^!#^p;6_5x!NBqD?fcTv^+Z6?SykD@!}0t3{{8*_QB2oiUD|SP-fwK)KRMG~S=xYo z;)a9cfqvpeLDV}n(>pfPIWy8YGtxvryhTCLMnTX-K+r`&&_qAYX?b3x00001VoOIv zFC)|-5q|&x00(qQO+^Rg0vZ)2BeZQ-#{d8UxJg7oR5;6HU|?io#sgRwSlQS)a05;* z25xp9Ufh6>pFx0wmk&4K5*$^4sz68>3WS73z+6#bAru8-;u7K@AR#Fs#m6TtBP%Db zpopYEK}lIfMHvWG)zmelgyl4~v~_f4g%Jv*^ndgX4E6Q(jSP+TO=KlZ&Ge1*%`Gg2 z;R=MT^g;4KV4!bpV+)i90Xum`xEt&p98I0{^_^W@-P~n8^z}Wxy!Cy2{ruqyECT|A zg7x)7LM;Qrbi?%{BBO+&#l(dWz7Unx6_3%^j}_C66H6BFcH2rjIX-i@33WOAdGxQCO^fR;Mg|I5%6N;2d$OigYKPOias{+0}p_KfB zLVcsOqOf9Y3ZyK>_=HpPfSz?JDaC3;OfL;g<7zDS9cFkNpDP_m_L#)gk<_BOw^PCvV)88fB841dM2S+i$_Df)8(18NQ*zaSLMEuJ@@9|9JXmX^)~ z(t-;C>Y#&eB|;3}lRg9&8Zj*}GA%MTR5CF-GdMakH7hVNIxsLgYl$3_Zv+<_F)c7M dEiyJ#GBG+cI65;mD=;xSFfdCtF`$#h1aE2#5nuoS diff --git a/packages/website/static/img/favicon/mstile-150x150.png b/packages/website/static/img/favicon/mstile-150x150.png index 3cc8878a6c51757ac3857f9b927ac458fdc8ced4..230f652994833e0e6891e021859f04a8eaf4557b 100644 GIT binary patch literal 5883 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 P1V~;+S-M=xB=A1~(RISW literal 5168 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 diff --git a/packages/website/static/img/favicon/mstile-310x310.png b/packages/website/static/img/favicon/mstile-310x310.png index d27d66fffc5c90923e46f1c4b6391b1950ab745b..9f9f3bb9f43abed4cd49fbd4557cff0ae5cf3c04 100644 GIT binary patch literal 12525 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 UaeluW#XV!Z diff --git a/packages/website/static/img/favicon/safari-pinned-tab.svg b/packages/website/static/img/favicon/safari-pinned-tab.svg new file mode 100644 index 000000000000..6f00583afab6 --- /dev/null +++ b/packages/website/static/img/favicon/safari-pinned-tab.svg @@ -0,0 +1,34 @@ + + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + diff --git a/packages/website/static/img/favicon/site.webmanifest b/packages/website/static/img/favicon/site.webmanifest index ba9eb3dcb7b9..29eb0a49e731 100644 --- a/packages/website/static/img/favicon/site.webmanifest +++ b/packages/website/static/img/favicon/site.webmanifest @@ -1,14 +1,19 @@ { - "name": "TypeScript ESLint", - "short_name": "TypeScript ESLint", + "background_color": "#443fd4", + "display": "standalone", "icons": [ { "src": "/android-chrome-192x192.png", "sizes": "192x192", "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" } ], - "theme_color": "#443fd4", - "background_color": "#443fd4", - "display": "standalone" + "name": "TypeScript ESLint", + "short_name": "TypeScript ESLint", + "theme_color": "#443fd4" } diff --git a/packages/website/static/img/logo-twitter-card.png b/packages/website/static/img/logo-twitter-card.png index b63a382629910cdc065823e8b3f4d1cb1c366f44..7e276da9a3824770e7d6616fd7fe81a61675f0ef 100644 GIT binary patch literal 6779 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 JE|N42_&+%mVGIBO diff --git a/packages/website/static/img/logo.png b/packages/website/static/img/logo.png index f6022cf5129e6e242e6962194e12af0a1f1f1beb..0d7ce9aee1a20153ef038c227f491e1148bda8ec 100644 GIT binary patch literal 23462 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 IroQ+70Ywe2qW}N^ diff --git a/packages/website/static/img/logo.svg b/packages/website/static/img/logo.svg index 557d2dbcac00..bfe61aecb7cd 100644 --- a/packages/website/static/img/logo.svg +++ b/packages/website/static/img/logo.svg @@ -1,5 +1,22 @@ - - - - + + + + + + diff --git a/packages/website/static/img/logo_maskable.png b/packages/website/static/img/logo_maskable.png index 8c32267e15cfb00ff87daea65996945428d81d26..837410e605ccbe6c1c357d1a3f7f85e680928770 100644 GIT binary patch literal 9823 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 Date: Thu, 1 Dec 2022 18:38:54 -0500 Subject: [PATCH 02/11] Fixed remaining markdownlint violations --- .markdownlint.json | 1 + docs/Custom_Rules.md | 2 +- docs/MAINTENANCE.md | 2 +- docs/architecture/ESLint_Plugin.mdx | 2 +- docs/linting/troubleshooting/FORMATTING.md | 2 +- packages/ast-spec/README.md | 4 ++-- packages/eslint-plugin-tslint/README.md | 2 +- packages/eslint-plugin/README.md | 2 +- packages/parser/README.md | 2 +- packages/scope-manager/README.md | 2 +- packages/shared-fixtures/README.md | 4 ++-- packages/type-utils/README.md | 4 ++-- packages/types/README.md | 4 ++-- packages/typescript-estree/README.md | 2 +- packages/utils/README.md | 2 +- packages/visitor-keys/README.md | 4 ++-- 16 files changed, 21 insertions(+), 20 deletions(-) diff --git a/.markdownlint.json b/.markdownlint.json index d7b5648732a9..831f637851aa 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -102,6 +102,7 @@ "ESLint", "JavaScript", "TSLint", + "typescript-eslint.io", "TypeScript-ESLint", "TypeScript" ], diff --git a/docs/Custom_Rules.md b/docs/Custom_Rules.md index 6c58d8f849c9..a6ca74d6bf99 100644 --- a/docs/Custom_Rules.md +++ b/docs/Custom_Rules.md @@ -5,7 +5,7 @@ title: Custom Rules --- :::important -This page describes how to write your own custom ESLint rules using typescript-eslint. +This page describes how to write your own custom ESLint rules using TypeScript-ESLint. You should be familiar with [ESLint's developer guide](https://eslint.org/docs/developer-guide) and [ASTs](https://typescript-eslint.io/blog/asts-and-typescript-eslint) before writing custom rules. ::: diff --git a/docs/MAINTENANCE.md b/docs/MAINTENANCE.md index 75f1030c015d..60a97c9e5cac 100644 --- a/docs/MAINTENANCE.md +++ b/docs/MAINTENANCE.md @@ -4,7 +4,7 @@ sidebar_label: Maintenance Guide title: Maintenance Guide --- -This is the maintainers guide to working on typescript-eslint. +This is the maintainers guide to working on TypeScript-ESLint. It's intended for use by contributors who have been given access to at least triage issues and pull requests. We keep it in the open for visibility into our processes. diff --git a/docs/architecture/ESLint_Plugin.mdx b/docs/architecture/ESLint_Plugin.mdx index eca601415550..e4a0f6c06698 100644 --- a/docs/architecture/ESLint_Plugin.mdx +++ b/docs/architecture/ESLint_Plugin.mdx @@ -11,7 +11,7 @@ sidebar_label: eslint-plugin See [Getting Started](../Getting_Started.md) for documentation on how to lint your TypeScript code with ESLint. ::: -`@typescript-eslint/eslint-plugin` is an ESLint plugin used to load in custom rules and rule configurations lists from typescript-eslint. +`@typescript-eslint/eslint-plugin` is an ESLint plugin used to load in custom rules and rule configurations lists from TypeScript-ESLint. Those rules rely on [`@typescript-eslint/parser`](./Parser.mdx) to parse TypeScript code into ESLint-compatible nodes, as well as provide backing TypeScript programs. ## Exports diff --git a/docs/linting/troubleshooting/FORMATTING.md b/docs/linting/troubleshooting/FORMATTING.md index 47ff57c3b45c..0df2693d2ed9 100644 --- a/docs/linting/troubleshooting/FORMATTING.md +++ b/docs/linting/troubleshooting/FORMATTING.md @@ -52,4 +52,4 @@ Per [ESLint's 2020 Changes to Rule Policies blog post](https://eslint.org/blog/2 > Stylistic rules are those related to spacing, conventions, and generally anything that does not highlight an error or a better way to do something. We support the ESLint team's decision and backing logic to move away from stylistic rules. -With the exception of bug fixes, no new formatting-related pull requests will be accepted into typescript-eslint. +With the exception of bug fixes, no new formatting-related pull requests will be accepted into TypeScript-ESLint. diff --git a/packages/ast-spec/README.md b/packages/ast-spec/README.md index 43536bb821b3..52a8b2641d87 100644 --- a/packages/ast-spec/README.md +++ b/packages/ast-spec/README.md @@ -10,7 +10,7 @@ This package includes: ## ✋ Internal Package -This is an _internal package_ to the [typescript-eslint monorepo](https://github.com/typescript-eslint/typescript-eslint). +This is an _internal package_ to the [TypeScript-ESLint monorepo](https://github.com/typescript-eslint/typescript-eslint). You likely don't want to use it directly. -👉 See **https://typescript-eslint.io** for docs on typescript-eslint. +👉 See **https://typescript-eslint.io** for docs on TypeScript-ESLint. diff --git a/packages/eslint-plugin-tslint/README.md b/packages/eslint-plugin-tslint/README.md index 57c414230ec8..453c2eb0e1f2 100644 --- a/packages/eslint-plugin-tslint/README.md +++ b/packages/eslint-plugin-tslint/README.md @@ -7,4 +7,4 @@ 👉 See **https://typescript-eslint.io/architecture/eslint-plugin-tslint** for documentation on this package. -> See https://typescript-eslint.io for general documentation on typescript-eslint, the tooling that allows you to run ESLint and Prettier on TypeScript code. +> See https://typescript-eslint.io for general documentation on TypeScript-ESLint, the tooling that allows you to run ESLint and Prettier on TypeScript code. diff --git a/packages/eslint-plugin/README.md b/packages/eslint-plugin/README.md index b9dd0cecd032..b57018fd84a4 100644 --- a/packages/eslint-plugin/README.md +++ b/packages/eslint-plugin/README.md @@ -7,4 +7,4 @@ An ESLint plugin which provides lint rules for TypeScript codebases. 👉 See **https://typescript-eslint.io/architecture/utils** for our Getting Started docs. -> See https://typescript-eslint.io for general documentation on typescript-eslint, the tooling that allows you to run ESLint and Prettier on TypeScript code. +> See https://typescript-eslint.io for general documentation on TypeScript-ESLint, the tooling that allows you to run ESLint and Prettier on TypeScript code. diff --git a/packages/parser/README.md b/packages/parser/README.md index f057b97f8680..dcf3c5a267e5 100644 --- a/packages/parser/README.md +++ b/packages/parser/README.md @@ -7,4 +7,4 @@ 👉 See **https://typescript-eslint.io/architecture/parser** for documentation on this package. -> See https://typescript-eslint.io for general documentation on typescript-eslint, the tooling that allows you to run ESLint and Prettier on TypeScript code. +> See https://typescript-eslint.io for general documentation on TypeScript-ESLint, the tooling that allows you to run ESLint and Prettier on TypeScript code. diff --git a/packages/scope-manager/README.md b/packages/scope-manager/README.md index 0258932e390a..a9ecc6926cc8 100644 --- a/packages/scope-manager/README.md +++ b/packages/scope-manager/README.md @@ -5,4 +5,4 @@ 👉 See **https://typescript-eslint.io/architecture/scope-manager** for documentation on this package. -> See https://typescript-eslint.io for general documentation on typescript-eslint, the tooling that allows you to run ESLint and Prettier on TypeScript code. +> See https://typescript-eslint.io for general documentation on TypeScript-ESLint, the tooling that allows you to run ESLint and Prettier on TypeScript code. diff --git a/packages/shared-fixtures/README.md b/packages/shared-fixtures/README.md index eb3bceabc7f8..746dea9550e6 100644 --- a/packages/shared-fixtures/README.md +++ b/packages/shared-fixtures/README.md @@ -4,7 +4,7 @@ ## ✋ Internal Package -This is an _internal package_ to the [typescript-eslint monorepo](https://github.com/typescript-eslint/typescript-eslint). +This is an _internal package_ to the [TypeScript-ESLint monorepo](https://github.com/typescript-eslint/typescript-eslint). You likely don't want to use it directly. -👉 See **https://typescript-eslint.io** for docs on typescript-eslint. +👉 See **https://typescript-eslint.io** for docs on TypeScript-ESLint. diff --git a/packages/type-utils/README.md b/packages/type-utils/README.md index 2f842e803cc5..0e80a8619071 100644 --- a/packages/type-utils/README.md +++ b/packages/type-utils/README.md @@ -6,7 +6,7 @@ The utilities in this package are separated from `@typescript-eslint/utils` so t ## ✋ Internal Package -This is an _internal package_ to the [typescript-eslint monorepo](https://github.com/typescript-eslint/typescript-eslint). +This is an _internal package_ to the [TypeScript-ESLint monorepo](https://github.com/typescript-eslint/typescript-eslint). You likely don't want to use it directly. -👉 See **https://typescript-eslint.io** for docs on typescript-eslint. +👉 See **https://typescript-eslint.io** for docs on TypeScript-ESLint. diff --git a/packages/types/README.md b/packages/types/README.md index 7a3008bb982a..d112d871fb2e 100644 --- a/packages/types/README.md +++ b/packages/types/README.md @@ -6,7 +6,7 @@ This package exists to help us reduce cycles and provide lighter-weight packages ## ✋ Internal Package -This is an _internal package_ to the [typescript-eslint monorepo](https://github.com/typescript-eslint/typescript-eslint). +This is an _internal package_ to the [TypeScript-ESLint monorepo](https://github.com/typescript-eslint/typescript-eslint). You likely don't want to use it directly. -👉 See **https://typescript-eslint.io** for docs on typescript-eslint. +👉 See **https://typescript-eslint.io** for docs on TypeScript-ESLint. diff --git a/packages/typescript-estree/README.md b/packages/typescript-estree/README.md index 4ce7f1e7cf4e..f477ecf7c73f 100644 --- a/packages/typescript-estree/README.md +++ b/packages/typescript-estree/README.md @@ -7,4 +7,4 @@ 👉 See **https://typescript-eslint.io/architecture/typescript-estree** for documentation on this package. -> See https://typescript-eslint.io for general documentation on typescript-eslint, the tooling that allows you to run ESLint and Prettier on TypeScript code. +> See https://typescript-eslint.io for general documentation on TypeScript-ESLint, the tooling that allows you to run ESLint and Prettier on TypeScript code. diff --git a/packages/utils/README.md b/packages/utils/README.md index 8013675d9625..300083ffa52e 100644 --- a/packages/utils/README.md +++ b/packages/utils/README.md @@ -7,4 +7,4 @@ 👉 See **https://typescript-eslint.io/architecture/utils** for documentation on this package. -> See https://typescript-eslint.io for general documentation on typescript-eslint, the tooling that allows you to run ESLint and Prettier on TypeScript code. +> See https://typescript-eslint.io for general documentation on TypeScript-ESLint, the tooling that allows you to run ESLint and Prettier on TypeScript code. diff --git a/packages/visitor-keys/README.md b/packages/visitor-keys/README.md index 1745172a6f20..c8597b04b008 100644 --- a/packages/visitor-keys/README.md +++ b/packages/visitor-keys/README.md @@ -4,7 +4,7 @@ ## ✋ Internal Package -This is an _internal package_ to the [typescript-eslint monorepo](https://github.com/typescript-eslint/typescript-eslint). +This is an _internal package_ to the [TypeScript-ESLint monorepo](https://github.com/typescript-eslint/typescript-eslint). You likely don't want to use it directly. -👉 See **https://typescript-eslint.io** for docs on typescript-eslint. +👉 See **https://typescript-eslint.io** for docs on TypeScript-ESLint. From 7f5a66e845e705341f16bcaac33e53404110641c Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Fri, 2 Dec 2022 10:40:40 -0500 Subject: [PATCH 03/11] Switch back to typescript-eslint --- .markdownlint.json | 3 +-- docs/Contributing.mdx | 2 +- docs/Custom_Rules.md | 16 ++++++++-------- docs/Getting_Started.md | 4 ++-- docs/MAINTENANCE.md | 2 +- docs/architecture/ESLint_Plugin.mdx | 2 +- docs/architecture/TypeScript-ESTree.mdx | 2 +- docs/contributing/Issues.mdx | 2 +- docs/linting/Troubleshooting.md | 2 +- docs/linting/Typed_Linting.md | 2 +- docs/linting/troubleshooting/FORMATTING.md | 2 +- docs/linting/typed-linting/Monorepos.md | 2 +- docs/maintenance/BRANDING.md | 17 ++++++++++++----- packages/ast-spec/README.md | 4 ++-- packages/eslint-plugin-internal/README.md | 2 +- packages/eslint-plugin-tslint/README.md | 2 +- packages/eslint-plugin/README.md | 2 +- .../tools/generate-breaking-changes.ts | 2 +- packages/parser/README.md | 2 +- packages/scope-manager/README.md | 2 +- packages/shared-fixtures/README.md | 4 ++-- packages/type-utils/README.md | 4 ++-- packages/types/README.md | 4 ++-- packages/typescript-estree/README.md | 2 +- packages/utils/README.md | 2 +- packages/visitor-keys/README.md | 4 ++-- .../2022-12-05-asts-and-typescript-eslint.md | 8 ++++---- 27 files changed, 54 insertions(+), 48 deletions(-) diff --git a/.markdownlint.json b/.markdownlint.json index 831f637851aa..05206c4297d1 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -102,8 +102,7 @@ "ESLint", "JavaScript", "TSLint", - "typescript-eslint.io", - "TypeScript-ESLint", + "typescript-eslint", "TypeScript" ], "code_blocks": false diff --git a/docs/Contributing.mdx b/docs/Contributing.mdx index ed57351dc880..35846cdaaae0 100644 --- a/docs/Contributing.mdx +++ b/docs/Contributing.mdx @@ -5,7 +5,7 @@ title: Contributing Thank you for your interest in contributing to TypeScript ESLint! 💜 -Although TypeScript-ESLint's packages are already downloaded millions of times per month and power high profile projects across our industry, this is a 100% community-driven project. +Although typescript-eslint's packages are already downloaded millions of times per month and power high profile projects across our industry, this is a 100% community-driven project. From the second you install one of the packages from this monorepo, you are a part of that community. So, from the bottom of our hearts, _thank you_ 💕. diff --git a/docs/Custom_Rules.md b/docs/Custom_Rules.md index a6ca74d6bf99..0590398b8188 100644 --- a/docs/Custom_Rules.md +++ b/docs/Custom_Rules.md @@ -5,7 +5,7 @@ title: Custom Rules --- :::important -This page describes how to write your own custom ESLint rules using TypeScript-ESLint. +This page describes how to write your own custom ESLint rules using typescript-eslint. You should be familiar with [ESLint's developer guide](https://eslint.org/docs/developer-guide) and [ASTs](https://typescript-eslint.io/blog/asts-and-typescript-eslint) before writing custom rules. ::: @@ -18,17 +18,17 @@ The main three changes to custom rules writing are: ## Utils Package -The [`@typescript-eslint/utils`](./architecture/Utils.mdx) package acts as a replacement package for `eslint` that exports all the same objects and types, but with TypeScript-ESLint support. -It also exports common utility functions and constants most custom TypeScript-ESLint rules tend to use. +The [`@typescript-eslint/utils`](./architecture/Utils.mdx) package acts as a replacement package for `eslint` that exports all the same objects and types, but with typescript-eslint support. +It also exports common utility functions and constants most custom typescript-eslint rules tend to use. :::caution -`@types/eslint` types are based on `@types/estree` and do not recognize TypeScript-ESLint nodes and properties. -You should generally not need to import from `eslint` when writing custom TypeScript-ESLint rules in TypeScript. +`@types/eslint` types are based on `@types/estree` and do not recognize typescript-eslint nodes and properties. +You should generally not need to import from `eslint` when writing custom typescript-eslint rules in TypeScript. ::: ### `RuleCreator` -The recommended way to create custom ESLint rules that make use of TypeScript-ESLint features and/or syntax is with the `ESLintUtils.RuleCreator` function exported by `@typescript-eslint/utils`. +The recommended way to create custom ESLint rules that make use of typescript-eslint features and/or syntax is with the `ESLintUtils.RuleCreator` function exported by `@typescript-eslint/utils`. It takes in a function that transforms a rule name into its documentation URL, then returns a function that takes in a rule module object. `RuleCreator` will infer the allowed message IDs the rule is allowed to emit from the provided `meta.messages` object. @@ -208,7 +208,7 @@ export const rule = createRule({ Read TypeScript's [Compiler APIs > Using the Type Checker](https://github.com/microsoft/TypeScript/wiki/Using-the-Compiler-API#using-the-type-checker) section for how to use a program's type checker. ::: -The biggest addition TypeScript-ESLint brings to ESLint rules is the ability to use TypeScript's type checker APIs. +The biggest addition typescript-eslint brings to ESLint rules is the ability to use TypeScript's type checker APIs. `@typescript-eslint/utils` exports an `ESLintUtils` namespace containing a `getParserServices` function that takes in an ESLint context and returns a `parserServices` object. @@ -220,7 +220,7 @@ That `parserServices` object contains: By mapping from ESTree nodes to TypeScript nodes and retrieving the TypeScript program from the parser services, rules are able to ask TypeScript for full type information on those nodes. -This rule bans for-of looping over an enum by using the type-checker via TypeScript-ESLint and TypeScript APIs: +This rule bans for-of looping over an enum by using the type-checker via typescript-eslint and TypeScript APIs: ```ts import { ESLintUtils } from '@typescript-eslint/utils'; diff --git a/docs/Getting_Started.md b/docs/Getting_Started.md index e0c4504969ef..91c978322f48 100644 --- a/docs/Getting_Started.md +++ b/docs/Getting_Started.md @@ -59,14 +59,14 @@ ESLint will lint all TypeScript compatible files within the current folder, and - You can read more about configuring ESLint [in their documentation on configuration](https://eslint.org/docs/user-guide/configuring). - You can read more about the rules provided by ESLint [in their documentation on their rules](https://eslint.org/docs/rules/). -- You can read more about the rules provided by TypeScript-ESLint in [our rules documentation](/rules). +- You can read more about the rules provided by typescript-eslint in [our rules documentation](/rules). ### Configuration Values - `parser: '@typescript-eslint/parser'` tells ESLint to use the [`@typescript-eslint/parser`](./architecture/Parser.mdx) package you installed to parse your source files. - This is required, or else ESLint will throw errors as it tries to parse TypeScript code as if it were regular JavaScript. - `plugins: ['@typescript-eslint']` tells ESLint to load the [`@typescript-eslint/eslint-plugin`](./architecture/ESLint_Plugin.mdx) package as a plugin. - - This allows you to use TypeScript-ESLint's rules within your codebase. + - This allows you to use typescript-eslint's rules within your codebase. - `extends: [ ... ]` tells ESLint that your config extends the given configurations. - `eslint:recommended` is ESLint's inbuilt "recommended" config - it turns on a small, sensible set of rules which lint for well-known best-practices. - `plugin:@typescript-eslint/recommended` is our "recommended" config - it's similar to `eslint:recommended`, except it turns on TypeScript-specific rules from our plugin. diff --git a/docs/MAINTENANCE.md b/docs/MAINTENANCE.md index 60a97c9e5cac..75f1030c015d 100644 --- a/docs/MAINTENANCE.md +++ b/docs/MAINTENANCE.md @@ -4,7 +4,7 @@ sidebar_label: Maintenance Guide title: Maintenance Guide --- -This is the maintainers guide to working on TypeScript-ESLint. +This is the maintainers guide to working on typescript-eslint. It's intended for use by contributors who have been given access to at least triage issues and pull requests. We keep it in the open for visibility into our processes. diff --git a/docs/architecture/ESLint_Plugin.mdx b/docs/architecture/ESLint_Plugin.mdx index e4a0f6c06698..eca601415550 100644 --- a/docs/architecture/ESLint_Plugin.mdx +++ b/docs/architecture/ESLint_Plugin.mdx @@ -11,7 +11,7 @@ sidebar_label: eslint-plugin See [Getting Started](../Getting_Started.md) for documentation on how to lint your TypeScript code with ESLint. ::: -`@typescript-eslint/eslint-plugin` is an ESLint plugin used to load in custom rules and rule configurations lists from TypeScript-ESLint. +`@typescript-eslint/eslint-plugin` is an ESLint plugin used to load in custom rules and rule configurations lists from typescript-eslint. Those rules rely on [`@typescript-eslint/parser`](./Parser.mdx) to parse TypeScript code into ESLint-compatible nodes, as well as provide backing TypeScript programs. ## Exports diff --git a/docs/architecture/TypeScript-ESTree.mdx b/docs/architecture/TypeScript-ESTree.mdx index 3de33bda9c13..066030b0afee 100644 --- a/docs/architecture/TypeScript-ESTree.mdx +++ b/docs/architecture/TypeScript-ESTree.mdx @@ -216,7 +216,7 @@ interface ParseAndGenerateServicesOptions extends ParseOptions { * such as an ESLint CLI invocation, and long-running sessions (such as continuous feedback * on a file in an IDE). * - * When TypeScript-ESLint handles TypeScript Program management behind the scenes, this distinction + * When typescript-eslint handles TypeScript Program management behind the scenes, this distinction * is important because there is significant overhead to managing the so called Watch Programs * needed for the long-running use-case. * diff --git a/docs/contributing/Issues.mdx b/docs/contributing/Issues.mdx index d58e7541f7a5..ae61dd0e3123 100644 --- a/docs/contributing/Issues.mdx +++ b/docs/contributing/Issues.mdx @@ -30,7 +30,7 @@ Please don't: We do not have the bandwidth to handle questions or support requests in the issue tracker. You can instead: -- Ask a question on [StackOverflow](https://stackoverflow.com/questions/tagged/TypeScript-ESLint 'StackOverflow questions tagged with typescript-eslint') using the `typescript-eslint` tag +- Ask a question on [StackOverflow](https://stackoverflow.com/questions/tagged/typescript-eslint 'StackOverflow questions tagged with typescript-eslint') using the `typescript-eslint` tag - Publicly tweet [@tseslint on Twitter](https://twitter.com/tseslint) > Note that requests to add documentation _are_ allowed, even encouraged! 📝 diff --git a/docs/linting/Troubleshooting.md b/docs/linting/Troubleshooting.md index 98bb48044e2a..38d3bf38e710 100644 --- a/docs/linting/Troubleshooting.md +++ b/docs/linting/Troubleshooting.md @@ -212,7 +212,7 @@ If you see more than one version installed, then you will have to either use [ya You can't, and you don't want to. You should use the same version of TypeScript for linting as the rest of your project. -TypeScript versions often have slight differences in edge cases that can cause contradictory information between TypeScript-ESLint rules and editor information. +TypeScript versions often have slight differences in edge cases that can cause contradictory information between typescript-eslint rules and editor information. For example: - `@typescript-eslint/strict-boolean-expressions` might be operating with TypeScript version _X_ and think a variable is `string[] | undefined` diff --git a/docs/linting/Typed_Linting.md b/docs/linting/Typed_Linting.md index bac20ddb1b4e..3e1beb396a8a 100644 --- a/docs/linting/Typed_Linting.md +++ b/docs/linting/Typed_Linting.md @@ -3,7 +3,7 @@ id: typed-linting title: Linting with Type Information --- -Some TypeScript-ESLint rules utilize the awesome power of TypeScript's type checking APIs to provide much deeper insights into your code. +Some typescript-eslint rules utilize the awesome power of TypeScript's type checking APIs to provide much deeper insights into your code. To tap into TypeScript's additional powers, there are two small changes you need to make to your config file: ```js title=".eslintrc.js" diff --git a/docs/linting/troubleshooting/FORMATTING.md b/docs/linting/troubleshooting/FORMATTING.md index 0df2693d2ed9..47ff57c3b45c 100644 --- a/docs/linting/troubleshooting/FORMATTING.md +++ b/docs/linting/troubleshooting/FORMATTING.md @@ -52,4 +52,4 @@ Per [ESLint's 2020 Changes to Rule Policies blog post](https://eslint.org/blog/2 > Stylistic rules are those related to spacing, conventions, and generally anything that does not highlight an error or a better way to do something. We support the ESLint team's decision and backing logic to move away from stylistic rules. -With the exception of bug fixes, no new formatting-related pull requests will be accepted into TypeScript-ESLint. +With the exception of bug fixes, no new formatting-related pull requests will be accepted into typescript-eslint. diff --git a/docs/linting/typed-linting/Monorepos.md b/docs/linting/typed-linting/Monorepos.md index b5fdec443bce..e55d20647796 100644 --- a/docs/linting/typed-linting/Monorepos.md +++ b/docs/linting/typed-linting/Monorepos.md @@ -13,7 +13,7 @@ Configurations will look different based on which setup you use: ## One root `tsconfig.json` -If you only have one `tsconfig.json` file _and_ its `include` paths include all the files you'd like to lint, you can directly use it with TypeScript-ESLint without further configuration. +If you only have one `tsconfig.json` file _and_ its `include` paths include all the files you'd like to lint, you can directly use it with typescript-eslint without further configuration. If its `include` paths cannot include all files to be linted, we suggest creating a new config called `tsconfig.eslint.json`, that looks something like this: diff --git a/docs/maintenance/BRANDING.md b/docs/maintenance/BRANDING.md index 44ee5e1cdf3b..b1483362721f 100644 --- a/docs/maintenance/BRANDING.md +++ b/docs/maintenance/BRANDING.md @@ -3,17 +3,24 @@ id: branding title: Branding --- -This document serves as a guide for how we generally describe or represent TypeScript-ESLint. +This document serves as a guide for how we generally describe or represent typescript-eslint. It's fine if you don't always adhere to it. ## Terminology ### Name -Our project name is **_"TypeScript-ESLint"_**. -We sometimes refer to it as _"TSESLint"_ for short. +Our project name is **_"typescript-eslint"_**. +We sometimes refer to it as _"tseslint"_ for short. -_"`typescript-eslint`"_ refers to the code repository, GitHub organization, and NPM organization. + + +_"typescript-eslint"_ is preferred over _"TypeScript ESLint"_ or _"TypeScript-ESLint"_ because: + + + +- The name already has to be `typescript-eslint` in many code contexts (e.g. domain, GitHub, npm). +- ESLint and TypeScript are written in abbreviated Pascal Case, so combining lowercase with a dash helps differentiate us. ### Slogan @@ -26,7 +33,7 @@ You can call it _blurple_ if you want. Our logo is also a halfway between [ESLint's logo](https://en.wikipedia.org/wiki/ESLint#/media/File:ESLint_logo.svg) and [TypeScript's logo](https://en.wikipedia.org/wiki/TypeScript#/media/File:Typescript.svg): -TypeScript-ESLint logo +typescript-eslint logo - [Logo PNG download](/img/logo.png) - [Logo SVG download](/img/logo.svg) diff --git a/packages/ast-spec/README.md b/packages/ast-spec/README.md index 52a8b2641d87..43536bb821b3 100644 --- a/packages/ast-spec/README.md +++ b/packages/ast-spec/README.md @@ -10,7 +10,7 @@ This package includes: ## ✋ Internal Package -This is an _internal package_ to the [TypeScript-ESLint monorepo](https://github.com/typescript-eslint/typescript-eslint). +This is an _internal package_ to the [typescript-eslint monorepo](https://github.com/typescript-eslint/typescript-eslint). You likely don't want to use it directly. -👉 See **https://typescript-eslint.io** for docs on TypeScript-ESLint. +👉 See **https://typescript-eslint.io** for docs on typescript-eslint. diff --git a/packages/eslint-plugin-internal/README.md b/packages/eslint-plugin-internal/README.md index 4648ba4edfe7..b9b8154037e2 100644 --- a/packages/eslint-plugin-internal/README.md +++ b/packages/eslint-plugin-internal/README.md @@ -7,4 +7,4 @@ This is an _internal package_ to the [`typescript-eslint` monorepo](https://github.com/typescript-eslint/typescript-eslint). You likely don't want to use it directly. -👉 See **https://typescript-eslint.io** for docs on TypeScript-ESLint. +👉 See **https://typescript-eslint.io** for docs on typescript-eslint. diff --git a/packages/eslint-plugin-tslint/README.md b/packages/eslint-plugin-tslint/README.md index 453c2eb0e1f2..57c414230ec8 100644 --- a/packages/eslint-plugin-tslint/README.md +++ b/packages/eslint-plugin-tslint/README.md @@ -7,4 +7,4 @@ 👉 See **https://typescript-eslint.io/architecture/eslint-plugin-tslint** for documentation on this package. -> See https://typescript-eslint.io for general documentation on TypeScript-ESLint, the tooling that allows you to run ESLint and Prettier on TypeScript code. +> See https://typescript-eslint.io for general documentation on typescript-eslint, the tooling that allows you to run ESLint and Prettier on TypeScript code. diff --git a/packages/eslint-plugin/README.md b/packages/eslint-plugin/README.md index b57018fd84a4..b9dd0cecd032 100644 --- a/packages/eslint-plugin/README.md +++ b/packages/eslint-plugin/README.md @@ -7,4 +7,4 @@ An ESLint plugin which provides lint rules for TypeScript codebases. 👉 See **https://typescript-eslint.io/architecture/utils** for our Getting Started docs. -> See https://typescript-eslint.io for general documentation on TypeScript-ESLint, the tooling that allows you to run ESLint and Prettier on TypeScript code. +> See https://typescript-eslint.io for general documentation on typescript-eslint, the tooling that allows you to run ESLint and Prettier on TypeScript code. diff --git a/packages/eslint-plugin/tools/generate-breaking-changes.ts b/packages/eslint-plugin/tools/generate-breaking-changes.ts index 9b1ecafff4ca..0b7da7172872 100644 --- a/packages/eslint-plugin/tools/generate-breaking-changes.ts +++ b/packages/eslint-plugin/tools/generate-breaking-changes.ts @@ -32,7 +32,7 @@ async function main(): Promise { Being added, deprecated, or removed

    -
  • 🆕 = newly added to TypeScript-ESLint
  • +
  • 🆕 = newly added to typescript-eslint
  • 🙅 = deprecated in the next major
  • ➖️ = to be removed from the plugin in the next version
diff --git a/packages/parser/README.md b/packages/parser/README.md index dcf3c5a267e5..f057b97f8680 100644 --- a/packages/parser/README.md +++ b/packages/parser/README.md @@ -7,4 +7,4 @@ 👉 See **https://typescript-eslint.io/architecture/parser** for documentation on this package. -> See https://typescript-eslint.io for general documentation on TypeScript-ESLint, the tooling that allows you to run ESLint and Prettier on TypeScript code. +> See https://typescript-eslint.io for general documentation on typescript-eslint, the tooling that allows you to run ESLint and Prettier on TypeScript code. diff --git a/packages/scope-manager/README.md b/packages/scope-manager/README.md index a9ecc6926cc8..0258932e390a 100644 --- a/packages/scope-manager/README.md +++ b/packages/scope-manager/README.md @@ -5,4 +5,4 @@ 👉 See **https://typescript-eslint.io/architecture/scope-manager** for documentation on this package. -> See https://typescript-eslint.io for general documentation on TypeScript-ESLint, the tooling that allows you to run ESLint and Prettier on TypeScript code. +> See https://typescript-eslint.io for general documentation on typescript-eslint, the tooling that allows you to run ESLint and Prettier on TypeScript code. diff --git a/packages/shared-fixtures/README.md b/packages/shared-fixtures/README.md index 746dea9550e6..eb3bceabc7f8 100644 --- a/packages/shared-fixtures/README.md +++ b/packages/shared-fixtures/README.md @@ -4,7 +4,7 @@ ## ✋ Internal Package -This is an _internal package_ to the [TypeScript-ESLint monorepo](https://github.com/typescript-eslint/typescript-eslint). +This is an _internal package_ to the [typescript-eslint monorepo](https://github.com/typescript-eslint/typescript-eslint). You likely don't want to use it directly. -👉 See **https://typescript-eslint.io** for docs on TypeScript-ESLint. +👉 See **https://typescript-eslint.io** for docs on typescript-eslint. diff --git a/packages/type-utils/README.md b/packages/type-utils/README.md index 0e80a8619071..2f842e803cc5 100644 --- a/packages/type-utils/README.md +++ b/packages/type-utils/README.md @@ -6,7 +6,7 @@ The utilities in this package are separated from `@typescript-eslint/utils` so t ## ✋ Internal Package -This is an _internal package_ to the [TypeScript-ESLint monorepo](https://github.com/typescript-eslint/typescript-eslint). +This is an _internal package_ to the [typescript-eslint monorepo](https://github.com/typescript-eslint/typescript-eslint). You likely don't want to use it directly. -👉 See **https://typescript-eslint.io** for docs on TypeScript-ESLint. +👉 See **https://typescript-eslint.io** for docs on typescript-eslint. diff --git a/packages/types/README.md b/packages/types/README.md index d112d871fb2e..7a3008bb982a 100644 --- a/packages/types/README.md +++ b/packages/types/README.md @@ -6,7 +6,7 @@ This package exists to help us reduce cycles and provide lighter-weight packages ## ✋ Internal Package -This is an _internal package_ to the [TypeScript-ESLint monorepo](https://github.com/typescript-eslint/typescript-eslint). +This is an _internal package_ to the [typescript-eslint monorepo](https://github.com/typescript-eslint/typescript-eslint). You likely don't want to use it directly. -👉 See **https://typescript-eslint.io** for docs on TypeScript-ESLint. +👉 See **https://typescript-eslint.io** for docs on typescript-eslint. diff --git a/packages/typescript-estree/README.md b/packages/typescript-estree/README.md index f477ecf7c73f..4ce7f1e7cf4e 100644 --- a/packages/typescript-estree/README.md +++ b/packages/typescript-estree/README.md @@ -7,4 +7,4 @@ 👉 See **https://typescript-eslint.io/architecture/typescript-estree** for documentation on this package. -> See https://typescript-eslint.io for general documentation on TypeScript-ESLint, the tooling that allows you to run ESLint and Prettier on TypeScript code. +> See https://typescript-eslint.io for general documentation on typescript-eslint, the tooling that allows you to run ESLint and Prettier on TypeScript code. diff --git a/packages/utils/README.md b/packages/utils/README.md index 300083ffa52e..8013675d9625 100644 --- a/packages/utils/README.md +++ b/packages/utils/README.md @@ -7,4 +7,4 @@ 👉 See **https://typescript-eslint.io/architecture/utils** for documentation on this package. -> See https://typescript-eslint.io for general documentation on TypeScript-ESLint, the tooling that allows you to run ESLint and Prettier on TypeScript code. +> See https://typescript-eslint.io for general documentation on typescript-eslint, the tooling that allows you to run ESLint and Prettier on TypeScript code. diff --git a/packages/visitor-keys/README.md b/packages/visitor-keys/README.md index c8597b04b008..1745172a6f20 100644 --- a/packages/visitor-keys/README.md +++ b/packages/visitor-keys/README.md @@ -4,7 +4,7 @@ ## ✋ Internal Package -This is an _internal package_ to the [TypeScript-ESLint monorepo](https://github.com/typescript-eslint/typescript-eslint). +This is an _internal package_ to the [typescript-eslint monorepo](https://github.com/typescript-eslint/typescript-eslint). You likely don't want to use it directly. -👉 See **https://typescript-eslint.io** for docs on TypeScript-ESLint. +👉 See **https://typescript-eslint.io** for docs on typescript-eslint. diff --git a/packages/website/blog/2022-12-05-asts-and-typescript-eslint.md b/packages/website/blog/2022-12-05-asts-and-typescript-eslint.md index 2928278741a3..833ed90ee941 100644 --- a/packages/website/blog/2022-12-05-asts-and-typescript-eslint.md +++ b/packages/website/blog/2022-12-05-asts-and-typescript-eslint.md @@ -7,7 +7,7 @@ authors: description: Describing what an AST (Abstract Syntax Tree) is and why it's useful for ESLint and TypeScript tooling. slug: asts-and-typescript-eslint tags: [ast, abstract syntax tree, parser, parsing, prettier] -title: ASTs and TypeScript-ESLint +title: ASTs and typescript-eslint --- Programmers who work with tools like [ESLint](https://eslint.org) and [Prettier](https://prettier.io) often refer to ASTs. @@ -79,14 +79,14 @@ On the other hand, TypeScript's type checking APIs require nodes in the TypeScri ### Enter TSESTree -To resolve the incompatibilities between ESTrees and the TypeScript AST TypeScript-ESLint provides its own [`@typescript-eslint/parser` package](https://typescript-eslint.io/architecture/Parser.mdx) which: +To resolve the incompatibilities between ESTrees and the TypeScript AST typescript-eslint provides its own [`@typescript-eslint/parser` package](https://typescript-eslint.io/architecture/Parser.mdx) which: 1. First parses TypeScript syntax into a TypeScript AST 1. Creates an ESTree AST based on that TypeScript AST 1. Keeps track of equivalent nodes across each AST -By creating both an ESTree AST and a TypeScript AST, the TypeScript-ESLint parser allows ESLint rules to work with TypeScript code. -That's why the [Getting Started guide](https://typescript-eslint.io/getting-started) for TypeScript-ESLint has you specify `parser: '@typescript-eslint/parser'` in your ESLint config! +By creating both an ESTree AST and a TypeScript AST, the typescript-eslint parser allows ESLint rules to work with TypeScript code. +That's why the [Getting Started guide](https://typescript-eslint.io/getting-started) for typescript-eslint has you specify `parser: '@typescript-eslint/parser'` in your ESLint config! We commonly refer to the ESTree format that also includes TypeScript-specific syntax as **TSESTree**. From 8eaaa8bbf40bc835500a12984cdb3e9480ed6360 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Fri, 2 Dec 2022 10:41:52 -0500 Subject: [PATCH 04/11] Standardize backticks before monorepo --- packages/eslint-plugin-internal/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/eslint-plugin-internal/README.md b/packages/eslint-plugin-internal/README.md index b9b8154037e2..7d081266c542 100644 --- a/packages/eslint-plugin-internal/README.md +++ b/packages/eslint-plugin-internal/README.md @@ -4,7 +4,7 @@ ## ✋ Internal Package -This is an _internal package_ to the [`typescript-eslint` monorepo](https://github.com/typescript-eslint/typescript-eslint). +This is an _internal package_ to the [typescript-eslint monorepo](https://github.com/typescript-eslint/typescript-eslint). You likely don't want to use it directly. 👉 See **https://typescript-eslint.io** for docs on typescript-eslint. From 48e11340c6c01a67311f815364db9a51148fc8da Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Fri, 2 Dec 2022 11:33:38 -0500 Subject: [PATCH 05/11] Trim down reasoning --- docs/maintenance/BRANDING.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/docs/maintenance/BRANDING.md b/docs/maintenance/BRANDING.md index b1483362721f..c58846b67062 100644 --- a/docs/maintenance/BRANDING.md +++ b/docs/maintenance/BRANDING.md @@ -15,13 +15,10 @@ We sometimes refer to it as _"tseslint"_ for short. -_"typescript-eslint"_ is preferred over _"TypeScript ESLint"_ or _"TypeScript-ESLint"_ because: +_"typescript-eslint"_ is preferred over _"TypeScript ESLint"_ or _"TypeScript-ESLint"_ because ESLint and TypeScript are written in abbreviated Pascal Case, so combining lowercase with a dash helps differentiate us. -- The name already has to be `typescript-eslint` in many code contexts (e.g. domain, GitHub, npm). -- ESLint and TypeScript are written in abbreviated Pascal Case, so combining lowercase with a dash helps differentiate us. - ### Slogan > The tooling that enables ESLint and Prettier to support TypeScript. From eba44fb1b905b9cd4b2d80713051375e79589f50 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Sat, 3 Dec 2022 04:22:04 -0500 Subject: [PATCH 06/11] Fixed TypeScript logo blue --- packages/website/static/img/typescript.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/static/img/typescript.svg b/packages/website/static/img/typescript.svg index 557d2dbcac00..c6f06b4ead4f 100644 --- a/packages/website/static/img/typescript.svg +++ b/packages/website/static/img/typescript.svg @@ -1,5 +1,5 @@ - + From a37677ae23c964f9f2d93dc591782273be385404 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Sat, 3 Dec 2022 04:43:01 -0500 Subject: [PATCH 07/11] Sentence --- docs/maintenance/BRANDING.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/maintenance/BRANDING.md b/docs/maintenance/BRANDING.md index c58846b67062..b4e9857b5aea 100644 --- a/docs/maintenance/BRANDING.md +++ b/docs/maintenance/BRANDING.md @@ -15,7 +15,8 @@ We sometimes refer to it as _"tseslint"_ for short. -_"typescript-eslint"_ is preferred over _"TypeScript ESLint"_ or _"TypeScript-ESLint"_ because ESLint and TypeScript are written in abbreviated Pascal Case, so combining lowercase with a dash helps differentiate us. +_"typescript-eslint"_ is preferred over _"TypeScript ESLint"_ or _"TypeScript-ESLint"_ because ESLint and TypeScript are written in abbreviated Pascal Case. +Combining lowercase with a dash helps differentiate us. From 89eca4f2060818d14ebabd1aa8b0444dc5b8be61 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Sat, 3 Dec 2022 04:46:44 -0500 Subject: [PATCH 08/11] Replace: TypeScript ESLint -> typescript-eslint --- .github/SECURITY.md | 4 ++-- .github/SPONSORSHIPS.md | 10 +++++----- LICENSE | 12 ++++++------ README.md | 4 ++-- docs/Contributing.mdx | 2 +- docs/architecture/Parser.mdx | 2 +- docs/contributing/Local_Development.mdx | 2 +- docs/linting/CONFIGURATIONS.mdx | 8 ++++---- docs/linting/Troubleshooting.md | 2 +- packages/ast-spec/LICENSE | 2 +- packages/eslint-plugin-tslint/LICENSE | 2 +- packages/eslint-plugin/LICENSE | 2 +- packages/experimental-utils/LICENSE | 2 +- packages/parser/LICENSE | 10 +++++----- packages/scope-manager/LICENSE | 2 +- packages/type-utils/LICENSE | 2 +- packages/types/LICENSE | 2 +- packages/typescript-estree/LICENSE | 10 +++++----- .../src/create-program/createProjectProgram.ts | 2 +- .../tests/lib/__snapshots__/parse.test.ts.snap | 16 ++++++++-------- packages/utils/LICENSE | 2 +- packages/visitor-keys/LICENSE | 2 +- ...mated-rule-docs-with-docusaurus-and-remark.md | 16 ++++++++-------- .../2022-12-05-asts-and-typescript-eslint.md | 6 +++--- packages/website/docusaurusConfig.ts | 6 +++--- .../components/FinancialContributors/index.tsx | 4 ++-- .../website/static/img/favicon/site.webmanifest | 4 ++-- packages/website/static/manifest.json | 6 +++--- 28 files changed, 72 insertions(+), 72 deletions(-) diff --git a/.github/SECURITY.md b/.github/SECURITY.md index 536720ad67e8..b7d6d324c54e 100644 --- a/.github/SECURITY.md +++ b/.github/SECURITY.md @@ -1,6 +1,6 @@ -# Security Policiy +# Security Policy -The TypeScript ESLint team and community take all security vulnerabilities seriously. +The typescript-eslint team and community take all security vulnerabilities seriously. If you have a vulnerability or other security issues to disclose: - Thank you very much, please do! diff --git a/.github/SPONSORSHIPS.md b/.github/SPONSORSHIPS.md index 48d8ae5fc743..d746aff13ba6 100644 --- a/.github/SPONSORSHIPS.md +++ b/.github/SPONSORSHIPS.md @@ -1,14 +1,14 @@ # Sponsorship -TypeScript ESLint is an entirely volunteer-run project. +typescript-eslint is an entirely volunteer-run project. We are not associated with any company or organization; our development is funded solely from community donations. -## Why Sponsor TypeScript ESLint? +## Why Sponsor typescript-eslint? Our tooling is used by the vast majority of TypeScript applications today, including nearly 10,000 dependent projects and 20 million weekly downloads on npm. Our packages enable both ESLint and Prettier to run on TypeScript code. We additionally provide a comprehensive suite of TypeScript-focused ESLint rules that, by enabling access to TypeScript's type checking APIs, can detect classifications of application bugs more advanced than ESLint alone can. -Sponsoring TypeScript ESLint helps keep our development process running reliably, which in turn directly allows us to: +Sponsoring typescript-eslint helps keep our development process running reliably, which in turn directly allows us to: - Support new versions of TypeScript sooner after their release - Continue improving our documentation and first-run experiences @@ -36,9 +36,9 @@ You can always view all financial contributors on [opencollective.com/typescript ### Project Direction -TypeScript ESLint is always appreciative of organizations sponsoring the project. +typescript-eslint is always appreciative of organizations sponsoring the project. However, we do not factor sponsorship amounts into issue prioritization or pull request reviews. -If you have a need to push forward an area of work in TypeScript ESLint more urgently than a general donation can provide, consider donating engineering time as well. +If you have a need to push forward an area of work in typescript-eslint more urgently than a general donation can provide, consider donating engineering time as well. ### Website Placement diff --git a/LICENSE b/LICENSE index 82e1ce3c4602..61fed5676879 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -TypeScript ESLint +typescript-eslint Originally extracted from: @@ -8,11 +8,11 @@ Copyright JS Foundation and other contributors, https://js.foundation Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. +- Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE diff --git a/README.md b/README.md index e51eb5e5cd97..6c4e093bdf64 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -

TypeScript ESLint

+

typescript-eslint

Monorepo for the tooling that enables ESLint and Prettier to support TypeScript

@@ -38,4 +38,4 @@ In addition to submitting code and documentation updates, you can help us sustai ## License -TypeScript ESLint inherits from the original TypeScript ESLint Parser license, as the majority of the work began there. It is licensed under a permissive BSD 2-clause license. +typescript-eslint inherits from the original TypeScript ESLint Parser license, as the majority of the work began there. It is licensed under a permissive BSD 2-clause license. diff --git a/docs/Contributing.mdx b/docs/Contributing.mdx index 35846cdaaae0..852e503c2694 100644 --- a/docs/Contributing.mdx +++ b/docs/Contributing.mdx @@ -3,7 +3,7 @@ id: contributing title: Contributing --- -Thank you for your interest in contributing to TypeScript ESLint! 💜 +Thank you for your interest in contributing to typescript-eslint! 💜 Although typescript-eslint's packages are already downloaded millions of times per month and power high profile projects across our industry, this is a 100% community-driven project. From the second you install one of the packages from this monorepo, you are a part of that community. diff --git a/docs/architecture/Parser.mdx b/docs/architecture/Parser.mdx index 185d67d35808..9f5d51a53bb6 100644 --- a/docs/architecture/Parser.mdx +++ b/docs/architecture/Parser.mdx @@ -21,7 +21,7 @@ TS's AST is optimized for its use case of parsing incomplete code and typechecki ESTree is unoptimized and intended for "general purpose" use-cases of traversing the AST. :::tip -You can select `@typescript-eslint/parser` on the [TypeScript ESLint playground](https://typescript-eslint.io/play#showAST=es)'s left sidebar under _Options_ > _AST Explorer_ by selecting _ESTree_. +You can select `@typescript-eslint/parser` on the [typescript-eslint playground](https://typescript-eslint.io/play#showAST=es)'s left sidebar under _Options_ > _AST Explorer_ by selecting _ESTree_. ::: ## Configuration diff --git a/docs/contributing/Local_Development.mdx b/docs/contributing/Local_Development.mdx index 294435616b70..3f85bd9c90b8 100644 --- a/docs/contributing/Local_Development.mdx +++ b/docs/contributing/Local_Development.mdx @@ -3,7 +3,7 @@ id: local-development title: Local Development --- -Thank you for your interest in developing on TypeScript ESLint! ❤️‍🔥 +Thank you for your interest in developing on typescript-eslint! ❤️‍🔥 > See [Contributing](../Contributing.mdx) and [Issues](./Issues.mdx) for details on our general contribution flows. diff --git a/docs/linting/CONFIGURATIONS.mdx b/docs/linting/CONFIGURATIONS.mdx index 03227ce0cced..a620083fa714 100644 --- a/docs/linting/CONFIGURATIONS.mdx +++ b/docs/linting/CONFIGURATIONS.mdx @@ -88,12 +88,12 @@ We recommend a TypeScript project extend from `plugin:@typescript-eslint/strict` ## Other Configurations -TypeScript ESLint includes a scattering of utility configurations used by the recommended configurations. +typescript-eslint includes a scattering of utility configurations used by the recommended configurations. We don't recommend using these directly; instead, extend from an earlier recommended rule. ### `all` -Enables each the rules provided as a part of TypeScript ESLint. +Enables each the rules provided as a part of typescript-eslint. Note that many rules are not applicable in all codebases, or are meant to be configured. See [`configs/all.ts`](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/configs/all.ts) for the exact contents of this config. @@ -105,7 +105,7 @@ Many rules conflict with each other and/or are intended to be configured per-pro ### `base` -A minimal ruleset that sets only the required parser and plugin options needed to run TypeScript ESLint. +A minimal ruleset that sets only the required parser and plugin options needed to run typescript-eslint. @@ -136,6 +136,6 @@ If you feel strongly that a specific rule should (or should not) be one of these ## Formatting -None of the preset configs provided by TypeScript ESLint enable formatting rules (rules that only serve to enforce code whitespace and other trivia). +None of the preset configs provided by typescript-eslint enable formatting rules (rules that only serve to enforce code whitespace and other trivia). We strongly recommend you use Prettier or an equivalent for formatting your code, not ESLint formatting rules. See [What About Formatting? > Suggested Usage](./troubleshooting/formatting#suggested-usage). diff --git a/docs/linting/Troubleshooting.md b/docs/linting/Troubleshooting.md index 38d3bf38e710..cab64ad91ed6 100644 --- a/docs/linting/Troubleshooting.md +++ b/docs/linting/Troubleshooting.md @@ -118,7 +118,7 @@ See [#2041](https://github.com/typescript-eslint/typescript-eslint/issues/2041) ESLint core contains the rule [`no-restricted-syntax`](https://eslint.org/docs/rules/no-restricted-syntax). This generic rule allows you to specify a [selector](https://eslint.org/docs/developer-guide/selectors) for the code you want to ban, along with a custom error message. -You can use an AST visualization tool such as [TypeScript ESLint playground](https://typescript-eslint.io/play#showAST=es) > _Options_ > _AST Explorer_ on its left sidebar by selecting _ESTree_ to help in figuring out the structure of the AST that you want to ban. +You can use an AST visualization tool such as [typescript-eslint playground](https://typescript-eslint.io/play#showAST=es) > _Options_ > _AST Explorer_ on its left sidebar by selecting _ESTree_ to help in figuring out the structure of the AST that you want to ban. For example, you can ban enums (or some variation of) using one of the following configs: diff --git a/packages/ast-spec/LICENSE b/packages/ast-spec/LICENSE index 7e7370143b26..a1164108d4d6 100644 --- a/packages/ast-spec/LICENSE +++ b/packages/ast-spec/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 TypeScript ESLint and other contributors +Copyright (c) 2019 typescript-eslint and other contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/eslint-plugin-tslint/LICENSE b/packages/eslint-plugin-tslint/LICENSE index 7e7370143b26..a1164108d4d6 100644 --- a/packages/eslint-plugin-tslint/LICENSE +++ b/packages/eslint-plugin-tslint/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 TypeScript ESLint and other contributors +Copyright (c) 2019 typescript-eslint and other contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/eslint-plugin/LICENSE b/packages/eslint-plugin/LICENSE index 7e7370143b26..a1164108d4d6 100644 --- a/packages/eslint-plugin/LICENSE +++ b/packages/eslint-plugin/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 TypeScript ESLint and other contributors +Copyright (c) 2019 typescript-eslint and other contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/experimental-utils/LICENSE b/packages/experimental-utils/LICENSE index 7e7370143b26..a1164108d4d6 100644 --- a/packages/experimental-utils/LICENSE +++ b/packages/experimental-utils/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 TypeScript ESLint and other contributors +Copyright (c) 2019 typescript-eslint and other contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/parser/LICENSE b/packages/parser/LICENSE index a2d896685ac9..dc04d8c91c06 100644 --- a/packages/parser/LICENSE +++ b/packages/parser/LICENSE @@ -4,11 +4,11 @@ Copyright JS Foundation and other contributors, https://js.foundation Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. +- Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE diff --git a/packages/scope-manager/LICENSE b/packages/scope-manager/LICENSE index 7e7370143b26..a1164108d4d6 100644 --- a/packages/scope-manager/LICENSE +++ b/packages/scope-manager/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 TypeScript ESLint and other contributors +Copyright (c) 2019 typescript-eslint and other contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/type-utils/LICENSE b/packages/type-utils/LICENSE index 7641edcfd0af..dabd464af3a2 100644 --- a/packages/type-utils/LICENSE +++ b/packages/type-utils/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021 TypeScript ESLint and other contributors +Copyright (c) 2021 typescript-eslint and other contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/types/LICENSE b/packages/types/LICENSE index 7e7370143b26..a1164108d4d6 100644 --- a/packages/types/LICENSE +++ b/packages/types/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 TypeScript ESLint and other contributors +Copyright (c) 2019 typescript-eslint and other contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/typescript-estree/LICENSE b/packages/typescript-estree/LICENSE index fda3b7546aa5..f6d73403f2f0 100644 --- a/packages/typescript-estree/LICENSE +++ b/packages/typescript-estree/LICENSE @@ -8,11 +8,11 @@ Copyright JS Foundation and other contributors, https://js.foundation Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. +- Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE diff --git a/packages/typescript-estree/src/create-program/createProjectProgram.ts b/packages/typescript-estree/src/create-program/createProjectProgram.ts index 784b44b93d4d..9869a6e4e541 100644 --- a/packages/typescript-estree/src/create-program/createProjectProgram.ts +++ b/packages/typescript-estree/src/create-program/createProjectProgram.ts @@ -105,7 +105,7 @@ function createProjectProgram( `- Change ESLint's list of included files to not include this file`, `- Change ${describedSpecifiers} to include this file`, `- Create a new TSConfig that includes this file and include it in your parserOptions.project`, - `See the TypeScript ESLint docs for more info: https://typescript-eslint.io/linting/troubleshooting##i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file`, + `See the typescript-eslint docs for more info: https://typescript-eslint.io/linting/troubleshooting##i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file`, ); } diff --git a/packages/typescript-estree/tests/lib/__snapshots__/parse.test.ts.snap b/packages/typescript-estree/tests/lib/__snapshots__/parse.test.ts.snap index 108fdad11a14..290d098f5a8e 100644 --- a/packages/typescript-estree/tests/lib/__snapshots__/parse.test.ts.snap +++ b/packages/typescript-estree/tests/lib/__snapshots__/parse.test.ts.snap @@ -23,7 +23,7 @@ However, that TSConfig does not include this file. Either: - Change ESLint's list of included files to not include this file - Change that TSConfig to include this file - Create a new TSConfig that includes this file and include it in your parserOptions.project -See the TypeScript ESLint docs for more info: https://typescript-eslint.io/linting/troubleshooting##i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file" +See the typescript-eslint docs for more info: https://typescript-eslint.io/linting/troubleshooting##i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file" `; exports[`parseAndGenerateServices invalid file error messages "parserOptions.extraFileExtensions" is non-empty the extension matches the file isn't included 1`] = ` @@ -32,7 +32,7 @@ However, that TSConfig does not include this file. Either: - Change ESLint's list of included files to not include this file - Change that TSConfig to include this file - Create a new TSConfig that includes this file and include it in your parserOptions.project -See the TypeScript ESLint docs for more info: https://typescript-eslint.io/linting/troubleshooting##i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file" +See the typescript-eslint docs for more info: https://typescript-eslint.io/linting/troubleshooting##i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file" `; exports[`parseAndGenerateServices invalid file error messages project includes errors for not included files 1`] = ` @@ -41,7 +41,7 @@ However, that TSConfig does not include this file. Either: - Change ESLint's list of included files to not include this file - Change that TSConfig to include this file - Create a new TSConfig that includes this file and include it in your parserOptions.project -See the TypeScript ESLint docs for more info: https://typescript-eslint.io/linting/troubleshooting##i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file" +See the typescript-eslint docs for more info: https://typescript-eslint.io/linting/troubleshooting##i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file" `; exports[`parseAndGenerateServices invalid file error messages project includes errors for not included files 2`] = ` @@ -50,7 +50,7 @@ However, that TSConfig does not include this file. Either: - Change ESLint's list of included files to not include this file - Change that TSConfig to include this file - Create a new TSConfig that includes this file and include it in your parserOptions.project -See the TypeScript ESLint docs for more info: https://typescript-eslint.io/linting/troubleshooting##i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file" +See the typescript-eslint docs for more info: https://typescript-eslint.io/linting/troubleshooting##i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file" `; exports[`parseAndGenerateServices invalid file error messages project includes errors for not included files 3`] = ` @@ -59,7 +59,7 @@ However, that TSConfig does not include this file. Either: - Change ESLint's list of included files to not include this file - Change that TSConfig to include this file - Create a new TSConfig that includes this file and include it in your parserOptions.project -See the TypeScript ESLint docs for more info: https://typescript-eslint.io/linting/troubleshooting##i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file" +See the typescript-eslint docs for more info: https://typescript-eslint.io/linting/troubleshooting##i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file" `; exports[`parseAndGenerateServices invalid file error messages project includes errors for not included files 4`] = ` @@ -68,18 +68,18 @@ However, that TSConfig does not include this file. Either: - Change ESLint's list of included files to not include this file - Change that TSConfig to include this file - Create a new TSConfig that includes this file and include it in your parserOptions.project -See the TypeScript ESLint docs for more info: https://typescript-eslint.io/linting/troubleshooting##i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file" +See the typescript-eslint docs for more info: https://typescript-eslint.io/linting/troubleshooting##i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file" `; exports[`parseAndGenerateServices invalid project error messages throws when non of multiple projects include the file 1`] = ` -"ESLint was configured to run on \`/ts/notIncluded0j1.ts\` using \`parserOptions.project\`: +"ESLint was configured to run on \`/ts/notIncluded0j1.ts\` using \`parserOptions.project\`: - /tsconfig.json - /tsconfig.extra.json However, none of those TSConfigs include this file. Either: - Change ESLint's list of included files to not include this file - Change one of those TSConfigs to include this file - Create a new TSConfig that includes this file and include it in your parserOptions.project -See the TypeScript ESLint docs for more info: https://typescript-eslint.io/linting/troubleshooting##i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file" +See the typescript-eslint docs for more info: https://typescript-eslint.io/linting/troubleshooting##i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file" `; exports[`parseAndGenerateServices isolated parsing should parse .js file - with JSX content - parserOptions.jsx = false 1`] = ` diff --git a/packages/utils/LICENSE b/packages/utils/LICENSE index 7e7370143b26..a1164108d4d6 100644 --- a/packages/utils/LICENSE +++ b/packages/utils/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 TypeScript ESLint and other contributors +Copyright (c) 2019 typescript-eslint and other contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/visitor-keys/LICENSE b/packages/visitor-keys/LICENSE index 7e7370143b26..a1164108d4d6 100644 --- a/packages/visitor-keys/LICENSE +++ b/packages/visitor-keys/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 TypeScript ESLint and other contributors +Copyright (c) 2019 typescript-eslint and other contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/website/blog/2022-09-18-automated-rule-docs-with-docusaurus-and-remark.md b/packages/website/blog/2022-09-18-automated-rule-docs-with-docusaurus-and-remark.md index 58dd129cddf2..a1c5d205a025 100644 --- a/packages/website/blog/2022-09-18-automated-rule-docs-with-docusaurus-and-remark.md +++ b/packages/website/blog/2022-09-18-automated-rule-docs-with-docusaurus-and-remark.md @@ -2,15 +2,15 @@ authors: - image_url: https://www.joshuakgoldberg.com/img/josh.jpg name: Josh Goldberg - title: TypeScript ESLint Maintainer + title: typescript-eslint Maintainer url: https://github.com/JoshuaKGoldberg -description: How TypeScript ESLint generates much of the docs pages for each of its lint rules. +description: How typescript-eslint generates much of the docs pages for each of its lint rules. slug: automated-rule-docs-with-docusaurus-and-remark tags: [documentation, docusaurus, remark] title: Automated Rule Docs With Docusaurus and Remark --- -The TypeScript ESLint website at https://typescript-eslint.io is the canonical location for documentation on how to use ESLint on TypeScript code. +The typescript-eslint website at https://typescript-eslint.io is the canonical location for documentation on how to use ESLint on TypeScript code. The site includes a documentation page for each of the over 100 ESLint rules exposed by its ESLint plugin. Each of those rule docs pages includes a description of the rule, any options it allows, links to its source code, and other important information about its usage. @@ -87,7 +87,7 @@ The [`@typescript-eslint/no-for-in-array` rule](https://typescript-eslint.io/rul Our Remark plugin: 1. Takes in the AST and metadata of a documentation file -2. Tries to find the corresponding TypeScript ESLint rule for the file's name +2. Tries to find the corresponding typescript-eslint rule for the file's name 3. If one was found, applies a set of modifications to the AST The rest of this section of the blog post will give a high-level overview of what kinds of AST modifications take place. @@ -95,7 +95,7 @@ You can dive into [the source code of our plugin](https://github.com/typescript- ### Matching Docs to Rules -The [`@typescript-eslint/eslint-plugin` package](https://www.npmjs.com/package/@typescript-eslint/eslint-plugin) exports an object with a `rules` property containing all the TypeScript ESLint lint rules. +The [`@typescript-eslint/eslint-plugin` package](https://www.npmjs.com/package/@typescript-eslint/eslint-plugin) exports an object with a `rules` property containing all the typescript-eslint lint rules. Properties have names like `"array-type"` that map to the rule object exported by files like [`array-type.ts`](https://github.com/typescript-eslint/typescript-eslint/blob/39829c01906f326fec94e9b3a5fdb1730eb02002/packages/eslint-plugin/src/rules/array-type.ts#L86). Remark plugins are able to access the name of the file they're modifying by accessing `file.stem`, as in the following code snippet. @@ -144,7 +144,7 @@ root.children.splice( ``` :::info Historical context -Before typescript-eslint.io existed, the canonical documentation URL for TypeScript ESLint's lint rules was the GitHub link to their corresponding `.md` file. +Before typescript-eslint.io existed, the canonical documentation URL for typescript-eslint's lint rules was the GitHub link to their corresponding `.md` file. Now that we have a rich documentation site and have automated much of what used to be in those `.md` files, they're no longer a good place to look for documentation. ::: @@ -221,8 +221,8 @@ We'd like to extend thanks to [Joshua Chen](https://github.com/Josh-Cena), one o Without Joshua, this change would have taken us a great deal longer (if we'd have been able to tackle it at all). Thanks Joshua! 🤗 -## Supporting TypeScript ESLint +## Supporting typescript-eslint -If you enjoyed this blog post and/or or use TypeScript ESLint, please consider [supporting us on Open Collective](https://opencollective.com/typescript-eslint). +If you enjoyed this blog post and/or or use typescript-eslint, please consider [supporting us on Open Collective](https://opencollective.com/typescript-eslint). We're a small volunteer team and could use your support to make the ESLint experience on TypeScript great. Thanks! 💖 diff --git a/packages/website/blog/2022-12-05-asts-and-typescript-eslint.md b/packages/website/blog/2022-12-05-asts-and-typescript-eslint.md index 833ed90ee941..47cb9374c901 100644 --- a/packages/website/blog/2022-12-05-asts-and-typescript-eslint.md +++ b/packages/website/blog/2022-12-05-asts-and-typescript-eslint.md @@ -2,7 +2,7 @@ authors: - image_url: https://www.joshuakgoldberg.com/img/josh.jpg name: Josh Goldberg - title: TypeScript ESLint Maintainer + title: typescript-eslint Maintainer url: https://github.com/JoshuaKGoldberg description: Describing what an AST (Abstract Syntax Tree) is and why it's useful for ESLint and TypeScript tooling. slug: asts-and-typescript-eslint @@ -92,7 +92,7 @@ We commonly refer to the ESTree format that also includes TypeScript-specific sy ### AST Playground -The [TypeScript ESLint playground](https://typescript-eslint.io/play#showAST=es) contains an AST explorer that generates an interactive AST for any code entered into the playground. +The [typescript-eslint playground](https://typescript-eslint.io/play#showAST=es) contains an AST explorer that generates an interactive AST for any code entered into the playground. You can activate it under _Options_ > _AST Explorer_ on its left sidebar by selecting the value of _AST Viewer_. ## Further Resources @@ -116,7 +116,7 @@ Putting together all the terms introduces in this article: ### TypeScript Lint Rules and ASTs Interested in how these ASTs work with ESLint rules? -We collaborated with our friends at Sourcegraph on a [Tour de Source on TypeScript ESLint](https://sourcegraph.com/notebooks/Tm90ZWJvb2s6MTA2OA==). +We collaborated with our friends at Sourcegraph on a [Tour de Source on typescript-eslint](https://sourcegraph.com/notebooks/Tm90ZWJvb2s6MTA2OA==). Read on to learn how ESLint rules use ASTs to analyze code files and, thanks to `@typescript-eslint/parser`, call TypeScript's type checking APIs to analyze code. [astexplorer.net]: https://astexplorer.net diff --git a/packages/website/docusaurusConfig.ts b/packages/website/docusaurusConfig.ts index 2a88027f1168..bfa844fc2f0b 100644 --- a/packages/website/docusaurusConfig.ts +++ b/packages/website/docusaurusConfig.ts @@ -66,7 +66,7 @@ const themeConfig: ThemeCommonConfig & AlgoliaThemeConfig = { ], image: 'img/logo-twitter-card.png', navbar: { - title: 'TypeScript ESLint', + title: 'typescript-eslint', logo: { alt: '', height: '32px', @@ -142,7 +142,7 @@ const themeConfig: ThemeCommonConfig & AlgoliaThemeConfig = { ], }, ], - copyright: `Copyright © ${new Date().getFullYear()} TypeScript ESLint, Inc. Built with Docusaurus.`, + copyright: `Copyright © ${new Date().getFullYear()} typescript-eslint, Inc. Built with Docusaurus.`, }, prism: { theme: { @@ -232,7 +232,7 @@ const pluginPwaOptions: PluginPwaOptions = { }; const config: Config = { - title: 'TypeScript ESLint', + title: 'typescript-eslint', tagline: 'The tooling that enables ESLint and Prettier to support TypeScript.', url: 'https://typescript-eslint.io', diff --git a/packages/website/src/components/FinancialContributors/index.tsx b/packages/website/src/components/FinancialContributors/index.tsx index f952a5a42354..e0f83e34293b 100644 --- a/packages/website/src/components/FinancialContributors/index.tsx +++ b/packages/website/src/components/FinancialContributors/index.tsx @@ -10,8 +10,8 @@ export function FinancialContributors(): JSX.Element { return ( <>

- The TypeScript ESLint project would not be possible without the generous - support of our financial contributors. + The typescript-estlint project would not be possible without the + generous support of our financial contributors.

Date: Sat, 3 Dec 2022 13:56:59 +0400 Subject: [PATCH 09/11] chore: update safari pinned tab icon --- .../static/img/favicon/safari-pinned-tab.svg | 40 ++++++++----------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/packages/website/static/img/favicon/safari-pinned-tab.svg b/packages/website/static/img/favicon/safari-pinned-tab.svg index 6f00583afab6..0d301134d71e 100644 --- a/packages/website/static/img/favicon/safari-pinned-tab.svg +++ b/packages/website/static/img/favicon/safari-pinned-tab.svg @@ -2,33 +2,27 @@ Created by potrace 1.14, written by Peter Selinger 2001-2017 - - + + + From c62524d8696af16af4b56f5a705ffe83396e9237 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Sun, 4 Dec 2022 00:41:39 -0500 Subject: [PATCH 10/11] Fix snapshot --- .../tests/lib/__snapshots__/parse.test.ts.snap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/typescript-estree/tests/lib/__snapshots__/parse.test.ts.snap b/packages/typescript-estree/tests/lib/__snapshots__/parse.test.ts.snap index 290d098f5a8e..369094739305 100644 --- a/packages/typescript-estree/tests/lib/__snapshots__/parse.test.ts.snap +++ b/packages/typescript-estree/tests/lib/__snapshots__/parse.test.ts.snap @@ -72,7 +72,7 @@ See the typescript-eslint docs for more info: https://typescript-eslint.io/linti `; exports[`parseAndGenerateServices invalid project error messages throws when non of multiple projects include the file 1`] = ` -"ESLint was configured to run on \`/ts/notIncluded0j1.ts\` using \`parserOptions.project\`: +"ESLint was configured to run on \`/ts/notIncluded0j1.ts\` using \`parserOptions.project\`: - /tsconfig.json - /tsconfig.extra.json However, none of those TSConfigs include this file. Either: From 4141f71d649d7234e54d04780da370f9a147226b Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Thu, 8 Dec 2022 12:30:50 -0500 Subject: [PATCH 11/11] bikeshed: ts-eslint --- docs/maintenance/BRANDING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/maintenance/BRANDING.md b/docs/maintenance/BRANDING.md index b4e9857b5aea..25c08b216e65 100644 --- a/docs/maintenance/BRANDING.md +++ b/docs/maintenance/BRANDING.md @@ -10,11 +10,11 @@ It's fine if you don't always adhere to it. ### Name -Our project name is **_"typescript-eslint"_**. -We sometimes refer to it as _"tseslint"_ for short. - +Our project name is **_"typescript-eslint"_**. +We sometimes refer to it as _"ts-eslint"_ for short. + _"typescript-eslint"_ is preferred over _"TypeScript ESLint"_ or _"TypeScript-ESLint"_ because ESLint and TypeScript are written in abbreviated Pascal Case. Combining lowercase with a dash helps differentiate us.