5

emacsでtuareg-modeを使用するときにannotファイルへのパスを指定する方法はありますか?関数のタイプを調べようとしていますが、モードで「注釈ファイルではありません」というメッセージが表示されます。

私のビルド構造は次のとおりです。

lib 
 obj
  *.o
  *.cmi
  *.cmx
  *.annot
 src
  *.ml
  *.mli
4

3 に答える 3

2

これを簡単に設定できるとは思いません。ocamlインストールcaml-types-locate-type-fileのファイルにある関数を見てください。caml-types.el

.annotファイルを検索する機能です。おそらくそれを編集して(生成されたファイルを置く"_build"場所です)をそれで置き換えて実行することができます。ocamlbuildobj

はるかに優れたオプションは、で変数を定義し、それをファイル.emacs.elで使用することです。caml-types.elこのようにして、ocamlの人々にパッチを提案することもできます。

于 2011-02-15T15:01:49.053 に答える
0

次のコードで十分です。新しいカスタマイズ変数を作成し(カスタマイズグループにはバインドしていませんが、必要に応じてバインドできます)、その変数を検索するディレクトリのリストとして使用します。

(defcustom caml-types-annot-directories-search
  '("_build" "obj" "../obj")
  "List of directories to search for .annot files"
  :type '(repeat string)
)
(defun or-list (f lst)
  (if (null lst) nil
    (if (apply f (car lst) nil)
        (car lst)
        (or-list f (cdr lst)))))

(add-hook 'tuareg-mode-hook
          (lambda ()
            (defun caml-types-locate-type-file (target-path)
              (let ((sibling (concat (file-name-sans-extension target-path) ".annot")))
                (if (file-exists-p sibling)
                    sibling
                  (let ((project-dir (file-name-directory sibling))
                        (test-dir (lambda (prefix)
                                    (message "Prefix is %s" prefix)
                                    (setq type-path
                                          (expand-file-name
                                           (file-relative-name sibling project-dir)
                                           (expand-file-name prefix project-dir)))
                                    (message "Testing %s" type-path)
                                    (file-exists-p type-path)))
                        type-path)
                    (while (not (or-list test-dir caml-types-annot-directories-search))
                      (if (equal project-dir (caml-types-parent-dir project-dir))
                          (error (concat "No annotation file. "
                                         "You should compile with option \"-annot\".")))
                      (setq project-dir (caml-types-parent-dir project-dir)))
                    type-path))))))
于 2012-01-16T23:35:38.670 に答える
0
#ソフトリンク.annotファイルを使用して、Emacsのtuareg-modeがそれらを見つけられるようにします
mkdir -p _build
`find lib / obj -name*.annot`のfの場合; do ln -s ../$f _build /; 終わり
于 2014-03-17T05:18:41.963 に答える