2011-10-11 48 views
0

我试图让JSHint与Flymake一起工作。Emacs - 无法让Flymake与JSHint一起工作

jshint确实安装在/opt/bin并正常工作。 /opt/bin位于Emacs'exec-path

我已经按照the directions on the EmacsWiki在这个我​​:

(defun flymake-jshint-init() 
    (let* ((temp-file (flymake-init-create-temp-buffer-copy 
        'flymake-create-temp-inplace)) 
     (local-file (file-relative-name 
         temp-file 
         (file-name-directory buffer-file-name)))) 
    (list "jshint" (list local-file)))) 

(setq flymake-err-line-patterns 
     (cons '("^ [[:digit:]]+ \\([[:digit:]]+\\),\\([[:digit:]]+\\): \\(.+\\)$" 
       nil 1 2 3) 
      flymake-err-line-patterns)) 

(add-to-list 'flymake-allowed-file-name-masks 
      '("\\.js\\'" flymake-jshint-init)) 

当我打开JavaScript文件,我的模式行显示为:

[(Javascript Flymake* AC)] 

这很奇怪,因为通常*没有按”当我用C++或Python使用Flymake时,不会出现。根据Flymake文档,Flymake*表示“Flymake目前正在运行”。但是,Flymake没有显示任何错误。

我检查了*Messages*缓冲区,但它只列出了几行Fontifying foo.js... (regexps...................)。没有错误。

其他建议?

回答

0

我找到了一个名为jshint-mode的项目并试过。它创建了一个名为*jshint-mode*的缓冲区,它显示错误:JSHint无法找到强大的模块。

我跑M-X SETENV在Emacs设置NODE_PATH使jshint能找到强大的库。我还在/etc/profile中设置了NODE_PATH

1

尝试使用M-:执行(setq flymake-log-level 3),这将导致flymake打印调试信息为*Messages*

Here's how I use flymake with jslint,它对我很好 - 这段代码可能会给你一些关于你的错误的线索。

您可能还会考虑js2-mode,它提供了一些语言感知的绒毛般的警告,而不诉诸外部进程。

0

jshint-mode并没有为我工作(我使用Linux Mint的14“纳迪娅”) - 我是越来越有“flymake的配置”的错误当它运行curl交谈运行jshint脚本Node.js的实例。这是令人困惑的,我不熟悉ELisp去绕过.el文件。

我解决了这个由而是直接去github上的Emacs flymake project叉现在有jshint支持内置(需要安装为npm -g install jshint这反过来又要求你安装npm和Node.js的,如果你的避风港已经)。这使事情工作。

还有一个警告:在我的Linux机器,node/usr/sbin已经存在的可执行文件,我不得不做出/usr/local/bin名为node的符号链接覆盖前者。这是必要的,因为用于Linux Mint的Node.js二进制文件(可能还有Ubuntu,我没有选中)被命名为nodejs,而且会导致许多假设二进制名称为node的脚本失败。你可以通过输入node来测试它:如果它是预先存在的二进制文件,它通常会静静地返回到提示符,但是如果它是Node.js,它会提示你一个>(你可以按Ctrl-D退出)

相关问题