From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: "F. Jason Park" Date: Mon, 4 Apr 2022 22:38:22 -0700 Subject: [PATCH 01/35] 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) --- lisp/erc/erc-backend.el | 1 - lisp/erc/erc.el | 23 ++++++++++++++++++++++- test/lisp/erc/erc-tests.el | 21 +++++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el index 4c13f4c419..1e3af1bedd 100644 --- a/lisp/erc/erc-backend.el +++ b/lisp/erc/erc-backend.el @@ -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 diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el index ff482d4933..c4689a4b78 100644 --- a/lisp/erc/erc.el +++ b/lisp/erc/erc.el @@ -130,7 +130,26 @@ erc-scripts "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 @@ erc-handle-irc-url (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. diff --git a/test/lisp/erc/erc-tests.el b/test/lisp/erc/erc-tests.el index 520f10dd4e..3c76cb97ca 100644 --- a/test/lisp/erc/erc-tests.el +++ b/test/lisp/erc/erc-tests.el @@ -48,6 +48,27 @@ erc--read-time-period (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 -- 2.36.1