Sproto Language Support
给 skynet sproto(.sproto)协议文件的 VSCode 语言支持:语法高亮、F12 跳转定义、悬停预览、大纲(Outline)。
功能
- 语法高亮:注释
#、类型定义 .TypeName、协议 name tag {、字段 name id : type、基础类型、request/response。
- F12 跳转定义:光标在
模块.类型(如 match_mirror.ChapterMirrorInfo、base.IntKV)上按 F12 / Ctrl+点击,跳到 common/<模块>.sproto 里 .<类型> { 的定义处。数组前缀 * 与 map 后缀 (key) 会被自动忽略。
- 悬停预览:鼠标悬停在类型引用上,直接看到该类型的完整定义块,不用跳文件。
- 大纲(Outline):编辑器面包屑 / Outline 面板列出本文件的协议(带
#tag)和类型,展开看字段;协议下按 request/response 分组。
约定(本项目 p3proto 布局)
proto/command/<模块>.sproto 协议: cs_xxx 67 { request{} response{} }
proto/common/<模块>.sproto 类型: .ChapterMirrorInfo { chapter_id 2 : integer }
- 类型引用 =
<模块>.<类型名>;<模块> = sproto 文件名,<类型名> 定义在 common/<模块>.sproto 的 .<类型名> {。
- 扩展从当前
.sproto 文件所在目录回溯 proto 根(command/common 的父目录),扫同根下 command/ 与 common/ 建索引;对符号链接/junction(如 P3Client/proto → p3proto)天然生效。索引在文件增删改时自动失效重建。
已知限制
- F12 只解析
模块.类型 与裸类型名;(key) map 键指向类型内字段的跳转暂未做。
- 类型解析基于大括号缩进约定(每行一个 header / 一个字段 / 单独的
}),非通用 sproto 词法分析;本项目文件均满足。
| |