# 玄铁类型系统哲学设计

具体看 [02_类型系统哲学设计.md](../02_类型系统哲学设计.md)
是由两套方案组成:

1. 多档开关——在执行编译指令时加入指令参数`--严格、--禁止、--默认`  即可切换编译器语法检查等级,具体分级制度如下
   - 错误等级:
     - 宽松级:未使用的变量  |  静默处理
     - 警告级:隐式类型、若抑否逻辑表达式出现多个 `否` 编译器会只采用第一个否、隐式动态、可推断未声明  |  编译期输出警告,强烈建议开发者修复这个问题
     - 错误级:完全错误的语法  | 编译器完全退出并中断编译任务
   * 默认:按原分级处理(宽松→静默,警告→提示,错误→中断)
   * 严格:所有等级提升一档(宽松→警告,警告→错误,错误→错误)
   * 禁止:所有非错误提升为错误(宽松→错误,警告→错误,错误→错误)
2. 项目配置文件——`玄铁.配置.toml`
   ```
   [编译]
   严格度 = 禁止
   警告即错误 = ["隐式类型", "未使用变量"]
   忽略警告 = ["注释格式", "W001"]
   ```

   **项目根的判定(重要)**:编译器与 LSP 都以**源文件所在目录为起点,逐级向上查找** `玄铁.配置.toml`——找到的第一个即为项目根配置(与 Go 的 `go.mod` 同理)。所以:
   - 一个项目只需在**根目录**放一份配置,下属所有子目录的 `.xt` 文件都受其管辖,无需每个目录都放。
   - 一路向上都找不到 → 视为独立散文件,按无配置处理。
   - 命令行参数(如 `--严格`)优先级高于配置文件。

   **支持的键**:
   | 键 | 取值 | 作用 |
   |----|------|------|
   | `严格度` | `默认`/`严格`/`禁止` | 全局检查等级(命令行同名参数优先) |
   | `忽略警告` | `["W001","隐式类型",...]` | 按警告码或类别名静默指定警告(编译器与 LSP 诊断同时生效) |
   | `警告即错误` | `["类别名",...]` | 指定类别的警告提升为错误 |

   **LSP 侧**:`忽略警告` 对编辑器里的红色/黄色波浪线同样生效——例如填入 `"W001"` 后,「变量未标注类型」的黄色提醒不再出现;`@允许(码)` 注解则可做语句级抑制。

> 编译期错误与运行时诊断明细(错误格式、触发示例、健壮性诊断对照)见 [02_类型系统哲学设计.md](../02_类型系统哲学设计.md) 末尾章节。