Skip to content

Highlight.js 语言定义是函数,不应标为 JsObject #20

Open

Description

@tiye

使用者影响

当前 main 663c00237e0b7d95b4b8a176f7f11348778e1b09 的 app.util/register-language! 和 HighlightHost.register-language! 把语言定义参数标为 JsObject,但真实 Highlight.js 语言模块导出的是函数。该标注掩盖了函数边界,不能作为类型加强完成的证明。

安装的正式 npm highlight.js@11.8.0 官方声明:registerLanguage(languageName: string, language: LanguageFn),LanguageFn = (hljs: HLJSApi) => Language;lib/languages/clojure.js 实际定义 function clojure(hljs)。owner 是 highlightjs/highlight.js,不是 Highlight.js 本身的声明错误。

建议本应用将这两个参数改为真实 Fn,保留其开放性,不假装已证明更具体的闭合 Calcit callable,也不增加 unsafe / JsObject 强转。有效 Clojure 语言定义和高亮行为保持,直接调用者必须传函数而不是普通对象。再用正式 Calcit 0.30.1 完整 strict、原测试和真实页面验证。

本轮正在实施针对性修复。前一候选已通过原门禁,但那不证明这处类型正确;尚未声称非法对象已执行或造成真实用户故障。无需编译器新增硬编码 fix/proof 规则、兼容预算或独立验证脚本。

Activity

  1. tiye commented on Oct 24, 2026

    @tiye
    MemberAuthor

    修复在 PR #21:语言参数改为真实开放 Fn,原始导入先 let 绑定局部,再通过 fn? 检查后传递同一函数。正式 0.30.1 完整 CI、原测试、实际注册/高亮/展示切换/刷新通过。不是用 unsafe 或类型断言伪造 callable 合同;未声称证明 LanguageFn 完整签名。导入与局部守卫的诊断差异已反馈 Calcit #2355,仅请求提示改进、不新增硬编码迁移规则。未合并或部署生产。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions