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.js
、tests/mochitest/general/test_interfaces.js
和dom/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 测试进行测试
☐ 你的特性如何与多个隔间交互?如果跨隔间发生引用,或者如果
this
是CrossCompartmentWrapper
会发生什么?☐ 你的错误消息是否在正确的 Realm 中发出,并具有正确的原型?
☐ 如果涉及异步函数或 Promise,用户代码对象是否已解析?如果是,该特性是否正确处理了 Promise 解析的
.then
属性行为?☐ 你是否为你的特性编写了一些 OOM 测试,以确保你的 OOM 处理是正确的?
Web 平台测试注意事项¶
☐ 该特性是否必须专门处理异类对象?考虑当你的特性与 Web 平台上的非常异类对象交互时会发生什么,例如
WindowProxy
、Location
(跨源对象)。☐ 当你的特性与 X 射线 交互时会发生什么?