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 #6614

Merged
merged 2 commits into from
Jun 15, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/typescript-eslint-recommended.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@remix-run/eslint-config": minor
---

Update `@remix-run/eslint-config` to inherit rules from `@typescript-eslint/recommended`
2 changes: 1 addition & 1 deletion packages/remix-dev/__tests__/cli-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,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
3 changes: 1 addition & 2 deletions packages/remix-dev/compiler/server/plugins/bareImports.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import path from "path";
import path, { isAbsolute, relative } from "path";
import fs from "fs";
import { builtinModules } from "module";
import { isAbsolute, relative } from "path";
import type { Plugin } from "esbuild";

import {
Expand Down
1 change: 0 additions & 1 deletion packages/remix-dev/server-build.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
/* eslint-disable no-unreachable */
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
Original file line number Diff line number Diff line change
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,
},
warnOnUnsupportedTypeScriptVersion: true,
},
plugins: ["@typescript-eslint"],
rules: {
Expand Down
4 changes: 4 additions & 0 deletions packages/remix-eslint-config/internal.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ module.exports = {
// all ```ts & ```tsx code blocks in .md files
files: ["**/*.md/*.ts?(x)"],
rules: {
"import/no-duplicates": "off",
"@typescript-eslint/no-unused-expressions": OFF,
"@typescript-eslint/no-unused-vars": OFF,
},
Expand All @@ -84,6 +85,9 @@ module.exports = {
env: {
"jest/globals": false,
},
rules: {
"import/no-duplicates": "off",
},
},
],
};
1 change: 0 additions & 1 deletion packages/remix-eslint-config/rules/core.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ module.exports = {
"no-duplicate-case": WARN,
"no-empty-character-class": WARN,
"no-empty-pattern": WARN,
"no-duplicate-imports": WARN,
"no-empty": [WARN, { allowEmptyCatch: true }],
"no-eval": ERROR,
"no-ex-assign": WARN,
Expand Down
1 change: 1 addition & 0 deletions packages/remix-eslint-config/rules/import.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ const ERROR = 2;
module.exports = {
"import/first": ERROR,
"import/no-amd": ERROR,
"import/no-duplicates": ERROR,
"import/no-webpack-loader-syntax": ERROR,
};
59 changes: 29 additions & 30 deletions packages/remix-eslint-config/rules/typescript.js
Original file line number Diff line number Diff line change
@@ -1,54 +1,53 @@
const OFF = 0;
const WARN = 1;
const ERROR = 2;

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,

"no-array-constructor": OFF,
"@typescript-eslint/no-array-constructor": WARN,

// 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,
// 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",

"no-redeclare": OFF,
"@typescript-eslint/no-redeclare": ERROR,
"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",
{
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,

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

// These stylistic rules don't match our preferences
"no-use-before-define": "off",
"prefer-const": "off",

// These rules should eventually come from @typescript-eslint/stylistic
// in typescript-eslint@6
"@typescript-eslint/consistent-type-assertions": "warn",
"@typescript-eslint/consistent-type-imports": "warn",
};
4 changes: 0 additions & 4 deletions packages/remix-netlify/__tests__/server-test.ts
Original file line number Diff line number Diff line change
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
1 change: 0 additions & 1 deletion packages/remix-node/__tests__/fetch-test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { PassThrough } from "stream";
import { ReadableStream } from "@remix-run/web-stream";

import { Request } from "../fetch";
Expand Down
3 changes: 1 addition & 2 deletions packages/remix-react/__tests__/deferred-scripts-test.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import * as React from "react";
import { createMemoryRouter } from "react-router-dom";
import { defer } from "react-router-dom";
import { createMemoryRouter, defer } from "react-router-dom";
import { StaticRouterProvider } from "react-router-dom/server";
import { render } from "@testing-library/react";
import type { EntryContext } from "@remix-run/server-runtime";
Expand Down
3 changes: 1 addition & 2 deletions packages/remix-server-runtime/__tests__/serialize-test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import type { SerializeFrom } from "../index";
import { defer } from "../index";
import { json } from "../index";
import { defer, json } from "../index";
import type { IsNever } from "./utils";
import { isEqual } from "./utils";

Expand Down
7 changes: 2 additions & 5 deletions packages/remix-server-runtime/responses.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,14 @@ export type DeferFunction = <Data extends Record<string, unknown>>(
init?: number | ResponseInit
) => TypedDeferredData<Data>;

export type JsonFunction = <Data extends unknown>(
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