Skip to content

Commit

Permalink
feat: more work on the configs
Browse files Browse the repository at this point in the history
Signed-off-by: prisis <[email protected]>
  • Loading branch information
prisis committed Jan 6, 2025
1 parent 1c758b6 commit 85e6f05
Show file tree
Hide file tree
Showing 16 changed files with 52 additions and 66 deletions.
21 changes: 13 additions & 8 deletions packages/eslint-config/scripts/global-vitest.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
import { createRequire } from "node:module";
import { writeFileSync } from "node:fs";
import { fileURLToPath } from "node:url";
import { createRequire } from "node:module";
import { dirname, join } from "node:path";
import { fileURLToPath } from "node:url";

// eslint-disable-next-line import/no-extraneous-dependencies
import ts from "typescript";

const __dirname = dirname(fileURLToPath(import.meta.url));

const e = (msg, fail = true) => {
const e = (message, fail = true) => {
// eslint-disable-next-line no-console
console.log(msg);
console.log(message);

process.exit(fail ? 1 : 0);
};

Expand All @@ -25,6 +28,7 @@ function extract(file) {
if (ts.isVariableDeclarationList(node)) {
for (const declaration of node.declarations) {
const name = ts.getNameOfDeclaration(declaration);

if (name) {
globals.push(name.escapedText);
}
Expand All @@ -40,10 +44,10 @@ function extract(file) {
}

const require = createRequire(import.meta.url);
const pkgPath = require.resolve("vitest/package.json");
const packagePath = require.resolve("vitest/package.json");
const {
default: { version: vitestVersion },
} = await import(pkgPath, {
} = await import(packagePath, {
with: { type: "json" },
});

Expand All @@ -56,9 +60,10 @@ writeFileSync(join(__dirname, "..", "VERSION"), vitestVersion);
const globalsPath = require.resolve("vitest/globals.d.ts");
const globalsArray = extract(globalsPath);
const globals = {};
if (!globalsArray.length) e("No globals! Check extractor implementation.");

globalsArray.forEach((globalName) => (globals[globalName] = true));
if (globalsArray.length === 0) e("No globals! Check extractor implementation.");

globalsArray.forEach(globalName => (globals[globalName] = true));
const moduleContent = `export default /** @type {const} */ (${JSON.stringify(globals, undefined, 2)});`;

writeFileSync(join(__dirname, "..", "index.mjs"), moduleContent);
Expand Down
4 changes: 0 additions & 4 deletions packages/eslint-config/scripts/typegen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ import perfectionist from "../src/config/plugins/perfectionist";
import playwright from "../src/config/plugins/playwright";
import promise from "../src/config/plugins/promise";
import react from "../src/config/plugins/react";
import reactRefresh from "../src/config/plugins/react-refresh";
import regexp from "../src/config/plugins/regexp";
import simpleImportSort from "../src/config/plugins/simple-import-sort";
import sonarjs from "../src/config/plugins/sonarjs";
Expand Down Expand Up @@ -104,9 +103,6 @@ const configs = await combine(
react({
packageJson: fakePackageJson,
}),
reactRefresh({
hasVite: false,
}),
node({
packageJson: fakePackageJson,
}),
Expand Down
4 changes: 2 additions & 2 deletions packages/eslint-config/src/config/es6.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import type { Linter } from "eslint";
import type { OptionsFiles } from "../types";
import { createConfig, getFilesGlobs } from "../utils/create-config";

export const eS6Rules: Partial<Linter.RulesRecord> = {
export const es6Rules: Partial<Linter.RulesRecord> = {
// enforces no braces where they can be omitted
// https://eslint.org/docs/rules/arrow-body-style
"arrow-body-style": [
Expand Down Expand Up @@ -352,7 +352,7 @@ export default createConfig<OptionsFiles>("all", async (config, oFiles) => {
ecmaVersion: 6,
sourceType: "module",
},
rules: eS6Rules,
rules: es6Rules,
},
// The following rules are enabled in config, but are already checked (more thoroughly) by the TypeScript compiler
// Some rules also fail in TypeScript files, for example: https://github.com/typescript-eslint/typescript-eslint/issues/662#issuecomment-507081586
Expand Down
14 changes: 7 additions & 7 deletions packages/eslint-config/src/config/plugins/formatters.ts
Original file line number Diff line number Diff line change
Expand Up @@ -247,13 +247,13 @@ const formatters = async (options: OptionsFormatters, stylistic: StylisticConfig
files: [...getFilesGlobs("astro"), ...getFilesGlobs("astro_ts")],
name: "anolilab/formatter/astro/disables",
rules: {
"style/arrow-parens": "off",
"style/block-spacing": "off",
"style/comma-dangle": "off",
"style/indent": "off",
"style/no-multi-spaces": "off",
"style/quotes": "off",
"style/semi": "off",
"@stylistic/arrow-parens": "off",
"@stylistic/block-spacing": "off",
"@stylistic/comma-dangle": "off",
"@stylistic/indent": "off",
"@stylistic/no-multi-spaces": "off",
"@stylistic/quotes": "off",
"@stylistic/semi": "off",
},
});
}
Expand Down
34 changes: 17 additions & 17 deletions packages/eslint-config/src/config/plugins/markdown.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { mergeProcessors, processorPassThrough } from "eslint-merge-processors";

import type { OptionsComponentExts as OptionsComponentExtensions, OptionsFiles, OptionsOverrides } from "../../types";
import type { OptionsComponentExtensions, OptionsFiles, OptionsOverrides } from "../../types";
import { createConfig, getFilesGlobs } from "../../utils/create-config";
import interopDefault from "../../utils/interop-default";
import parserPlain from "../../utils/parser-plain";
Expand Down Expand Up @@ -32,9 +32,7 @@ export default createConfig<OptionsComponentExtensions & OptionsFiles & OptionsO
parser: parserPlain,
},
name: "anolilab/markdown/parser",
rules: {
...markdown.configs.recommended.rules,
},
rules: markdown.configs.recommended[0].rules,
},
{
files: ["**/*.md/**/*.?([cm])[jt]s?(x)", ...componentExtensions.map(extension => `**/*.md/**/*.${extension}`)],
Expand All @@ -47,6 +45,19 @@ export default createConfig<OptionsComponentExtensions & OptionsFiles & OptionsO
},
name: "anolilab/markdown/disables",
rules: {
"@stylistic/comma-dangle": "off",
"@stylistic/eol-last": "off",
"@stylistic/prefer-global/process": "off",

"@typescript-eslint/consistent-type-imports": "off",
"@typescript-eslint/explicit-function-return-type": "off",
"@typescript-eslint/no-namespace": "off",
"@typescript-eslint/no-redeclare": "off",
"@typescript-eslint/no-require-imports": "off",
"@typescript-eslint/no-unused-expressions": "off",
"@typescript-eslint/no-unused-vars": "off",
"@typescript-eslint/no-use-before-define": "off",

"antfu/no-top-level-await": "off",

"import/newline-after-import": "off",
Expand All @@ -57,22 +68,11 @@ export default createConfig<OptionsComponentExtensions & OptionsFiles & OptionsO
"no-lone-blocks": "off",
"no-restricted-syntax": "off",
"no-undef": "off",

"no-unused-expressions": "off",
"no-unused-labels": "off",

"no-unused-labels": "off",
"no-unused-vars": "off",
"node/prefer-global/process": "off",
"style/comma-dangle": "off",

"style/eol-last": "off",
"typescript/consistent-type-imports": "off",
"typescript/explicit-function-return-type": "off",
"typescript/no-namespace": "off",
"typescript/no-redeclare": "off",
"typescript/no-require-imports": "off",
"typescript/no-unused-expressions": "off",
"typescript/no-unused-vars": "off",
"typescript/no-use-before-define": "off",

"unicode-bom": "off",
"unused-imports/no-unused-imports": "off",
Expand Down
12 changes: 0 additions & 12 deletions packages/eslint-config/src/config/plugins/react-refresh.ts

This file was deleted.

1 change: 1 addition & 0 deletions packages/eslint-config/src/config/plugins/regexp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export default createConfig<OptionsFiles & OptionsOverrides & OptionsRegExp>("al
};

if (level === "warn") {
// eslint-disable-next-line no-restricted-syntax
for (const key in rules) {
if (rules[key] === "error") {
rules[key] = "warn";
Expand Down
1 change: 1 addition & 0 deletions packages/eslint-config/src/config/plugins/stylistic.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ const stylistic = async (options: OptionsHasPrettier & OptionsOverrides & Stylis
quotes,
semi,
} = {
// eslint-disable-next-line @typescript-eslint/no-use-before-define
...StylisticConfigDefaults,
...options,
};
Expand Down
3 changes: 1 addition & 2 deletions packages/eslint-config/src/config/plugins/toml.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@ export default createConfig<OptionsFiles & OptionsOverrides & OptionsStylistic>(
toml: pluginToml,
},
rules: {
// @TODO: move this to the correct place
"style/spaced-comment": "off",
...stylistic ? { "@stylistic/spaced-comment": "off" } : {},

"toml/comma-style": "error",
"toml/keys-order": "error",
Expand Down
7 changes: 3 additions & 4 deletions packages/eslint-config/src/config/plugins/typescript.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import type {
import { createConfig, getFilesGlobs } from "../../utils/create-config";
import interopDefault from "../../utils/interop-default";
import { bestPracticesRules } from "../best-practices";
import { eS6Rules } from "../es6";
import { es6Rules } from "../es6";
import { styleRules } from "../style";
import { variablesRules } from "../variables";

Expand All @@ -34,7 +34,6 @@ export default createConfig<
stylistic = true,
} = config;

// eslint-disable-next-line compat/compat
const [pluginTs, parserTs, tseslint, noForOfArrayPlugin] = await Promise.all([
interopDefault(import("@typescript-eslint/eslint-plugin")),
interopDefault(import("@typescript-eslint/parser")),
Expand Down Expand Up @@ -254,7 +253,7 @@ export default createConfig<

// Replace 'no-dupe-class-members' rule with '@typescript-eslint' version
// https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-dupe-class-members.md
"@typescript-eslint/no-dupe-class-members": eS6Rules["no-dupe-class-members"],
"@typescript-eslint/no-dupe-class-members": es6Rules["no-dupe-class-members"],

// Disallow duplicate enum member values.
// https://github.com/typescript-eslint/typescript-eslint/tree/main/packages/eslint-plugin/docs/rules/no-duplicate-enum-values.md
Expand Down Expand Up @@ -345,7 +344,7 @@ export default createConfig<

// Replace 'no-useless-constructor' rule with '@typescript-eslint' version
// https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-useless-constructor.md
"@typescript-eslint/no-useless-constructor": eS6Rules["no-useless-constructor"],
"@typescript-eslint/no-useless-constructor": es6Rules["no-useless-constructor"],

// Disallow empty exports that don't change anything in a module file.
// https://github.com/typescript-eslint/typescript-eslint/tree/main/packages/eslint-plugin/docs/rules/no-useless-empty-export.md
Expand Down
2 changes: 1 addition & 1 deletion packages/eslint-config/src/config/plugins/yml.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export default createConfig<OptionsFiles & OptionsHasPrettier & OptionsOverrides
yaml: pluginYaml,
},
rules: {
"style/spaced-comment": "off",
"@stylistic/spaced-comment": "off",

"yaml/block-mapping": "error",
"yaml/block-sequence": "error",
Expand Down
4 changes: 0 additions & 4 deletions packages/eslint-config/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ import perfectionist from "./config/plugins/perfectionist";
import playwright from "./config/plugins/playwright";
import promise from "./config/plugins/promise";
import react from "./config/plugins/react";
import reactRefresh from "./config/plugins/react-refresh";
import regexp from "./config/plugins/regexp";
import simpleImportSort from "./config/plugins/simple-import-sort";
import sonarjs from "./config/plugins/sonarjs";
Expand Down Expand Up @@ -828,9 +827,6 @@ export const createConfig = async (
packageJson,
tsconfigPath,
}),
reactRefresh({
hasVite: hasPackageJsonAnyDependency(packageJson, ["vite"]),
}),
);
}

Expand Down
1 change: 0 additions & 1 deletion packages/eslint-config/src/utils/combine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import type { Awaitable, TypedFlatConfigItem } from "../types";
* Combine array and non-array configs into a single array.
*/
const combine = async (...configs: Awaitable<TypedFlatConfigItem | TypedFlatConfigItem[]>[]): Promise<TypedFlatConfigItem[]> => {
// eslint-disable-next-line compat/compat
const resolved = await Promise.all(configs);

return resolved.flat();
Expand Down
4 changes: 2 additions & 2 deletions packages/eslint-config/src/utils/is-in-editor.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import isInGitHooksOrLintStaged from "./is-in-git-hooks-or-lint-staged";

const isInEditorEnvironment = (): boolean => {
if (process.env.CI) {
if (process.env["CI"]) {
return false;
}

if (isInGitHooksOrLintStaged()) {
return false;
}

return !!(process.env.VSCODE_PID ?? process.env.VSCODE_CWD ?? process.env.JETBRAINS_IDE ?? process.env.VIM ?? process.env.NVIM);
return !!(process.env["VSCODE_PID"] ?? process.env["VSCODE_CWD"] ?? process.env["JETBRAINS_IDE"] ?? process.env["VIM"] ?? process.env["NVIM"]);
};

export default isInEditorEnvironment;
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const isInGitHooksOrLintStaged = (): boolean => {
return !!(false || process.env.GIT_PARAMS || process.env.VSCODE_GIT_COMMAND || process.env.npm_lifecycle_script?.startsWith("lint-staged"));
return !!(process.env["GIT_PARAMS"] || process.env["VSCODE_GIT_COMMAND"] || process.env["npm_lifecycle_script"]?.startsWith("lint-staged"));
};

export default isInGitHooksOrLintStaged;
4 changes: 3 additions & 1 deletion packages/eslint-config/src/utils/parser-plain.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
const parserPlain = {
import type { Linter } from "eslint";

const parserPlain: Linter.Parser = {
meta: {
name: "parser-plain",
},
Expand Down

0 comments on commit 85e6f05

Please sign in to comment.