elisp: Specification Examples

 
 17.2.15.4 Specification Examples
 ................................
 
 It may be easier to understand Edebug specifications by studying the
 examples provided here.
 
    A ‘let’ special form has a sequence of bindings and a body.  Each of
 the bindings is either a symbol or a sublist with a symbol and optional
 expression.  In the specification below, notice the ‘gate’ inside of the
 sublist to prevent backtracking once a sublist is found.
 
      (def-edebug-spec let
        ((&rest
          &or symbolp (gate symbolp &optional form))
         body))
 
    Edebug uses the following specifications for ‘defun’ and the
 associated argument list and ‘interactive’ specifications.  It is
 necessary to handle interactive forms specially since an expression
 argument is actually evaluated outside of the function body.  (The
 specification for ‘defmacro’ is very similar to that for ‘defun’, but
 allows for the ‘declare’ statement.)
 
      (def-edebug-spec defun
        (&define name lambda-list
                 [&optional stringp]   ; Match the doc string, if present.
                 [&optional ("interactive" interactive)]
                 def-body))
 
      (def-edebug-spec lambda-list
        (([&rest arg]
          [&optional ["&optional" arg &rest arg]]
          &optional ["&rest" arg]
          )))
 
      (def-edebug-spec interactive
        (&optional &or stringp def-form))    ; Notice: ‘def-form’
 
    The specification for backquote below illustrates how to match dotted
 lists and use ‘nil’ to terminate recursion.  It also illustrates how
 components of a vector may be matched.  (The actual specification
 defined by Edebug is a little different, and does not support dotted
 lists because doing so causes very deep recursion that could fail.)
 
      (def-edebug-spec \` (backquote-form))   ; Alias just for clarity.
 
      (def-edebug-spec backquote-form
        (&or ([&or "," ",@"] &or ("quote" backquote-form) form)
             (backquote-form . [&or nil backquote-form])
             (vector &rest backquote-form)
             sexp))