# 画面設計書 4-詳細設定オプション画面

## 概要

本ドキュメントは、Visual Studio の F# 言語サービスにおける高度な機能（ブロック構造、アウトライン、インラインヒント、透過的コンパイラ等）を設定する「詳細設定オプション画面」の設計仕様を記述するものです。

### 本画面の処理概要

この画面は、F# コードエディタにおける高度な表示機能やコンパイラ設定をカスタマイズするためのオプションページです。エディタの視覚的補助機能から実験的なコンパイラ機能まで、幅広い設定項目を提供します。

**業務上の目的・背景**：F# 開発者がエディタの高度な機能を自身の開発環境や好みに合わせてカスタマイズするために必要な画面です。ブロック構造ガイドやアウトライン機能でコードの可読性を向上させたり、インライン型ヒントで型情報を視覚的に確認したり、実験的な透過的コンパイラを有効化してビルドパフォーマンスを改善したりできます。

**画面へのアクセス方法**：Visual Studio のメニューバーから「ツール」→「オプション」を選択し、オプションダイアログを開きます。左側のツリーから「テキストエディター」→「F#」→「Advanced」を選択することで本画面にアクセスできます。

**主要な操作・処理内容**：
1. ブロック構造ガイドの表示設定
2. アウトライン（折りたたみ）機能の設定
3. インライン型ヒント、戻り値型ヒント、パラメータ名ヒントの表示設定
4. ライブバッファ（未保存バッファ）の使用設定
5. 透過的コンパイラ（実験的機能）の設定
6. 追加テレメトリ送信の設定
7. ソリューション全体のバックグラウンド分析設定

**画面遷移**：
- 遷移元：Visual Studio オプションダイアログ
- 遷移先画面：同じ F# オプションカテゴリ内の他のページ（IntelliSense、QuickInfo、Code Fixes、Performance、Formatting）へタブ切替で遷移可能

**権限による表示制御**：特になし。Visual Studio のユーザー設定として保存され、すべてのユーザーが設定を変更可能です。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 58 | 分類サービス | 主機能 | ブロック構造のガイド表示、アウトライン表示の設定 |
| 16 | 透過コンパイラ | 主機能 | 透過コンパイラの有効化、スナップショット再利用の設定 |
| 19 | セマンティック分類 | 補助機能 | インライン型ヒント、戻り値型ヒント、パラメータ名ヒントの表示設定 |

## 画面種別

設定画面（オプションページ）

## URL/ルーティング

Visual Studio 内部ダイアログのため、URLは存在しません。
- GUIDパス: `{Guids.advancedSettingsPageIdString}`
- オプションツリーパス: `テキストエディター` > `F#` > `Advanced`

## 入出力項目

| 項目名 | 項目種別 | データ型 | 必須 | 説明 |
|--------|----------|----------|------|------|
| IsBlockStructureEnabled | 入力（チェックボックス） | bool | - | ブロック構造ガイドを表示するかどうか |
| IsOutliningEnabled | 入力（チェックボックス） | bool | - | アウトライン（折りたたみ）機能を有効にするかどうか |
| IsInlineTypeHintsEnabled | 入力（チェックボックス） | bool | - | インライン型ヒントを表示するかどうか |
| IsInlineReturnTypeHintsEnabled | 入力（チェックボックス） | bool | - | 戻り値型ヒントを表示するかどうか |
| IsInlineParameterNameHintsEnabled | 入力（チェックボックス） | bool | - | パラメータ名ヒントを表示するかどうか |
| IsUseLiveBuffersEnabled | 入力（チェックボックス） | bool | - | ライブバッファ（未保存）を分析に使用するかどうか |
| UseTransparentCompiler | 入力（チェックボックス） | bool | - | 透過的コンパイラを使用するかどうか（要再起動） |
| TransparentCompilerSnapshotReuse | 入力（チェックボックス） | bool | - | 既存スナップショットから新規スナップショットを作成するかどうか |
| SendAdditionalTelemetry | 入力（チェックボックス） | bool | - | 追加のパフォーマンステレメトリを送信するかどうか |
| SolutionBackgroundAnalysis | 入力（チェックボックス） | bool | - | ソリューション全体をバックグラウンドで分析するかどうか |

## 表示項目

| 項目名 | 表示形式 | 説明 |
|--------|----------|------|
| Block Structure グループ | GroupBox | ブロック構造ガイドの設定 |
| 構造ガイド表示 | CheckBox | `toggleBlockStructure` |
| Outlining グループ | GroupBox | アウトライン機能の設定 |
| アウトライン表示 | CheckBox | `toggleOutlining` |
| Inline Hints グループ | GroupBox | インラインヒント関連の設定 |
| 型ヒント表示 | CheckBox | `toggleInlineTypeHints` |
| 戻り値型ヒント表示 | CheckBox | `toggleReturnTypeHints` |
| パラメータ名ヒント表示 | CheckBox | `toggleParameterNameHints` |
| Live Buffers グループ | GroupBox | ライブバッファの設定 |
| ライブバッファ有効化 | CheckBox | `toggleLiveBuffers` |
| Transparent Compiler グループ | GroupBox | 透過的コンパイラの設定（警告メッセージ付き） |
| 警告メッセージ1 | Label | 機能が全機能をサポートしていない警告 |
| 警告メッセージ2 | Label | 自己責任での使用警告 |
| 警告メッセージ3 | Label | テレメトリオプトイン通知 |
| 透過的コンパイラ使用 | CheckBox | `toggleTransparentCompiler` |
| スナップショット再利用 | CheckBox | `snapshotReuse` |
| Additional Telemetry グループ | GroupBox | テレメトリ設定 |
| 追加テレメトリ送信 | CheckBox | `toggleSendAdditionalTelemetry` |
| Background analysis グループ | GroupBox | バックグラウンド分析設定 |
| ソリューション分析 | CheckBox | `toggleSolutionBackgroundAnalysis` |

## イベント仕様

### 1-設定値の保存

OK ボタン押下時、設定値は Visual Studio の SettingsStore を通じて永続化されます。設定は `AdvancedOptions` レコード型として管理されます。

### 2-設定値の読み込み

画面表示時、`EditorOptions` クラスの `Advanced` プロパティから現在の設定値が読み込まれ、各コントロールにバインドされます。

### 3-再起動が必要な設定

UseTransparentCompiler、IsUseLiveBuffersEnabled、SolutionBackgroundAnalysis の変更は再起動後に反映されます。UI 上でその旨が注記されています。

## データベース更新仕様

本画面はデータベースを使用しません。設定値は Visual Studio のユーザー設定ストア（レジストリまたは設定ファイル）に保存されます。

### 操作別データベース影響一覧

該当なし（Visual Studio 内部設定ストアを使用）

## メッセージ仕様

| メッセージID | 種別 | メッセージ内容 | 表示条件 |
|--------------|------|----------------|----------|
| TransparentCompiler_Disclaimer1 | 警告 | WARNING! Transparent Compiler does not yet support all features and can cause crashes or give incorrect results. | 常時表示 |
| TransparentCompiler_Disclaimer2 | 警告 | Use at your own risk! | 常時表示 |
| TransparentCompiler_Disclaimer3 | 情報 | By checking this you also opt-in for additional performance telemetry | 常時表示 |

## 例外処理

| 例外状況 | 処理内容 |
|----------|----------|
| 設定読み込み失敗 | デフォルト値（AdvancedOptions.Default）が使用される |
| 設定保存失敗 | Visual Studio 標準のエラーハンドリングに従う |

## 備考

- 本画面は WPF UserControl として実装されています（`AdvancedOptionsControl.xaml`）
- 設定値は `AdvancedOptions` レコード型で管理され、MEF を通じて他のコンポーネントからアクセス可能です
- デフォルト値は以下の通りです：
  - IsBlockStructureEnabled: true
  - IsOutliningEnabled: true
  - IsInlineTypeHintsEnabled: false
  - IsInlineParameterNameHintsEnabled: false
  - IsInlineReturnTypeHintsEnabled: false
  - UseTransparentCompiler: false
  - TransparentCompilerSnapshotReuse: false
  - IsUseLiveBuffersEnabled: true
  - SendAdditionalTelemetry: true
  - SolutionBackgroundAnalysis: false
- インラインヒント機能はプレビュー機能として提供されています
- 透過的コンパイラは実験的機能であり、クラッシュや誤った結果を引き起こす可能性があります

---

## コードリーディングガイド

本画面を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

まず、画面で扱う設定データの構造を理解することが重要です。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | EditorOptions.fs | `vsintegration/src/FSharp.Editor/Options/EditorOptions.fs` | `AdvancedOptions` レコード型（113-140行目）の定義を確認。10個のフィールドとデフォルト値を把握する |

**読解のコツ**: 多くのフィールドがデフォルトで false になっているのは、実験的機能やパフォーマンスへの影響を考慮したためです。

#### Step 2: エントリーポイントを理解する

オプションページとして Visual Studio に登録される仕組みを理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | EditorOptions.fs | `vsintegration/src/FSharp.Editor/Options/EditorOptions.fs` | `AdvancedSettingsOptionPage` クラス（225-228行目）が Visual Studio オプションページとして登録される |

**主要処理フロー**:
1. **225行目**: `[<Guid(Guids.advancedSettingsPageIdString)>]` 属性で GUID を指定
2. **226行目**: `AbstractOptionPage<AdvancedOptions>` を継承してオプションページを定義
3. **228行目**: `CreateView()` メソッドで `AdvancedOptionsControl` を生成

#### Step 3: UI 定義を理解する

XAML で定義された UI コントロールの構造を理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | AdvancedOptionsControl.xaml | `vsintegration/src/FSharp.UIResources/AdvancedOptionsControl.xaml` | UserControl の全体構造（7つの GroupBox の配置） |

**主要処理フロー**:
- **19-22行目**: Block Structure グループ
- **23-26行目**: Outlining グループ
- **27-36行目**: Inline Hints グループ（3つの CheckBox）
- **37-40行目**: Live Buffers グループ
- **41-51行目**: Transparent Compiler グループ（警告 Label + 2つの CheckBox）
- **52-55行目**: Additional Telemetry グループ
- **56-59行目**: Background analysis グループ

#### Step 4: リソース文字列を理解する

UI に表示される文字列リソースを確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 4-1 | Strings.resx | `vsintegration/src/FSharp.UIResources/Strings.resx` | `Block_Structure`、`Inline_Hints`、`TransparentCompiler_Disclaimer1/2/3` などのリソースキー |

### プログラム呼び出し階層図

```
Visual Studio オプションダイアログ
    │
    ├─ AdvancedSettingsOptionPage (EditorOptions.fs:225-228)
    │      │
    │      └─ CreateView()
    │             │
    │             └─ AdvancedOptionsControl (XAML)
    │                    │
    │                    ├─ DataContext: AdvancedOptions
    │                    └─ 各 CheckBox のバインディング
    │
    └─ EditorOptions (EditorOptions.fs:151-174)
           │
           ├─ Advanced プロパティ (167行目)
           └─ SettingsStore.Get<AdvancedOptions>()
```

### データフロー図

```
[入力]                    [処理]                         [出力]

ユーザー操作 ───▶ AdvancedOptionsControl ───▶ AdvancedOptions
(CheckBox)                     │                         │
                               │                         │
                               ▼                         ▼
                    SettingsStore.Register() ───▶ Visual Studio 設定ストア
                               │
                               ▼
                    EditorOptions.Advanced ───▶ 各種エディタ機能
                                                 - BlockStructureService
                                                 - OutliningTagger
                                                 - InlineHintsProvider
                                                 - TransparentCompiler
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| AdvancedOptionsControl.xaml | `vsintegration/src/FSharp.UIResources/AdvancedOptionsControl.xaml` | XAML | UI レイアウト定義 |
| EditorOptions.fs | `vsintegration/src/FSharp.Editor/Options/EditorOptions.fs` | ソース | オプションデータ構造とオプションページ登録 |
| Strings.resx | `vsintegration/src/FSharp.UIResources/Strings.resx` | リソース | UI 表示文字列の定義 |
| OptionPageStyle.xaml | `vsintegration/src/FSharp.UIResources/OptionPageStyle.xaml` | XAML | 共通スタイル定義 |
| SettingsStore.fs | `vsintegration/src/FSharp.Editor/Options/SettingsStore.fs` | ソース | 設定の永続化処理 |
