诊断与限制
Stack 诊断是结构化结果,不是控制台文本。它包含稳定代码、error 或 warning 严重级别、从 1 开始且 end-exclusive 的源码范围、简洁消息和有序 expected 列表;适用时还包含修复帮助与相关源码范围。
处理与严重级别
工具依次处理编码与 token、语法、标识符与默认值、语义限制、主题与图标、布局、渲染。前四阶段的错误会阻止渲染。主题、图标、密度和布局提示警告可与回退 SVG 同时出现。
编辑源码后,Playground 会清除旧诊断。选择结果可聚焦主范围,相关信息可指向较早的声明。
复杂度限制
| 项目 | Draft Stack 1.0 限制 |
|---|---|
| 每份文档的图 | 1 |
| 节点 | 1 至 40 |
| 分组 | 0 至 12 |
| 图下分组嵌套 | 3 层 |
| 连线 | 0 至 80 与节点数两倍中的较小值 |
| 发出警告前的节点 degree | 12 条 incident edge 声明 |
超过硬限制会产生 STK4003。超过建议 degree 的节点仍有效,但产生 STK4002。请把大型系统拆成多张聚焦的图。
可移植诊断代码
| Code | Severity | 含义 |
|---|---|---|
STK1001 | Error | 输入不是有效 UTF-8 |
STK1002 | Error | 存在 byte order mark |
STK1003 | Error | 字符串转义或解码值无效 |
STK2001 | Error | 声明的语言版本不受支持 |
STK2002 | Error | 出现意外 token、声明、属性、值或操作符 |
STK2003 | Error | 当前结构完成前输入结束 |
STK3001 | Error | 标识符无效 |
STK3002 | Error | 标识符被重复声明 |
STK3003 | Error | 连线引用未知节点 |
STK3004 | Error | 分组被用作连线端点 |
STK3005 | Error | 连线连接节点自身 |
STK3006 | Error | 声明了精确重复连线 |
STK3007 | Error | 一个 block 中属性重复 |
STK3008 | Error | 标题、标签或详情违反文本约束 |
STK3009 | Error | 分组没有后代节点 |
STK3010 | Error | 分组嵌套超过语言限制 |
STK3011 | Error | 布局引用在作用域内无效 |
STK3012 | Error | 布局块或单例布局语句重复 |
STK3013 | Error | 图标标识符格式错误 |
STK3014 | Error | 图包含多条主题语句 |
STK4001 | Warning | 顺序提示无法满足 |
STK4002 | Warning | 节点超过建议 incident-edge degree |
STK4003 | Error | 图超过语言复杂度限制 |
STK5001 | Warning | 有效主题中没有图标,使用 kind 回退 |
STK6001 | Warning | 请求的非核心主题不可用,使用 default |
代码族中,STK1000 表示编码/词法,STK2000 表示语法,STK3000 表示名称/语义,STK4000 表示布局/复杂度,STK5000 表示图标,STK6000 表示主题。STK9000 用于实现失败,而不是源码错误。实现只能使用自己的非 STK 前缀添加诊断。
恢复规则
解析器可以恢复并一次报告多个独立错误,但不能把部分图渲染成有效结果。未知声明、属性、枚举值和操作符绝不会被忽略,以避免成功外观掩盖语义丢失。