菜单

开发者工具

相关源文件

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 文档系统管理打开的文件及其内容,提供对文档文本、解析后的源代码和派生信息的有效访问。

文档分为

  • 打开的文档(在 IDE 中编辑)
  • 服务器文档(磁盘上的文件或远程 URL)
  • 文档模块(具有关联模块信息的文档)

来源

诊断系统

诊断系统收集并管理来自多个来源的诊断信息

  • TypeScript 编译器
  • Deno 的代码检查器
  • 模块解析错误
  • 导入验证

诊断信息按来源分类并发布到 LSP 客户端。

来源

TypeScript 服务器集成

Deno 通过一个在单独线程中运行的专用服务器与 TypeScript 集成。

TypeScript 服务器

  • 提供语言服务(代码补全、诊断等)
  • 处理类型检查
  • 管理解析后的模块信息
  • 提供重构功能

来源

代码格式化和 Linting

Deno 提供内置的代码格式化和代码检查功能,这些功能都可以通过 CLI 和 LSP 使用。

格式化程序

格式化器使用 dprint 插件来格式化各种文件类型

  • TypeScript/JavaScript (dprint-plugin-typescript)
  • JSON (dprint-plugin-json)
  • Markdown (dprint-plugin-markdown)

格式化器的架构允许

  • 增量格式化(缓存未更改的文件)
  • 通过 deno.json 进行配置
  • 通过 LSP 进行 IDE 集成
  • 标准输入/标准输出格式化

来源

代码检查器

Deno 包含一个基于 deno_lint crate 的内置代码检查器。代码检查器

  • 检查代码中常见的错误和反模式
  • 可通过 deno.json 配置
  • 可通过 CLI 或 LSP 使用
  • 提供常见问题的快速修复

来源

测试框架

Deno 提供了一个全面的测试框架,允许开发人员编写和运行测试。

测试运行器

该测试运行器可以发现、过滤并运行通过 Deno.test() 定义的测试。它支持:

  • 并行测试执行
  • 按名称或模块过滤测试
  • 不同的测试报告器(漂亮、JSON、TAP、JUnit)
  • 观察模式,在文件更改时重新运行测试
  • 覆盖率报告

来源

文档生成

Deno 包含一个文档生成器,可以从 TypeScript/JavaScript 文件中提取 API 文档,并以各种格式呈现。

文档生成器

文档系统可以:

  • 从 JSDoc 注释提取文档
  • 生成 JSON 文档数据
  • 生成 HTML 文档
  • 文档内置 API 和用户代码

来源

代码覆盖率

Deno 的代码覆盖率工具可帮助衡量测试覆盖率并识别需要更多测试的代码区域。

覆盖率收集器

覆盖率系统:

  • 使用 V8 的覆盖率收集 API
  • 支持 HTML、LCOV 和 JSON 输出格式
  • 可与测试运行器一起使用
  • 处理源映射以实现准确报告

来源

基准测试

Deno 包含一个基准测试工具,可帮助测量代码性能。

基准测试运行器

基准测试工具可以:

  • 运行性能基准测试
  • 比较不同运行之间的性能
  • 以各种格式输出结果
  • 集成到 CI 工作流程中

来源

LSP 功能

LSP 实现提供了丰富的功能集,以增强 IDE 集成。

功能实现关键方法/类型来源
诊断DiagnosticsServer 处理多个诊断源DiagnosticServerUpdateMessage, publish()cli/lsp/diagnostics.rs78-114
自动补全具有导入建议和注册表支持的 get_completions()CompletionItemData, ImportCompletionSettingscli/lsp/completions.rs50-95
转到定义通过 TypeScript 服务进行 get_definition()DefinitionInfoAndBoundSpancli/lsp/tsc.rs859-888
查找引用具有符号规范化的 find_references()ReferencedSymbolcli/lsp/tsc.rs575-607
代码操作CodeActionCollection 包含快速修复和重构TsResponseImportMapper, fix_ts_import_changes()cli/lsp/analysis.rs269-433
格式化format_file()format_parsed_source()FormatCodeSettings, FmtOptionscli/tools/fmt.rs57-158
悬停用于类型信息的 get_quick_info()QuickInfocli/lsp/tsc.rs641-658
测试TestServertest_run_request()TestDefinition, TestModulecli/lsp/testing/execution.rs48-83
文档符号用于文件大纲的 get_navigation_tree()NavigationTreecli/lsp/tsc.rs609-624
语义标记具有标记分类的 semantic_tokens_full()SemanticTokensBuildercli/lsp/semantic_tokens.rs1-50

来源

与配置集成

Deno 的开发工具可以通过 deno.json 配置文件进行配置。

配置系统支持:

  • 通过 ConfigData 和工作区文件夹的多个配置文件
  • 通过 refresh_configuration() 进行动态配置更新
  • 通过 ConfigWatchedFileType 监视配置更改
  • 通过 WorkspaceSettings 按工作区文件夹范围限定设置
  • 通过类型化配置结构与所有开发工具集成

来源

总结

Deno 的开发工具构成了一个支持高效开发的综合生态系统

  1. 语言服务器协议 (LSP) - 提供具有丰富功能的 IDE 集成
  2. 代码格式化 - 确保一致的代码风格
  3. 代码检查 (Linting) - 识别潜在问题并强制执行编码标准
  4. 测试框架 - 促进测试驱动开发
  5. 文档生成器 - 从代码注释创建文档
  6. 覆盖率分析 - 帮助确保全面的测试覆盖
  7. 基准测试 - 支持性能测试和优化

这些工具无缝协同工作,无论是在 CLI 还是 IDE 中,都能提供集成开发体验。