;;; hs-lint.el---HLint代码检查的次要模式;; 版权所有2009(C)Alex Ott;;;; 作者:Alex Ott;; 关键词:haskell,lint,HLint;; 要求:;; 状态:按GPL2或更高级别分配;; 来自HLint的典型消息如下:;;/用户/ott/projects/lang-exp/haskell/test.hs:52:1:Eta reduce;; 找到:;; count1 p l=长度(过滤器p l);; 也许:;; count1 p=长度。过滤器p(需要“编译”)(defgroup hs-lint无将HLint作为Emacs的下级运行,分析错误消息:group的工具:group’haskell)(defcustom hs-lint命令“hlint”“\\[hlint]的默认hs lint命令。”:type'字符串:group'hs-lint)(默认hs-lint-save-files t“运行HLint或否时保存修改的文件(询问用户)”:type'布尔值:group'hs-lint)(defcustom hs-lint replace-with-suggements nil(自定义hs-lin替换-建议为零)“用建议的替换项替换用户代码”:type'布尔值:group'hs-lint)(defcustom hs-lin重置-无灰“用建议的替换自动替换用户代码”:type'布尔值:group'hs-lint)(卸下hs-lint-process-setup()“为“hlint”设置编译变量和缓冲区。”(运行挂钩的hs-lint-setup-hook);; 替换建议的正则表达式;;;; ^\(.*?\):\([0-9]+\):\([0-9]+\): .*;; 找到:;; \s+\(.*\);; 也许:;; \s+\(.*\)(defvar hs-lint-regex“^\\(.*?\\):\\([0-9]+\\):\\“HLint消息的Regex”)(defon make-short-string(str-maxlen)(如果(<(length str)maxlen)字符串(concat(子字符串str 0(-maxlen 3))“…”)(消除hs-lin置换建议()“执行建议的实际替换”(转到字符(点-分钟))(while(re-search-forward hs-lint-regex零t)(让*((fname(match-string 1))(燧石(字符串对数字(匹配字符串2))(旧代码(匹配字符串4))(新代码(匹配字符串5))(消息(concat“替换”(make-short-string old-code 30)“'带有'”(使短字符串成为新代码30)“'”)(bline 0)(第0行)(spos 0)(新代码“”)(储蓄外汇(切换到缓冲区(get-file-buffer-fname))(转到fline)(直线起点)(设置bline(点))(当(或hs-升-不含灰烬(是或否-消息)(直线终点)(设置线(点))(直线起点)(setf旧代码(regexp-quote旧代码))(while(字符串匹配“\\\\”旧代码spos)(setf new-old-code(concat new-old-code)(子字符串旧代码spo(匹配-开始0))"\\ *"))(setf spos(match-end 0))(setf new-old-code(concat new-old-code(子串旧代码spos))(删除文本属性bline eline'(composition nil))(当(重新搜索新代码行)(替换比赛新代码零))))(取消hs皮棉完成勾手(buf msg)函数,在HLint执行结束时执行(如果是hs-lin替换-有建议(hs-lin替代建议)(下一个错误1 t))(定义编译模式hs-模式“HLint”“检查Haskell源代码的模式。”(set(make-local-variable编译过程设置功能)'hs-lint-process-setup)(set(make-local-variable‘编译-可输入)t)(设置(make-local-variable‘编译-滚动-输出)nil)(设置(make-local-variable编译-完成-函数)(列出'hs-lint-fish-hook))(去除hs棉绒()“使用haskell源为当前缓冲区运行HLint”(交互式)(save-some-buffers hs-lint-save-files)(编译-开始(concat hs-lint-command“\”“buffer-file-name”“\”)'hs-lint-mode))(提供'hs-lint);;; hs-lint.el到此结束