问题 如何将flowtype与spacemacs集成


spacemacs 风扇。我想用 Facebook流量 但我不知道如何将它与spacemacs集成。我正在使用流量 nuclide 但我需要重新学习一切才能提高效率。有 这个脚本 上 flow 存储库以与emacs一起使用它。我需要一个如何在spacemacs中使用它的指南。

谢谢。


4960
2018-06-15 19:14


起源



答案:


我在这里使用了Bodil的flow 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 摆脱那个错误。


9
2018-06-22 15:10





saltycrane的答案对我来说很好。谢谢!他指出,该解决方案提供了非常短的错误消息。我已经改进了错误消息,使其更加冗长,看起来更像是flow 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)

0
2017-12-01 07:54