## 1.7.0 (2019-10-14)
### New features
- `utils.quote_arg` will now optionally take an array of arguments and escape
them all into a single string.
- `app.parse_args` now accepts a 3rd parameter with a list of valid flags and aliasses
- `app.script_name` returns the name of the current script (previously a private function)
### Changes
- Documentation updates
- `utils.quit`: exit message is no longer required, and closes the Lua state (on 5.2+).
- `utils.assert_arg` and `utils.assert_string`: now return the validated value
- `pl.compat`: now exports the `jit` and `jit52` flags
- `pretty.write`: now sorts the output for easier diffs [#293](https://github.com/Tieske/Penlight/pull/293)
### Fixes
- `utils.raise` changed the global `on_error`-level when passing in bad arguments
- `utils.writefile` now checks and returns errors when writing
- `compat.execute` now handles the Windows exitcode -1 properly
- `types.is_empty` would return true on spaces always, indepedent of the parameter
- `types.to_bool` will now compare case-insensitive for the extra passed strings
- `app.require_here` will now properly handle an absolute base path
- `stringx.split` will no longer append an empty match if the number of requested
elements has already been reached [#295](https://github.com/Tieske/Penlight/pull/295)
- `path.common_prefix` and `path.relpath` return the result in the original casing
(only impacted Windows) [#297](https://github.com/Tieske/Penlight/pull/297)
- `dir.copyfile`, `dir.movefile`, and `dir.makepath` create the new file/path with
the requested casing, and no longer force lowercase (only impacted Windows)
[#297](https://github.com/Tieske/Penlight/pull/297)
- added a missing assertion on `path.getmtime` [#291](https://github.com/Tieske/Penlight/pull/291)
- `stringx.rpartition` returned bad results on a not-found [#299](https://github.com/Tieske/Penlight/pull/299)
## 1.6.0 (2018-11-23)
### New features
- `pl.compat` now provides `unpack` as `table.unpack` on Lua 5.1
### Changes
- `utils.unpack` is now documented and respects `.n` field of its argument.
- `tablex.deepcopy` and `tablex.deepcompare` are now cycle aware (#262)
- Installing through LuaRocks will now include the full rendered documentation
### Fixes
- Fixed `seq.last` returning `nil` instead of an empty list when given an empty iterator (#253).
- `pl.template` now applies `tostring` when substituting values in templates, avoiding errors when they are not strings or numbers (#256).
- Fixed `pl.import_into` not importing some Penlight modules (#268).
- Fixed version number stuck at 1.5.2 (#260).
- Fixed `types.is_empty` returning `true` on tables containing `false` key (#267).
- Fixed `test.assertraise` throwing an error when passed an array with a function to call plus its arguments (#272).
- Fixed `test.assertraise` not throwing an error when given function does not error but instead returns a string matching given error pattern.
- Fixed placeholder expressions being evaluated with wrong precedence of binary and unary negation.
- Fixed placeholder expressions being evaluated assuming wrong binary operator associativity (e.g. `_1-(_2+_3)` was evaluated as `(_1-_2)+_3`.
- Fixed placeholder expressions being evaluated as if unary operators take precedence over power operator (e.g. `(-_1)^_2`) was evaluated as `-(_1^2)`).
- Fixed vulnerable backtracking pattern in `pl.stringx.strip` (#275)