Emacs - Не могу заставить Flymake работать с JSHint - PullRequest
0 голосов
/ 11 октября 2011

Я пытаюсь заставить JSHint работать с Flymake.

jshint действительно установлен в /opt/bin и работает. /opt/bin в Emacs 'exec-path.

Я следовал инструкциям на 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 ]

1 голос
/ 12 октября 2011

Попробуйте использовать M-: для выполнения (setq flymake-log-level 3), что заставит flymake напечатать отладочную информацию в *Messages*.

Вот как я использую flymake с jslint , который хорошо работает для меня - этот код может дать вам подсказку о том, что у вас не так.

Вы могли бы также рассмотреть js2-mode, который предоставляет некоторые языковые предупреждения, похожие на язык, не прибегая к запуску внешнего процесса.

0 голосов
/ 19 марта 2013

jshint-mode не работал для меня (я использую Linux Mint 14 'Nadia') - я получал ошибки с "конфигурацией flymake", когда он запускает curl для связи с узлом. js экземпляр, выполняющий сценарий jshint. Это сбивало с толку, и я не знаком с ELisp, чтобы возиться с файлами .el.

Я решил эту проблему, перейдя прямо к проекту Emacs flymake fork на github, который теперь имеет встроенную поддержку jshint (его нужно установить как npm -g install jshint, что, в свою очередь, требует от вас установки npm и node.js, если вы еще этого не сделали). Это заставило вещи работать.

Еще одно предостережение: на моем Linux-компьютере node был исполняемым файлом, уже существующим в /usr/sbin, и мне пришлось создать символическую ссылку с именем node в /usr/local/bin для переопределения первого. Это было необходимо, так как двоичный файл Node.js для Linux Mint (возможно, также Ubuntu, я не проверял) получил имя nodejs, и многие сценарии были написаны, предполагая, что двоичное имя node не будет выполнено. Вы можете проверить это, набрав node: если это уже существующий двоичный файл, он обычно возвращается в приглашение без вывода сообщений, но если это Node.js, он предлагает вам > (вы можете нажать Ctrl-D, чтобы выйти там)

0 голосов
/ 12 октября 2011

Я нашел проект под названием jshint-mode и попробовал это. Он создал буфер с именем *jshint-mode*, который выявил ошибку: JSHint не смог найти грозный модуль.

Я запустил M-x setenv в Emacs, чтобы установить NODE_PATH, чтобы jshint мог найти грозную библиотеку. Я также установил NODE_PATH в /etc/profile.

...