aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEshel Yaron2025-10-12 10:14:29 +0200
committerEshel Yaron2025-10-12 10:17:00 +0200
commit026f3bbd8d394ecf3fead9ee2d45dc54ce40b60a (patch)
treebf61c3c16b45ae20c2e778b4b70568abe77d4eef
parent0d7fc4516c9e4a36bd6d36b041a11ebc5c99d107 (diff)
downloademacs-026f3bbd8d394ecf3fead9ee2d45dc54ce40b60a.tar.gz
emacs-026f3bbd8d394ecf3fead9ee2d45dc54ce40b60a.zip
; elisp-scope.el: Clean up symbol role definitions.
* lisp/progmodes/elisp-mode.el (elisp-fontify-semantically): Fix typo in doc string. (elisp--annotate-symbol-with-help-echo): Accept plain string as value of ':help' symbol role property. * lisp/emacs-lisp/elisp-scope.el: Remove unused symbol role properties from all defined symbol roles. Use plain strings for ':help' instead of wrapping them with 'cl-constantly'. Cease 'require'ing 'cl-lib', no longer needed in runtime. (elisp-scope-define-symbol-role): Update doc string.
-rw-r--r--lisp/emacs-lisp/elisp-scope.el187
-rw-r--r--lisp/progmodes/elisp-mode.el6
2 files changed, 64 insertions, 129 deletions
diff --git a/lisp/emacs-lisp/elisp-scope.el b/lisp/emacs-lisp/elisp-scope.el
index 340b9f55558..36acf7cbd0c 100644
--- a/lisp/emacs-lisp/elisp-scope.el
+++ b/lisp/emacs-lisp/elisp-scope.el
@@ -131,8 +131,6 @@
131 131
132;;; Code: 132;;; Code:
133 133
134(require 'cl-lib)
135
136(defun elisp-scope--define-symbol-role (name parents props) 134(defun elisp-scope--define-symbol-role (name parents props)
137 (put name 'elisp-scope-parent-roles parents) 135 (put name 'elisp-scope-parent-roles parents)
138 (put name 'elisp-scope-role-properties props)) 136 (put name 'elisp-scope-role-properties props))
@@ -145,7 +143,17 @@ of (other) symbols in ELisp source code. For example, the symbol role
145`face' characterizes symbols that are face names. 143`face' characterizes symbols that are face names.
146 144
147PROPS is a plist specifying the properties of the new symbol role NAME. 145PROPS is a plist specifying the properties of the new symbol role NAME.
148NAME inherits properties that do not appear in PROPS from its PARENTS." 146NAME inherits properties that do not appear in PROPS from its PARENTS.
147
148Common symbol role properties are:
149
150- `:doc': short documentation string describing this symbol role.
151- `:face': face for highlighting symbols with this role.
152- `:help': `help-echo' text for symbols with this role.
153
154See also `elisp-scope-get-symbol-role-property' and
155`elisp-scope-set-symbol-role-property' for getting and setting values of
156symbol role properties."
149 (declare (indent defun)) 157 (declare (indent defun))
150 `(elisp-scope--define-symbol-role ',name ',parents ,(when props `(list ,@props)))) 158 `(elisp-scope--define-symbol-role ',name ',parents ,(when props `(list ,@props))))
151 159
@@ -230,25 +238,19 @@ NAME inherits properties that do not appear in PROPS from its PARENTS."
230 238
231(elisp-scope-define-symbol-role symbol-role () 239(elisp-scope-define-symbol-role symbol-role ()
232 :doc "Symbol role names." 240 :doc "Symbol role names."
233 :definition 'symbol-role-definition
234 :face 'elisp-symbol-role 241 :face 'elisp-symbol-role
235 :help (cl-constantly "Symbol role") 242 :help "Symbol role")
236 :namespace 'symbol-role)
237 243
238(elisp-scope-define-symbol-role symbol-role-definition (symbol-role) 244(elisp-scope-define-symbol-role symbol-role-definition (symbol-role)
239 :doc "Symbol role name definitions." 245 :doc "Symbol role name definitions."
240 :face 'elisp-symbol-role-definition 246 :face 'elisp-symbol-role-definition
241 :help (cl-constantly "Symbol role definition") 247 :help "Symbol role definition")
242 :imenu "Symbol Role"
243 :namespace 'symbol-role)
244 248
245(elisp-scope-define-symbol-role variable () 249(elisp-scope-define-symbol-role variable ()
246 :doc "Abstract symbol role of variables." 250 :doc "Abstract symbol role of variables.")
247 :namespace 'variable)
248 251
249(elisp-scope-define-symbol-role free-variable (variable) 252(elisp-scope-define-symbol-role free-variable (variable)
250 :doc "Variable names." 253 :doc "Variable names."
251 :definition 'defvar
252 :face 'elisp-free-variable 254 :face 'elisp-free-variable
253 :help (lambda (beg end _def) 255 :help (lambda (beg end _def)
254 (if-let* ((sym (intern (buffer-substring-no-properties beg end)))) 256 (if-let* ((sym (intern (buffer-substring-no-properties beg end))))
@@ -262,38 +264,34 @@ NAME inherits properties that do not appear in PROPS from its PARENTS."
262(elisp-scope-define-symbol-role bound-variable (variable) 264(elisp-scope-define-symbol-role bound-variable (variable)
263 :doc "Local variable names." 265 :doc "Local variable names."
264 :face 'elisp-bound-variable 266 :face 'elisp-bound-variable
265 :help (cl-constantly "Local variable")) 267 :help "Local variable")
266 268
267(elisp-scope-define-symbol-role binding-variable (bound-variable) 269(elisp-scope-define-symbol-role binding-variable (bound-variable)
268 :doc "Local variable definitions." 270 :doc "Local variable definitions."
269 :face 'elisp-binding-variable 271 :face 'elisp-binding-variable
270 :help (cl-constantly "Local variable binding")) 272 :help "Local variable binding")
271 273
272(elisp-scope-define-symbol-role shadowed-variable (variable) 274(elisp-scope-define-symbol-role shadowed-variable (variable)
273 :doc "Locally shadowed variable names." 275 :doc "Locally shadowed variable names."
274 :face 'elisp-shadowed-variable 276 :face 'elisp-shadowed-variable
275 :help (cl-constantly "Locally shadowed variable")) 277 :help "Locally shadowed variable")
276 278
277(elisp-scope-define-symbol-role shadowing-variable (shadowed-variable) 279(elisp-scope-define-symbol-role shadowing-variable (shadowed-variable)
278 :doc "Local variable definitions." 280 :doc "Locally shadowing variables."
279 :face 'elisp-shadowing-variable 281 :face 'elisp-shadowing-variable
280 :help (cl-constantly "Local variable shadowing")) 282 :help "Local variable shadowing")
281 283
282(elisp-scope-define-symbol-role face () 284(elisp-scope-define-symbol-role face ()
283 :doc "Face names." 285 :doc "Face names."
284 :definition 'defface
285 :face 'elisp-face 286 :face 'elisp-face
286 :help (lambda (beg end _def) 287 :help (lambda (beg end _def)
287 (elisp--help-echo beg end 'face-documentation "Face")) 288 (elisp--help-echo beg end 'face-documentation "Face")))
288 :namespace 'face)
289 289
290(elisp-scope-define-symbol-role callable () 290(elisp-scope-define-symbol-role callable ()
291 :doc "Abstract symbol role of function-like symbols." 291 :doc "Abstract symbol role of function-like symbols.")
292 :namespace 'function)
293 292
294(elisp-scope-define-symbol-role function (callable) 293(elisp-scope-define-symbol-role function (callable)
295 :doc "Function names." 294 :doc "Function names."
296 :definition '(defun defcmd)
297 :face 'elisp-function-reference 295 :face 'elisp-function-reference
298 :help (lambda (beg end def) 296 :help (lambda (beg end def)
299 (cond ((equal beg def) "Local function definition") 297 (cond ((equal beg def) "Local function definition")
@@ -308,7 +306,7 @@ NAME inherits properties that do not appear in PROPS from its PARENTS."
308(elisp-scope-define-symbol-role unknown (function) 306(elisp-scope-define-symbol-role unknown (function)
309 :doc "Unknown symbols at function position." 307 :doc "Unknown symbols at function position."
310 :face 'elisp-unknown-call 308 :face 'elisp-unknown-call
311 :help (cl-constantly "Unknown callable")) 309 :help "Unknown callable")
312 310
313(elisp-scope-define-symbol-role non-local-exit (function) 311(elisp-scope-define-symbol-role non-local-exit (function)
314 :doc "Functions that do not return." 312 :doc "Functions that do not return."
@@ -320,7 +318,6 @@ NAME inherits properties that do not appear in PROPS from its PARENTS."
320 318
321(elisp-scope-define-symbol-role macro (callable) 319(elisp-scope-define-symbol-role macro (callable)
322 :doc "Macro names." 320 :doc "Macro names."
323 :definition 'defmacro
324 :face 'elisp-macro-call 321 :face 'elisp-macro-call
325 :help (lambda (beg end _def) 322 :help (lambda (beg end _def)
326 (if-let* ((sym (intern-soft (buffer-substring-no-properties beg end)))) 323 (if-let* ((sym (intern-soft (buffer-substring-no-properties beg end))))
@@ -338,97 +335,85 @@ NAME inherits properties that do not appear in PROPS from its PARENTS."
338(elisp-scope-define-symbol-role throw-tag () 335(elisp-scope-define-symbol-role throw-tag ()
339 :doc "Symbols used as `throw'/`catch' tags." 336 :doc "Symbols used as `throw'/`catch' tags."
340 :face 'elisp-throw-tag 337 :face 'elisp-throw-tag
341 :help (cl-constantly "`throw'/`catch' tag")) 338 :help "`throw'/`catch' tag")
342 339
343(elisp-scope-define-symbol-role warning-type () 340(elisp-scope-define-symbol-role warning-type ()
344 :doc "Byte-compilation warning types." 341 :doc "Byte-compilation warning types."
345 :face 'elisp-warning-type 342 :face 'elisp-warning-type
346 :help (cl-constantly "Warning type")) 343 :help "Warning type")
347 344
348(elisp-scope-define-symbol-role feature () 345(elisp-scope-define-symbol-role feature ()
349 :doc "Feature names." 346 :doc "Feature names."
350 :definition 'deffeature
351 :face 'elisp-feature 347 :face 'elisp-feature
352 :help (cl-constantly "Feature") 348 :help "Feature")
353 :namespace 'feature)
354 349
355(elisp-scope-define-symbol-role deffeature (feature) 350(elisp-scope-define-symbol-role deffeature (feature)
356 :doc "Feature definitions." 351 :doc "Feature definitions."
357 :imenu "Feature" 352 :help "Feature definition")
358 :help (cl-constantly "Feature definition"))
359 353
360(elisp-scope-define-symbol-role function-property-declaration () 354(elisp-scope-define-symbol-role function-property-declaration ()
361 :doc "Function/macro property declaration types." 355 :doc "Function/macro property declaration types."
362 :face 'elisp-function-property-declaration 356 :face 'elisp-function-property-declaration
363 :help (cl-constantly "Function/macro property declaration")) 357 :help "Function/macro property declaration")
364 358
365(elisp-scope-define-symbol-role rx-construct () 359(elisp-scope-define-symbol-role rx-construct ()
366 :doc "`rx' constructs." 360 :doc "`rx' constructs."
367 :face 'elisp-rx 361 :face 'elisp-rx
368 :help (cl-constantly "`rx' construct")) 362 :help "`rx' construct")
369 363
370(elisp-scope-define-symbol-role theme () 364(elisp-scope-define-symbol-role theme ()
371 :doc "Custom theme names." 365 :doc "Custom theme names."
372 :definition 'deftheme
373 :face 'elisp-theme 366 :face 'elisp-theme
374 :help (cl-constantly "Theme")) 367 :help "Theme")
375 368
376(elisp-scope-define-symbol-role deftheme (theme) 369(elisp-scope-define-symbol-role deftheme (theme)
377 :doc "Custom theme definitions." 370 :doc "Custom theme definitions."
378 :imenu "Theme" 371 :help "Theme definition")
379 :help (cl-constantly "Theme definition"))
380 372
381(elisp-scope-define-symbol-role thing () 373(elisp-scope-define-symbol-role thing ()
382 :doc "`thing-at-point' \"thing\" identifiers." 374 :doc "`thing-at-point' \"thing\" identifiers."
383 :face 'elisp-thing 375 :face 'elisp-thing
384 :help (cl-constantly "Thing (text object)")) 376 :help "Thing (text object)")
385 377
386(elisp-scope-define-symbol-role slot () 378(elisp-scope-define-symbol-role slot ()
387 :doc "EIEIO slots." 379 :doc "EIEIO slots."
388 :face 'elisp-slot 380 :face 'elisp-slot
389 :help (cl-constantly "Slot")) 381 :help "Slot")
390 382
391(elisp-scope-define-symbol-role widget-type () 383(elisp-scope-define-symbol-role widget-type ()
392 :doc "Widget types." 384 :doc "Widget types."
393 :definition 'widget-type-definition
394 :face 'elisp-widget-type 385 :face 'elisp-widget-type
395 :help (cl-constantly "Widget type") 386 :help "Widget type")
396 :namespace 'widget-type)
397 387
398(elisp-scope-define-symbol-role widget-type-definition (widget-type) 388(elisp-scope-define-symbol-role widget-type-definition (widget-type)
399 :doc "Widget type definitions." 389 :doc "Widget type definitions."
400 :imenu "Widget" 390 :help "Widget type definition")
401 :help (cl-constantly "Widget type definition"))
402 391
403(elisp-scope-define-symbol-role type () 392(elisp-scope-define-symbol-role type ()
404 :doc "ELisp object type names." 393 :doc "ELisp object type names."
405 :face 'elisp-type 394 :face 'elisp-type
406 :help (cl-constantly "Type")) 395 :help "Type")
407 396
408(elisp-scope-define-symbol-role deftype (type) 397(elisp-scope-define-symbol-role deftype (type)
409 :doc "ELisp object type definitions." 398 :doc "ELisp object type definitions."
410 :imenu "Type" 399 :help "Type definition")
411 :help (cl-constantly "Type definition"))
412 400
413(elisp-scope-define-symbol-role group () 401(elisp-scope-define-symbol-role group ()
414 :doc "Customization groups." 402 :doc "Customization groups."
415 :definition 'defgroup
416 :face 'elisp-group 403 :face 'elisp-group
417 :help (cl-constantly "Customization group")) 404 :help "Customization group")
418 405
419(elisp-scope-define-symbol-role defgroup (group) 406(elisp-scope-define-symbol-role defgroup (group)
420 :doc "Customization group definitions." 407 :doc "Customization group definitions."
421 :imenu "Group" 408 :help "Customization group definition")
422 :help (cl-constantly "Customization group definition"))
423 409
424(elisp-scope-define-symbol-role nnoo-backend () 410(elisp-scope-define-symbol-role nnoo-backend ()
425 :doc "`nnoo' backend names." 411 :doc "`nnoo' backend names."
426 :face 'elisp-nnoo-backend 412 :face 'elisp-nnoo-backend
427 :help (cl-constantly "`nnoo' backend")) 413 :help "`nnoo' backend")
428 414
429(elisp-scope-define-symbol-role condition () 415(elisp-scope-define-symbol-role condition ()
430 :doc "`condition-case' conditions." 416 :doc "`condition-case' conditions."
431 :definition 'defcondition
432 :face 'elisp-condition 417 :face 'elisp-condition
433 :help (lambda (beg end _def) 418 :help (lambda (beg end _def)
434 (if-let* ((sym (intern (buffer-substring-no-properties beg end)))) 419 (if-let* ((sym (intern (buffer-substring-no-properties beg end))))
@@ -438,72 +423,53 @@ NAME inherits properties that do not appear in PROPS from its PARENTS."
438 "`condition-case' condition" 423 "`condition-case' condition"
439 (when (and msg (not (string-empty-p msg))) 424 (when (and msg (not (string-empty-p msg)))
440 `(": " ,msg))))) 425 `(": " ,msg)))))
441 "`condition-case' condition")) 426 "`condition-case' condition")))
442 :namespace 'condition)
443 427
444(elisp-scope-define-symbol-role defcondition (condition) 428(elisp-scope-define-symbol-role defcondition (condition)
445 :doc "`condition-case' condition definitions." 429 :doc "`condition-case' condition definitions."
446 :definition 'defcondition 430 :help "`condition-case' condition definition")
447 :help (cl-constantly "`condition-case' condition definition"))
448 431
449(elisp-scope-define-symbol-role ampersand () 432(elisp-scope-define-symbol-role ampersand ()
450 :doc "Argument list markers, such as `&optional' and `&rest'." 433 :doc "Argument list markers, such as `&optional' and `&rest'."
451 :face 'elisp-ampersand 434 :face 'elisp-ampersand
452 :help (cl-constantly "Arguments separator")) 435 :help "Arguments separator")
453 436
454(elisp-scope-define-symbol-role constant () 437(elisp-scope-define-symbol-role constant ()
455 :doc "Self-evaluating symbols." 438 :doc "Self-evaluating symbols."
456 :face 'elisp-constant 439 :face 'elisp-constant
457 :help (cl-constantly "Constant")) 440 :help "Constant")
458 441
459(elisp-scope-define-symbol-role defun () 442(elisp-scope-define-symbol-role defun ()
460 :doc "Function definitions." 443 :doc "Function definitions."
461 :definition 'defun
462 :face 'elisp-defun 444 :face 'elisp-defun
463 :help (cl-constantly "Function definition") 445 :help "Function definition")
464 :imenu "Function"
465 :namespace 'function)
466 446
467(elisp-scope-define-symbol-role defmacro () 447(elisp-scope-define-symbol-role defmacro ()
468 :doc "Macro definitions." 448 :doc "Macro definitions."
469 :definition 'defmacro
470 :face 'elisp-defmacro 449 :face 'elisp-defmacro
471 :help (cl-constantly "Macro definition") 450 :help "Macro definition")
472 :imenu "Macro"
473 :namespace 'function)
474 451
475(elisp-scope-define-symbol-role defcmd (defun) 452(elisp-scope-define-symbol-role defcmd (defun)
476 :doc "Command definitions." 453 :doc "Command definitions."
477 :definition 'defcmd 454 :help "Command definition")
478 :help (cl-constantly "Command definition")
479 :imenu "Command")
480 455
481(elisp-scope-define-symbol-role defvar () 456(elisp-scope-define-symbol-role defvar ()
482 :doc "Variable definitions." 457 :doc "Variable definitions."
483 :definition 'defvar
484 :face 'elisp-defvar 458 :face 'elisp-defvar
485 :help (cl-constantly "Special variable definition") 459 :help "Special variable definition")
486 :imenu "Variable"
487 :namespace 'variable)
488 460
489(elisp-scope-define-symbol-role special-variable-declaration () 461(elisp-scope-define-symbol-role special-variable-declaration ()
490 :doc "Special variable declarations." 462 :doc "Special variable declarations."
491 :definition 'defvar
492 :face 'elisp-special-variable-declaration 463 :face 'elisp-special-variable-declaration
493 :help (cl-constantly "Special variable declaration") 464 :help "Special variable declaration")
494 :namespace 'variable)
495 465
496(elisp-scope-define-symbol-role defface () 466(elisp-scope-define-symbol-role defface ()
497 :doc "Face definitions." 467 :doc "Face definitions."
498 :definition 'defface
499 :face 'elisp-defface 468 :face 'elisp-defface
500 :help (cl-constantly "Face definition") 469 :help "Face definition")
501 :imenu "Face"
502 :namespace 'face)
503 470
504(elisp-scope-define-symbol-role major-mode () 471(elisp-scope-define-symbol-role major-mode ()
505 :doc "Major mode names." 472 :doc "Major mode names."
506 :definition 'major-mode-definition
507 :face 'elisp-major-mode-name 473 :face 'elisp-major-mode-name
508 :help (lambda (beg end _def) 474 :help (lambda (beg end _def)
509 (if-let* ((sym (intern (buffer-substring-no-properties beg end)))) 475 (if-let* ((sym (intern (buffer-substring-no-properties beg end))))
@@ -511,13 +477,11 @@ NAME inherits properties that do not appear in PROPS from its PARENTS."
511 (if-let* ((doc (documentation sym))) 477 (if-let* ((doc (documentation sym)))
512 (format "Major mode `%S'.\n\n%s" sym doc) 478 (format "Major mode `%S'.\n\n%s" sym doc)
513 "Major mode")) 479 "Major mode"))
514 "Major mode")) 480 "Major mode")))
515 :namespace 'function)
516 481
517(elisp-scope-define-symbol-role major-mode-definition (major-mode) 482(elisp-scope-define-symbol-role major-mode-definition (major-mode)
518 :doc "Major mode definitions." 483 :doc "Major mode definitions."
519 :help (cl-constantly "Major mode definition") 484 :help "Major mode definition")
520 :imenu "Major Mode")
521 485
522(elisp-scope-define-symbol-role block () 486(elisp-scope-define-symbol-role block ()
523 :doc "`cl-block' block names." 487 :doc "`cl-block' block names."
@@ -526,22 +490,16 @@ NAME inherits properties that do not appear in PROPS from its PARENTS."
526 490
527(elisp-scope-define-symbol-role icon () 491(elisp-scope-define-symbol-role icon ()
528 :doc "Icon names." 492 :doc "Icon names."
529 :definition 'deficon
530 :face 'elisp-icon 493 :face 'elisp-icon
531 :help (cl-constantly "Icon") 494 :help "Icon")
532 :namespace 'icon)
533 495
534(elisp-scope-define-symbol-role deficon () 496(elisp-scope-define-symbol-role deficon ()
535 :doc "Icon definitions." 497 :doc "Icon definitions."
536 :definition 'deficon
537 :face 'elisp-deficon 498 :face 'elisp-deficon
538 :help (cl-constantly "Icon definition") 499 :help "Icon definition")
539 :imenu "Icon"
540 :namespace 'icon)
541 500
542(elisp-scope-define-symbol-role oclosure () 501(elisp-scope-define-symbol-role oclosure ()
543 :doc "OClosure type names." 502 :doc "OClosure type names."
544 :definition 'defoclosure
545 :face 'elisp-oclosure 503 :face 'elisp-oclosure
546 :help (lambda (beg end _def) 504 :help (lambda (beg end _def)
547 (if-let* ((sym (intern (buffer-substring-no-properties beg end)))) 505 (if-let* ((sym (intern (buffer-substring-no-properties beg end))))
@@ -549,20 +507,15 @@ NAME inherits properties that do not appear in PROPS from its PARENTS."
549 (if-let* ((doc (oclosure--class-docstring (get sym 'cl--class)))) 507 (if-let* ((doc (oclosure--class-docstring (get sym 'cl--class))))
550 (format "OClosure type `%S'.\n\n%s" sym doc) 508 (format "OClosure type `%S'.\n\n%s" sym doc)
551 "OClosure type")) 509 "OClosure type"))
552 "OClosure type")) 510 "OClosure type")))
553 :namespace 'oclosure)
554 511
555(elisp-scope-define-symbol-role defoclosure () 512(elisp-scope-define-symbol-role defoclosure ()
556 :doc "OClosure type definitions." 513 :doc "OClosure type definitions."
557 :definition 'defoclosure
558 :face 'elisp-defoclosure 514 :face 'elisp-defoclosure
559 :help (cl-constantly "OClosure type definition") 515 :help "OClosure type definition")
560 :imenu "OClosure type"
561 :namespace 'oclosure)
562 516
563(elisp-scope-define-symbol-role coding () 517(elisp-scope-define-symbol-role coding ()
564 :doc "Coding system names." 518 :doc "Coding system names."
565 :definition 'defcoding
566 :face 'elisp-coding 519 :face 'elisp-coding
567 :help (lambda (beg end _def) 520 :help (lambda (beg end _def)
568 (if-let* ((sym (intern (buffer-substring-no-properties beg end)))) 521 (if-let* ((sym (intern (buffer-substring-no-properties beg end))))
@@ -570,20 +523,15 @@ NAME inherits properties that do not appear in PROPS from its PARENTS."
570 (if-let* ((doc (coding-system-doc-string sym))) 523 (if-let* ((doc (coding-system-doc-string sym)))
571 (format "Coding system `%S'.\n\n%s" sym doc) 524 (format "Coding system `%S'.\n\n%s" sym doc)
572 "Coding system")) 525 "Coding system"))
573 "Coding system")) 526 "Coding system")))
574 :namespace 'coding)
575 527
576(elisp-scope-define-symbol-role defcoding () 528(elisp-scope-define-symbol-role defcoding ()
577 :doc "Coding system definitions." 529 :doc "Coding system definitions."
578 :definition 'defcoding
579 :face 'elisp-defcoding 530 :face 'elisp-defcoding
580 :help (cl-constantly "Coding system definition") 531 :help "Coding system definition")
581 :imenu "Coding system"
582 :namespace 'coding)
583 532
584(elisp-scope-define-symbol-role charset () 533(elisp-scope-define-symbol-role charset ()
585 :doc "Charset names." 534 :doc "Charset names."
586 :definition 'defcharset
587 :face 'elisp-charset 535 :face 'elisp-charset
588 :help (lambda (beg end _def) 536 :help (lambda (beg end _def)
589 (if-let* ((sym (intern (buffer-substring-no-properties beg end)))) 537 (if-let* ((sym (intern (buffer-substring-no-properties beg end))))
@@ -591,20 +539,15 @@ NAME inherits properties that do not appear in PROPS from its PARENTS."
591 (if-let* ((doc (charset-description sym))) 539 (if-let* ((doc (charset-description sym)))
592 (format "Charset `%S'.\n\n%s" sym doc) 540 (format "Charset `%S'.\n\n%s" sym doc)
593 "Charset")) 541 "Charset"))
594 "Charset")) 542 "Charset")))
595 :namespace 'charset)
596 543
597(elisp-scope-define-symbol-role defcharset () 544(elisp-scope-define-symbol-role defcharset ()
598 :doc "Charset definitions." 545 :doc "Charset definitions."
599 :definition 'defcharset
600 :face 'elisp-defcharset 546 :face 'elisp-defcharset
601 :help (cl-constantly "Charset definition") 547 :help "Charset definition")
602 :imenu "Charset"
603 :namespace 'charset)
604 548
605(elisp-scope-define-symbol-role completion-category () 549(elisp-scope-define-symbol-role completion-category ()
606 :doc "Completion categories." 550 :doc "Completion categories."
607 :definition 'completion-category-definition
608 :face 'elisp-completion-category 551 :face 'elisp-completion-category
609 :help (lambda (beg end _def) 552 :help (lambda (beg end _def)
610 (if-let* ((sym (intern (buffer-substring-no-properties beg end)))) 553 (if-let* ((sym (intern (buffer-substring-no-properties beg end))))
@@ -612,16 +555,12 @@ NAME inherits properties that do not appear in PROPS from its PARENTS."
612 (if-let* ((doc (get sym 'completion-category-documentation))) 555 (if-let* ((doc (get sym 'completion-category-documentation)))
613 (format "Completion category `%S'.\n\n%s" sym doc) 556 (format "Completion category `%S'.\n\n%s" sym doc)
614 "Completion category")) 557 "Completion category"))
615 "Completion category")) 558 "Completion category")))
616 :namespace 'completion-category)
617 559
618(elisp-scope-define-symbol-role completion-category-definition () 560(elisp-scope-define-symbol-role completion-category-definition ()
619 :doc "Completion category definitions." 561 :doc "Completion category definitions."
620 :definition 'completion-category-definition
621 :face 'elisp-completion-category-definition 562 :face 'elisp-completion-category-definition
622 :help (cl-constantly "Completion category definition") 563 :help "Completion category definition")
623 :imenu "Completion category"
624 :namespace 'completion-category)
625 564
626(defvar elisp-scope-counter nil) 565(defvar elisp-scope-counter nil)
627 566
@@ -2575,10 +2514,6 @@ property, or if the current buffer is trusted (see `trusted-content-p')."
2575 (:face 2514 (:face
2576 (if-let* ((q (elisp-scope--unquote (cadr props)))) (elisp-scope-face-1 q) 2515 (if-let* ((q (elisp-scope--unquote (cadr props)))) (elisp-scope-face-1 q)
2577 (elisp-scope-1 (cadr props)))) 2516 (elisp-scope-1 (cadr props))))
2578 (:definition
2579 (if-let* ((q (elisp-scope--unquote (cadr props))))
2580 (dolist (st (ensure-list q)) (elisp-scope-report-s st 'symbol-role))
2581 (elisp-scope-1 (cadr props))))
2582 (otherwise (elisp-scope-1 (cadr props)))) 2517 (otherwise (elisp-scope-1 (cadr props))))
2583 (setq props (cddr props)))) 2518 (setq props (cddr props))))
2584 2519
diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el
index b6a89b62112..2b452bd2a0f 100644
--- a/lisp/progmodes/elisp-mode.el
+++ b/lisp/progmodes/elisp-mode.el
@@ -295,7 +295,7 @@ expand some macro calls in your code to analyze the expanded forms. In
295untrusted buffers, for security reasons, macro-expansion is restricted 295untrusted buffers, for security reasons, macro-expansion is restricted
296to safe macros only (see `elisp-scope-safe-macro-p'). Hence in 296to safe macros only (see `elisp-scope-safe-macro-p'). Hence in
297untrusted buffers the arguments of some macros might not be analyzed, 297untrusted buffers the arguments of some macros might not be analyzed,
298and therefore not highighted. 298and therefore not highlighted.
299 299
300See the function `elisp-scope-analyze-form' for more details about the 300See the function `elisp-scope-analyze-form' for more details about the
301code analysis." 301code analysis."
@@ -510,8 +510,8 @@ code analysis."
510 (when elisp-add-help-echo 510 (when elisp-add-help-echo
511 (put-text-property 511 (put-text-property
512 beg end 'help-echo 512 beg end 'help-echo
513 (when-let* ((fun (elisp-scope-get-symbol-role-property type :help))) 513 (when-let* ((hlp (elisp-scope-get-symbol-role-property type :help)))
514 (funcall fun beg end def))))) 514 (if (stringp hlp) hlp (funcall hlp beg end def))))))
515 515
516(defvar font-lock-beg) 516(defvar font-lock-beg)
517(defvar font-lock-end) 517(defvar font-lock-end)