prettier / prettier-emacs

Minor mode to format JS code on file save
http://jlongster.com/A-Prettier-Formatter
372 stars 53 forks source link

Convenient way to enable/disable per project #29

Open nickmccurdy opened 6 years ago

nickmccurdy commented 6 years ago

I love how little setup this package has, especially how it reads my existing Prettier config, but I'm struggling with finding a good way to disable this on my JavaScript projects that aren't using Prettier. Calling prettier-js-mode isn't very convenient because it's buffer local (I have to run it on every single buffer I want to disable formatting in). It would be great to have some sort of configuration variable to only enable this in certain projects, automatic enable/disable based on if the current project has a Prettier binary or config, or even a global minor mode. I'm not really sure what's best, so I'd appreciate feedback.

nickmccurdy commented 6 years ago

As a temporary workaround, I uninstalled Prettier globally (npm r -g prettier) after setting up add-node-modules-path. Now prettier-emacs-mode will only format buffers if it's in a project with prettier installed locally. It seems to be working well so far, but I'd still like more fine grained control so I can use prettier-js on non-project buffers manually without forcing prettier-emacs-mode to be enabled on all buffers.

danielpza commented 6 years ago

I check if .prettierrc file exists before enabling prettier-mode

    (if (locate-dominating-file default-directory ".prettierrc")
        (prettier-js-mode +1)
      (add-hook 'before-save-hook 'tide-format-before-save))
rnons commented 5 years ago

This seems to work for me, put ((nil . ((eval . (prettier-js-mode 0))))) in your .dir-locals.el. https://emacs.stackexchange.com/a/20340

gamb commented 5 years ago

Nice solution @danielpa9708. FTR, I ended up with:

(defun maybe-use-prettier ()
  "Enable prettier-js-mode if an rc file is located."
  (if (locate-dominating-file default-directory ".prettierrc")
      (prettier-js-mode +1)))

(add-hook 'typescript-mode-hook 'maybe-use-prettier)
(add-hook 'js2-mode-hook 'maybe-use-prettier)