apheleia/CHANGELOG.md

143 lines
5.7 KiB
Markdown
Raw Normal View History

2019-09-20 17:08:09 -07:00
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog].
## Unreleased
Support multiple formatters (#31) (#51) * Support multiple formatters (#31) Closes #31 This commit makes it so apheleia can run multiple formatters one after the other and use the resultant output to format the current buffer. This works somewhat like a pipeline. The output of one formatter becomes the input to the next formatter until all formatters have run and then an RCS patch is built from the resultant output and applied to the current buffer. Note: For convenience we internally represent the users configuration as a list of formatters even when it may only be one. For example if the user has configured `(python-mode . black)` in apheleia-mode-alist then internally we interpret that as a formatter list of `(black)` instead of `black` as we did previously. * Support multiple formatters (#31) Closes #31 This commit makes it so apheleia can run multiple formatters one after the other and use the resultant output to format the current buffer. This works somewhat like a pipeline. The output of one formatter becomes the input to the next formatter until all formatters have run and then an RCS patch is built from the resultant output and applied to the current buffer. Note: For convenience we internally represent the users configuration as a list of formatters even when it may only be one. For example if the user has configured `(python-mode . black)` in apheleia-mode-alist then internally we interpret that as a formatter list of `(black)` instead of `black` as we did previously. * Make some changes * Make some changes * Error when a (not-first) formatter uses file or filepath * Prevent formatter recieving stdin when using `file' Co-authored-by: Radon Rosborough <radon.neon@gmail.com>
2021-10-25 02:28:18 +01:00
### Enhancements
* Support multiple formatters ([#31]). You can now configure a list of
formatters for a major-mode in `apheleia-mode-alist` and they will
be run in sequence.
* Support evaluating items in `apheleia-formatters` to make formatter
commands more dynamic ([#50], [#55]).
* Allow apheleia to format buffers without an underlying file ([#52]).
* Support functional formatters ([#62]). You can now use a lisp
function as a formatter allowing you to plug more powerful
formatters into apheleia such as language servers.
Support multiple formatters (#31) (#51) * Support multiple formatters (#31) Closes #31 This commit makes it so apheleia can run multiple formatters one after the other and use the resultant output to format the current buffer. This works somewhat like a pipeline. The output of one formatter becomes the input to the next formatter until all formatters have run and then an RCS patch is built from the resultant output and applied to the current buffer. Note: For convenience we internally represent the users configuration as a list of formatters even when it may only be one. For example if the user has configured `(python-mode . black)` in apheleia-mode-alist then internally we interpret that as a formatter list of `(black)` instead of `black` as we did previously. * Support multiple formatters (#31) Closes #31 This commit makes it so apheleia can run multiple formatters one after the other and use the resultant output to format the current buffer. This works somewhat like a pipeline. The output of one formatter becomes the input to the next formatter until all formatters have run and then an RCS patch is built from the resultant output and applied to the current buffer. Note: For convenience we internally represent the users configuration as a list of formatters even when it may only be one. For example if the user has configured `(python-mode . black)` in apheleia-mode-alist then internally we interpret that as a formatter list of `(black)` instead of `black` as we did previously. * Make some changes * Make some changes * Error when a (not-first) formatter uses file or filepath * Prevent formatter recieving stdin when using `file' Co-authored-by: Radon Rosborough <radon.neon@gmail.com>
2021-10-25 02:28:18 +01:00
### Formatters
* [ClangFormat](https://clang.llvm.org/docs/ClangFormat.html) for
C/C++
* [`google-java-format`](https://github.com/google/google-java-format)
for Java
Support multiple formatters (#31) (#51) * Support multiple formatters (#31) Closes #31 This commit makes it so apheleia can run multiple formatters one after the other and use the resultant output to format the current buffer. This works somewhat like a pipeline. The output of one formatter becomes the input to the next formatter until all formatters have run and then an RCS patch is built from the resultant output and applied to the current buffer. Note: For convenience we internally represent the users configuration as a list of formatters even when it may only be one. For example if the user has configured `(python-mode . black)` in apheleia-mode-alist then internally we interpret that as a formatter list of `(black)` instead of `black` as we did previously. * Support multiple formatters (#31) Closes #31 This commit makes it so apheleia can run multiple formatters one after the other and use the resultant output to format the current buffer. This works somewhat like a pipeline. The output of one formatter becomes the input to the next formatter until all formatters have run and then an RCS patch is built from the resultant output and applied to the current buffer. Note: For convenience we internally represent the users configuration as a list of formatters even when it may only be one. For example if the user has configured `(python-mode . black)` in apheleia-mode-alist then internally we interpret that as a formatter list of `(black)` instead of `black` as we did previously. * Make some changes * Make some changes * Error when a (not-first) formatter uses file or filepath * Prevent formatter recieving stdin when using `file' Co-authored-by: Radon Rosborough <radon.neon@gmail.com>
2021-10-25 02:28:18 +01:00
* [isort](https://github.com/PyCQA/isort) for
[Python](https://www.python.org/) ([#51])
* [latexindent](https://ctan.org/pkg/latexindent?lang=en) for
[LaTeX](https://www.latex-project.org/)
* [rustfmt](https://github.com/rust-lang/rustfmt) for
[Rust](https://www.rust-lang.org/) ([#24])
* [`mix format`](https://hexdocs.pm/mix/1.12/Mix.Tasks.Format.html)
for Elixir ([#48])
* [`@prettier/plugin-ruby`](https://github.com/prettier/plugin-ruby)
for Ruby ([#49])
2021-02-26 22:04:15 -08:00
### Bugs fixed
* Fix spelling error in generated process names ([#32]).
2021-03-28 15:25:15 -07:00
* Apheleia no longer conflicts with undo-fu (#[39]).
* Apheleia no longer triggers `after-set-visited-file-name-hook`,
which reduces conflicts with various modes. For example, `lsp-mode`
will no longer trigger a reconnect every time you save.
* Fix inconsistent `:type` spec preventing use of `customize-variable`
on `apheleia-formatters`.
* Fix mixed style line ending generated by `diff` ([#54]) by adding
`--strip-trailing-cr` to `diff`'s argument list.
Run the same formatter in multiple buffers in parallel (#64) (#65) (#65) * Run the same formatter in multiple buffers in parallel (#64) (#65) Previously when apheleia formatted a buffer it created a stdout and stderr buffer for each formatter, but it reused this buffer each time that formatter would run. This makes sense if we only ever format one buffer at a time (meaning we don't format a new buffer until the previous buffer has been formatted) such as when calling `apheleia-format-buffer` interactively (since the interval for running a formatter is likely far below hitting a key combination for this command). But this assumption falls apart when using `apheleia-mode` and `apheleia--format-after-save`. Now a lot of files could be saved, triggering the same formatters again and again, within a short period of each other. Apheleia used to keep track of the current formatter process and kill it when a newer formatter is attempted, but this also kills all but the last buffer called by `apheleia--format-after-save`. With this commit we still have separate stdout and stderr buffers for each formatter, but we *always* create a new one when attempting a format. There is a new buffer type, a log buffer, which is populated with a formatter processes stderr when it fails. We also still have a `apheleia--current-process` variable, but instead of being global, it's local to the current buffer being formatted. We now kill it if starting a new format in the current buffer, but two separate buffers can call the same formatter with no issue. * Mark change as bugfix in changelog * Add to docstring * Remove no longer needed code * Re-wrap docstring * Remove newline * Change spelling * Use correct buffer when checking (buffer-size) Co-authored-by: Radon Rosborough <radon.neon@gmail.com>
2021-12-26 20:52:52 +00:00
* Allow running the same formatter in multiple buffers in parallel
([#64], [#65]). Previously, when saving a number of files at the
same time, the contents of those buffers could be corrupted by a
race condition.
* In some circumstances the error `wrong-type-argument bufferp nil`
could be reported when running certain formatters under Apheleia.
This has been fixed.
2021-02-26 22:04:15 -08:00
[#24]: https://github.com/raxod502/apheleia/pull/24
2021-02-26 22:04:15 -08:00
[#30]: https://github.com/raxod502/apheleia/issues/30
Support multiple formatters (#31) (#51) * Support multiple formatters (#31) Closes #31 This commit makes it so apheleia can run multiple formatters one after the other and use the resultant output to format the current buffer. This works somewhat like a pipeline. The output of one formatter becomes the input to the next formatter until all formatters have run and then an RCS patch is built from the resultant output and applied to the current buffer. Note: For convenience we internally represent the users configuration as a list of formatters even when it may only be one. For example if the user has configured `(python-mode . black)` in apheleia-mode-alist then internally we interpret that as a formatter list of `(black)` instead of `black` as we did previously. * Support multiple formatters (#31) Closes #31 This commit makes it so apheleia can run multiple formatters one after the other and use the resultant output to format the current buffer. This works somewhat like a pipeline. The output of one formatter becomes the input to the next formatter until all formatters have run and then an RCS patch is built from the resultant output and applied to the current buffer. Note: For convenience we internally represent the users configuration as a list of formatters even when it may only be one. For example if the user has configured `(python-mode . black)` in apheleia-mode-alist then internally we interpret that as a formatter list of `(black)` instead of `black` as we did previously. * Make some changes * Make some changes * Error when a (not-first) formatter uses file or filepath * Prevent formatter recieving stdin when using `file' Co-authored-by: Radon Rosborough <radon.neon@gmail.com>
2021-10-25 02:28:18 +01:00
[#31]: https://github.com/raxod502/apheleia/issues/31
2021-02-26 22:04:15 -08:00
[#32]: https://github.com/raxod502/apheleia/pull/32
2021-03-28 15:25:15 -07:00
[#39]: https://github.com/raxod502/apheleia/issues/39
[#48]: https://github.com/raxod502/apheleia/pull/48
[#49]: https://github.com/raxod502/apheleia/pull/49
[#50]: https://github.com/raxod502/apheleia/pull/50
[#52]: https://github.com/raxod502/apheleia/issues/52
[#54]: https://github.com/raxod502/apheleia/pull/54
[#55]: https://github.com/raxod502/apheleia/issues/55
[#60]: https://github.com/raxod502/apheleia/issues/60
[#62]: https://github.com/raxod502/apheleia/issues/62
Run the same formatter in multiple buffers in parallel (#64) (#65) (#65) * Run the same formatter in multiple buffers in parallel (#64) (#65) Previously when apheleia formatted a buffer it created a stdout and stderr buffer for each formatter, but it reused this buffer each time that formatter would run. This makes sense if we only ever format one buffer at a time (meaning we don't format a new buffer until the previous buffer has been formatted) such as when calling `apheleia-format-buffer` interactively (since the interval for running a formatter is likely far below hitting a key combination for this command). But this assumption falls apart when using `apheleia-mode` and `apheleia--format-after-save`. Now a lot of files could be saved, triggering the same formatters again and again, within a short period of each other. Apheleia used to keep track of the current formatter process and kill it when a newer formatter is attempted, but this also kills all but the last buffer called by `apheleia--format-after-save`. With this commit we still have separate stdout and stderr buffers for each formatter, but we *always* create a new one when attempting a format. There is a new buffer type, a log buffer, which is populated with a formatter processes stderr when it fails. We also still have a `apheleia--current-process` variable, but instead of being global, it's local to the current buffer being formatted. We now kill it if starting a new format in the current buffer, but two separate buffers can call the same formatter with no issue. * Mark change as bugfix in changelog * Add to docstring * Remove no longer needed code * Re-wrap docstring * Remove newline * Change spelling * Use correct buffer when checking (buffer-size) Co-authored-by: Radon Rosborough <radon.neon@gmail.com>
2021-12-26 20:52:52 +00:00
[#64]: https://github.com/raxod502/apheleia/issues/64
[#65]: https://github.com/raxod502/apheleia/pull/65
2021-02-26 22:04:15 -08:00
2021-02-26 22:04:05 -08:00
## 1.1.2 (released 2021-02-26)
2020-11-07 07:04:41 -08:00
### Enhancements
* Prettier is now enabled in `json-mode`.
### Bugs fixed
* Prettier now respects `.prettierignore` ([#21]).
* Apheleia's global mode should no longer trigger warnings about a locally
let-bound `after-save-hook` ([#27]).
[#21]: https://github.com/raxod502/apheleia/issues/21
[#27]: https://github.com/raxod502/apheleia/issues/27
2020-07-16 08:22:54 -06:00
## 1.1.1 (released 2020-07-16)
### Formatters
* New: [OCamlFormat](https://github.com/ocaml-ppx/ocamlformat) for
[Ocaml](https://ocaml.org/) ([#19]).
2020-04-02 08:58:41 -06:00
### Bugs fixed
* Previously, there were some race conditions related to switching the
current buffer. In particular, if you switched the current buffer
right after saving, or save two buffers in quick succession, then it
was possible for one buffer to be overwritten or to not be
formatted. These problems have been fixed ([#8]).
* Previously, enabling `undo-tree-auto-save-history` caused Apheleia
to mark the buffer as modified after formatting. This has been
fixed ([#10]).
2020-07-16 08:22:54 -06:00
* Apheleia now tries harder to accidentally enter an infinite
formatting loop ([#12]).
2020-04-02 08:58:41 -06:00
[#8]: https://github.com/raxod502/apheleia/issues/8
[#10]: https://github.com/raxod502/apheleia/issues/10
2020-07-16 08:22:54 -06:00
[#12]: https://github.com/raxod502/apheleia/pull/12
[#19]: https://github.com/raxod502/apheleia/pull/19
2020-04-02 08:58:41 -06:00
2020-04-02 08:54:06 -06:00
## 1.1 (released 2020-04-02)
2020-03-19 08:21:49 -06:00
### Enhancements
* There is now a maximum length for the dynamic programming algorithm,
controlled by `apheleia-max-alignment-size`. This prevents Emacs
from hanging due to Apheleia. under any circumstances ([#4]).
### Formatters
* New: [Brittany](https://hackage.haskell.org/package/brittany) for
[Haskell](https://www.haskell.org/).
### Bugs fixed
* Previously, weirdness could happen if manually running Prettier via
`M-x apheleia-format-buffer` on a buffer which was modified from
what was written to disk. Now we simply abort running a command that
uses the `file` keyword if the buffer is modified, since it will not
produce correct results. This should not affect normal usage of
Apheleia.
2020-03-19 08:21:49 -06:00
* Previously, the buffer could be erased when running Apheleia from a
buffer that had no backing file. This has been fixed, and Apheleia
can run correctly on buffers both with and without backing files
([#9]).
[#4]: https://github.com/raxod502/apheleia/issues/4
[#9]: https://github.com/raxod502/apheleia/pull/9
2019-09-20 17:08:09 -07:00
## 1.0 (released 2019-09-20)
### Added
* Package `apheleia`
* Command `apheleia-format-buffer`
* User options:
* `apheleia-formatters`, with supported formatters:
* `black`
* `prettier`
* `gofmt`
* `terraform`
* `apheleia-mode-alist`
* `apheleia-post-format-hook`
* Variable `apheleia-formatter`
* Minor mode `apheleia-mode` (and `apheleia-global-mode`)
[keep a changelog]: https://keepachangelog.com/en/1.0.0/