質問: フライチェックロードパスにもかかわらず、フライチェック可変警告 私はFlycheckに警告をフリー変数などに解決するための宣言を含むファイルをロードしようとしていますが、Flycheckは`(必要な` 、および`(my-dcls)`を宣言ファイルの一番下に配置します。 私はOSX上のアプリケーションとしてEmacs 24.4を使用しています。また、Flycheck 20160622を使用しています。 `ESC-x list-packages、U` を使用して、私のパッケージをすべて最新バージョンに更新しました。 これまで私はそれを学びました: * Flycheckは、デフォルトのポリシーでEmacsの `load-path` を使用しません。 Emacsのinitファイル内の * `(setq-default flycheck-emacs-lisp-load-path '継承)`は、FlycheckにEmacsの `load-path` 。 * すべてのフライチェック変数はバッファローカルなので、`(setq flycheck-emacs-lisp-load-path ..)` カスタムファイルへの特定のロードパスを作成するには`(setq-default flycheck-emacs-lisp-load-path(list "dir1" "dir2")`/p> したがって、これらすべてのガイドラインに従えば、 1. 私のinitファイルの1行目にあるsetq-default flycheck-emacs-lisp-load-pathを継承しましたが、成功しませんでした。ミニバッファで `flycheck-emacs-lisp-load-path` を評価すると、私が訪れるすべてのコードバッファの `inherit` の値を見ることができます。 > 2. 私のinitファイルの1行目にあるsetq-default flycheck-emacs-lisp-load-path(リスト "dir1" "dir2")を試しましたが、成功しませんでした。 minibufferで `flycheck-emacs-lisp-load-path` を評価すると、私が訪れるすべてのコードバッファに`( "dir1" "dir2")`の値が見えます。 3. これらの両方の場合、`(member 'my-dcls features)`は宣言ファイル機能がロードされたことを示します。つまり、Emacs(必ずしもFlycheckではない)ファイルは正常に(したがって存在しているので)成功します。 それでも、Flycheckは、宣言ファイルで`(defvar my-variable)`ステートメントで定義されている変数に、フリー変数の警告を出力します。宣言ファイルから同じコードの `defvar` 文を削除して現在のコードバッファに書き込むと、Flycheckは不平を言います。 私は次に何をすべきかを知ることができません。すべてが順調に見えますが、結果はそうではないと言います。 この関連記事も参照してください。こここれはほぼ重複しています(但し、提案された回答は私のマシン構成上私にとっては機能しません)。 Flycheckに干渉しないように、私の*全体* `.emacs` initファイルがあります。 ``` (setq-default flycheck-emacs-lisp-load-path (list "/Users/me/Dropbox/emacs/")) (when (>= emacs-major-version 24) (require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t) (package-initialize) (use-package flycheck :ensure t :defer t)) (require 'flycheck) ``` Emacsの起動後、`(my-dcls)`を含むLispソースファイルを読み込みます。 `my-dcls.el` は `>/emacs-lisp-load-path` 変数、`/Users/me/Dropbox/emacs/`のいずれかを選択します。 ソースファイルバッファーで、 `flycheck-emacs-lisp-load-path` を評価し、そこにロードしたディレクトリを見ることができます。 Flycheckにロードパスをピックアップさせるためのデバッグのアイディアは大歓迎です。 私はフライチェックのソースを見ましたが、効果的なデバッグ(私はまだそれについてのスキルを持っているかどうかはわかりません)のために私を超えているようでした。ありがとう。
回答: この問題に対する解決策は、フライチェックロードパスではありませんでした。代わりに、`(require 'my-dcls)`の内容がバイトコンパイラが好きな宣言を提供していなかったため、可変警告が表示されていました。 のように、次の構文がうまくいくと思いましたこの以前のスレッドでは: ``` ;; a reference declaration, so no value was set (defvar my-global-var) ``` しかし、実際にflycheckとバイトコンパイラ構文チェッカーを満足させるためには、`(require 'my-dcls)`ファイルで値を宣言しなければなりませんでした。 ``` ;; flycheck warnings went away when a value was set (defvar my-global-var nil) ``` Flycheckでチェックされているファイルの先頭に最初の構文が埋め込まれていると、最初の構文がうまく動作するので、この動作は奇妙です。しかし、少なくとも私は何が起こっているのかを幾分理解しており、警告を消すために`(require 'my-dcls)`メソッドを期待しません。