Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(remix-eslint-config): extend from typescript-eslint/recommended #6248

Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 0 additions & 4 deletions packages/remix-architect/__tests__/server-test.ts
Expand Up @@ -3,10 +3,6 @@ import path from "path";
import lambdaTester from "lambda-tester";
import type { APIGatewayProxyEventV2 } from "aws-lambda";
import {
// This has been added as a global in node 15+, but we expose it here while we
// support Node 14
// eslint-disable-next-line @typescript-eslint/no-unused-vars
AbortController,
brophdawg11 marked this conversation as resolved.
Show resolved Hide resolved
createRequestHandler as createRemixRequestHandler,
Response as NodeResponse,
} from "@remix-run/node";
Expand Down
2 changes: 1 addition & 1 deletion packages/remix-dev/__tests__/cli-test.ts
Expand Up @@ -280,7 +280,7 @@ function defer() {
async function interactWithShell(
proc: childProcess.ChildProcessWithoutNullStreams,
qAndA: Array<
| { question: RegExp; type: Array<String>; answer?: never }
| { question: RegExp; type: Array<string>; answer?: never }
| { question: RegExp; answer: RegExp; type?: never }
>
) {
Expand Down
1 change: 0 additions & 1 deletion packages/remix-dev/server-build.ts
@@ -1,4 +1,3 @@
/* eslint-disable no-unreachable */
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This rule is explicitly turned off in typescript-eslint configs because it's covered by TypeScript.

import type { ServerBuild } from "@remix-run/server-runtime";

throw new Error(
Expand Down
9 changes: 4 additions & 5 deletions packages/remix-eslint-config/index.js
Expand Up @@ -62,15 +62,14 @@ const config = {
overrides: [
{
files: ["**/*.ts?(x)"],
extends: ["plugin:import/typescript"],
extends: [
"plugin:import/typescript",
"plugin:@typescript-eslint/recommended",
],
parser: "@typescript-eslint/parser",
parserOptions: {
sourceType: "module",
ecmaVersion: 2019,
ecmaFeatures: {
jsx: true,
},
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ecmaFeatures.jsx is enabled by default for .tsx files.

warnOnUnsupportedTypeScriptVersion: true,
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warnOnUnsupportedTypeScriptVersion is enabled by default: https://typescript-eslint.io/architecture/parser/#warnonunsupportedtypescriptversion

},
plugins: ["@typescript-eslint"],
rules: {
Expand Down
55 changes: 25 additions & 30 deletions packages/remix-eslint-config/rules/typescript.js
@@ -1,54 +1,49 @@
const OFF = 0;
const WARN = 1;
const ERROR = 2;
brophdawg11 marked this conversation as resolved.
Show resolved Hide resolved

module.exports = {
"no-dupe-class-members": OFF,
"no-undef": OFF,

// Add TypeScript specific rules (and turn off ESLint equivalents)
"@typescript-eslint/consistent-type-assertions": WARN,
"@typescript-eslint/consistent-type-imports": WARN,
brophdawg11 marked this conversation as resolved.
Show resolved Hide resolved

"no-array-constructor": OFF,
"@typescript-eslint/no-array-constructor": WARN,
// TODO: These rules might be nice to enable... we should investigate eventually!
"@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/ban-types": "off",
"@typescript-eslint/no-empty-function": "off",
"@typescript-eslint/no-empty-interface": "off",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-inferrable-types": "off",
"@typescript-eslint/no-namespace": "off",
"@typescript-eslint/no-non-null-assertion": "off",
"@typescript-eslint/no-var-requires": "off",
"no-var": "off",
"prefer-rest-params": "off",

// There is a bug w/ @typescript-eslint/no-duplicate-imports triggered
// by multiple imports inside of module declarations. We should reenable
// this rule when the bug is fixed.
// https://github.com/typescript-eslint/typescript-eslint/issues/3071
"no-duplicate-imports": OFF,
// "@typescript-eslint/no-duplicate-imports": WARN,
brophdawg11 marked this conversation as resolved.
Show resolved Hide resolved

"no-redeclare": OFF,
"@typescript-eslint/no-redeclare": ERROR,
brophdawg11 marked this conversation as resolved.
Show resolved Hide resolved
"no-use-before-define": OFF,
// These rules are nice and we want to configure over the defaults
"@typescript-eslint/no-use-before-define": [
WARN,
"error",
brophdawg11 marked this conversation as resolved.
Show resolved Hide resolved
{
functions: false,
classes: false,
variables: false,
typedefs: false,
},
],
"no-unused-expressions": OFF,
"@typescript-eslint/no-unused-expressions": [
WARN,
"error",
{
allowShortCircuit: true,
allowTernary: true,
allowTaggedTemplates: true,
},
],
"no-unused-vars": OFF,
"@typescript-eslint/no-unused-vars": [
WARN,
"error",
{
args: "none",
ignoreRestSiblings: true,
},
],
"no-useless-constructor": OFF,
"@typescript-eslint/no-useless-constructor": WARN,
brophdawg11 marked this conversation as resolved.
Show resolved Hide resolved

// These rules are turned on in the core rules but aren't needed for TypeScript code
"no-dupe-class-members": "off",
"no-undef": "off",
"no-duplicate-imports": "off",

// These stylistic rules don't match our preferences
"no-use-before-define": "off",
"prefer-const": "off",
};
4 changes: 0 additions & 4 deletions packages/remix-netlify/__tests__/server-test.ts
Expand Up @@ -2,10 +2,6 @@ import fsp from "fs/promises";
import path from "path";
import lambdaTester from "lambda-tester";
import {
// This has been added as a global in node 15+, but we expose it here while we
// support Node 14
// eslint-disable-next-line @typescript-eslint/no-unused-vars
AbortController,
createRequestHandler as createRemixRequestHandler,
Response as NodeResponse,
} from "@remix-run/node";
Expand Down
7 changes: 2 additions & 5 deletions packages/remix-server-runtime/responses.ts
Expand Up @@ -21,17 +21,14 @@ export type DeferFunction = <Data extends Record<string, unknown>>(
init?: number | ResponseInit
) => TypedDeferredData<Data>;

export type JsonFunction = <Data extends unknown>(
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://typescript-eslint.io/rules/no-unnecessary-type-constraint - extends unknown is redundant for these type parameters.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The docs are talking about any only, but this had unknown
Does the same apply?
If so, I guess it would be a good idea to update the docs?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great point 😄 thanks! Filed typescript-eslint/typescript-eslint#6973.

export type JsonFunction = <Data>(
data: Data,
init?: number | ResponseInit
) => TypedResponse<Data>;

// must be a type since this is a subtype of response
// interfaces must conform to the types they extend
export type TypedResponse<T extends unknown = unknown> = Omit<
Response,
"json"
> & {
export type TypedResponse<T = unknown> = Omit<Response, "json"> & {
json(): Promise<T>;
};

Expand Down