:editor format refactor

Upstream does support nix, but it’s the nixfmt formatter which isn’t used very much. The community has not yet agreed on a canonical formatter but AFAIK, nixpkgs-fmt is used far more frequently, so maybe we should add that in here for now?

Thanks for bringing that to my attention!

This is almost certainly a good candidate for an upstream change, so I’ll test it tonight and create an upstream PR (and also make the change in doom so it’s not blocked)

Yea, I’m really not thrilled with the current state of code formatting in Julia. I’m hoping @kiranshila will get some more time to work on julafmt in the future, but for now GitHub - domluna/JuliaFormatter.jl: An opinionated code formatter for Julia. Plot twist - the opinion is your own. seems to be the standard, and it would probably be worth supporting that.

1 Like

That looks like it’s a library though, how would I use that to format a buffer? Is a wrapper script needed or something?

Yea, you’d probably want a wrapper script. https://codeberg.org/FelipeLema/julia-formatter.el seems relevant here.

That starts up a local web service, way more complex than this needs to be and definitely out of scope of apheleia

You can thank Julia’s JIT-AOT compiling + (current) lack of binary caching :crai:

Kiran’s juliafmt would be in rust and hence fine, but it’s still in alpha ATM.

This one looks like a no-for-now then.

Are you able to offer any input on ESS? If you use it :stuck_out_tongue: AFAICT all I need is an R formatter for that one, have a couple but I’m not sure how much that misses out

I haven’t really got any comments on that.

1 Like

Would it be possible to make format-all-mode an alias for apheleia-mode? This would make possible for people to seamlessly transition.

Also, for Go, the formatter also needs to be updated (it uses a Lisp expression).

I don’t understand what you want from this. The package will be replaced with no interaction needed.

Using a list is fine

People may have stuff like (add-hook 'python-mode-hook #'format-all-mode) (as hinted in the documentation). This won’t work anymore as they have to use to apheleia-mode. But maybe this is not worth the trouble.

This is:

  (set-formatter! 'gofmt
    '(("%s" (if (or +format-region-p
                    (not (executable-find "goimports")))
                "gofmt"
              "goimports"))))

This is not handled by the current code (despite the comment of set-formatter! saying otherwise) and apheleia does not know how to handle it either and tries to execute it as is.

I suppose it could be:

  (set-formatter! 'gofmt
    (if (or +format-region-p
                    (not (executable-find "goimports")))
                "gofmt"
              "goimports"))

Can’t imagine why, and yeah it probably is

OK well it’ll be removed anyway since it doesn’t do anything vs upstream

I’ve always used styler for R

Yeah I found styler for R, but my understanding is the ESS module is used for other languages too.

Is just provider styler good enough?

1 Like

I’ve set up the following script for R formatting (in format_stdin.sh which is in PATH):

#!/usr/bin/env sh

unset R_HOME
/usr/local/bin/Rscript -e "library(styler); txt <- readLines(file('stdin')); write(style_text(txt), stdout())"

And added the following to config.el

(set-formatter! 'styler '("format_stdin.sh") :modes '(ess-r-mode))