REPL(Read-Eval-Print Loop)系统为 Deno 提供了一个交互式的 JavaScript 和 TypeScript 执行环境。它使用户能够实时执行代码片段、探索 API 和测试功能,并支持完整的 TypeScript、智能代码补全和语法高亮。
有关提供智能功能的语言服务器协议实现的更多信息,请参阅 语言服务器协议。有关底层 CLI 命令处理的详细信息,请参阅 CLI 架构。有关运行时执行的详细信息,请参阅 运行时架构。
REPL 系统围绕三个主要组件构建,这些组件协同工作以提供交互式开发体验。
来源:cli/tools/repl/mod.rs41-45 cli/tools/repl/session.rs173-189 cli/tools/repl/editor.rs420-425 cli/tools/repl/channel.rs111-114
ReplSession 结构体作为 REPL 功能的中心协调器,管理 V8 执行上下文、TypeScript 转译和求值管道。
| 组件 | 目的 | 关键方法 |
|---|---|---|
ReplSession | 主要会话控制器 | evaluate_line_and_get_output, evaluate_ts_expression |
MainWorker | JavaScript 运行时环境 | 执行上下文和模块加载 |
LocalInspectorSession | Chrome DevTools Protocol 接口 | post_message_with_event_loop, evaluate_expression |
ReplLanguageServer | 用于补全的 LSP 集成 | completions, commit_text |
会话初始化过程建立执行环境,并注入一个设置了 REPL 特定全局变量的序言脚本。
来源:cli/tools/repl/session.rs192-292 cli/tools/repl/session.rs86-134
REPL 求值过程处理 TypeScript 转译、表达式的对象包装以及错误格式化。
求值过程包含几个关键转换:
{ 开头的表达式被包装在括号中,以将其视为对象字面量而非块语句。cli/tools/repl/session.rs437-443来源:cli/tools/repl/session.rs430-485 cli/tools/repl/session.rs639-705 cli/tools/repl/session.rs729-776
ReplEditor 通过集成 Rustyline 库和 Deno 的语言服务,提供了高级编辑功能。
补全系统通过分析当前输入上下文并查询 V8 运行时和语言服务器,提供智能建议。
obj.prop 等表达式,它会求值对象的类型并检索可用的属性。cli/tools/repl/editor.rs204-214globalThis 属性和词法作用域声明。cli/tools/repl/editor.rs216-229验证系统使用令牌级分析来确定何时输入已完成或需要继续。
来源:cli/tools/repl/editor.rs184-231 cli/tools/repl/editor.rs233-321 cli/tools/repl/editor.rs323-417
REPL 通过消息传递系统桥接同步编辑器操作和异步 Deno 操作。
通道系统处理两种类型的操作:
来源:cli/tools/repl/channel.rs23-38 cli/tools/repl/channel.rs61-109 cli/tools/repl/channel.rs116-127
REPL 集成了多个 Deno 子系统,以提供完整的开发环境
CliMainWorkerFactory 创建独立的执行环境 cli/tools/repl/mod.rs187-198Deno.test() 调用时自动运行测试 cli/tools/repl/session.rs463-482来源:cli/tools/repl/mod.rs168-278 cli/tools/repl/session.rs463-482 cli/tools/repl/session.rs707-727