Better Emacs package development workflow
The Emacs Lisp syntax error should be automatically detected by CI (Continuous Integration).
Syntax errors could be a bit difficult to locate. For example, developers might use Emacs 28+ only APIs to develop packages running on Emacs 26.
Here is howto.
- Step 1, create a file
my-byte-compile.elin the directory "tests/",
(require 'find-lisp) (let ((files (find-lisp-find-files-internal "." (lambda (file dir) (and (not (file-directory-p (expand-file-name file dir))) (string-match "\\.el$" file) (not (string-match "\\.dir-locals\\.el$" file)))) (lambda (dir parent) (not (or (member dir '("." ".." ".git" ".svn" "deps" "tests")) (file-symlink-p (expand-file-name dir parent)))))))) (dolist (file files) (byte-compile-file file)))
- Step 2, insert below command line into the project's Makefile,
compile: emacs --batch -Q -L . -l my-package-main-entry.el -l tests/my-byte-compile.el 2>&1 | grep -E "([Ee]rror|[Ww]arning):" && exit 1 || exit 0
DONE! Now Gitlab/Github could use command line
make compile in their CI pipeline.
Screenshot of a tricky bug of evil-matchit detected by this new workflow.
BTW, I also tried
elint, but it's not as reliable as
(require 'elint) (let ((elint-directory-skip-re "\\(\\.dir-locals\\|ldefs-boot\\|loaddefs\\)\\.el\\'")) (elint-directory "."))
Here is link to the Makefile from my real world project.
I use below command lines to compile and test the project locally.
EMACS=~/myemacs/26.3/bin/emacs make compile # compile only EMACS=~/myemacs/26.3/bin/emacs make test # compile and run unit test