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

欢迎!请查看 关于 页面以获取更多关于如何使用本网站的详细信息。

+1 投票
打印

在 Clojure 和 ClojureScript 中使用代码跳转表和打印 let 时,clojure.pprint/pprint 存在 bug。

Clojure 1.11.1
user=> (require '[clojure.pprint :as pp])

user=> 
(binding [pp/*print-pprint-dispatch* pp/code-dispatch]
  (pp/pprint
   '(let)))

((let)) ;; prints some extra parenthesis

(binding [pp/*print-pprint-dispatch* pp/code-dispatch]
  (pp/pprint
   '(let*)))

(let*) ;; doesn't happen when pprinting any other form

2 答案

+1 投票

问题是,在 clojure.pprint/pprint-let 中,由于 pprint-simple-code-list 已经生成了括号,因此不应该在两个分支中包装 pprint-logical-block

在此添加补丁

From 1761194420c8befe62a6e12cabfd4483b645b703 Mon Sep 17 00:00:00 2001                                
From: Juan Monetta <[email protected]>                                                             
Date: Fri, 10 Nov 2023 11:19:02 -0300                                                                 
Subject: [PATCH] Fix clojure.pprint pprint-let when form doesn't contain                               
 bindings                                                                                              
                                                                                                      
---                                                                                                     
 src/clj/clojure/pprint/dispatch.clj | 15 ++++++++-------                                               
 1 file changed, 8 insertions(+), 7 deletions(-)                                                         
                                                                                                      
diff --git a/src/clj/clojure/pprint/dispatch.clj b/src/clj/clojure/pprint/dispatch.clj                
index 965c0b25..cd1c2b29 100644                                                                        
--- a/src/clj/clojure/pprint/dispatch.clj                                                              
+++ b/src/clj/clojure/pprint/dispatch.clj                                                             
@@ -335,13 +335,14 @@                                                                                 
                                                                                                       
 (defn- pprint-let [alis]                                                                              
   (let [base-sym (first alis)]                                                                        
-    (pprint-logical-block :prefix "(" :suffix ")"                                                    
-      (if (and (next alis) (vector? (second alis)))                                                    
-        (do                                                                                            
-          ((formatter-out "~w ~1I~@_") base-sym)                                                     
-          (pprint-binding-form (second alis))                                                        
-          ((formatter-out " ~_~{~w~^ ~_~}") (next (rest alis))))                                      
-        (pprint-simple-code-list alis)))))                                                            
+    (if (and (next alis) (vector? (second alis)))                                                    
+      (pprint-logical-block                                                                          
+       :prefix "(" :suffix ")"                                                                        
+       (do                                                                                            
+         ((formatter-out "~w ~1I~@_") base-sym)                                                       
+         (pprint-binding-form (second alis))                                                           
+         ((formatter-out " ~_~{~w~^ ~_~}") (next (rest alis)))))                                       
+      (pprint-simple-code-list alis))))                                                                
                                                                                                         
                                                                                                         
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                    
--   
您想要向 Jira 事务添加官方补丁吗?
我不确定我能否这么做,因为我没有Jira用户。
如果您愿意,可以按照贡献者指南[这里](https://clojure.org/dev/dev)进行。这没有任何压力,我只是想建议一下,因为您已经找到了一个可能的解决方案。
0

为跟踪这个问题已创建了Jira票据https://clojure.atlassian.net/browse/CLJ-2816

...