Subject: Re: bug#44804: 28.0.50; loading EBDB using use-package is throwing error

From: Pankaj Jangid <[email-masked]>
Date: Mon, 23 Nov 2020 11:17:41 +0530

Eric Abrahamsen <[email-masked]> writes:

>> use this when `use-package' will be part of core emacs:
>>
>> (use-package ebdb
>>   :ensure t
>>   :config
>>   (use-package 'ebdb-gnus  ; no `:ensure t' here, installed with ebdb
>>     :hook emacs-startup)
>>   (use-package 'ebdb-message
>>     :hook emacs-startup))
>
> So this is causing the same error?

Yes. This produces same error and two more for `edbd-gnus' and
`edbd-message'.

>> ;; Error (use-package): Failed to parse package 'ebdb-gnus: Wrong type
>>    argument: symbolp, 'ebdb-gnus Disable showing Disable logging
>> ;; Error (use-package): Failed to parse package 'ebdb-message: Wrong type
>>    argument: symbolp, 'ebdb-message Disable showing Disable logging
>
> Can you turn on debug-on-error (or start with --debug-init if it's
> blowing up at startup) and see what the actual backtrace is? Your
> original error was "Wrong type argument: listp, require", which doesn't
> mean very much to me.

The above configuration with debug-on-error produces this long output:

--8<---------------cut here---------------start------------->8---
Debugger entered--Lisp error: (wrong-type-argument symbolp 'ebdb-gnus)
  symbol-name('ebdb-gnus)
  use-package-normalize-keywords('ebdb-gnus (:hook emacs-startup))
  #f(compiled-function (name &rest args) "Declare an Emacs package by specifying a group of configuration options.\n\nFor full documentation, please see the README file that came with\nthis file.  Usage:\n\n  (use-package package-name\n     [:keyword [option]]...)\n\n:init            Code to run before PACKAGE-NAME has been loaded.\n:config          Code to run after PACKAGE-NAME has been loaded.  Note that\n                 if loading is deferred for any reason, this code does not\n                 execute until the lazy load has occurred.\n:preface         Code to be run before everything except `:disabled'; this\n                 can be used to define functions for use in `:if', or that\n                 should be seen by the byte-compiler.\n\n:mode            Form to be added to `auto-mode-alist'.\n:magic           Form to be added to `magic-mode-alist'.\n:magic-fallback  Form to be added to `magic-fallback-mode-alist'.\n:interpreter     Form to be added to `interpreter-mode-alist'.\n\n:commands        Define autoloads for commands that will be defined by the\n                 package.  This is useful if the package is being lazily\n                 loaded, and you wish to conditionally call functions in your\n                 `:init' block that are defined in the package.\n:hook            Specify hook(s) to attach this package to.\n\n:bind            Bind keys, and define autoloads for the bound commands.\n:bind*           Bind keys, and define autoloads for the bound commands,\n                 *overriding all minor mode bindings*.\n:bind-keymap     Bind a key prefix to an auto-loaded keymap defined in the\n                 package.  This is like `:bind', but for keymaps.\n:bind-keymap*    Like `:bind-keymap', but overrides all minor mode bindings\n\n:defer           Defer loading of a package -- this is implied when using\n                 `:commands', `:bind', `:bind*', `:mode', `:magic', `:hook',\n                 `:magic-fallback', or `:interpreter'.  This can be an integer,\n                 to force loading after N seconds of idle time, if the package\n                 has not already been loaded.\n:after           Delay the use-package declaration until after the named modules\n                 have loaded. Once load, it will be as though the use-package\n                 declaration (without `:after') had been seen at that moment.\n:demand          Prevent the automatic deferred loading introduced by constructs\n                 such as `:bind' (see `:defer' for the complete list).\n\n:if EXPR         Initialize and load only if EXPR evaluates to a non-nil value.\n:disabled        The package is ignored completely if this keyword is present.\n:defines         Declare certain variables to silence the byte-compiler.\n:functions       Declare certain functions to silence the byte-compiler.\n:load-path       Add to the `load-path' before attempting to load the package.\n:diminish        Support for diminish.el (if installed).\n:delight         Support for delight.el (if installed).\n:custom          Call `custom-set' or `set-default' with each variable\n                 definition without modifying the Emacs `custom-file'.\n                 (compare with `custom-set-variables').\n:custom-face     Call `customize-set-faces' with each face definition.\n:ensure          Loads the package using package.el if necessary.\n:pin             Pin the package to an archive." #<bytecode -0x1108899a2a375614>)('ebdb-gnus :hook emacs-startup)
  macroexpand((use-package 'ebdb-gnus :hook emacs-startup))
  #f(compiled-function (form) #<bytecode -0x12004d08290ce1d1>)((use-package 'ebdb-gnus :hook emacs-startup))
  mapcar(#f(compiled-function (form) #<bytecode -0x12004d08290ce1d1>) ((use-package 'ebdb-gnus :hook emacs-startup) (use-package 'ebdb-message :hook emacs-startup)))
  use-package-normalize-form(":config" ((use-package 'ebdb-gnus :hook emacs-startup) (use-package 'ebdb-message :hook emacs-startup)))
  use-package-normalize/:config(ebdb :config ((use-package 'ebdb-gnus :hook emacs-startup) (use-package 'ebdb-message :hook emacs-startup)))
  use-package-normalize-plist(ebdb (:config (use-package 'ebdb-gnus :hook emacs-startup) (use-package 'ebdb-message :hook emacs-startup)) nil use-package-merge-keys)
  use-package-normalize-plist(ebdb (:ensure t :config (use-package 'ebdb-gnus :hook emacs-startup) (use-package 'ebdb-message :hook emacs-startup)) nil use-package-merge-keys)
  use-package-normalize-keywords(ebdb (:ensure t :config (use-package 'ebdb-gnus :hook emacs-startup) (use-package 'ebdb-message :hook emacs-startup)))
  #f(compiled-function (name &rest args) "Declare an Emacs package by specifying a group of configuration options.\n\nFor full documentation, please see the README file that came with\nthis file.  Usage:\n\n  (use-package package-name\n     [:keyword [option]]...)\n\n:init            Code to run before PACKAGE-NAME has been loaded.\n:config          Code to run after PACKAGE-NAME has been loaded.  Note that\n                 if loading is deferred for any reason, this code does not\n                 execute until the lazy load has occurred.\n:preface         Code to be run before everything except `:disabled'; this\n                 can be used to define functions for use in `:if', or that\n                 should be seen by the byte-compiler.\n\n:mode            Form to be added to `auto-mode-alist'.\n:magic           Form to be added to `magic-mode-alist'.\n:magic-fallback  Form to be added to `magic-fallback-mode-alist'.\n:interpreter     Form to be added to `interpreter-mode-alist'.\n\n:commands        Define autoloads for commands that will be defined by the\n                 package.  This is useful if the package is being lazily\n                 loaded, and you wish to conditionally call functions in your\n                 `:init' block that are defined in the package.\n:hook            Specify hook(s) to attach this package to.\n\n:bind            Bind keys, and define autoloads for the bound commands.\n:bind*           Bind keys, and define autoloads for the bound commands,\n                 *overriding all minor mode bindings*.\n:bind-keymap     Bind a key prefix to an auto-loaded keymap defined in the\n                 package.  This is like `:bind', but for keymaps.\n:bind-keymap*    Like `:bind-keymap', but overrides all minor mode bindings\n\n:defer           Defer loading of a package -- this is implied when using\n                 `:commands', `:bind', `:bind*', `:mode', `:magic', `:hook',\n                 `:magic-fallback', or `:interpreter'.  This can be an integer,\n                 to force loading after N seconds of idle time, if the package\n                 has not already been loaded.\n:after           Delay the use-package declaration until after the named modules\n                 have loaded. Once load, it will be as though the use-package\n                 declaration (without `:after') had been seen at that moment.\n:demand          Prevent the automatic deferred loading introduced by constructs\n                 such as `:bind' (see `:defer' for the complete list).\n\n:if EXPR         Initialize and load only if EXPR evaluates to a non-nil value.\n:disabled        The package is ignored completely if this keyword is present.\n:defines         Declare certain variables to silence the byte-compiler.\n:functions       Declare certain functions to silence the byte-compiler.\n:load-path       Add to the `load-path' before attempting to load the package.\n:diminish        Support for diminish.el (if installed).\n:delight         Support for delight.el (if installed).\n:custom          Call `custom-set' or `set-default' with each variable\n                 definition without modifying the Emacs `custom-file'.\n                 (compare with `custom-set-variables').\n:custom-face     Call `customize-set-faces' with each face definition.\n:ensure          Loads the package using package.el if necessary.\n:pin             Pin the package to an archive." #<bytecode -0x1108899a2a375614>)(ebdb :ensure t :config (use-package 'ebdb-gnus :hook emacs-startup) (use-package 'ebdb-message :hook emacs-startup))
  macroexpand((use-package ebdb :ensure t :config (use-package 'ebdb-gnus :hook emacs-startup) (use-package 'ebdb-message :hook emacs-startup)))
  internal-macroexpand-for-load((use-package ebdb :ensure t :config (use-package 'ebdb-gnus :hook emacs-startup) (use-package 'ebdb-message :hook emacs-startup)) nil)
  eval-buffer(#<buffer  *load*-780926> nil "/Users/pankaj/.config/emacs/lisp/init-ebdb.el" nil t)  ; Reading at buffer position 359
  load-with-code-conversion("/Users/pankaj/.config/emacs/lisp/init-ebdb.el" "/Users/pankaj/.config/emacs/lisp/init-ebdb.el" nil t)
  require(init-ebdb)
  eval-buffer(#<buffer  *load*> nil "/Users/pankaj/.config/emacs/init.el" nil t)  ; Reading at buffer position 1876
  load-with-code-conversion("/Users/pankaj/.config/emacs/init.el" "/Users/pankaj/.config/emacs/init.el" t t)
  load("/Users/pankaj/.config/emacs/init" noerror nomessage)
  startup--load-user-init-file(#f(compiled-function () #<bytecode -0x1f1eeb94b9b023a1>) #f(compiled-function () #<bytecode 0x2eac4b2ad19c19f>) t)
  command-line()
  normal-top-level()
--8<---------------cut here---------------end--------------->8---