【问题标题】:how would you get the clojure reader to keep formatting?你如何让clojure阅读器保持格式?
【发布时间】:2013-08-12 10:35:21
【问题描述】:

如果我的代码如下所示:

(apply + 0
   [1 2 3 4])

我把它通过阅读器,它变成了

(apply + 0 [1 2 3 4]) 和格式(回车和空格)丢失

有没有办法在读取时保存代码的格式?


例如:

(fact [{:type :section
        :title "Normal Operation"
        :tag "normal-operation"}]

  "The most straightforward code is one where no issues raised. This
   can be seen in Example {{ribol-normal-eq}} below:"

  [{:type :image :href "ribol-normal.png"}]

  [[{:tag "ribol-normal-eq"}]]
  (manage                          ;; L2
   [1 2 (manage 3)])               ;; L1 and L0
  => [1 2 3]

转化为:

1 - 正常运行

最直接的代码是没有问题的代码。这 见下例1.1:

[[ribol-normal.png]]

1.1

(manage                          ;; L2
   [1 2 (manage 3)])             ;; L1 and L0

=> [1 2 3]

【问题讨论】:

    标签: clojure


    【解决方案1】:

    clojure.pprint/writecode-dispatch 一起使用。

    (clojure.pprint/write
      '(apply + 0 [1 2 3 4])
      :dispatch clojure.pprint/code-dispatch)
    

    它不会给你想要的缩进,因为应用形式太短,而且你只为最后一个参数换行是很随意的。但是,如果您想打印 Clojure 代码,这是正确的做法。它将正确打印 let- 和其他各种表格。

    这是一个更长的例子

    (clojure.pprint/write
      '(defn plugin
         "A leiningen plugin project template."
         [name]
         (let [render (renderer "plugin")
               unprefixed (if (.startsWith name "lein-")
                            (subs name 5)
                            name)
               data {:name name,
                     :unprefixed-name unprefixed,
                     :sanitized (sanitize unprefixed),
                     :year (year)}]
           (main/info
             (str "Generating a fresh Leiningen plugin called " name "."))
           (->files
             data
             ["project.clj" (render "project.clj" data)]
             ["README.md" (render "README.md" data)]
             [".gitignore" (render "gitignore" data)]
             ["src/leiningen/{{sanitized}}.clj" (render "name.clj" data)]
             ["LICENSE" (render "LICENSE" data)])))
      :dispatch
      clojure.pprint/code-dispatch)
    

    =>

    (defn plugin
      "A leiningen plugin project template."
      [name]
      (let [render (renderer "plugin")
            unprefixed (if (.startsWith name "lein-") (subs name 5) name)
            data {:name name,
                  :unprefixed-name unprefixed,
                  :sanitized (sanitize unprefixed),
                  :year (year)}]
        (main/info
          (str "Generating a fresh Leiningen plugin called " name "."))
        (->files
          data
          ["project.clj" (render "project.clj" data)]
          ["README.md" (render "README.md" data)]
          [".gitignore" (render "gitignore" data)]
          ["src/leiningen/{{sanitized}}.clj" (render "name.clj" data)]
          ["LICENSE" (render "LICENSE" data)])))
    

    【讨论】:

    • hmmm...这不是我想要的...因为它需要打印任意中断但那真的很有用。谢谢!
    • 如果你想打印任意中断,你需要传递一个缩进的字符串。读者会将您的申请表作为列表并打印出来。
    • 你能举个例子吗?
    • 您的输入源到底是什么?表格还是字符串?关键是,如果您使用读取,您的字符串将被读取为一个对象,在您的情况下是一个列表(类型 (with-in-str "(apply + 0 [1 2 3 4])" (read))) => clojure.lang.PersistentList。一个列表obv。不会有缩进或换行符。
    • 查看更新的问题以获得动机。我坚持的主要事情是如何在不丢失格式或 cmets 的情况下获取代码
    【解决方案2】:

    sjacket 是朝着这个方向迈出的第一步。但它仍处于开发的早期阶段。

    【讨论】:

      猜你喜欢
      • 2018-01-27
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      相关资源
      最近更新 更多