Rework mutual dependency between erc and erc-backend

* lisp/erc/erc.el: Declare needed variables exported by erc-backend.el
as special near the top of the file, and only require `erc-backend'
after providing `erc' as a feature at the very end.

* lisp/erc/erc-backend.el: Don't preemptively provide `erc-backend'.

* test/lisp/erc/erc-tests.el (erc--meta--backend-dependencies): Add
utility test to scrape for unused vars that may accumulate over time.
(Bug#54825)
This commit is contained in:
F. Jason Park 2022-04-04 22:38:22 -07:00
parent a3311dbce0
commit 0f52e7ac68
3 changed files with 43 additions and 2 deletions

View file

@ -102,7 +102,6 @@
;; There's a fairly strong mutual dependency between erc.el and erc-backend.el.
;; Luckily, erc.el does not need erc-backend.el for macroexpansion whereas the
;; reverse is true:
(provide 'erc-backend)
(require 'erc)
;;;; Variables and options

View file

@ -130,7 +130,26 @@
"Running scripts at startup and with /LOAD."
:group 'erc)
(require 'erc-backend)
;; Defined in erc-backend
(defvar erc--server-reconnecting)
(defvar erc-channel-members-changed-hook)
(defvar erc-server-367-functions)
(defvar erc-server-announced-name)
(defvar erc-server-connect-function)
(defvar erc-server-connected)
(defvar erc-server-current-nick)
(defvar erc-server-filter-data)
(defvar erc-server-lag)
(defvar erc-server-last-sent-time)
(defvar erc-server-parameters)
(defvar erc-server-process)
(defvar erc-server-quitting)
(defvar erc-server-reconnect-count)
(defvar erc-server-reconnecting)
(defvar erc-session-client-certificate)
(defvar erc-session-connector)
(defvar erc-session-port)
(defvar erc-session-server)
;; tunable connection and authentication parameters
@ -7023,6 +7042,8 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL."
(provide 'erc)
(require 'erc-backend)
;; Deprecated. We might eventually stop requiring the goodies automatically.
;; IMPORTANT: This require must appear _after_ the above (provide 'erc) to
;; avoid a recursive require error when byte-compiling the entire package.

View file

@ -48,6 +48,27 @@
(cl-letf (((symbol-function 'read-string) (lambda (&rest _) "1d")))
(should (equal (erc--read-time-period "foo: ") 86400))))
(ert-deftest erc--meta--backend-dependencies ()
(with-temp-buffer
(insert-file-contents-literally
(concat (file-name-sans-extension (symbol-file 'erc)) ".el"))
(let ((beg (search-forward ";; Defined in erc-backend"))
(end (search-forward "\n\n"))
vars)
(save-excursion
(save-restriction
(narrow-to-region beg end)
(goto-char (point-min))
(with-syntax-table lisp-data-mode-syntax-table
(condition-case _
(while (push (cadr (read (current-buffer))) vars))
(end-of-file)))))
(should (= (point) end))
(dolist (var vars)
(setq var (concat "\\_<" (symbol-name var) "\\_>"))
(ert-info (var)
(should (save-excursion (search-forward-regexp var nil t))))))))
(ert-deftest erc-with-all-buffers-of-server ()
(let (proc-exnet
proc-onet