概要
ESLint の @stylistic/eslint-plugin-ts を用いて、フォーク独自コード(Tauri 層)のみにフォーマットルールを適用する。本家(microsoft/vscode)とのアップストリームマージ影響を回避するため、VS Code Core ファイルには一切ルールを適用しない。
現状
.editorconfig は存在するが CI での強制力なし(フロントエンドにフォーマットチェックなし)
@stylistic/eslint-plugin-ts@^2.8.0 は導入済みだが、有効なのは semi と member-delimiter-style のみ
- ESLint(
eslint.config.js)は CI の frontend-lint ジョブで実行済み
- インデントやスペースなど、CLAUDE.md の「スペースを使用(TAB不可)」ルールを CI で担保する仕組みがない
対象範囲
適用する(Tauri 層 = 本家に存在しないファイル)
src/**/tauri-browser/**/*.ts(26ディレクトリ)
src/vs/sessions/**/*.ts(エージェントセッション)
src-tauri/ は Rust なのでESLint対象外(cargo fmt で既にCIチェックあり)
適用しない(VS Code Core = 本家ファイル)
src/vs/ 配下の本家コード全般
extensions/ 配下
- その他本家に存在するファイル
懸念事項と対策
1. アップストリームマージ時の差分地獄
リスク: VS Code Core ファイルにフォーマットをかけると、git merge 時に数千ファイルでコンフリクトが発生する。
対策: Tauri 層のみに限定。これらは本家に存在しないため、マージ影響はゼロ。Issue #24 のクリーンアーキテクチャ戦略(upstream変更ファイルをゼロにする目標)と整合。
2. 同一プロジェクト内でフォーマットが統一されない
リスク: 古いファイル(本家)は元のまま、新しいファイル(Tauri層)だけ整形済みという二重標準。
対策: 許容する。本家マージの安定性を優先。Issue #24 の分離方針に従い、VS Code Core は変更不可とする。
リスク: グローバル設定の semi / member-delimiter-style と新しいオーバーライドが競合する可能性。
対策: Tauri 層向けのオーバーライドで明示的にルールを上書き。eslint.config.js のoverrides機能を使用。
4. ツールの追加によるメンテナンスコスト
リスク: Biome / Prettier などの新ツール導入は設定の重複と保守コストを増やす。
対策: 新ツールは導入せず、既存の ESLint + @stylistic を拡張する方針。設定ファイルは eslint.config.js のみ。
追加予定のルール
Tauri 層向けに eslint.config.js の overrides で追加:
| ルール |
設定 |
目的 |
@stylistic/ts/indent |
['error', 4] |
スペース4インデント |
@stylistic/ts/no-tabs |
'error' |
タブ禁止 |
@stylistic/ts/quotes |
['error', 'single'] |
シングルクォート(nls以外) |
@stylistic/ts/type-annotation-spacing |
'error' |
型アノテーションのスペース統一 |
@stylistic/ts/object-curly-spacing |
['error', 'always'] |
ブレース内スペース |
@stylistic/ts/no-trailing-spaces |
'error' |
行末スペース禁止 |
@stylistic/ts/no-multiple-empty-lines |
['error', { max: 1 }] |
連続空行の制限 |
検討して不採用とした選択肢
| 選択肢 |
不採用理由 |
| Prettier |
本家ファイルに適用するとアップストリームマージで差分地獄。新ツールの保守コスト増。 |
| Biome |
Prettier と同じ懸念。リンターとフォーマッターの統合は魅力的だが、既存ESLintとの二重管理が発生。 |
.editorconfig + CI |
editorconfig-checker で強制は可能だが、@Stylistic で統合済みのESLintの方が設定一元化できる。 |
| 全ファイル一括フォーマット |
本家との差分が膨大になり、Issue #24 のマージ戦略と完全に競合。 |
実装ファイル
eslint.config.js — Tauri 層向け overrides ブロックを追加
参考
概要
ESLint の
@stylistic/eslint-plugin-tsを用いて、フォーク独自コード(Tauri 層)のみにフォーマットルールを適用する。本家(microsoft/vscode)とのアップストリームマージ影響を回避するため、VS Code Core ファイルには一切ルールを適用しない。現状
.editorconfigは存在するが CI での強制力なし(フロントエンドにフォーマットチェックなし)@stylistic/eslint-plugin-ts@^2.8.0は導入済みだが、有効なのはsemiとmember-delimiter-styleのみeslint.config.js)は CI のfrontend-lintジョブで実行済み対象範囲
適用する(Tauri 層 = 本家に存在しないファイル)
src/**/tauri-browser/**/*.ts(26ディレクトリ)src/vs/sessions/**/*.ts(エージェントセッション)src-tauri/は Rust なのでESLint対象外(cargo fmtで既にCIチェックあり)適用しない(VS Code Core = 本家ファイル)
src/vs/配下の本家コード全般extensions/配下懸念事項と対策
1. アップストリームマージ時の差分地獄
リスク: VS Code Core ファイルにフォーマットをかけると、
git merge時に数千ファイルでコンフリクトが発生する。対策: Tauri 層のみに限定。これらは本家に存在しないため、マージ影響はゼロ。Issue #24 のクリーンアーキテクチャ戦略(upstream変更ファイルをゼロにする目標)と整合。
2. 同一プロジェクト内でフォーマットが統一されない
リスク: 古いファイル(本家)は元のまま、新しいファイル(Tauri層)だけ整形済みという二重標準。
対策: 許容する。本家マージの安定性を優先。Issue #24 の分離方針に従い、VS Code Core は変更不可とする。
3. 既存の @Stylistic ルールとの整合性
リスク: グローバル設定の
semi/member-delimiter-styleと新しいオーバーライドが競合する可能性。対策: Tauri 層向けのオーバーライドで明示的にルールを上書き。
eslint.config.jsのoverrides機能を使用。4. ツールの追加によるメンテナンスコスト
リスク: Biome / Prettier などの新ツール導入は設定の重複と保守コストを増やす。
対策: 新ツールは導入せず、既存の ESLint +
@stylisticを拡張する方針。設定ファイルはeslint.config.jsのみ。追加予定のルール
Tauri 層向けに
eslint.config.jsの overrides で追加:@stylistic/ts/indent['error', 4]@stylistic/ts/no-tabs'error'@stylistic/ts/quotes['error', 'single']@stylistic/ts/type-annotation-spacing'error'@stylistic/ts/object-curly-spacing['error', 'always']@stylistic/ts/no-trailing-spaces'error'@stylistic/ts/no-multiple-empty-lines['error', { max: 1 }]検討して不採用とした選択肢
.editorconfig+ CIeditorconfig-checkerで強制は可能だが、@Stylistic で統合済みのESLintの方が設定一元化できる。実装ファイル
eslint.config.js— Tauri 層向け overrides ブロックを追加参考
@stylistic/eslint-plugin-tsv2.8.0 既存設定