mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-06 06:20:55 -08:00
Leverage loaddefs for migrating ERC modules
* lisp/erc/erc-common.el (erc--features-to-modules, erc--modules-to-features, erc--module-name-migrations): Remove unused internal functions. (erc--normalize-module-symbol): Make aware of new migration scheme based on symbol properties. * lisp/erc/erc-page.el: Add autoload cookie for module migration. * lisp/erc/erc-pcomplete.el: Add autoload cookies for module migration. * lisp/erc/erc-services.el: Add autoload cookie for module migration. * lisp/erc/erc-sound.el: Add autoload cookie for module migration. * lisp/erc/erc-stamp.el: Add autoload cookie for module migration. * lisp/erc/erc.el (erc-modules): Reorder default value, sorted by `string<' so that Customize does not consider the value to have been edited. Remove non-existent module `hecomplete' from lineup and swap a couple more to maintain sorted order. Change `:initialize' function to tag all symbols for built-in modules with an `erc--module' property. In the `:set' function, ensure third-party modules appear after the sorted and normalized built-ins, but in user-defined order. Do this to prevent all modules, built-ins included, from ending up as populated form fields for the "other" checkbox in the Customize interface. (erc--find-mode): Add helper function for `erc--update-modules'. (erc--update-modules): Always resolve module names and only conditionally attempt to require corresponding features. * test/lisp/erc/erc-tests.el (erc-tests--modules): Add manifest for asserting built-in modules and features. This is easier to verify visually than looking at the custom-type set for `erc-modules'. (erc-modules--initialize): New test. (erc-modules--internal-property): Add test. (erc--normalize-module-symbol): New test. (erc--find-mode): New test. (erc--update-modules) Adapt to new paradigm and make more comprehensive. (Bug#60954.)
This commit is contained in:
parent
89815631f2
commit
3d81ecf0a9
8 changed files with 173 additions and 68 deletions
|
|
@ -85,40 +85,13 @@
|
|||
(contents "" :type string)
|
||||
(tags '() :type list))
|
||||
|
||||
;; TODO move goodies modules here after 29 is released.
|
||||
(defconst erc--features-to-modules
|
||||
'((erc-pcomplete completion pcomplete)
|
||||
(erc-capab capab-identify)
|
||||
(erc-join autojoin)
|
||||
(erc-page page ctcp-page)
|
||||
(erc-sound sound ctcp-sound)
|
||||
(erc-stamp stamp timestamp)
|
||||
(erc-services services nickserv))
|
||||
"Migration alist mapping a library feature to module names.
|
||||
Keys need not be unique: a library may define more than one
|
||||
module. Sometimes a module's downcased alias will be its
|
||||
canonical name.")
|
||||
|
||||
(defconst erc--modules-to-features
|
||||
(let (pairs)
|
||||
(pcase-dolist (`(,feature . ,names) erc--features-to-modules)
|
||||
(dolist (name names)
|
||||
(push (cons name feature) pairs)))
|
||||
(nreverse pairs))
|
||||
"Migration alist mapping a module's name to its home library feature.")
|
||||
|
||||
(defconst erc--module-name-migrations
|
||||
(let (pairs)
|
||||
(pcase-dolist (`(,_ ,canonical . ,rest) erc--features-to-modules)
|
||||
(dolist (obsolete rest)
|
||||
(push (cons obsolete canonical) pairs)))
|
||||
pairs)
|
||||
"Association list of obsolete module names to canonical names.")
|
||||
|
||||
;; After dropping 28, we can use prefixed "erc-autoload" cookies.
|
||||
(defun erc--normalize-module-symbol (symbol)
|
||||
"Return preferred SYMBOL for `erc-modules'."
|
||||
(setq symbol (intern (downcase (symbol-name symbol))))
|
||||
(or (cdr (assq symbol erc--module-name-migrations)) symbol))
|
||||
"Return preferred SYMBOL for `erc--modules'."
|
||||
(while-let ((canonical (get symbol 'erc--module))
|
||||
((not (eq canonical symbol))))
|
||||
(setq symbol canonical))
|
||||
symbol)
|
||||
|
||||
(defun erc--assemble-toggle (localp name ablsym mode val body)
|
||||
(let ((arg (make-symbol "arg")))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue