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

欢迎!请参阅关于页面了解有关此操作的一些更多信息。

0投票
tools.trace

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

9 答案

0投票

评论者:jafingerhut

Jeremie,我不确定,但我想这可能是Clojure贡献库的政策,依赖于除Clojure或Clojure贡献之外的其他库。

也许如果向某些现有的tools.trace函数或宏添加了新的arity,则可以提供sprint或任何其他开发者所需的函数作为参数来控制打印方式?

0投票

评论者:jgrodziski

Hi Andy,

感谢您的评论,是的,我考虑过这个问题,知道这将是最大的担忧...
我会看看两种可能性
- 最快的:向tools.trace函数和宏添加新参数,以提供可以添加颜色和布局的过滤器
—— 更好的做法:看看将 aprint 代码内联是否值得考虑,或者更好的做法是在 clojure.pprint 中添加语法高亮功能,尽管在 tools.trace 中并没有使用 pprint(以及一些有趣的库,如:https://github.com/AvisoNovate/pretty 文字:Pretty),这些可以添加到 clojure.repl)

最后,添加 aprint(对于颜色和布局)在我的可用性方面产生了巨大的影响...

0投票

评论者:alexmiller

据我所知,这不是政策,而是一种偏好,即尽可能地最小化它们。还有其他的 contribs 有外部依赖。Luc 作为 contrib 的负责人,他是否认为这在这里是可行的。

0投票

评论者:lprefontaine

我已经调查过这个问题了。' Inline aprint' 在 tools.trace 中是我的首选。
然而,我们需要让 Vlad Bokov 填写一份 CA(我看不到他在贡献者列表中)
并授予我们包含其部分源代码在 tools.trace 中的权利。

作为该工具的常规用户,我觉得 arity 很痛苦。碰巧我们用它来
集成测试模式来击中问题。然后输出到一个文件中,其中 tty ansi 命令
不受欢迎。

我认为我们需要一个模式状态来启用/禁用此功能。在 repl 中,你需要一条语句
以获得彩色输出,无论你调用的是哪个 trace 函数。这可以是你的
用户配置文件的一部分。

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

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

评论?

0投票

评论者:lprefontaine

我已经给 Vlad 发了一封邮件,以及这个工单的链接。
我们将先进行线下讨论,如果可以的话,然后继续执行计划。

0投票
_评论者:razum2um_

嗨 Jérémie、Alex 和 Luc,

我是 aprint 的作者,很高兴你喜欢我的库 :)
以下是我对它的一些想法

1) 我真的很喜欢将其推入 tools.trace 的想法
2) 目前所有 clojure contrib-libs 与语言的补丁接受策略相同,这让我感到有些困惑:https://github.com/clojure/clojure/pull/17#issuecomment-53628365 尝试理解,如果一个库依赖于另一个库,则后者必须与原始库共享相同的策略,但这并不是事实,因为我几乎不停地接受拉取请求。
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

顺便说一句,

我仍然在霍勒里特卡上敲击 Clojure 代码,因此在行超过 80 个字符时,最后 8 列也根本无法使用的情况下,我感到有些不熟悉。
:()

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