2016-06-15 7 views
8

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

Спасибо.

ответ

7

Я использовал Bodil в потоке flycheck конфигурация здесь: 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 намеревался сделать сообщения коротким, но я хотел бы иметь flycheck отображать более подробные сообщения. Если кто-то знает, как это сделать, я был бы признателен.

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

0

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

Заметка для новых пользователей, которые хотят использовать этот скрипт, чтобы убедиться, что вы отредактировали его, чтобы использовать правильный режим в flycheck-define-checker внизу. Я использую это в js2-mode, а 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)