2024 年 Clojure 状态调查! 中分享您的想法。

欢迎!请参阅 关于 页面以获取更多关于如何使用本站的信息。

0
tools.trace

问题:当使用 trace-ns 时,由于函数调用重要且数据结构庞大,输出流的非常长显示很难阅读。
解决方案:当在输出字符串中打印值时使用(链接:https://github.com/razum2um/aprint 文本:Aprint 库),现在获得语法高亮和更好的数据结构布局。
权衡:将新的依赖项添加到 tools.trace 中。
测试:是,修改清理函数,使其也清除 aprint 添加的颜色信息,所以 100% 测试通过。

9 个答案

0

评论者:jafingerhut

Jeremie,我不确定性,但我相信这是 Clojure contrib 库的一个政策(不)依赖于除了 Clojure 或 Clojure contrib 之外的其他库。

也许如果在一些现有的 tools.trace 函数或宏中添加新的 arities,sprint 或任何其他开发者所需的函数可以作为参数提供以控制打印发生的方式?

0

评论者:jgrodziski

嗨 Andy,

感谢您的评论,是的,我已经考虑过这一点,知道这将是最重大的担忧...
我将查看两种可能性
- 最快的方法:向 tools.trace 函数和宏添加新参数以提供可以添加颜色和布局的过滤器
- 更好的方法:查看内联 aprint 代码是否值得考虑,或者更好的方法是在 clojure.pprint 中添加语法高亮功能,即使 pprint 在 tools.trace 中没有使用(以及像(链接:https://github.com/AvisoNovate/pretty 文本:Pretty)这样的整洁库,可以添加到 clojure.repl)

最终,添加 aprint(包括颜色和布局)使打印的可用性大幅提升...

0

由 alexmiller 发布的评论

Andy,据我所知,这并不是一项政策,而是一种尽可能减少它们的偏好。还有其他一些贡献有外部依赖项。Luc作为贡献的负责人,他是否认为这是可以接受的。

0

由 lprefontaine 发布的评论

我对此进行了研究。在tools.trace中将`aprint`内联是我的首选方案。
但是,我们需要让Vlad Bokov填写一个CA(我没有在贡献者名单中看到他)
并授予我们包括is部分源代码在tools.trace中的权利。

作为这个工具的常规用户,我发现在这个问题上很痛苦。我们使用这种方式
集成测试模式来解决问题。然后输出到一个文件,其中tty ansi命令不欢迎。
不是受欢迎的。

我认为我们需要一个模式状态来启用/禁用这个特性。在repl中,只需要一个
语句就可以得到任何你调用的trace fn的彩色输出。这可以是你的
用户配置文件的一部分。

最终,这可能会迁移到core.pprint,但这需要一些时间才能在clojure版本中得到体现。

同时,我们可以将此保留在tools.trace中,以便以后可以在其他地方移动。

评论?

0

由 lprefontaine 发布的评论

我给Vlad发了一封邮件,并将这个问题的URL发给了他。
我们首先进行线下讨论,然后根据计划继续前进。

0
_由 razum2um_ 发布的评论

嗨 Jérémie,Alex和Luc,

我是aprint的作者,关于你喜欢我的库真的很高兴 :)
以下是关于此事的看法

1) 我真的很欣赏将`aprint`推入`tools.trace`的想法
2) 目前,所有clojure contrib-libs都有与语言相同的补丁接受政策,这我已经想到了 https://github.com/clojure/clojure/pull/17#issuecomment-53628365 尝试理解,如果库依赖于另一个库,最后一个库必须与原始库有相同的政策,这并不是这种情况,因为我几乎停止接受pull requests。
3) 如果您不能改变这项政策,我认为"内联"是最佳选择。

现在关于“要内联什么?”这个问题,我有一些看法

4) 我有点惊讶,人们不介意与我分享将此与repl整合的想法,就像这样 https://github.com/greglook/whidbey, 他们不喜欢颜色,他们只喜欢布局。因此,我们可以放弃着色,并消除对clansi的依赖。或者我可以在行内使用clansi(具有MIT许可证),记录一个: ^dynamic来打开颜色(默认关闭)
5) 适用于紧凑布局的代码依赖于jline,它肯定不会进入内部 :) 因此,它将保持pprint/*print-right-margin*的默认值,默认为72,这在我的看法中并不是最佳选择,但我们就让它这样吧。(或者你还在运行非常旧的终端上的clojure吗?)
6) 我认为引入一个新的: ^dynamic来处理它没有意义,我建议依靠pprint/*print-pretty*,如果是真的,则使用紧凑布局而不是pprint的默认布局

因此
- 我可以填写并签署一个CA
- 准备一个依赖项免补丁,只有紧凑布局(以及如果您需要则着色)受pprint/*print-pretty*和pprint/*print-right-margin*控制
0

由 lprefontaine 发布的评论

嗨Vlad,

这个有什么变化吗?

我即将发布0.7.9版。不知道你是否有空完成以上的步骤。

Luc P.

0

由 lprefontaine 发布的评论

顺便说一句,

我仍然在Hollerith卡片上敲Clojure代码,所以当一行
超出80个字符并且最后8列无法使用时,我不熟悉这片领域 :)

0
参考: https://clojure.atlassian.net/browse/TTRACE-9(由alex+import报告)
...