请在 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 函数或宏添加了新的arity,则可以提供 sprint 或任何开发人员希望使用的函数作为参数来控制打印方式。

0

评论者:jgrodziski

Hi 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(我没有在他的贡献者名单中看到他)
并授予我们使用部分其源代码纳入tools.trace的权限。

作为一个定期使用此工具的用户,我发现arity途径令人痛苦。
我们通常在使用集成测试模式时用它来定位问题。
然后输出到文件,其中tty ansi命令不受欢迎。

我认为我们需要一个模式状态来启用/禁用此功能。
在repl中,你只需要一个语句就能获得彩色输出,无论你调用的是哪个跟踪函数。
这可以成为您用户资料的一部分。

最终,这可能会迁移到core.pprint,但这将需要一些时间才能进入clojure版本。

在此期间,我们可以将其保存在tools.trace中,以便稍后将其移动到其他位置。

评论?

0

评论由:lprefontaine 发布

我曾给Vlad发过一封电子邮件和这个工单的链接。
我们将首先进行线下讨论,如果可以的话,然后按照计划进行。

0
评论由:razum2um_ 发布

嗨 Jérémie,Alex 和 Luc,

我是aprint的作者,很高兴你们喜欢我的库 :)
以下是我对此的看法

1) 我真的很喜欢把它推入tools.trace
2) 当前所有clojure contrib-libs都与lang具有相同的补丁接受策略,我已经对此表示过疑问 https://github.com/clojure/clojure/pull/17#issuecomment-53628365 尝试理解,如果一个库依赖于另一个库,则最后一个库必须与原始库具有相同的策略,但这并不是这种情况,因为我都很难停止接受pull请求。
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*,如果是 true - 则使用精简布局而不是 pprint 的默认布局

因此
- 我可以填写并签署一份 CA
- 为你准备一个依赖的免费补丁,包括只有精简布局(如果你喜欢,还可以包括颜色),由 pprint/*print-pretty* 和 pprint/*print-right-margin* 控制
0
by

评论由:lprefontaine 发布

嗨,Vlad,

这个问题有什么进展吗?

我即将发布 0.7.9。不知道你是否有过时间来完成上述步骤。

卢克·P。

0
by

评论由:lprefontaine 发布

顺便说一句

我仍然在 Hollerith 卡上敲 Clojure 代码,所以当一行超过 80 个字符,最后 8 列根本无法使用时,我不太熟悉
:)

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