jscheid / prettier.el

Prettier code formatting for Emacs.
GNU General Public License v3.0
167 stars 12 forks source link

defconst prettier-el-version breaks use-package etc. #18

Closed aspiers closed 4 years ago

aspiers commented 4 years ago

It seems that it is expected that prettier.el will be open in the current buffer at eval-time, since HACKING.md instructs the user to do:

M-x eval-buffer in prettier.el.

and prettier-el-version depends on the current buffer being prettier.el so that package-buffer-info works:

(defconst prettier-el-version
  (eval-when-compile
    (message "Current buffer %s" (current-buffer))
    (package-version-join
     (package-desc-version
      (save-excursion
        (package-buffer-info)))))
  "Version of `prettier' package.")

However, if attempting to load via use-package or similar, this results in a "Package lacks a file header" error:

Debugger entered--Lisp error: (error "Package lacks a file header")
  signal(error ("Package lacks a file header"))
  error("Package lacks a file header")
  package-buffer-info()
  (save-excursion (package-buffer-info))
  (package-desc-version (save-excursion (package-buffer-info)))
  (package-version-join (package-desc-version (save-excursion (package-buffer-info))))
  (progn (package-version-join (package-desc-version (save-excursion (package-buffer-info)))))
  eval((progn (package-version-join (package-desc-version (save-excursion (package-buffer-info))))) t)
  #f(compiled-function (&rest body) "Like `progn', but evaluates the body at compile time if you're compiling.\nThus, the result of the body appears to the compiler as a quoted\nconstant.  In interpreted code, this is entirely equivalent to\n`progn', except that the value of the expression may be (but is\nnot necessarily) computed at load time if eager macro expansion\nis enabled." #<bytecode 0x19f367>)((package-version-join (package-desc-version (save-excursion (package-buffer-info)))))
  (eval-when-compile (package-version-join (package-desc-version (save-excursion (package-buffer-info)))))
  (defconst prettier-el-version (eval-when-compile (package-version-join (package-desc-version (save-excursion (package-buffer-info))))) "Version of `prettier' package.")
  eval-buffer(#<buffer  *load*-592468> nil "/home/adam/.GIT/3rd-party/prettier.el/prettier.el" nil t)  ; Reading at buffer position 8929

The solution seems to be to load the source file into a temporary buffer first. I'll submit a PR for that.