# CHANGELOG

This document describes the user-facing changes to Loopy.

For Loopy Dash, see <https://codeberg.org/okamsn/loopy-dash>.

## 0.16.1

- Silence byte-compilation warnings regarding the absence of the
  `declare` properties `ftype` and `important-return-value` on older
  versions of Emacs ([#284]).  These warnings were created by
  adding those properties in [#274].

[#274]: https://codeberg.org/okamsn/loopy/pulls/274
[#284]: https://codeberg.org/okamsn/loopy/pulls/284

## 0.16.0

### New Features

- Add the `no-loop` flag ([#265]).  This stops the looping macros from creating
  the `while`-loop and causes an error to be signalled when used with features
  that only make sense with the `while`-loop, such as iteration commands.  The
  intended use is wrapping macros don't need the default `while`-loop but would
  still like access to other features, such as accumulation commands.

### Bug Fixes

- When destructuring for accumulation commands, don't assume that `pcase` binds
  the final variable to a value already stored in a temporary variable ([#251]).
  More specifically, keep the same order returned by `pcase` for the binding of
  those final variables.

- `while` and `until` now correctly work when aliased ([#267]).

- `cycle` now signals an error when trying to destructure ([#272], [#279]).

### Breaking Changes

- Using accumulation commands with different initial values for the same
  variable now signals an error instead of a warning ([#169], [#254]).

- Aliases made obsolete in version 0.14.0 of this package have been removed (see
  release notes for that version below) ([#256]).  They can still be added
  manually to `loopy-parsers`.

- Passing multiple conditions to `while` and `until` now signals a warning
  ([#267]).  To be consistent with `never` and `always`, in the future, the
  `while` and `until` commands will only accept a single condition.  To keep the
  old behavior, wrap multiple conditions in `and`.

[#169]: https://codeberg.org/okamsn/loopy/issues/169
[#254]: https://codeberg.org/okamsn/loopy/pulls/254
[#251]: https://codeberg.org/okamsn/loopy/pulls/251
[#256]: https://codeberg.org/okamsn/loopy/pulls/256
[#265]: https://codeberg.org/okamsn/loopy/pulls/265
[#267]: https://codeberg.org/okamsn/loopy/pulls/267
[#272]: https://codeberg.org/okamsn/loopy/issues/272
[#279]: https://codeberg.org/okamsn/loopy/pulls/279

## 0.15.0

### New Features

- Add the `override` special macro argument, which can be used to override
  select global settings for the current macro expansion ([#243], [#231]).  This
  can help to avoid name collisions from package authors (separate authors of
  separate packages) wanting to use the same command name for different purposes
  with their respective package.

### Bug Fixes

- `when` and `unless` now correctly work when aliased ([#234], [#240]).
- Fix variable scoping when using `set` with `at` ([#241]).

### Breaking Changes

- Loopy now requires at least Emacs version 28.1, increased from version 27.1
  ([#446]).  This allows us to remove workarounds for missing features/fixes.

- `set` now warns when it is not given a value ([#229]).  Currently, `(set VAR)`
  binds `VAR` to `nil`, but since this form is indistinguishable from a mistake,
  and since `nil` is a short word to write, this behavior is deprecated.

- Some variables were combined to simplify the code internally and make it
  easier to add local overrides in the future, which will make code which custom
  commands more portable.

  - `loopy-command-parsers` and `loopy-aliases` are both deprecated in favor of
    the newly added `loopy-parsers` ([#237]).  The new user option is a hash
    table which maps symbols to parsing functions.  There is no longer a
    separate mapping of aliases to original names.  However, `loopy-defalias`
    will continue to work.

  - `loopy-iter-bare-special-marco-arguments` and `loopy-iter-bare-commands` are
    both deprecated in favor of the newly added `loopy-iter-bare-names` ([#242],
...
...
