elisp-depend 20161230.750(in MELPA)
Parse depend libraries of elisp file.

概要

あなたは、Emacs Lispを書いていて、
つい require を入れるのを
忘れてしまったことはありませんか?

require 漏れは、
動作確認中では正しく動作しても、

いざ新規Emacsで立ち上げたら
関数や変数が未定義であるために
エラーになってしまいます。

そこで、
現在のEmacsセッションの中で
require を入れてくれるのが、
このelisp-depend.elです。

あなたがやるべきことは、
ただひたすらに
Emacs Lispコードを書き、

新しいEmacsで動作させようとしたときに、
M-x elisp-depend-insert-require
を実行すればいいのです。

標準ライブラリまで過剰に
require をしてきますので、
余剰な require は適宜削ってください。

いきなり実行することに
抵抗があるかもしれません。

ならば、
M-x elisp-depend-print-dependencies
でどの関数がどのfeatureに依存しているのかを
別バッファで表示させてください。

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてelisp-dependを使う方は
以下のコマンドを実行します。

M-x package-install elisp-depend

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name elisp-depend

メカニズム

elisp-depend.elは
以下のように動作します。

  1. カレントバッファのEmacs Lispファイルを解析
  2. 依存しているライブラリを得る

その表現方法として
3つのコマンドがあります。

M-x elisp-depend-print-dependencies
featureと関数の対応を表示
M-x elisp-depend-insert-comment
featureをコメントとして挿入
M-x elisp-depend-insert-require
featureを require で挿入

デフォルトでは
現在のシンボルの依存情報を

  1. symbol-file で得る
  2. featurep で得る
    • t ならば require を挿入
    • nil ならば autoload を挿入
  3. provide が使われていない場合は autoload を挿入

設定 170103082712.elisp-depend.el(以下のコードと同一)

;;; bug: この設定がないと未定義エラーになる
(defalias 'string-equal-p 'string-equal)
;;; Emacsのライブラリがあるディレクトリを指定する
;; デフォルト
;; (setq elisp-depend-directory-list '("/usr/share/emacs/"))
;; カスタム
(setq elisp-depend-directory-list '("/usr/local/share/emacs/" "~/.emacs.d/elpa/"))

実行方法

$ wget http://rubikitch.com/f/170103082712.elisp-depend.el
$ emacs -Q -f package-initialize -l 170103082712.elisp-depend.el

M-x elisp-depend-insert-requireの実行例

以下のコードでM-x elisp-depend-insert-requireを実行してみます。

(defun test ()
  (helm-for-files)
  (ido-find-file))

idoやhelmが読み込まれていないとき

(autoload 'ido-find-file "ido")
(autoload 'helm-for-files "helm-files")

(defun test ()
  (helm-for-files)
  (ido-find-file))

idoやhelmが読み込まれているとき

(require 'ido)
(require 'helm-files)

(defun test ()
  (helm-for-files)
  (ido-find-file))


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。