summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/bytecomp.el
diff options
context:
space:
mode:
authorMattias EngdegÄrd <mattiase@acm.org>2023-09-19 15:18:11 +0200
committerMattias EngdegÄrd <mattiase@acm.org>2023-09-19 15:21:03 +0200
commitb03338c70d81f2cba9c8a0b4fefbf83ef7a346e0 (patch)
tree28ebf04f4dbfbf5b021d018216df6fe85b8110f5 /lisp/emacs-lisp/bytecomp.el
parent321f2e1e4d4b2f209b072dc891cc89cbab19f032 (diff)
downloademacs-b03338c70d81f2cba9c8a0b4fefbf83ef7a346e0.tar.gz
emacs-b03338c70d81f2cba9c8a0b4fefbf83ef7a346e0.tar.bz2
emacs-b03338c70d81f2cba9c8a0b4fefbf83ef7a346e0.zip
Warn about duplicated :tag strings in defcustom choices
It is bad user experience when two menu items have identical labels. * lisp/emacs-lisp/bytecomp.el (bytecomp--check-cus-type): Add check. * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-test-defcustom-type): Add test case.
Diffstat (limited to 'lisp/emacs-lisp/bytecomp.el')
-rw-r--r--lisp/emacs-lisp/bytecomp.el9
1 files changed, 8 insertions, 1 deletions
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 1474acc1638..387d7ef4de1 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -5272,7 +5272,8 @@ FORM is used to provide location, `bytecomp--cus-function' and
(unless tail
(bytecomp--cus-warn type "`%s' without any types inside" head))
(let ((clauses tail)
- (constants nil))
+ (constants nil)
+ (tags nil))
(while clauses
(let* ((ty (car clauses))
(ty-head (car-safe ty)))
@@ -5291,6 +5292,12 @@ FORM is used to provide location, `bytecomp--cus-function' and
(bytecomp--cus-warn
ty "duplicated value in `%s': `%S'" head val))
(push val constants)))
+ (let ((tag (and (consp ty) (plist-get (cdr ty) :tag))))
+ (when (stringp tag)
+ (when (member tag tags)
+ (bytecomp--cus-warn
+ ty "duplicated :tag string in `%s': %S" head tag))
+ (push tag tags)))
(bytecomp--check-cus-type ty))
(setq clauses (cdr clauses)))))
((eq head 'cons)