我是spacemacs粉絲。我想使用Facebook Flow,但我不知道如何將它與spacemacs集成。我使用流程nuclide
,但我需要重新學習一切,以提高生產力。 flow
知識庫上有this script與emacs一起使用。我需要一個關於如何在spacemacs中使用它的指南。如何將flowtype與spacemacs結合起來
謝謝。
我是spacemacs粉絲。我想使用Facebook Flow,但我不知道如何將它與spacemacs集成。我使用流程nuclide
,但我需要重新學習一切,以提高生產力。 flow
知識庫上有this script與emacs一起使用。我需要一個關於如何在spacemacs中使用它的指南。如何將flowtype與spacemacs結合起來
謝謝。
我用Bodil的流動flycheck配置在這裏:https://github.com/bodil/emacs.d/blob/d28264cf072bb8a62459a48813d0cb30804b4f5b/bodil/bodil-js.el#L121-L154
我把它加入與spacemacs的react-mode
和默認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)
還可以肯定的Flow命令行工具已安裝。像這樣安裝:
npm install -g flow-bin
我認爲Bodil旨在使消息簡短,但我想有flycheck顯示更詳細的消息。如果有人知道如何做到這一點,我會很感激。
編輯2016-08-12:我發佈的原始版本在初始加載時給出了Symbol's function definition is void: flycheck-define-checker
錯誤。我更新了上面的代碼以添加require 'flycheck
以擺脫該錯誤。
saltycrane的答案對我來說工作得很好。謝謝!正如他指出的那樣,解決方案提供了非常短的錯誤信息。我將錯誤消息改進得更加詳細,看起來更像流cli輸出的輸出。
對想要使用此腳本的新用戶的說明,請確保將其編輯爲使用底部的flycheck-define-checker
中的正確模式。我在js2-mode
中使用這個,而鹽酸鹽使用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)