# 通知設計書 8-errRstGridTableNotImplemented

## 概要

本ドキュメントは、Nimコンパイラにおけるエラー通知「errRstGridTableNotImplemented」の設計仕様を定義する。

### 本通知の処理概要

errRstGridTableNotImplementedは、reStructuredText（RST）ドキュメント内でグリッドテーブル構文が使用された場合に出力されるエラー通知である。NimのRSTパーサーはグリッドテーブルを未サポートであることを示す。

**業務上の目的・背景**：reStructuredTextには複数のテーブル記法が存在し、グリッドテーブルはその一つである。グリッドテーブルは、ASCII文字で罫線を描画する複雑な形式であり、NimのRSTパーサーでは実装されていない。この機能を使用しようとした開発者に、代替手段（シンプルテーブルやMarkdownテーブル）を使用するよう案内するためにこのエラーが発行される。

**通知の送信タイミング**：RSTパーサーがグリッドテーブル構文（+---+---+形式）を検出した時点で発行される。docgen.nimのcompilerMsgHandler経由で変換される。

**通知の受信者**：Nimソースコードのドキュメントコメントを作成している開発者、またはRSTドキュメントを作成している開発者。テーブル記法の変更が必要。

**通知内容の概要**：「grid table is not implemented」という固定メッセージが出力される。パラメータは含まれない。

**期待されるアクション**：開発者は、グリッドテーブルの代わりにシンプルテーブル（=== 形式）またはMarkdownテーブル（| | | 形式）を使用することが期待される。

## 通知種別

コンパイラ標準出力/標準エラー出力（コンソール通知）

## 送信仕様

### 基本情報

| 項目 | 内容 |
|-----|------|
| 送信方式 | 同期 |
| 優先度 | 高（Error） |
| リトライ | なし |

### 送信先決定ロジック

コンパイラオプション`--stdout`が指定されている場合はstdoutに、それ以外はstderrに出力される。

## 通知テンプレート

### コンソール通知の場合

| 項目 | 内容 |
|-----|------|
| 送信元 | Nimコンパイラ |
| メッセージ種別 | Error |
| 形式 | テキスト |

### 本文テンプレート

```
{ファイル名}({行},{列}) Error: grid table is not implemented
```

### 添付ファイル

該当なし

## テンプレート変数

| 変数名 | 説明 | データ取得元 | 必須 |
|--------|------|-------------|-----|
| なし | 固定メッセージ | MsgKindToStr[errRstGridTableNotImplemented] | - |

## 送信トリガー・条件

### トリガー一覧

| トリガー種別 | トリガーイベント | 送信条件 | 説明 |
|------------|----------------|---------|------|
| RSTパース処理 | meGridTableNotImplementedイベント | グリッドテーブル検出 | rst.nim |
| ドキュメント生成 | メッセージ変換 | meKindマッピング | docgen.nim 250行目 |

### 送信抑止条件

| 条件 | 説明 |
|-----|------|
| errorsAsWarnings有効時 | roPreferMarkdownかつ非standaloneDocの場合、警告として扱われる |

## 処理フロー

### 送信フロー

```mermaid
flowchart TD
    A[RSTドキュメントパース] --> B{テーブル構文検出}
    B -->|グリッドテーブル| C[meGridTableNotImplemented発行]
    B -->|その他| D[処理継続]
    C --> E[compilerMsgHandler]
    E --> F[errRstGridTableNotImplementedへ変換]
    F --> G{errorsAsWarnings?}
    G -->|Yes| H[警告として出力]
    G -->|No| I[globalError呼び出し]
    I --> J[メッセージ出力]
```

## データベース参照・更新仕様

### 参照テーブル一覧

該当なし（ファイルベースの処理）

### 更新テーブル一覧

該当なし

## エラー処理

### エラーケース一覧

| エラー種別 | 発生条件 | 対処方法 |
|----------|---------|---------|
| グリッドテーブル使用 | +---+形式のテーブル記述 | シンプルテーブルまたはMarkdownテーブルに変更 |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | なし |
| リトライ間隔 | - |
| リトライ対象エラー | - |

## 配信設定

### レート制限

| 項目 | 内容 |
|-----|------|
| 1分あたり上限 | なし |
| 1日あたり上限 | なし |

### 配信時間帯

制限なし

## セキュリティ考慮事項

- エラーメッセージにはファイルパスと位置情報のみが含まれる
- ローカル開発環境での使用を想定

## 備考

- errRstGridTableNotImplementedはエラー（Error）カテゴリに属する
- 固定メッセージでパラメータは含まれない
- 代替手段としてシンプルテーブル（RST）またはMarkdownテーブル（|--|形式）が推奨される
- グリッドテーブルの例：
  ```
  +------+------+
  | Col1 | Col2 |
  +======+======+
  | A    | B    |
  +------+------+
  ```

---

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

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

### 推奨読解順序

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

errRstGridTableNotImplemented通知の基盤となるデータ構造を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | lineinfos.nim | `compiler/lineinfos.nim` | TMsgKind列挙型でerrRstGridTableNotImplementedの定義を確認（37行目） |
| 1-2 | lineinfos.nim | `compiler/lineinfos.nim` | MsgKindToStr配列でメッセージ文字列を確認（128行目） |

**読解のコツ**: errRstGridTableNotImplementedは固定メッセージで、"grid table is not implemented"が直接定義されている。$1プレースホルダーはない。

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

通知発行の起点となるファイル・関数を特定。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | docgen.nim | `compiler/docgen.nim` | compilerMsgHandlerでのメッセージ変換（241-277行目） |
| 2-2 | docgen.nim | `compiler/docgen.nim` | meGridTableNotImplementedからerrRstGridTableNotImplementedへのマッピング（250行目） |

**主要処理フロー**:
1. **250行目**: `of meGridTableNotImplemented: k = errRstGridTableNotImplemented`

#### Step 3: テーブルパース処理を理解する

RSTパーサーでのテーブル検出処理を確認。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | rst.nim | `lib/packages/docutils/rst.nim` | テーブルパース処理 |

**主要処理フロー**:
- グリッドテーブル構文（+---+形式）を検出した場合にmeGridTableNotImplementedを発行

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

```
RST/Markdownパーサー (lib/packages/docutils/rst.nim)
    │
    └─ グリッドテーブル構文検出
           │
           └─ meGridTableNotImplementedイベント発行
                  │
                  └─ compilerMsgHandler(filename, line, col, meGridTableNotImplemented, "")
                         │
                         └─ case msgKind of meGridTableNotImplemented: k = errRstGridTableNotImplemented
                                │
                                └─ globalError(conf, info, errRstGridTableNotImplemented, "")
```

### データフロー図

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

RST/MDソース ────▶ RSTパーサー ────────────▶ 標準エラー出力
(グリッドテーブル)    │                        "grid table is not implemented"
                    ▼
               テーブル構文検出
                    │
                    ▼
               meGridTableNotImplemented
                    │
                    ▼
               compilerMsgHandler
                    │
                    ▼
               globalError
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| lineinfos.nim | `compiler/lineinfos.nim` | ソース | TMsgKind定義、メッセージ文字列定義 |
| docgen.nim | `compiler/docgen.nim` | ソース | compilerMsgHandler、メッセージ変換 |
| rst.nim | `lib/packages/docutils/rst.nim` | ソース | RSTパーサー本体 |
| msgs.nim | `compiler/msgs.nim` | ソース | globalError関数 |
