Getting started
概要
TypeScript と Effect のための34のルール。
ポリシーを選ぶ
@totto2727/oxlint は、汎用 TypeScript の規約と Effect アプリケーションのポリシーを提供する Oxlint JavaScript プラグインです。 TypeScript プリセット は8つのカスタムルール、Effect プリセット は22のカスタムルールです。両方を使う場合はパッケージの統合プリセットを選びます。 両グループは native Ultracite 7.12.3 core の共通 baseline も含みます。明示的な競合調整は各プリセットのページで説明します。 導入手順ははじめにをご覧ください。
ルールリファレンス
30のプリセットルールと4つの opt-in 互換ポリシー、合計34のカスタムルールを解説します。native Ultracite core のルールは追加の baseline であり、この数には含みません。 force-ts-extension は分割された拡張子ルールと重複します。no-js-extension-imports は mjs/cjs も扱いますが js モードと衝突し、js/jsx の診断が重複します。 no-effect-import-as と no-effect-subpath-import は公式 Effect barrel ルールと逆の import 規約です。互換用に残しますがプリセットでは有効化しません。
TypeScript
- consistent-import-extension: 実行環境に合わせてコードモジュールの拡張子を統一します。
- require-import-extension: モジュール解決を推測せず明示的な拡張子を要求します。
- no-eslint-disable-comments: ESLint ではなく Oxlint の抑制コメントを使います。
- no-jsx-script-tag: JSX のネイティブ script 要素を禁止します。
- no-let: const と明示的なシャドーイングを優先します。
- no-redundant-alias: 既存の値や型を単に改名する別名を避けます。
- no-string-style: JSX の style には文字列ではなくオブジェクトを使います。
- require-disable-reason: Oxlint の抑制に例外の理由を必須とします。
Effect
- no-unused-internal: 内部 export の未使用と公開 API への漏出を防ぎます。
- no-bigint-literals: bigint リテラルではなく BigInt の構築を使います。
- no-import-from-barrel-package: バレルの値 export ではなく個別モジュールを import します。
- no-opaque-instance-fields: Schema.Opaque クラスにインスタンスメンバーを持たせません。
- force-array-empty: 空・非空の判定に Effect Array の述語を使います。
- force-iterable-empty: size 比較ではなく Iterable.isEmpty を使います。
- force-predicate: null、undefined、typeof の直接比較を述語に置き換えます。
- force-string-empty: 空文字列の判定に String.isEmpty と String.isNonEmpty を使います。
- no-effect-runtime-run: ランタイム実行を理由の明確なワークフロー境界に限定します。
- no-error-cause-option: 生のエラーを明示的な error フィールドで保持します。
- no-error-property-access: 生のエラーのプロパティを参照せず、そのまま渡します。
- no-fetch: グローバル fetch ではなく Effect HttpClient を使います。
- no-instanceof-error: instanceof Error による捕捉値の正規化を避けます。
- no-js-date: ネイティブ Date 操作ではなく Effect DateTime と Duration を使います。
- no-node-imports: Node 組み込みの直接 import より Effect Platform サービスを優先します。
- no-option-tag-comparison: _tag 比較ではなく Option.isSome と Option.isNone を使います。
- no-raw-hono-create-middleware: Hono ミドルウェアの生成を Effect 対応ラッパーに集約します。
- no-sync-decode: Schema のデコードを Sync や Promise ではなく Effect または Exit に保ちます。
- no-type-predicate: 手書きの型述語より Schema による検証を優先します。
- prefer-is-nullish: 区別が意図的でない限り null と undefined を統一して扱います。
- prefer-non-unknown-decode: 入力型が既知なら型付き Schema デコーダーを使います。
- require-top-level-decoder: Schema デコーダーをモジュールスコープで構築・キャッシュします。