菜单

REPL

相关源文件

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
MainWorkerJavaScript 运行时环境执行上下文和模块加载
LocalInspectorSessionChrome 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.rs430-485 cli/tools/repl/session.rs639-705 cli/tools/repl/session.rs729-776

编辑器集成

ReplEditor 通过集成 Rustyline 库和 Deno 的语言服务,提供了高级编辑功能。

代码补全

补全系统通过分析当前输入上下文并查询 V8 运行时和语言服务器,提供智能建议。

输入验证

验证系统使用令牌级分析来确定何时输入已完成或需要继续。

来源: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 子系统,以提供完整的开发环境

运行时集成

测试集成

开发工具

来源:cli/tools/repl/mod.rs168-278 cli/tools/repl/session.rs463-482 cli/tools/repl/session.rs707-727