clj-wisp is a Whitespace-to-Lisp preprocessor for Clojure.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
bin
emacs
examples
README.md
README.org
clj-wisp.scm

README.md

简介

clj-wisp 是一个用来辅助编写Clojure或ClojureScript程序的工具,不仅可以减少括号的输入次数,还可以提高代码质量。

当前版本: 0.91

这个程序改编自 Guile 中的 Wisp,原网址为: http://www.draketo.de/english/wisp ,针对Clojure语言进行了加强和改进。

通过这个小工具,可以实现通过空格缩进来展示Clojure程序结构。这样就可以大量减少括号的输入。

屏幕截图可参考: examples/spacemacs-screen.png http://dustycloud.org/blog/wisp-lisp-alternative/

例如,文件 abc.cw 内容为:

defn abc [x]
    println x

通过运行guile,调用 clj-wisp.scm

guile clj-wisp.scm abc.cw > abc.clj 

可转换为 abc.clj

(defn abc [x]
    (println x))

安装和使用方法

首先安装最新的2.2版本的Guile,更多可参考: https://www.gnu.org/software/guile

然后:

git clone https://github.com/cy2081/clj-wisp.git

cd clj-wisp

examples 目录中的 abc.cw 为例,转换为clj程序,可以运行命令:

guile clj-wisp.scm examples/abc.cw > abc.clj 

注意其中使用了 >

为了方便调用,可调用shell程序 clj-wisp.sh ,例如运行 :

./bin/clj-wisp.sh  examples/abc.cw  abc.clj 

文件名称

文件扩展名默认规定为:

  • cw 用来转换为clj文件,例如: abc.cw 转换为 abc.clj
  • csw 用来转换为cljs文件,例如: abc.csw 转换为 abc.cljs
  • ccw 用来转换为cljc文件,例如: abc.ccw 转换为 abc.cljc

基本语法

这个工具大部分语法和wisp是一样的,可参考wisp文档。根据Clojure的语法规定,为了方便编写代码,进行了改进。

  1. 通过空格缩进来表示层级结构,代替圆括号 ( 的输入。

  2. 行首除了以特定符号开始的以外,转换后,默认前后加上圆括号。

  3. 方括号 [ 和花括号 { 当中的内容保持不变,不进行处理。

  4. 行首符号以 .& 开始,后带空格,表示连续参数,转换后不添加圆括号。

  5. 行中间,用前后带有空格的 :<< 表示新的 ( 开始

  6. 针对常用的变量类型,行首符号是以下的,转换后,保持不变

    "
    [
    {
    :
    ^
    #"
    #{ 
  7. 针对关键字,行首符号以 #: 开始的关键字,转换后,变为关键字函数,行首字符转换为 (:

  8. 针对java调用,行首符号以 #. 开始,后带空格,转换后为 (. 。 行首符号以 #.. 开始,后带空格,转换后为 (..

  9. 针对多态函数,行首符号以 ## 开始,后带空格,转换后,行首加上 (

  10. 以下行首符号带有空格的,转换后,在符号后边加 (

    '  
    , 
    ` 
    #` 
    #' 
    #, 
    #,@, 
    @ 
    # 
    #_ 
    #? 
    #?@ 

更多例子可参考 examples/more.cw ,请和转换后的clj文件对照 。

Emacs 编辑器支持

先安装clojure-mode 和 org-mode。

然后可按照通常的方式调用clj-wisp-mode,请参考 emacs/config-example.el 文件。

截屏: examples/spacemacs-screen.png

小技巧:

  1. 打开Emacs的缩进提示功能可以方便编辑。
  2. Org-mode 中的 tangle 功能,可以帮助转换,可参考例子文件:examples/tangle.org。

参考链接

http://www.draketo.de/english/wisp

http://dustycloud.org/blog/wisp-lisp-alternative/

https://srfi.schemers.org/srfi-119/srfi-119.html

http://www.draketo.de/light/english/wisp-lisp-indentation-preprocessor#sec-3

联系作者

作者:CY,有问题发邮件至:1829233719@qq.com ,欢迎咨询。

版本主要更新

0.91

  • 连续参数,除了原有的 . 符号支持,新增加了 & 符号
  • 行内增加了 << 符号的支持,用来表示行内新的 ( 开始