xo: Move configuration to xo.config.cjs.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg
2025-06-20 13:40:22 -07:00
parent cf5a691a36
commit 86882c0741
3 changed files with 109 additions and 139 deletions

View File

@@ -6,6 +6,6 @@ charset = utf-8
trim_trailing_whitespace = true trim_trailing_whitespace = true
insert_final_newline = true insert_final_newline = true
[{*.css,*.html,*.js,*.json,*.ts}] [{*.cjs,*.css,*.html,*.js,*.json,*.ts}]
indent_style = space indent_style = space
indent_size = 2 indent_size = 2

View File

@@ -28,7 +28,7 @@
"lint-css": "stylelint \"app/**/*.css\"", "lint-css": "stylelint \"app/**/*.css\"",
"lint-html": "htmlhint \"app/**/*.html\"", "lint-html": "htmlhint \"app/**/*.html\"",
"lint-js": "xo", "lint-js": "xo",
"prettier-non-js": "prettier --check --log-level=warn . \"!**/*.{js,ts}\"", "prettier-non-js": "prettier --check --log-level=warn . \"!**/*.{cjs,js,ts}\"",
"test": "tsc && npm run lint-html && npm run lint-css && npm run lint-js && npm run prettier-non-js", "test": "tsc && npm run lint-html && npm run lint-css && npm run lint-js && npm run prettier-non-js",
"test-e2e": "vite build && tape \"tests/**/*.js\"", "test-e2e": "vite build && tape \"tests/**/*.js\"",
"pack": "vite build && electron-builder --dir", "pack": "vite build && electron-builder --dir",
@@ -196,142 +196,5 @@
"bracketSpacing": false, "bracketSpacing": false,
"singleQuote": false, "singleQuote": false,
"trailingComma": "all" "trailingComma": "all"
},
"xo": {
"prettier": true,
"rules": {
"@typescript-eslint/no-dynamic-delete": "off",
"arrow-body-style": "error",
"import/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/order": [
"error",
{
"alphabetize": {
"order": "asc"
},
"newlines-between": "always"
}
],
"import/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/prefer-module": "off",
"unicorn/prefer-top-level-await": "off"
},
"envs": [
"node",
"browser"
],
"overrides": [
{
"files": [
"**/*.ts"
],
"rules": {
"@typescript-eslint/ban-types": "off",
"@typescript-eslint/consistent-type-imports": [
"error",
{
"disallowTypeAnnotations": false
}
],
"@typescript-eslint/no-unused-vars": [
"error",
{
"argsIgnorePattern": "^_",
"caughtErrors": "all"
}
],
"unicorn/no-await-expression-member": "off"
}
},
{
"files": [
"i18next-scanner.config.js",
"scripts/win-sign.js",
"tests/**/*.js"
],
"parserOptions": {
"sourceType": "script"
}
},
{
"files": [
"**/*.d.ts"
],
"rules": {
"import/unambiguous": "off"
}
}
]
} }
} }

107
xo.config.cjs Normal file
View File

@@ -0,0 +1,107 @@
"use strict";
module.exports = {
prettier: true,
rules: {
"@typescript-eslint/no-dynamic-delete": "off",
"arrow-body-style": "error",
"import/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/order": [
"error",
{alphabetize: {order: "asc"}, "newlines-between": "always"},
],
"import/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/prefer-module": "off",
"unicorn/prefer-top-level-await": "off",
},
envs: ["node", "browser"],
overrides: [
{
files: ["**/*.ts"],
rules: {
"@typescript-eslint/ban-types": "off",
"@typescript-eslint/consistent-type-imports": [
"error",
{disallowTypeAnnotations: false},
],
"@typescript-eslint/no-unused-vars": [
"error",
{argsIgnorePattern: "^_", caughtErrors: "all"},
],
"unicorn/no-await-expression-member": "off",
},
},
{
files: [
"**.cjs",
"i18next-scanner.config.js",
"scripts/win-sign.js",
"tests/**/*.js",
],
parserOptions: {
sourceType: "script",
},
},
{
files: ["**/*.d.ts"],
rules: {
"import/unambiguous": "off",
},
},
],
};