Presets
Effect
Effect 向けの22ルール。
使い方
import { defineConfig } from 'oxlint'
import effect from '@totto2727/oxlint/effect'
export default defineConfig({ extends: [effect] })プリセットはプラグインを登録し、以下のルールを error として有効化します。両グループを組み合わせる場合は @totto2727/oxlint/preset を使います。
共通 native baseline
両グループと統合プリセットは Ultracite 7.12.3 の native core 設定と共通 ignore の MIT 固定移植を使います。上流の ultracite/oxlint/core export に対応します。
ライブラリにはこれらの native 設定ソースのみを取り込み、Ultracite CLI パッケージ全体と不要な間接依存を取り込みません。パッケージ監査で確認された未使用 CLI 依存の advisory を回避し、選択した native ルールのポリシーは変えません。実行時とコマンドは Oxlint を直接使います。
このバージョンの確認済み出典は native core 設定 と 公式 Oxlint provider ドキュメント です。
native core の設定とルールを各プリセットのトップレベルに展開し、extends に別のプリセットを追加する方式ではありません。
native core の設定と共通 ignore パターンは保持します。テスト向けの緩和を含め、上流のファイル別 override はすべて除外します。このポリシーはテストファイルを ignore しません。
ライブラリ独自の **/*.gen.ts に対する no-redundant-alias の許可は TypeScript と統合プリセットに残ります。
どちらの順序でグループを合成しても競合しないよう、TypeScript を含む全グループで3つの native ルールを明示的に off にします。
unicorn/prefer-bigint-literals: 公式 Effect のrules/no-bigint-literalsと逆方向の修正になります。preserve-caught-error: native Error.cause を前提とする一方、カスタム Effect 規約は元のエラーを error フィールドに保持します。prefer-const: TypeScript 選択時は、より広いカスタムrules/no-letと宣言の診断が重複します。
カスタムルールの合計34は変わりません。これら3つの調整は native baseline の設定であり、新しいカスタムルールではありません。 React プリセット、type-aware プリセット、Ultracite JavaScript plugins、oxfmt 設定は自動的に取り込みません。 別の統合を個別に選ぶまでは、既存の Oxlint/Vite+ コマンドと formatter 設定を維持します。
収録カスタムルール
- 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 デコーダーをモジュールスコープで構築・キャッシュします。
例外
公式 Effect の4ルールを含みますが、上流の native lint 設定全体ではありません。モジュールの namespace import を許可し、barrel ルールには effect/@effect のパッケージルートと小文字サブパスの正規表現および相対 index import を設定します。逆の規約を持つ no-effect-import-as/no-effect-subpath-import と重複する no-js-extension-imports は opt-in です。no-unused-internal は cwd/packages/**/src の .ts のみを走査し、解析をプロセス内でキャッシュします。no-node-imports の既定の許可リストは child_process、crypto、os、util です。他の node: 名には明示的な上書きが必要です。
テストにもアプリケーションソースと同じルールを適用し、上流のテストファイル override は継承しません。利用者が追加する例外は範囲と理由を明確にしてください。