2016-06-15 22 views
8

Tôi là spacemacs quạt. Tôi muốn sử dụng Facebook Flow nhưng tôi không biết cách tích hợp nó với các spacemac. Tôi đang sử dụng luồng với nuclide nhưng tôi cần phải học lại mọi thứ để có hiệu quả. Có this script trên flow kho lưu trữ để sử dụng nó với các emacs. Tôi cần một hướng dẫn về cách sử dụng nó trong các spacemac.Làm thế nào để tích hợp flowtype với spacemacs

Cảm ơn.

Trả lời

7

tôi sử dụng dòng chảy flycheck cấu hình Bodil ở đây: https://github.com/bodil/emacs.d/blob/d28264cf072bb8a62459a48813d0cb30804b4f5b/bodil/bodil-js.el#L121-L154

tôi đã làm cho nó làm việc với flychecker eslint react-mode và mặc định spacemacs bằng cách thêm dòng sau vào tôi 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) 

Ngoài ra hãy chắc chắn Công cụ dòng lệnh dòng chảy được cài đặt. Cài đặt nó như thế này:

npm install -g flow-bin 

Tôi nghĩ Bodil có ý định nhắn tin ngắn gọn, nhưng tôi muốn hiển thị thông báo chi tiết hơn. Nếu có ai biết làm thế nào để làm điều đó, tôi sẽ đánh giá cao nó.

EDIT 2016-08-12: phiên bản gốc tôi đã đăng có lỗi Symbol's function definition is void: flycheck-define-checker khi tải ban đầu. Tôi đã cập nhật mã ở trên để thêm require 'flycheck để loại bỏ lỗi đó.

0

Câu trả lời của saltycrane đã làm việc tốt cho tôi. Cảm ơn! Giải pháp đưa ra một thông báo lỗi rất ngắn khi ông chỉ ra. Tôi đã cải thiện các thông báo lỗi để tiết kiệm hơn và trông giống như đầu ra từ đầu ra dòng chảy.

Lưu ý cho người dùng mới muốn sử dụng tập lệnh này là đảm bảo bạn chỉnh sửa tập lệnh để sử dụng chế độ chính xác ở flycheck-define-checker ở dưới cùng. Tôi sử dụng điều này trong js2-mode và saltycrane sử dụng react-mode. Chỉnh sửa nó để sử dụng bất cứ điều gì bạn đang sử dụng.

(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) 
Các vấn đề liên quan