Emacs - 无法让Flymake与JSHint合作

时间:2011-10-11 19:39:51

标签: emacs flymake jshint

我正在尝试让JSHint与Flymake合作。

jshint确实安装在/opt/bin中并且有效。 /opt/bin位于Emacs'exec-path

我已关注the directions on the EmacsWiki,并在我的init.el

中进行了此操作
(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)]

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

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

其他建议?

3 个答案:

答案 0 :(得分:1)

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

Here's how I use flymake with jslint,对我来说效果很好 - 代码可能会给你一些关于你出错的线索。

您可能还会考虑js2-mode,它提供了一些类似语言的类似lint的警告,而不需要运行外部进程。

答案 1 :(得分:0)

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

我在Emacs中运行 M-x setenv 来设置NODE_PATH,以便jshint可以找到强大的库。我还在NODE_PATH中设置了/etc/profile

答案 2 :(得分:0)

jshint-mode对我不起作用(我使用的是Linux Mint 14' Nadia') - 我在#fly; flymake的配置中遇到错误"当它运行curl与运行jshint脚本的Node.js实例通信时。这很令人困惑,我不熟悉ELisp来处理.el文件。

我解决了这个问题,而是直接转到github上的Emacs flymake project fork,它现在支持jshint内置(它需要安装为npm -g install jshint,而这需要你安装{ {1}}和node.js(如果您还没有)。这使得事情有效。

还有一点需要注意:在我的Linux机器上,npmnode中已存在的可执行文件,我必须在/usr/sbin中创建一个名为node的符号链接来覆盖前者。这是必要的,因为Linux Mint的Node.js二进制文件(可能是Ubuntu,我还没有检查过)被命名为/usr/local/bin,并且会导致编写许多脚本,假设二进制名称为nodejs失败。您可以通过键入node来测试它:如果它是预先存在的二进制文件,它通常会以静默方式返回到提示符,但如果它是Node.js,它会提示您node(您可以按Ctrl- D退出那里)