File: elisp-scope.el.html

This library implements an analysis that determines the role of each symbol in Emacs Lisp code.

The analysis assigns to each symbol a "symbol role", such as function, bound-variable, binding-variable, face, etc. Each symbol role has associated properties, such as the :face property, which specifies a face that is applied to symbols with that role when using semantic highlighting with elisp-fontify-semantically. To define new symbol roles, see elisp-scope-define-symbol-role.

The entry point of the analysis in the function elisp-scope-analyze-form. It takes a caller-provided callback function which will be called to report the information we find about each analyzed symbol: the callback gets the position and length of the analyzed symbol, along with its inferred role and, for locally-bound variables, the position of the binder. elisp-scope-analyze-form reads a form from the current buffer, starting from point, using read-positioning-symbols to attach position information to symbols. It then recursively analyzes the form, reporting information about each symbol it encounters via the caller-provided callback function.

The core of the analysis that elisp-scope-analyze-form performs is implemented in the recursive function elisp-scope-1, which analyzes an sexp as an evaluated form, propagating contextual information such as local variable bindings down to analyzed sub-forms. elisp-scope-1 takes two arguments: FORM, which is the form to analyze, and OUTSPEC, which is a specification of the expected value of FORM used to analyze quoted data. The analysis proceeds as follows:

- If FORM is a symbol, elisp-scope-1 reports it as a variable.

- If FORM is a cons cell (HEAD . ARGS), then the analysis depends
  on HEAD. HEAD can have a bespoke "analyzer function" AF,
  which is called as (AF HEAD . ARGS) and is responsible for
  (recursively) analyzing FORM. The analyzer function can be
  associated to HEAD either locally, as an alist entry in
  elisp-scope-local-definitions, or globally, via the symbol
  property elisp-scope-analyzer.

  An analyzer may use the functions elisp-scope-report-s,
  elisp-scope-1 and elisp-scope-n to analyze its arguments, and
  it can consult the variable elisp-scope-output-spec to obtain the
  expected output spec of the analyzed form. For example, the
  following is a suitable analyzer for the identity function:

    (lambda (fsym arg)
      (elisp-scope-report-s fsym 'function)
      (elisp-scope-1 arg elisp-scope-output-spec))

  In particular, the analyzer function of quote analyzes its
  argument according to elisp-scope-output-spec, which is bound to
  the value of the outspec argument passed to elisp-scope-1.

- If HEAD is a macro, normally it is expanded, and then the
  expanded form is analyzed recursively. Since macro-expansion may
  involve arbitrary code execution, only "safe" macro invocations are
  expanded: if HEAD is one of the macros in
  elisp-scope-unsafe-macros, then it is never considered safe.
  Otherwise, HEAD is safe if it specified in the variable
  elisp-scope-safe-macros; or if it has a non-nil safe-macro
  symbol property; or if the current buffer is trusted according to
  trusted-content-p. If a macro HEAD is not safe to expand (and
  has no associated analyzer function), then the macro arguments
  ARGS are not analyzed.

- If HEAD is a function, it is reported as such, and ARGS are
  recursively analyzed as evaluated forms.

- Otherwise, if HEAD has no associated analyzer function, and it is
  not a known macro or function, then it is reported with the unknown
  symbol role. If the variable elisp-scope-assume-func is non-nil,
  then unknown HEAD is assumed to be a function call, and thus ARGS
  are analyzed as evaluated forms; otherwise ARGS are not analyzed.

When elisp-scope-1 encounters a variable reference VAR, it checks whether VAR has a local binding in elisp-scope-local-bindings, and whether VAR is a known special variable. If VAR is a locally-bound special variable, elisp-scope-1 reports the role shadowed-variable. If VAR is locally-bound and not a special variable, it gets the role bound-variable. Lastly, if it not locally-bound, then it gets the role free-variable.

When analyzer functions invoke elisp-scope-1/n to analyze some sub-forms, they specify the OUTSPEC argument to convey information but the expected value of the evaluated sub-form(s), so elisp-scope-1/n will know what to do with a sub-form that is just
(quoted) data. For example, the analyzer function for
face-attribute calls elisp-scope-1 to analyze its first argument with an OUTSPEC which says that a quoted symbol in this position refers to a face name. That way, in a form such as (face-attribute 'default :foreground), the symbol default is reported as a face reference (face role). Moreover, the OUTSPEC is passed down as appropriate through various predefined analyzers, so every quoted symbol in a "tail position" of the first argument to face-attribute will also be recognized as a face. For instance, in the following form, both success and error are reported as face references:

  (face-attribute (if (something-p)
                      'success
                    (message "oops")
                    'error)
                  :foreground)

See also the docstring of elisp-scope-1 for details about the format of the outspec argument.

Defined variables (6)

elisp-scope--callbackFunction to call to report information about each analyzed symbol.
elisp-scope-local-bindingsAlist of locally bound variables.
elisp-scope-local-definitionsAlist associating (local) analyzer functions to function/macro names.
elisp-scope-output-specOutput spec of the form currently analyzed, or nil if unknown.
elisp-scope-safe-macrosSpecify which macros are safe to expand during code analysis.
elisp-scope-special-variablesList of symbols that are special variables in the current analysis context.

Defined functions (338)

elisp-scope--all-reachable-symbol-roles(SYMBOL-ROLE)
elisp-scope--analyze-add-face-text-property(F &rest ARGS)
elisp-scope--analyze-add-face-text-property-1(&optional START END FACE &rest REST)
elisp-scope--analyze-and(F &rest ARGS)
elisp-scope--analyze-and-1(&rest FORMS)
elisp-scope--analyze-autoload(F &rest ARGS)
elisp-scope--analyze-autoload-1(&optional FUNC FILE DOC INT TYPE)
elisp-scope--analyze-backquote(F &rest ARGS)
elisp-scope--analyze-backquote-1(&optional STRUCTURE)
elisp-scope--analyze-boundp(F &rest ARGS)
elisp-scope--analyze-boundp-1(&optional VAR &rest REST)
elisp-scope--analyze-bounds-of-thing-at-mouse(F &rest ARGS)
elisp-scope--analyze-bounds-of-thing-at-mouse-1(&optional EVENT THING)
elisp-scope--analyze-catch(F &rest ARGS)
elisp-scope--analyze-catch-1(&optional TAG &rest BODY)
elisp-scope--analyze-charset-chars(F &rest ARGS)
elisp-scope--analyze-charset-chars-1(&optional CHARSET &rest REST)
elisp-scope--analyze-cl-block(F &rest ARGS)
elisp-scope--analyze-cl-block-1(NAME &rest BODY)
elisp-scope--analyze-cl-callf(F &rest ARGS)
elisp-scope--analyze-cl-callf-1(&rest ARGS)
elisp-scope--analyze-cl-defmethod(F &rest ARGS)
elisp-scope--analyze-cl-defmethod-1(NAME &rest REST)
elisp-scope--analyze-cl-deftype(F &rest ARGS)
elisp-scope--analyze-cl-deftype-1(NAME ARGLIST &rest BODY)
elisp-scope--analyze-cl-defun(F &rest ARGS)
elisp-scope--analyze-cl-defun-1(NAME ARGLIST &rest BODY)
elisp-scope--analyze-cl-destructuring-bind(F &rest ARGS)
elisp-scope--analyze-cl-destructuring-bind-1(ARGS EXPR &rest BODY)
elisp-scope--analyze-cl-eval-when(F &rest ARGS)
elisp-scope--analyze-cl-eval-when-1(WHEN &rest BODY)
elisp-scope--analyze-cl-flet(F &rest ARGS)
elisp-scope--analyze-cl-flet-1(BINDINGS &rest BODY)
elisp-scope--analyze-cl-labels(F &rest ARGS)
elisp-scope--analyze-cl-labels-1(BINDINGS &rest BODY)
elisp-scope--analyze-cl-letf(F &rest ARGS)
elisp-scope--analyze-cl-letf-1(BINDINGS &rest BODY)
elisp-scope--analyze-cl-loop(F &rest ARGS)
elisp-scope--analyze-cl-loop-1(&rest CLAUSES)
elisp-scope--analyze-cl-macrolet(F &rest ARGS)
elisp-scope--analyze-cl-macrolet-1(BINDINGS &rest BODY)
elisp-scope--analyze-cl-pushnew(F &rest ARGS)
elisp-scope--analyze-cl-pushnew-1(&rest ARGS)
elisp-scope--analyze-cl-return-from(F &rest ARGS)
elisp-scope--analyze-cl-return-from-1(NAME &optional RESULT)
elisp-scope--analyze-cl-struct-define(F &rest ARGS)
elisp-scope--analyze-cl-struct-define-1(&optional NAME DOC PARENT TYPE NAMED SLOTS CHILDREN TAG PRINT)
elisp-scope--analyze-cl-symbol-macrolet(F &rest ARGS)
elisp-scope--analyze-cl-symbol-macrolet-1(BINDINGS &rest BODY)
elisp-scope--analyze-cl-tagbody(F &rest ARGS)
elisp-scope--analyze-cl-tagbody-1(&rest BODY)
elisp-scope--analyze-cl-typep(F &rest ARGS)
elisp-scope--analyze-cl-typep-1(VAL TYPE)
elisp-scope--analyze-coding-system-mnemonic(F &rest ARGS)
elisp-scope--analyze-coding-system-mnemonic-1(&optional CODING-SYSTEM &rest REST)
elisp-scope--analyze-completion-table-with-category(F &rest ARGS)
elisp-scope--analyze-completion-table-with-category-1(&optional CATEGORY TABLE)
elisp-scope--analyze-cond(F &rest ARGS)
elisp-scope--analyze-cond-1(&rest CLAUSES)
elisp-scope--analyze-condition-case(F &rest ARGS)
elisp-scope--analyze-condition-case-1(VAR BODYFORM &rest HANDLERS)
elisp-scope--analyze-custom-declare-face(F &rest ARGS)
elisp-scope--analyze-custom-declare-face-1(FACE SPEC DOC &rest ARGS)
elisp-scope--analyze-custom-declare-group(F &rest ARGS)
elisp-scope--analyze-custom-declare-group-1(SYM MEMBERS DOC &rest ARGS)
elisp-scope--analyze-custom-declare-theme(F &rest ARGS)
elisp-scope--analyze-custom-declare-theme-1(NAME &rest REST)
elisp-scope--analyze-custom-declare-variable(F &rest ARGS)
elisp-scope--analyze-custom-declare-variable-1(SYM DEFAULT DOC &rest ARGS)
elisp-scope--analyze-custom-theme-set-variables(F &rest ARGS)
elisp-scope--analyze-custom-theme-set-variables-1(THEME &rest ARGS)
elisp-scope--analyze-declare-function(F &rest ARGS)
elisp-scope--analyze-declare-function-1(&optional FN FILE ARGLIST FILEONLY)
elisp-scope--analyze-decode-coding-region(F &rest ARGS)
elisp-scope--analyze-decode-coding-region-1(&optional START END CODING-SYSTEM &rest REST)
elisp-scope--analyze-decode-coding-string(F &rest ARGS)
elisp-scope--analyze-decode-coding-string-1(&optional STRING CODING-SYSTEM &rest REST)
elisp-scope--analyze-defalias(F &rest ARGS)
elisp-scope--analyze-defalias-1(&optional SYM DEF DOCSTRING)
elisp-scope--analyze-defconst(F &rest ARGS)
elisp-scope--analyze-defconst-1(&optional SYM INIT DOC)
elisp-scope--analyze-define-charset(F &rest ARGS)
elisp-scope--analyze-define-charset-1(&optional NAME DOCSTRING &rest PROPS)
elisp-scope--analyze-define-charset-alias(F &rest ARGS)
elisp-scope--analyze-define-charset-alias-1(&optional ALIAS CHARSET)
elisp-scope--analyze-define-coding-system(F &rest ARGS)
elisp-scope--analyze-define-coding-system-1(&optional NAME &rest REST)
elisp-scope--analyze-define-coding-system-alias(F &rest ARGS)
elisp-scope--analyze-define-coding-system-alias-1(&optional ALIAS CODING-SYSTEM)
elisp-scope--analyze-define-completion-category(F &rest ARGS)
elisp-scope--analyze-define-completion-category-1(&optional NAME PARENTS &rest REST)
elisp-scope--analyze-define-derived-mode(F &rest ARGS)
elisp-scope--analyze-define-derived-mode-1(&optional CHILD PARENT NAME &rest BODY)
elisp-scope--analyze-define-error(F &rest ARGS)
elisp-scope--analyze-define-error-1(&optional NAME MESSAGE PARENT)
elisp-scope--analyze-define-globalized-minor-mode(F &rest ARGS)
elisp-scope--analyze-define-globalized-minor-mode-1(GLOBAL MODE TURN-ON &rest BODY)
elisp-scope--analyze-define-key(F &rest ARGS)
elisp-scope--analyze-define-key-1(&optional KEYMAP KEY DEF REMOVE)
elisp-scope--analyze-define-minor-mode(F &rest ARGS)
elisp-scope--analyze-define-minor-mode-1(&optional MODE DOC &rest BODY)
elisp-scope--analyze-define-obsolete-face-alias(F &rest ARGS)
elisp-scope--analyze-define-obsolete-face-alias-1(&optional OBS CUR WHEN)
elisp-scope--analyze-define-widget(F &rest ARGS)
elisp-scope--analyze-define-widget-1(NAME CLASS DOC &rest ARGS)
elisp-scope--analyze-defmacro(F &rest ARGS)
elisp-scope--analyze-defmacro-1(&optional NAME ARGLIST &rest BODY)
elisp-scope--analyze-defun(F &rest ARGS)
elisp-scope--analyze-defun-1(&optional NAME ARGLIST &rest BODY)
elisp-scope--analyze-defvar(F &rest ARGS)
elisp-scope--analyze-defvar-1(&rest ARGS)
elisp-scope--analyze-defvaralias(F &rest ARGS)
elisp-scope--analyze-defvaralias-1(NEW BASE &optional DOCSTRING)
elisp-scope--analyze-derived-mode-p(F &rest ARGS)
elisp-scope--analyze-derived-mode-p-1(MODES &rest REST)
elisp-scope--analyze-derived-mode-set-parent(F &rest ARGS)
elisp-scope--analyze-derived-mode-set-parent-1(&optional MODE PARENT)
elisp-scope--analyze-easy-menu-do-define(F &rest ARGS)
elisp-scope--analyze-easy-menu-do-define-1(&optional SYMBOL MAPS DOC MENU)
elisp-scope--analyze-eieio-defclass-internal(F &rest ARGS)
elisp-scope--analyze-eieio-defclass-internal-1(&optional NAME SUPERCLASSES SLOTS OPTIONS)
elisp-scope--analyze-eieio-oref(F &rest ARGS)
elisp-scope--analyze-eieio-oref-1(OBJ SLOT)
elisp-scope--analyze-eieio-oset(F &rest ARGS)
elisp-scope--analyze-eieio-oset-1(OBJ SLOT VALUE)
elisp-scope--analyze-elisp-scope-1(F &rest ARGS)
elisp-scope--analyze-elisp-scope-1-1(&optional FORM OUTSPEC)
elisp-scope--analyze-elisp-scope-define-symbol-role(F &rest ARGS)
elisp-scope--analyze-elisp-scope-define-symbol-role-1(&optional NAME PARENTS &rest PROPS)
elisp-scope--analyze-elisp-scope-report(F &rest ARGS)
elisp-scope--analyze-elisp-scope-report-1(ROLE &rest ARGS)
elisp-scope--analyze-elisp-scope-report-s(F &rest ARGS)
elisp-scope--analyze-elisp-scope-report-s-1(&optional SYM ROLE)
elisp-scope--analyze-eval(F FORM &optional LEXICAL)
elisp-scope--analyze-eval-after-load(F &rest ARGS)
elisp-scope--analyze-eval-after-load-1(&optional FILE FORM)
elisp-scope--analyze-eval-when-compile(F &rest ARGS)
elisp-scope--analyze-eval-when-compile-1(&rest BODY)
elisp-scope--analyze-facep(F &rest ARGS)
elisp-scope--analyze-facep-1(&optional FACE &rest REST)
elisp-scope--analyze-fboundp(F &rest ARGS)
elisp-scope--analyze-fboundp-1(&optional SYMBOL)
elisp-scope--analyze-featurep(F &rest ARGS)
elisp-scope--analyze-featurep-1(FEATURE &rest REST)
elisp-scope--analyze-funcall(F &rest ARGS)
elisp-scope--analyze-funcall-1(&optional F &rest ARGS)
elisp-scope--analyze-function(F &rest ARGS)
elisp-scope--analyze-function-1(&optional ARG)
elisp-scope--analyze-go(F &rest ARGS)
elisp-scope--analyze-go-1(LABEL)
elisp-scope--analyze-gv-define-expander(F &rest ARGS)
elisp-scope--analyze-gv-define-expander-1(NAME HANDLER)
elisp-scope--analyze-gv-define-simple-setter(F &rest ARGS)
elisp-scope--analyze-gv-define-simple-setter-1(NAME SETTER &rest REST)
elisp-scope--analyze-icons--register(F &rest ARGS)
elisp-scope--analyze-icons--register-1(&optional NAME PARENT SPEC DOC KWS)
elisp-scope--analyze-if(F &rest ARGS)
elisp-scope--analyze-if-1(&optional TEST THEN &rest ELSE)
elisp-scope--analyze-if-let*(F &rest ARGS)
elisp-scope--analyze-if-let*-1(&optional VARLIST THEN &rest ELSE)
elisp-scope--analyze-interactive(F &rest ARGS)
elisp-scope--analyze-interactive-1(&rest _)
elisp-scope--analyze-kill-emacs(F &rest ARGS)
elisp-scope--analyze-kill-emacs-1(&rest REST)
elisp-scope--analyze-lambda(F &rest ARGS)
elisp-scope--analyze-lambda-1(ARGS &rest BODY)
elisp-scope--analyze-let(F &rest ARGS)
elisp-scope--analyze-let*(F &rest ARGS)
elisp-scope--analyze-let*-1(BINDINGS &rest BODY)
elisp-scope--analyze-let-1(BINDINGS &rest BODY)
elisp-scope--analyze-let-when-compile(F &rest ARGS)
elisp-scope--analyze-let-when-compile-1(BINDINGS &rest BODY)
elisp-scope--analyze-named-let(F &rest ARGS)
elisp-scope--analyze-named-let-1(NAME BINDINGS &rest BODY)
elisp-scope--analyze-nnoo-define-basics(F &rest ARGS)
elisp-scope--analyze-nnoo-define-basics-1(&optional BACKEND)
elisp-scope--analyze-oclosure--define(F &rest ARGS)
elisp-scope--analyze-oclosure--define-1(&optional NAME DOCSTRING PARENT-NAMES SLOTS &rest PROPS)
elisp-scope--analyze-oclosure-lambda(F &rest ARGS)
elisp-scope--analyze-oclosure-lambda-1(&optional SPEC ARGS &rest BODY)
elisp-scope--analyze-or(F &rest ARGS)
elisp-scope--analyze-or-1(&rest FORMS)
elisp-scope--analyze-overlay-put(F &rest ARGS)
elisp-scope--analyze-overlay-put-1(&optional OV PROP VAL)
elisp-scope--analyze-pop(F &rest ARGS)
elisp-scope--analyze-pop-1(&optional PLACE)
elisp-scope--analyze-prog1(F &rest ARGS)
elisp-scope--analyze-prog1-1(&rest BODY)
elisp-scope--analyze-progn(F &rest ARGS)
elisp-scope--analyze-progn-1(&rest BODY)
elisp-scope--analyze-propertize(F &rest ARGS)
elisp-scope--analyze-propertize-1(STRING &rest PROPS)
elisp-scope--analyze-provide(F &rest ARGS)
elisp-scope--analyze-provide-1(FEATURE &rest REST)
elisp-scope--analyze-provide-theme(F &rest ARGS)
elisp-scope--analyze-provide-theme-1(NAME &rest REST)
elisp-scope--analyze-pulse-momentary-highlight-region(F &rest ARGS)
elisp-scope--analyze-pulse-momentary-highlight-region-1(START END &optional FACE)
elisp-scope--analyze-push(F &rest ARGS)
elisp-scope--analyze-push-1(&optional NEWELT PLACE)
elisp-scope--analyze-put-text-property(F &rest ARGS)
elisp-scope--analyze-put-text-property-1(&optional BEG END PROP VAL OBJ)
elisp-scope--analyze-quote(F &rest ARGS)
elisp-scope--analyze-quote-1(ARG)
elisp-scope--analyze-run-hooks(F &rest ARGS)
elisp-scope--analyze-run-hooks-1(&rest HOOKS)
elisp-scope--analyze-rx(F &rest ARGS)
elisp-scope--analyze-rx-1(&rest REGEXPS)
elisp-scope--analyze-rx-define(F &rest ARGS)
elisp-scope--analyze-rx-define-1(NAME &rest REST)
elisp-scope--analyze-rx-let(F &rest ARGS)
elisp-scope--analyze-rx-let-1(BINDINGS &rest BODY)
elisp-scope--analyze-seq-let(F &rest ARGS)
elisp-scope--analyze-seq-let-1(ARGS SEQUENCE &rest BODY)
elisp-scope--analyze-setf(F &rest ARGS)
elisp-scope--analyze-setf-1(&rest ARGS)
elisp-scope--analyze-setopt--set(F &rest ARGS)
elisp-scope--analyze-setopt--set-1(&optional VAR VAL)
elisp-scope--analyze-setq(F &rest ARGS)
elisp-scope--analyze-setq-1(&rest ARGS)
elisp-scope--analyze-setq-local(F &rest ARGS)
elisp-scope--analyze-setq-local-1(&rest ARGS)
elisp-scope--analyze-signal(F &rest ARGS)
elisp-scope--analyze-signal-1(&optional ERROR-SYMBOL DATA)
elisp-scope--analyze-static-if(F &rest ARGS)
elisp-scope--analyze-static-if-1(&optional TEST THEN &rest ELSE)
elisp-scope--analyze-static-when(F &rest ARGS)
elisp-scope--analyze-static-when-1(&optional TEST &rest BODY)
elisp-scope--analyze-thing-at-mouse(F &rest ARGS)
elisp-scope--analyze-thing-at-mouse-1(&optional EVENT THING NO-PROPS)
elisp-scope--analyze-thing-at-point(F &rest ARGS)
elisp-scope--analyze-thing-at-point-1(&optional THING NO-PROPS)
elisp-scope--analyze-throw(F &rest ARGS)
elisp-scope--analyze-throw-1(&optional TAG VAL)
elisp-scope--analyze-while(F &rest ARGS)
elisp-scope--analyze-while-1(&rest REST)
elisp-scope--analyze-with-memoization(F &rest ARGS)
elisp-scope--analyze-with-memoization-1(&optional PLACE &rest BODY)
elisp-scope--analyze-with-slots(F &rest ARGS)
elisp-scope--analyze-with-slots-1(SPEC-LIST OBJECT &rest BODY)
elisp-scope--analyze-with-suppressed-warnings(F WARNINGS &rest BODY)
elisp-scope--binding(SYM BEG)
elisp-scope--define-function-analyzer(FSYM ARGS ROLE &rest BODY)
elisp-scope--define-symbol-role(NAME PARENTS PROPS)
elisp-scope--easy-menu-do-define-menu(MENU)
elisp-scope--handle-quoted(SPEC ARG)
elisp-scope--let-1(LOCAL BINDINGS BODY)
elisp-scope--local-function-analyzer(POS)
elisp-scope--local-new(SYM POS &optional LOCAL)
elisp-scope--match-spec-to-arg(SPEC ARG)
elisp-scope--report(ROLE BEG SYM &optional ID DEF)
elisp-scope--special-variable-p(SYM)
elisp-scope--sym-bare(SYM)
elisp-scope--sym-pos(SYM)
elisp-scope--symbol(SYM)
elisp-scope--unquote(FORM)
elisp-scope--variable(SYM BEG ID)
elisp-scope-1(FORM &optional OUTSPEC)
elisp-scope-analyze-form(CALLBACK &optional STREAM)
elisp-scope-backquote(STRUCTURE &optional OUTSPEC)
elisp-scope-backquote-1(STRUCTURE &optional OUTSPEC)
elisp-scope-block(NAME BODY)
elisp-scope-cl-defun(NAME ARGLIST BODY)
elisp-scope-cl-lambda(ARGLIST BODY)
elisp-scope-cl-lambda-1(ARGLIST MORE BODY)
elisp-scope-cl-lambda-aux(ARG ARGLIST MORE BODY)
elisp-scope-cl-lambda-defs(ARG ARGLIST MORE BODY)
elisp-scope-cl-lambda-key(ARG ARGLIST MORE BODY)
elisp-scope-cl-lambda-optional(ARG ARGLIST MORE BODY)
elisp-scope-cl-lambda-rest(VAR ARGLIST MORE BODY)
elisp-scope-cl-macrolet(BINDINGS BODY OUTSPEC)
elisp-scope-cl-tagbody(LABELS STATEMENTS)
elisp-scope-define-analyzer(FSYM ARGS &rest BODY)
elisp-scope-define-function-analyzer(FSYM ARGS &rest BODY)
elisp-scope-define-macro-analyzer(FSYM ARGS &rest BODY)
elisp-scope-define-minor-mode(MODE DOC BODY)
elisp-scope-define-special-form-analyzer(FSYM ARGS &rest BODY)
elisp-scope-define-symbol-role(NAME PARENTS &rest PROPS)
elisp-scope-defmethod(NAME REST)
elisp-scope-defmethod-1(LOCAL ARGS BODY)
elisp-scope-deftype(NAME ARGS BODY)
elisp-scope-defun(NAME ARGS BODY)
elisp-scope-describe-symbol-role(ROLE &rest _)
elisp-scope-flet(DEFS BODY OUTSPEC)
elisp-scope-get-symbol-role-property(ROLE PROP)
elisp-scope-global-minor-mode-predicate(PRED)
elisp-scope-gv-define-expander(NAME HANDLER)
elisp-scope-gv-define-simple-setter(NAME SETTER REST)
elisp-scope-if-let(BINDINGS THEN ELSE OUTSPEC)
elisp-scope-interactive(INTR SPEC MODES)
elisp-scope-labels(DEFS FORMS OUTSPEC)
elisp-scope-lambda(ARGS BODY &optional OUTSPEC)
elisp-scope-let(BINDINGS BODY)
elisp-scope-let*(BINDINGS BODY)
elisp-scope-loop(FORMS)
elisp-scope-loop-and(REST)
elisp-scope-loop-collect(EXPR REST)
elisp-scope-loop-do(FORM REST)
elisp-scope-loop-end(REST)
elisp-scope-loop-finally(NEXT REST)
elisp-scope-loop-for(LOCAL VARS REST)
elisp-scope-loop-for-=(LOCAL EXPR REST)
elisp-scope-loop-for-and(REST)
elisp-scope-loop-for-being(LOCAL NEXT REST)
elisp-scope-loop-for-being-the(LOCAL WORD REST)
elisp-scope-loop-for-being-the-hash-keys(LOCAL WORD REST)
elisp-scope-loop-for-being-the-hash-keys-of(LOCAL EXPR REST)
elisp-scope-loop-for-being-the-hash-keys-of-using(FORM REST)
elisp-scope-loop-for-by(LOCAL EXPR REST)
elisp-scope-loop-for-from(LOCAL EXPR REST)
elisp-scope-loop-for-to(LOCAL EXPR REST)
elisp-scope-loop-if(KEYWORD CONDITION REST)
elisp-scope-loop-initially(NEXT REST)
elisp-scope-loop-named(NAME REST)
elisp-scope-loop-repeat(FORM REST)
elisp-scope-loop-with(VAR REST)
elisp-scope-loop-with-and(REST)
elisp-scope-major-mode-name(MODE)
elisp-scope-mode-line-construct(FORMAT)
elisp-scope-mode-line-construct-1(FORMAT)
elisp-scope-n(FORMS &optional OUTSPEC)
elisp-scope-named-let(NAME BINDINGS BODY &optional OUTSPEC)
elisp-scope-oclosure-lambda(SPEC ARGS BODY)
elisp-scope-oclosure-lambda-1(LOCAL BINDINGS ARGS BODY)
elisp-scope-quote(ARG &optional OUTSPEC)
elisp-scope-read-symbol-role(PROMPT &optional DEFAULT)
elisp-scope-report-s(SYM ROLE)
elisp-scope-return-from(NAME RESULT)
elisp-scope-rx(REGEXPS)
elisp-scope-rx-1(REGEXP)
elisp-scope-rx-define(NAME REST)
elisp-scope-rx-let(BINDINGS BODY)
elisp-scope-safe-macro-p(MACRO)
elisp-scope-set-symbol-role-property(ROLE PROP VALUE)
elisp-scope-setq(ARGS)
elisp-scope-sharpquote(ARG)
elisp-scope-symbol-role-p(SYM)
elisp-scope-with-local-definition(SYM AF &rest BODY)

Defined faces (0)