Deno 项目提供了一套丰富的内置开发者工具,可提高生产力和代码质量。本文档介绍了 Deno 开发者工具生态系统的架构和功能,包括语言服务器协议实现、代码格式化、代码检查、测试、文档生成以及其他生产力功能。
Deno 配备了一套全面的开发工具,它们协同工作,提供无缝的用户体验。这些工具可以通过 Deno CLI 使用,也可以通过语言服务器协议 (LSP) 集成到您的 IDE 中。
来源
Language Server Protocol (LSP) 实现是 IDE 集成的骨干。它在支持的编辑器中实现了诸如代码补全、诊断、跳转到定义等功能。
Deno 中的语言服务器实现由几个关键组件构成
LanguageServer 结构体是 LSP 请求的主要入口点。它处理初始连接设置,并将大部分工作委托给 Inner 结构体,该结构体维护服务器状态。
主要组成部分包括:
client: Client - LSP 客户端通信接口inner: Rc<tokio::sync::RwLock<Inner>> - 服务器状态,包装在 async RwLock 中init_flag: AsyncFlag - 在初始化完成之前阻止请求performance: Arc<Performance> - 性能监控Inner 结构体包含
cache: LspCache - 管理文件和 HTTP 缓存config: Config - 工作区配置管理document_modules: DocumentModules - 文档和模块跟踪ts_server: Arc<TsServer> - TypeScript 语言服务diagnostics_server: DiagnosticsServer - 诊断处理resolver: Arc<LspResolver> - 模块解析服务来源
LSP 文档系统管理打开的文件及其内容,提供对文档文本、解析后的源代码和派生信息的有效访问。
文档分为
来源
诊断系统收集并管理来自多个来源的诊断信息
诊断信息按来源分类并发布到 LSP 客户端。
来源
Deno 通过一个在单独线程中运行的专用服务器与 TypeScript 集成。
TypeScript 服务器
来源
Deno 提供内置的代码格式化和代码检查功能,这些功能都可以通过 CLI 和 LSP 使用。
格式化器使用 dprint 插件来格式化各种文件类型
格式化器的架构允许
deno.json 进行配置来源
Deno 包含一个基于 deno_lint crate 的内置代码检查器。代码检查器
deno.json 配置来源
Deno 提供了一个全面的测试框架,允许开发人员编写和运行测试。
该测试运行器可以发现、过滤并运行通过 Deno.test() 定义的测试。它支持:
来源
Deno 包含一个文档生成器,可以从 TypeScript/JavaScript 文件中提取 API 文档,并以各种格式呈现。
文档系统可以:
来源
Deno 的代码覆盖率工具可帮助衡量测试覆盖率并识别需要更多测试的代码区域。
覆盖率系统:
来源
Deno 包含一个基准测试工具,可帮助测量代码性能。
基准测试工具可以:
来源
LSP 实现提供了丰富的功能集,以增强 IDE 集成。
| 功能 | 实现 | 关键方法/类型 | 来源 |
|---|---|---|---|
| 诊断 | DiagnosticsServer 处理多个诊断源 | DiagnosticServerUpdateMessage, publish() | cli/lsp/diagnostics.rs78-114 |
| 自动补全 | 具有导入建议和注册表支持的 get_completions() | CompletionItemData, ImportCompletionSettings | cli/lsp/completions.rs50-95 |
| 转到定义 | 通过 TypeScript 服务进行 get_definition() | DefinitionInfoAndBoundSpan | cli/lsp/tsc.rs859-888 |
| 查找引用 | 具有符号规范化的 find_references() | ReferencedSymbol | cli/lsp/tsc.rs575-607 |
| 代码操作 | CodeActionCollection 包含快速修复和重构 | TsResponseImportMapper, fix_ts_import_changes() | cli/lsp/analysis.rs269-433 |
| 格式化 | format_file() 和 format_parsed_source() | FormatCodeSettings, FmtOptions | cli/tools/fmt.rs57-158 |
| 悬停 | 用于类型信息的 get_quick_info() | QuickInfo | cli/lsp/tsc.rs641-658 |
| 测试 | TestServer 与 test_run_request() | TestDefinition, TestModule | cli/lsp/testing/execution.rs48-83 |
| 文档符号 | 用于文件大纲的 get_navigation_tree() | NavigationTree | cli/lsp/tsc.rs609-624 |
| 语义标记 | 具有标记分类的 semantic_tokens_full() | SemanticTokensBuilder | cli/lsp/semantic_tokens.rs1-50 |
来源
Deno 的开发工具可以通过 deno.json 配置文件进行配置。
配置系统支持:
ConfigData 和工作区文件夹的多个配置文件refresh_configuration() 进行动态配置更新ConfigWatchedFileType 监视配置更改WorkspaceSettings 按工作区文件夹范围限定设置来源
Deno 的开发工具构成了一个支持高效开发的综合生态系统
这些工具无缝协同工作,无论是在 CLI 还是 IDE 中,都能提供集成开发体验。