ModuleCompass · 模块罗盘
中台开发辅助工具:以当前目录为范围,快速定位模块内部结构。
- 当前目录代码块:侧边栏列出当前文件所在目录的文件,展开文件显示大纲——顶层符号(class / interface / enum / function / type /
const 函数)与 #region 代码块,Vue 为 <template>/<script>/<style> 块,点击跳转;支持模糊搜索、批量展开/收起
- 函数流步骤:
// #steps 名称 罩在数组字面量上方,大纲里展开成一组步骤,点击跳到对应那一行(见下方「函数流步骤」)
- C#:
.cs 的 #region、[步骤]、[可调用("操作名")] 都进大纲(见下方「C#」)
- 业务名标注:文件名是编号时(
210302.service.ts),从文件里的 new Logger(['云财务', '天财供应链', '门店采购入库', '服务']) 提取业务名显示在文件名右侧,搜索也能按业务名匹配
- 按业务名打开文件:面板标题栏最左的罗盘图标(或命令面板「模块罗盘:按业务名打开文件」),列出全工作区所有带业务名的文件,扁平一行一个、按目录分段,输入
开票 或 730102 都能命中
- 代码片段:保存常用代码片段(支持分组),单击复制到剪贴板
代码片段随 Settings Sync 同步到你的 Microsoft / GitHub 账号,请勿在片段里保存 token、密码、连接串等敏感信息。
使用
- 活动栏点击"模块罗盘"图标
- 面板顶部两行:标题行右侧是当前所属项目的完整路径,下面一行是当前目录 / 文件数 / 搜索状态
- 列表范围(工具栏最右侧按钮,按工作区记住):
- 默认 只显示已打开的文件:当前目录里已在标签栏打开的文件,不限扩展名(
.md / .scss 里的 #region 同样能导航)
- 点「文件夹」按钮切到 显示目录内全部文件:当前目录下的 .ts/.tsx/.js/.jsx/.vue/.cs,可以浏览还没打开的文件
- 左键点文件名:切换展开 / 收起(收起时打开并展开,展开时收起);也可右键菜单「收起」
- 搜索(工具栏放大镜):在当前目录内模糊匹配文件名 / 业务名 / 代码块名,例如
usrsvc 命中 UserService
- 按业务名打开文件(工具栏最左罗盘图标):全工作区范围,跟上面那个搜索不是一回事
- 资源管理器右键目录 →「在模块罗盘中显示」:把面板指到那个目录(会自动切到"全部文件");激活任意编辑器后恢复跟随
- 代码块写法:
// #region 名称 ... // #endregion(也支持 <!-- -->、/* */ 注释写法)
函数流步骤
一个数组把流程列出来的写法(步骤列表),大纲里以前只能看到外层 #region。在数组上方加一行标记就能展开:
// #steps 对账流程
const 步骤列表: Step[] = [
{ 步骤名: '查询订单发票列表', 执行: 'S210103Service.查询订单发票列表' },
{ 步骤名: '查询物料关系数据', 执行: 'S210103Service.查询物料关系数据' },
]
大纲里显示成:
▾ 订单发票对账列表(10004)
▾ 对账流程 L18 - L29
查询订单发票列表 查询订单发票列表 · L20
查询物料关系数据 查询物料关系数据 · L21
- 标记只写一次,步骤名不用重复写——子节点从数组元素里抽
- 标记是开关:没有
#steps 的数组一律不解析,不会误伤普通数组
- 数组必须从标记之后的第一个代码行开起(空行、纯注释行会跳过)
- 右侧灰字取
执行 的方法名(S210103Service.查询订单发票列表 → 查询订单发票列表,前缀整组都一样,去掉更省横向空间);取不到就只显示行号
- 一个步骤拆成多行写也认;
// #steps 后面不写名称显示为 (未命名)
- 注释写法跟
#region 一致,/* #steps 名称 */ 也认。不需要 #endsteps,范围按数组的方括号配对算
- 步骤名参与搜索,跟代码块名一样能模糊匹配
三个词都能改(设置里搜 模块罗盘):
| 设置项 |
默认值 |
作用 |
regionNavigator.stepsMarker |
#steps |
标记词,可用中文(#流程) |
regionNavigator.stepNameField |
步骤名 |
节点名取哪个字段 |
regionNavigator.stepDescField |
执行 |
右侧说明取哪个字段 |
C#
C# 侧的函数流不是数组,步骤是方法上的标注,所以走另一条解析:
[可调用("控制器")]
public async Task<object?> 控制器(业务请求 request, CancellationToken cancellationToken)
#region 步骤① 查询订单发票列表
[步骤]
public async Task<步骤结果> 查询订单发票列表(对账数据总线 ctx, CancellationToken cancellationToken)
#endregion
大纲里显示成:
▾ 控制器 L36
▾ 步骤① 查询订单发票列表 L73 - L109
查询订单发票列表 L77
[步骤] → 节点名取方法名
[可调用("操作保存数据")] → 节点名取括号里的操作名(那是线上的业务契约,对应请求里的 操作模块)。操作名和方法名不一致时,方法名显示在右侧灰字里:
[可调用("控制器")]
public async Task<object?> 查询订单销售汇总(...) // → 控制器 [查询订单销售汇总]
C# 的 #region 是预处理指令,不带 //,直接写就认;// #region 的注释写法也照认
标注和方法签名之间可以隔着别的标注或文档注释(最多 5 行);标注下面不是方法就忽略
标注解析只在 .cs 上跑,不会在 TS 文件里凑巧命中
public sealed partial class、record、struct、中文类名(运行日志)都能识别为顶层符号
两个标注名可以改(设置里搜 模块罗盘):
| 设置项 |
默认值 |
作用 |
regionNavigator.stepAttribute |
步骤 |
步骤方法的标注名 |
regionNavigator.entryAttribute |
可调用 |
可调用入口的标注名 |
业务名约定
插件只认这个形状,方括号里写什么完全由你决定:
private logger: Logger = new Logger(`${['云开票', '开票管理', '账单开票', '服务'].join('-')}`);
// → 业务名:云开票-开票管理-账单开票
- 段数任意;末尾的
'服务' 会被去掉
- 不裹模板字符串直接写
new Logger(['云开票', '账单开票']) 也认
- 必须是
new Logger( + 数组字面量:传变量、带 ... 展开、字符串拼接都读不到
- 只扫文件前 60 行
- 不按文件名后缀筛。
.service.ts / .platform.ts / .controller.ts / .task.ts 一视同仁,扫全部 .ts 后按有没有业务名收——新增后缀不用改插件
- 目录分段的组名 = 组内成员业务名第一段全部一致时的那一段。不一致就不显示组名(说明目录里有不合约定的文件)
- 命令面板「模块罗盘:列出待补业务名的文件」列出有导出类、也提到了
Logger、但没解析出业务名的文件
绑快捷键
按业务名打开文件 默认不占键位。要绑的话在 keybindings.json 里加:
{ "key": "ctrl+alt+p", "command": "regionNavigator.openByLabel" }