JavaScript 语言特性检查清单

所以你正在 SpiderMonkey 中开发一个新的 JavaScript 特性:恭喜!以下是一些检查清单和指南,帮助你顺利完成开发。

高级特性发布检查清单。

(注意:其中一些步骤可以并行进行,因此不必严格按照自上而下的顺序进行)

  • ☐ 向 dev-platform 发送原型开发意向邮件。这是 公开指南 流程的一部分。从历史上看,我们发送原型开发意向邮件做得并不好,但我们总能做得更好。

  • ☐ 第 2 阶段或更早阶段的提案应在编译时保护下开发,默认情况下禁用。

  • ☐ 在 modules/libpref/init/StaticPrefList.yaml 中为该特性创建首选项,并在 js/src/shell/js.cpp 中创建命令行选项。

  • ☐ 实现该特性。

  • ☐ 使特性通过首选项禁用。

  • ☐ 导入该特性的 test262 测试用例,或者如果它们已经导入则启用它们。(有关指导,请参阅 js/src/test/Readme.txt

  • ☐ 联系 [email protected] 安排该特性的模糊测试。

  • ☐ 将 shell 选项添加到 js/src/shell/fuzz-flags.txt。这也会向其他模糊测试工具发出信号,表明该特性已准备好进行模糊测试。

  • ☐ 向 dev-platform 发送发布意向邮件。这也是 公开指南 流程的一部分。

  • ☐ 发布该特性

    • ☐ 将首选项的默认值设置为 true。

    • ☐ 仔细检查当前为 NIGHTLY_BUILD 的任何代码,现在是否应该无条件地构建,例如在 js/src/vm/JSObject.cpp 中。你可能希望运行 中央作为 Beta 模拟,以确保你已捕获任何残留的 NIGHTLY_BUILD 部分。

    • ☐ 更新 js/xpconnect/tests/chrome/test_xrayToJS.xhtml 以反映对现有全局对象的任何更改。这是一个 mochitest,你需要运行 mach test js/xpconnect/tests/chrome/test_xrayToJS.xhtml

    • ☐ 对于新的全局对象,以下测试也需要更新:dom/serviceworkers/test/test_serviceworker_interfaces.jstests/mochitest/general/test_interfaces.jsdom/workers/test/test_worker_interfaces.js。这些是 mochitests,你需要运行,例如 mach test dom/serviceworkers/test/test_serviceworker_interfaces.html

  • ☐ 创建一个后续 Bug,以便稍后删除首选项。

补充检查清单

发布注意事项检查清单

  • ☐ 如果该特性可能导致 Web 兼容性问题,请考虑在发布一个或两个周期内使用 NIGHTLY_ONLY,使用 nightly 作为尝试解决潜在的 Web 兼容性问题。

Web 平台集成检查清单

有时 Web 平台的复杂性会渗透到 JS 特性工作中

  • ☐ 确保存在适当的 Web 平台测试,并且正在运行。

  • ☐ 你的特性是否在 Worker 中正确启用?(它们与主线程具有不同的选项集,很容易忘记它们!)你可能需要编写一个 mochitest。

语法特性检查清单

  • Reflect.parse 是否正确解析并返回新语法的结果?

  • Reflect.parse 测试也很有趣,因为它们可以在完成字节码发射之前为新语法编写。

  • ☐ 新语法条目在解析树中的位置是否正确?

  • ☐ 你的错误是否以合理的位置信息发出?

测试注意事项检查清单

SpiderMonkey 中存在许多复杂性,规范并不总是能捕获到这些复杂性,因此以下是一些关于需要注意的行为的实用指南,这些行为可能不会通过特性的 test262 测试进行测试

  • ☐ 你的特性如何与多个隔间交互?如果跨隔间发生引用,或者如果 thisCrossCompartmentWrapper 会发生什么?

  • ☐ 你的错误消息是否在正确的 Realm 中发出,并具有正确的原型?

  • ☐ 如果涉及异步函数或 Promise,用户代码对象是否已解析?如果是,该特性是否正确处理了 Promise 解析的 .then 属性行为

  • ☐ 你是否为你的特性编写了一些 OOM 测试,以确保你的 OOM 处理是正确的?

Web 平台测试注意事项

  • ☐ 该特性是否必须专门处理异类对象?考虑当你的特性与 Web 平台上的非常异类对象交互时会发生什么,例如 WindowProxyLocation(跨源对象)。

  • ☐ 当你的特性与 X 射线 交互时会发生什么?