Files
zulip-desktop/xo.config.ts
Anders Kaseorg b5665abb3e Upgrade dependencies, including Electron 37.2.5.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2025-08-05 00:48:30 -07:00

175 lines
4.4 KiB
TypeScript

import type {FlatXoConfig} from "xo";
const restrictedMainImports = [
{
name: "@sentry/electron/main",
message: "Cannot use main-only APIs here.",
},
{
name: "electron/main",
message: "Cannot use main-only APIs here.",
allowTypeImports: true, // https://github.com/zulip/zulip-desktop/issues/915
},
{
name: "electron-log/main",
message: "Cannot use main-only APIs here.",
},
];
const restrictedRendererImports = [
{
name: "@sentry/electron/renderer",
message: "Cannot use renderer-only APIs here.",
},
{
name: "electron/renderer",
message: "Cannot use renderer-only APIs here.",
},
{
name: "electron-log/renderer",
message: "Cannot use renderer-only APIs here.",
},
];
const xoConfig: FlatXoConfig = [
{
prettier: true,
space: true,
settings: {
"import-x/resolver": "typescript",
n: {
resolvePaths: [import.meta.dirname],
typescriptExtensionMap: [],
},
},
rules: {
"@typescript-eslint/consistent-type-imports": [
"error",
{disallowTypeAnnotations: false},
],
"@typescript-eslint/no-dynamic-delete": "off",
"@typescript-eslint/no-restricted-types": "off",
"@typescript-eslint/no-unused-vars": [
"error",
{argsIgnorePattern: "^_", caughtErrors: "all"},
],
"@typescript-eslint/switch-exhaustiveness-check": [
"error",
{
considerDefaultExhaustiveForUnions: true,
requireDefaultForNonUnion: true,
},
],
"arrow-body-style": "error",
"import-x/no-extraneous-dependencies": [
"error",
{includeTypes: true, packageDir: import.meta.dirname},
],
"import-x/no-restricted-paths": [
"error",
{
zones: [
{
target: "./app/common",
from: "./app",
except: ["./common"],
},
{
target: "./app/main",
from: "./app",
except: ["./common", "./main"],
},
{
target: "./app/renderer",
from: "./app",
except: ["./common", "./renderer", "./resources"],
},
],
},
],
"import-x/order": [
"error",
{alphabetize: {order: "asc"}, "newlines-between": "always"},
],
"import-x/unambiguous": "error",
"no-restricted-imports": [
"error",
{
paths: [
{
name: "@sentry/electron",
message:
"Use @sentry/electron/main, @sentry/electron/renderer, or @sentry/core.",
},
{
name: "electron",
message:
"Use electron/main, electron/renderer, or electron/common.",
},
{
name: "electron/main",
importNames: ["ipcMain"],
message: "Use typed-ipc-main.",
},
{
name: "electron/renderer",
importNames: ["ipcRenderer"],
message: "Use typed-ipc-renderer.",
},
{
name: "electron-log",
message: "Use electron-log/main or electron-log/renderer.",
},
],
},
],
"no-warning-comments": "off",
"sort-imports": ["error", {ignoreDeclarationSort: true}],
strict: "error",
"unicorn/no-await-expression-member": "off",
"unicorn/prefer-module": "off",
"unicorn/prefer-top-level-await": "off",
},
},
{
files: ["**/*.d.ts"],
rules: {
"import-x/unambiguous": "off",
},
},
{
files: ["app/common/**"],
rules: {
"@typescript-eslint/no-restricted-imports": [
"error",
{paths: [...restrictedMainImports, ...restrictedRendererImports]},
],
},
},
{
files: ["app/main/**"],
rules: {
"@typescript-eslint/no-restricted-imports": [
"error",
{paths: restrictedRendererImports},
],
},
},
{
files: ["app/renderer/**"],
rules: {
"@typescript-eslint/no-restricted-imports": [
"error",
{paths: restrictedMainImports},
],
},
},
{
files: ["tests/**"],
rules: {
"n/no-extraneous-import": "off", // https://github.com/eslint-community/eslint-plugin-n/issues/209
},
},
];
export default xoConfig;