Как интегрировать тип потока с помощью spacemacs

Я фанат космических аппаратов. Я хочу использовать Facebook Flow, но я не знаю, как его интегрировать с spacemac. Я использую поток с nuclide но мне нужно переучивать все, чтобы быть продуктивным. Этот сценарий в flow репозитории используется с emacs. Мне нужно руководство для использования его в spacemacs.

Благодарю.

Ответ 1

Я использовал конфигурацию flyblack потока Bodil здесь: https://github.com/bodil/emacs.d/blob/d28264cf072bb8a62459a48813d0cb30804b4f5b/bodil/bodil-js.el#L121-L154

Я заставил его работать с режимом react-mode spacemacs и по умолчанию eslint flychecker, добавив следующее в мой dotspacemacs/user-config (https://github.com/saltycrane/.spacemacs.d/blob/9d985ace9251529c2b8d7857e2ec9835b103084c/init.el#L383- L414):

;; Flow (JS) flycheck config (http://flowtype.org)
;; from https://github.com/bodil/emacs.d/blob/master/bodil/bodil-js.el
(require 'f)
(require 'json)
(require 'flycheck)

(defun flycheck-parse-flow (output checker buffer)
  (let ((json-array-type 'list))
    (let ((o (json-read-from-string output)))
      (mapcar #'(lambda (errp)
                  (let ((err (cadr (assoc 'message errp))))
                    (flycheck-error-new
                     :line (cdr (assoc 'line err))
                     :column (cdr (assoc 'start err))
                     :level 'error
                     :message (cdr (assoc 'descr err))
                     :filename (f-relative
                                (cdr (assoc 'path err))
                                (f-dirname (file-truename
                                            (buffer-file-name))))
                     :buffer buffer
                     :checker checker)))
              (cdr (assoc 'errors o))))))

(flycheck-define-checker javascript-flow
  "Javascript type checking using Flow."
  :command ("flow" "--json" source-original)
  :error-parser flycheck-parse-flow
  :modes react-mode
  :next-checkers ((error . javascript-eslint))
  )
(add-to-list 'flycheck-checkers 'javascript-flow)

Также убедитесь, что установлен инструмент командной строки потока. Установите его следующим образом:

npm install -g flow-bin

Я думаю, что Bodil намеревался сделать сообщения короткими, но я бы хотел, чтобы флайч-дисплей отображал более подробные сообщения. Если кто-то знает, как это сделать, я был бы признателен.

EDIT 2016-08-12: исходная версия, опубликованная мной, дала определение Symbol function definition is void: flycheck-define-checker при начальной загрузке. Я обновил код выше, чтобы добавить require 'flycheck чтобы избавиться от этой ошибки.

Ответ 2

Ответ от saltycrane работал отлично для меня. Благодарю! Решение дает очень короткие сообщения об ошибках, как он указывает. Я улучшил сообщения об ошибках, чтобы быть более подробными и больше походить на выходные данные потока cli.

Примечание для новых пользователей, которые хотят использовать этот скрипт, - это убедиться, что вы отредактируете его, чтобы использовать правильный режим в flycheck-define-checker внизу. Я использую это в js2-mode js2, а saltycrane использует react-mode. Отредактируйте его, чтобы использовать все, что вы используете.

(require 'f)
(require 'json)
(require 'flycheck)
(defun flycheck-parse-flow (output checker buffer)
  (let ((json-array-type 'list))
    (let ((o (json-read-from-string output)))
      (mapcar #'(lambda (errp)
                  (let ((err (cadr (assoc 'message errp)))
                        (err2 (cadr (cdr (assoc 'message errp)))))
                    (flycheck-error-new
                     :line (cdr (assoc 'line err))
                     :column (cdr (assoc 'start err))
                     :level 'error
                     :message (concat (cdr (assoc 'descr err)) ". " (cdr (assoc 'descr err2)))
                     :filename (f-relative
                                (cdr (assoc 'path err))
                                (f-dirname (file-truename
                                            (buffer-file-name))))
                     :buffer buffer
                     :checker checker)))
              (cdr (assoc 'errors o))))))

(flycheck-define-checker javascript-flow
  "Static type checking using Flow."
  :command ("flow" "--json" source-original)
  :error-parser flycheck-parse-flow
  :modes js2-mode)
(add-to-list 'flycheck-checkers 'javascript-flow)