在2024年Clojure状态调查中分享您的想法!点击这里参与调查!

欢迎!请访问关于页面获取更多关于这个工作方式的信息。

0
工具跟踪

问题:当使用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发表的评论

嗨Andy,

感谢您的评论,是的,我考虑过这个问题,知道这将是最大的担忧...
我会看看两个可能的方法
- 速度最快:为tools.trace函数和宏添加新参数,以提供可以添加颜色和布局的过滤器
更好的做法:考虑是否应该内联 ap print 代码,或者更好是在 clojure.pprint 中添加语法高亮功能,即使在使用 tools.trace 时并不使用 pprint(同时配合一些不错的库,如https://github.com/AvisoNovate/pretty,这可以添加到 clojure.repl)

最终,添加 ap print(包括颜色和布局) мой用户体验有很大提升...

0
by

评论者:alexmiller

据我所知,这并不是一项政策,而是一种尽量减少它们的喜好。还有其他 contrib 有外部依赖。Luc 作为 contrib 领导人,他是否认为这里是可行的。

0
by

评论者:lprefontaine

我已经调查过了。将 ap print 内联到 tools.trace 将是我首选。
但我们需要请 Vlad Bokov 完成一份 CA(我看不出他在贡献者列表中)
并授予我们包括部分源代码在 tools.trace 中的权利。

作为一个此工具的常规用户,我发现使用参数的方式很痛苦。
我们使用这种模式用于集成测试,以便锁定问题。
然后将输出到文件,在那里 tty ansi 命令不受欢迎。

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

最终,这可以迁移到 core.pprint,但这需要一些时间,才能出现在 clojure 发布中。

同时,我们可以将其在 tools.trace 中孤立出来,以便以后可以移动到其他地方。

有评论吗?

0
by

评论者:lprefontaine

我给 Vlad 发了一封电子邮件,以及这个问题的链接。
我们首先进行线下讨论,然后根据情况制定计划。

0
by
_评论者:razum2um_

嗨 Jérémie,Alex 和 Luc,

我是 ap print 的作者,并且很高兴你喜欢我的库 :)
以下是我对此事的看法

1) 我非常喜欢将其推入 tools.trace 的想法。
2) 目前,所有 Clojure contrib 库的补丁接受策略与语言本身相同,对此我早已有所思虑https://github.com/clojure/clojure/pull/17#issuecomment-53628365。试图理解,如果一个库依赖于另一个库,则后者必须与原始库共享相同的策略,而这并非事实,因为我几乎无法停止接受_PULL_REQUEST。
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
by

评论者:lprefontaine

嗨 Vlad,

这个怎么样改变?

我即将发布 0.7.9。不知道您有没有时间完成上述步骤。

Luc P.

0
by

评论者:lprefontaine

顺便说一下,

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

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