Skip to content

语言能力 ​

本页说明 Kode 在 .def 文件上的语言能力,包括高亮、补全、悬停、跳转和诊断。

支持范围 ​

当前重点支持:

  • .def 文件
  • entities.xml
  • 生成后的 Python 实体文件与 .def 的双向关联

语法高亮 ​

.def 按 KBEngine 语义做高亮,不套用普通 XML 的着色规则。

当前高亮重点 ​

  • 区块标签
    • Properties
    • Parent
    • BaseMethods
    • CellMethods
    • ClientMethods
  • 字段标签
    • Type
    • Flags
    • Default
    • DatabaseLength
    • Identifier
    • DetailLevel
    • Arg
  • 类型值
    • UINT32
    • VECTOR3
    • ARRAY
    • FIXED_DICT
    • TUPLE
  • 标志值
    • BASE_AND_CLIENT
    • CELL_PUBLIC
    • ALL_CLIENTS
  • 自定义属性名和方法名

设计目标 ​

  • 让 .def 看起来像 KBEngine DSL,而不是“套了颜色的 XML”
  • 让结构标签、值和业务定义有明显层次
  • 给后续诊断和跳转打基础

智能提示 ​

类型补全 ​

在 <Type> 或 <Arg> 的值语境中会提供常见类型补全。

Flags 补全 ​

在 <Flags> 中会提供 Flags 建议。

DetailLevel 补全 ​

在 <DetailLevel> 中会提供:

  • NEAR
  • MEDIUM
  • FAR

标签补全 ​

输入 < 时会提示常见结构标签。

Hover ​

当前 Hover 分为三类,可以单独开关。

标签说明 ​

例如悬停:

  • Type
  • Flags
  • Properties
  • FIXED_DICT

会显示该标签的用途说明。

配置项:

  • kbengine.hover.showTagDocs

值说明 ​

例如悬停:

  • UINT32
  • BASE_AND_CLIENT
  • FAR

会显示值的含义、用途和说明。

配置项:

  • kbengine.hover.showValueDocs

自定义符号摘要 ​

例如悬停自定义属性或方法:

xml
<HP>
  <Type> UINT32 </Type>
  <Flags> BASE_AND_CLIENT </Flags>
</HP>

会显示当前定义的摘要信息,例如:

  • Type
  • Flags
  • Default
  • DetailLevel
  • Arg

配置项:

  • kbengine.hover.showSymbolDocs

跳转定义 ​

当前支持 ​

  • 从 entities.xml 跳转到对应的 .def
  • 从 .def 中 Type / Arg 里的实体引用跳转到对应实体定义
  • 从生成的 Python 文件跳转回 .def 中的属性和方法

典型示例 ​

xml
<Target>
  <Type> Avatar </Type>
  <Flags> BASE_AND_CLIENT </Flags>
</Target>

把光标放到 Avatar 上,可以跳到 Avatar.def。

重命名 ​

在 .def 文件里把光标放到顶层属性名或方法名上(开标签或闭标签均可),按 F2 即可重命名。

更新范围 ​

  • 同文件内同名声明:属性的全部 Flags 作用域变体、方法所属段内的同名方法
  • 后代实体定义中的同名复述:Parent 链与 Interfaces 混入的传递闭包覆盖到的 .def(传播边对齐引擎装载路径:Parent/接口名取元素的首个子节点——文本取文本、元素取标签名,同引擎 getKey 语义,紧凑的 <Parent><Hero/></Parent> 与文本写法都认,但标签间换行缩进会使首子节点成为空白文本、引擎拼不出父类文件,此时不产生边;实体父类解析到定义根平铺位置、组件 def 的 Parent 在 components/ 内解析、接口固定解析到 interfaces/ 子目录;接口文件装载时不读 Parent;<Interfaces> 只认 interface/Interface/type/Type 四种包裹拼写,以接口名直接命名的子元素(如 <MoveIface/>)引擎不装载、不产生传播边)
  • 开标签与闭标签上的名字同步更新

边界 ​

  • 只更新 .def 面;Python 侧 self.x 访问与方法调用、entities.xml、types.xml、数据库 schema 视图不参与
  • 在复述处发起重命名只向下传播(该文件与其后代),不会回改祖先源头声明
  • BaseMethods / CellMethods / ClientMethods 是三个独立命名空间,同名方法互不影响
  • 新名必须是合法标识符(字母或下划线开头);目录里找不到 entities.xml 定位定义根时只更新当前文件
  • 新名与既有方法/属性/组件同名不做装载校验(引擎侧同名属装载错误,可由「性能分析」命令的同名检查项提示)
  • 文件枚举覆盖定义根整树(含未在 entities.xml 登记的 .def),面向"会被编辑的文件"而非"本轮被装载的文件"

诊断 ​

诊断分成“总开关”和“规则子开关”。

当前规则 ​

  • 未知类型
  • 未知 Flags
  • 未知 DetailLevel
  • 重复属性或方法
  • 属性缺少 Type / Flags

推荐使用方式 ​

如果你觉得过于频繁,不要直接关掉全部诊断,优先关闭这些更吵的规则:

  • kbengine.diagnostics.checkDuplicateDefinitions
  • kbengine.diagnostics.checkMissingPropertyFields

完整配置说明见 配置说明。

当前边界 ​

目前还没有完整做到:

  • 重命名只覆盖 .def 定义与引用面,Python 侧引用同步与实体本身的更名属于下一阶段
  • 默认值与类型的严格匹配检查
  • 跨全部项目实体引用的深度静态分析

这些属于下一阶段增强。

Kode documentation