フライチェックロードパスにもかかわらず、フライチェック可変警告

私は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にロードパスをピックアップさせるためのデバッグのアイディアは大歓迎です。

私はフライチェックのソースを見ましたが、効果的なデバッグ(私はまだそれについてのスキルを持っているかどうかはわかりません)のために私を超えているようでした。ありがとう。

1
私はまだこの問題を(require 'my-dcls)で解決せず、FlycheckのGithubに関するバグレポートをここに入力しました github.com/flycheck/flycheck/issues/1002 を参照してください。うまくいけば、私は最終的に解決策を見つけるだろう。
追加された 著者 AlanG,

1 答え

この問題に対する解決策は、フライチェックロードパスではありませんでした。代わりに、(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)メソッドを期待しません。

1
追加された
(defvar my-global-var)は、現在コンパイルされたファイル(C言語の static 変数のようなもの)の my-global-var )、(defvar my-global-var nil)は、Emacsセッション全体で定義します。
追加された 著者 alastairs,