2012-12-18 54 views
2

對不起,我的英文很差。Erlang flymake在src中找不到包含文件夾的文件夾

我正在用erlang flymake配置我的emacs。 src嵌套文件夾中的源文件報告'找不到包含文件',但src/文件夾中的文件可以找到包含文件。

我的Emacs的Erlang的設置:

;; erlang-mode 
(setq load-path (cons "/usr/local/Cellar/erlang/R15B02/lib/erlang/lib/tools-2.6.8/emacs" load-path)) 
(setq erlang-root-dir "/usr/local/Cellar/erlang/R15B02/lib/erlang") 
(setq exec-path (cons "/usr/local/Cellar/erlang/R15B02/lib/erlang/bin" exec-path)) 
(require 'erlang-start) 

;; distel 
(add-to-list 'load-path "/usr/local/share/distel/elisp/") 
(require 'distel) 
(distel-setup) 

;; erlang-flymake 
(require 'erlang-flymake) 
(erlang-flymake-only-on-save) 

我二郎應用程序文件夾就像是以下幾點:

app/src/  (source code) 
    src/mod 
    src/lib 

app/include/ (hrls) 
app/ebin/  (compiled code) 

...etc 

回答

2

erlang-flymake有2個變量(erlang-flymake-get-include-dirs-functionerlang-flymake-get-code-path-dirs-function),指定的功能來搜索包括& ebin目錄。現在,他們正在指向功能erlang-flymake-get-include-dirserlang-flymake-get-code-path-dirs,它們只是相應地返回當前的dir + includeebin。例如,您可以使用以下代碼來執行此操作:

(defun get-erlang-app-dir() 
    (let* ((src-path (file-name-directory (buffer-file-name))) 
    (pos (string-match "/src/" src-path))) 
    (if pos 
    (substring src-path 0 (+ 1 pos)) 
     src-path))) 

(setq erlang-flymake-get-code-path-dirs-function 
     (lambda() 
    (concat (get-erlang-app-dir) "ebin"))) 

(setq erlang-flymake-get-code-include-dirs-function 
     (lambda() 
    (concat (get-erlang-app-dir) "include"))) 

P.S.您是否在使用螺紋鋼來維護您的項目?

+0

謝謝,讓我試試看。不,因爲這個應用程序是一個遺留項目,現在不使用螺紋鋼。也許我會改變它在幾個星期內使用螺紋鋼。 – goofansu

+0

我試過了,但它不起作用。我認爲'get-erlang-app-dir'是錯誤的。例如,有一個文件'〜/ game/src/mod/mod_player.erl',編輯它時,app-dir應該是'〜/ game'。但它仍然〜/遊戲/ src/ – goofansu

+0

它的工作。我只是使用你的'get-erlang-app-dir',讓'code-path-dirs'和'code-include-dirs'爲默認值,並且它現在可以工作。非常感謝。 – goofansu

1

如果你使用erlang-flymake,你可能想看看https://github.com/ten0s/syntaxerl。這是Erlang的語法檢查器。它使用了erlang-flymake,但是它使用了一個可以評估.erl,.hrl,.config,.rel,.app,.app.src和.escript文件的自定義語法檢查器來代替`erlc'。語法檢查器可以識別鋼筋,但也可以使用標準的Erlang/OTP目錄結構。 Emacs的設置也在那裏。

+0

感謝您的建議,我會克隆它並嘗試一下。 – goofansu

相關問題