Oak Assistant 更新日志
3.5.0(2026-07-25)
复用组件的 Render Props
- 当本地
index.ts使用import OakComponent from '某个组件'; export default OakComponent;直接转发已有 Oak 组件时,同目录的标准 render 可以继承原组件对应平台 render 的 props,不必重新手写WebComponentProps。 - 本地源码组件会继续追踪到真正的
OakComponent({...})定义;已发布的依赖包则从web.d.ts、render.native.d.ts、render.desktop.d.ts等平台 render 声明读取合同。 - 编辑器支持继承字段的补全、hover、诊断和定义跳转。平台专用声明不存在时,会按 CLI 的平台规则回退,例如
web.pc -> web、render.android -> render.native、render.windows -> render.desktop -> web.pc -> web。 - 识别是有意收紧的:默认导入必须命名为
OakComponent,并由export default OakComponent直接导出。改名导入、二次赋值或动态包装不会被猜测为复用合同。
3.4.0(2026-07-24)
render.native.tsx、render.ios.tsx、render.android.tsx中默认导入的 Sass/SCSS Module 支持 class 补全、hover、定义跳转和错误诊断。- 插件使用 Dart Sass 解析变量、partial、
@use、import、alias 和 source map,并把可导出的 class 类型约束为 React Native 的ViewStyle & TextStyle & ImageStyle。
3.0.0 - 3.3.2(2026-07-18 至 2026-07-22)
实体 Schema 即时诊断
- 插件会发现当前 Oak 项目直接拥有的
src/entities/*.ts/*.tsx,即时检查 Schema 继承、属性、反向关系、Action、State、ActionDef、Relation、entityDesc、locale、index、多继承冲突和系统保留名称。 - 同一实体的独立错误会同时显示为
TS9300-TS9327,不再像领域生成器一样只报告第一个错误;分析器自身异常使用TS9399。 - 实体分析按 tsserver Program、项目根和版本缓存,多项目工作区不会把另一个项目的实体或 locale 混入当前项目。
- 这项能力只读源码,不修改生成目录;
npm run make:domain和正式构建仍是最终结论。
Render Props 与 Less Module
web.tsx、web.pc.tsx、web.mobile.tsx、render.desktop.tsx、render.native.tsx等标准 render 会直接使用同目录OakComponent推导出的精确 props。properties、data、formData、methods和 Oak 注入字段都能参与补全、hover、定义跳转和诊断;不再需要手写宽泛WebComponentProps。- 默认导入的
*.less会生成精确 CSS Module 类型,支持相对 import、tsconfig alias、node_modules、连字符 class 与 camelCase 访问。 - Less 作用域理解 compound selector、后代/子代/兄弟选择器、
:is、:where、:not、:local、:global、Fragment、条件 JSX 和本地 helper 调用链。只有在所有可达挂载位置都满足父选择器时,嵌套 class 才被视为合法。 - class hover 会显示真实 Less 声明,Ctrl+点击跳到定义;找不到 class 或挂载作用域错误时直接在 render 中显示诊断。
WXML/XML 语言服务
- 支持标签、原生属性、事件、微信指令、
usingComponents、componentGenerics、模板 import/include、资源路径、Rainbow Tags 与格式化。 - 对标签配对、
wx:if/elif/else、wx:for词法作用域、wx:key、class、资源、事件方法和组件属性执行诊断。 - 虚拟 TSX 会保留循环项、dataset、事件和组件 props 的真实 TypeScript 类型,并把补全、hover、定义和诊断映射回 XML/WXML。
- Oak 组件与微信原生
Component会被区分;只有 Oak 组件获得oakPath、oakId等 runtime props。 - 插件使用 VSIX 内置的 Oak CLI 编辑器 runtime,不读取项目旁边的 CLI checkout、全局 CLI 或
OAK_CLI_ROOT,从而保证扩展发布版本的行为可复现。
i18n 检查与跳转
- 标准 render 的
t(...)、OakComponent 的this.t(...)和 XML/WXML 的t(...)使用同一套检查。 - 支持组件 locale、
common::key和entity:key;缺失 key、动态 key 和 placeholder 参数问题会显示 warning。 - hover 会逐行显示已有语言文本,静态 key 可以直接跳到对应 JSON 字段;动态或缺失 key 不生成虚假链接。
调试和性能
oak-assistant.debug.enabled: true时,WXML 虚拟文件写入node_modules/.cache/oak-mp-debug,render、合同、Less 虚拟类型和 source map 写入node_modules/.cache/oak-render-debug。- 调试产物按最近 Oak 项目根组织,支持父目录多项目 workspace;这些文件不是源码,不应提交。
- 3.2.7 之后减少后台重复分析,并增加真实 VS Code Extension Host 性能测试,编辑器诊断不会无条件扫描整个父工作区。
常用命令
| 命令 | 用途 |
|---|---|
oak-assistant: Reload Metadata | 重新读取小程序组件 metadata 并刷新诊断 |
oak-assistant: Show Status | 查看项目、TypeScript、metadata 和组件发现状态 |
oak-assistant: Show Current Props | 查看当前组件属性的类型来源 |
oak-assistant: Pick Current Prop | 打开当前标签的属性选择与补全 |
oak-assistant: Toggle Component Tag Hover | 切换组件标签的完整属性 hover |
使用边界
TypeScript 版本:完整实体语义和 render props 集成依赖 tsserver plugin。当前 TypeScript 7 / tsgo 不能加载同等插件,应在 VS Code 中选择项目的 TypeScript 6 或更低版本并关闭
js/ts.experimental.useTsgo。tsgo 下仍保留 metadata、原生组件和基础 XML 能力。插件不是构建替代品:编辑器只检查当前项目和当前打开文件的语言服务状态;提交前仍需执行项目的
npm run build、make:domain 和目标平台构建。完整安装与排错步骤见开发前必装:Oak Assistant。