murashit_codex-panel/eslint.config.mjs
2026-05-23 07:10:53 +09:00

94 lines
2.6 KiB
JavaScript

import js from "@eslint/js";
import { defineConfig } from "eslint/config";
import eslintConfigPrettier from "eslint-config-prettier/flat";
import obsidianmd from "eslint-plugin-obsidianmd";
import tseslint from "typescript-eslint";
const typeScriptFiles = ["src/**/*.ts", "tests/**/*.ts"];
const nodeJavaScriptFiles = ["*.mjs", "scripts/**/*.mjs"];
const typeScriptConfigFiles = ["*.config.ts"];
const lintedTypeScriptFiles = [...typeScriptFiles, ...typeScriptConfigFiles];
export default defineConfig([
{
ignores: ["main.js", "node_modules/**", "src/generated/**"],
},
js.configs.recommended,
...tseslint.configs.strictTypeChecked.map((config) => ({
...config,
files: lintedTypeScriptFiles,
})),
...tseslint.configs.stylisticTypeChecked.map((config) => ({
...config,
files: lintedTypeScriptFiles,
})),
...obsidianmd.configs.recommended.map((config) => ({
...config,
basePath: "src",
})),
{
files: lintedTypeScriptFiles,
languageOptions: {
ecmaVersion: 2022,
sourceType: "module",
parserOptions: {
projectService: true,
tsconfigRootDir: import.meta.dirname,
},
globals: {
AbortSignal: "readonly",
HTMLElement: "readonly",
HTMLTextAreaElement: "readonly",
KeyboardEvent: "readonly",
NodeJS: "readonly",
console: "readonly",
document: "readonly",
requestAnimationFrame: "readonly",
},
},
rules: {
"@typescript-eslint/consistent-type-imports": "error",
"@typescript-eslint/no-explicit-any": "error",
"@typescript-eslint/no-floating-promises": "error",
"@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_" }],
},
},
{
files: nodeJavaScriptFiles,
languageOptions: {
ecmaVersion: 2022,
sourceType: "module",
globals: {
URL: "readonly",
console: "readonly",
process: "readonly",
},
},
},
{
files: ["tests/**/*.ts"],
rules: {
"@typescript-eslint/no-unsafe-assignment": "off",
"@typescript-eslint/no-unsafe-call": "off",
"@typescript-eslint/no-unsafe-member-access": "off",
"@typescript-eslint/no-unnecessary-type-assertion": "off",
"@typescript-eslint/require-await": "off",
},
},
{
files: ["src/**/*.ts", "src/**/*.tsx"],
plugins: {
obsidianmd,
},
rules: {
"obsidianmd/ui/sentence-case": [
"error",
{
acronyms: ["MCP"],
brands: ["Codex", "Codex Panel", "Obsidian"],
},
],
},
},
eslintConfigPrettier,
]);