如何将 flowtype 与 spacemacs 集成
How to integrate flowtype with spacemacs
我 spacemacs fan. I want to use Facebook Flow but I have not idea how to integrate it with spacemacs. I'm using flow with nuclide
but I need to relearn everything to be productive. There is this script 在 flow
存储库中使用它与 emacs。我需要有关如何在 spacemacs 中使用它的指南。
谢谢。
我在这里使用了 Bodil 的 flow flycheck 配置:https://github.com/bodil/emacs.d/blob/d28264cf072bb8a62459a48813d0cb30804b4f5b/bodil/bodil-js.el#L121-L154
我通过将以下内容添加到我的 dotspacemacs/user-config
(https://github.com/saltycrane/.spacemacs.d/blob/9d985ace9251529c2b8d7857e2ec9835b103084c/init.el#L383-L414):
使其与 spacemacs 的 react-mode
和默认的 eslint flychecker 一起工作
;; 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
中使用它,而 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)
我 spacemacs fan. I want to use Facebook Flow but I have not idea how to integrate it with spacemacs. I'm using flow with nuclide
but I need to relearn everything to be productive. There is this script 在 flow
存储库中使用它与 emacs。我需要有关如何在 spacemacs 中使用它的指南。
谢谢。
我在这里使用了 Bodil 的 flow flycheck 配置:https://github.com/bodil/emacs.d/blob/d28264cf072bb8a62459a48813d0cb30804b4f5b/bodil/bodil-js.el#L121-L154
我通过将以下内容添加到我的 dotspacemacs/user-config
(https://github.com/saltycrane/.spacemacs.d/blob/9d985ace9251529c2b8d7857e2ec9835b103084c/init.el#L383-L414):
react-mode
和默认的 eslint flychecker 一起工作
;; 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
中使用它,而 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)