January 3, 2025
By: Kevin

在CIDER中JavaDoc的的显示

  1. 正文
  2. 备注

翻译自cider作者Bozhidar Batsov的文章

正文

长期以来, 在CIDER中处理Java源码一直是个痛点. 这个问题很大程度上源于cider在早期设计中决定只在classpath路径中查找Java源码–当时以为这是最简单的实现方式.

承认得承认这个设计离了个大谱! 尽管后来对原始方案进行了无数次迭代优化, 处理Java源码仍然不够轻松.

虽然引入了enrich-classpath后有所改善, 但它需要改变CIDER(nREPL)的启动方式, 并且由于会在启动时下载所有缺失的源码, 显著拖慢了每个项目的首次CIDER运行速度.

与cider-connect配合使用时也更麻烦, 因为必须通过enrich-classpath启动nREPL. 幸运的是, 我的好友, 传奇Clojure开发者Oleksandr Yakushev最近提出了一种全新思路, 今天我很高兴宣布这个新方案已成为现实!

最新的CIDER MELPA构建版本中有一个令人兴奋的新功能. 更新后, 请尝试启用新变量 cider-download-java-sources (通过 M-x customize-variable cider-download-java-sources 启用).

现在当以下情况发生时, CIDER会自动下载第三方Java类库的源码:

  • 请求查看类或方法的文档时 (C-c C-d C-d).
  • 跳转到Java类定义时 (M-.)

注意: eldoc不会触发自动下载, 因为我们认为这可能会影响用户体验.

该功能无需enrich-classpath即可工作. 自动下载同时支持基于tools.deps和Leiningen的项目.

这两种情况下, 都会启动clojure或lein二进制文件的子进程(这与Clojure 1.12的add-lib机制采用相同方式).

就是这么简单! 新方案如此无缝衔接, 简直像魔法般神奇.

虽然这个方案能满足大多数场景, 但并非完美无缺. 可能在下载私有仓库依赖的源码时遇到问题(特别是当凭证不在全局配置, 而是通过特定别名/配置文件启动REPL时).

如果遇到这种情况请及时反馈, 但我们预计这类案例会很少.

下载通常耗时数秒, 下载后的构件将被所有项目复用. 若下载失败(通常因为该库未向Maven发布-sources.jar构件), CIDER在REPL重启前不会重复尝试下载.

可以通过跳转至clojure.lang.RT/toArray或查看clojure.lang.PersistentArrayMap的文档来测试该功能.

当前计划是在CIDER 1.17(下一个稳定版)中默认关闭此功能, 以便在1.18版本默认启用前收集用户反馈. 我们诚挚期待您帮助测试和完善这项新功能!

同时希望其他内部使用cider-nrepl的Clojure编辑器(如Calva, iced-vim等)也能尽快启用该功能.

以上就是今天的全部内容! 继续快乐编程!

备注

  1. 需要本地存在源码才能进行跳转定义和增强Java补全. 详见此处 ↩
  2. 如果您习惯使用enrich-classpath, 仍可继续使用 ↩
Tags: clojure java cider