# Changelog All notable changes to the utf8-locale project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ## [1.0.3] - 2024-02-28 ### Fixes - Manual page: - fix the formatting of the `--features` long option - Python implementation: - fixes suggested by Ruff: - sort the `__all__` exported symbols list - use a set for tests using the `in` operator - add a forgotten `f` prefix to an f-string - add some trailing commas in complex function calls ### Additions - Start some MkDocs-based documentation - Python implementation: - declare Python 3.12 and (tentatively) 3.13 as supported - Test suite: - Nix: - add the `python-vetox` expression and the `run-vetox.sh` helper ### Other changes - C implementation: - bump the minimum CMake version to 3.16.0 - Python implementation: - switch to the Ruff source code formatter - use dataclasses instead of named tuples - minor refactoring of the type-checking imports - Test suite: - add the temporary test directories to the `.gitignore` file - move the `cleanpy.sh` tool from the `nix/` directory to the `tests/` one - `tests/full.sh`: - use `tox-stages` instead of `tox-delay` for the Tox-based tests - use our `cleanpy.sh` tool to clean more Python-related files - Python: - run the `ruff`, `reuse`, and `format` tests before the `mypy` and `docs` ones - use `tox.minversion`, not `tox.min_version`, to allow Tox 3.x to bootstrap 4.x - break some Tox environment requirements into separate files - include pytest 8.x in the allowed versions - Ruff: - use a single `ruff` Tox environment with a pinned Ruff version - gather the Ruff configuration files in the common `python/config/ruff/` directory - test with Ruff 0.2.2 in preview mode, adapt some overrides - Rust: - add more `clippy` overrides, synced with Rust 1.74 - Nix: - `python-tox`: drop the `tomli` dependency, the `tox` package was fixed - only run Tox on Python 3.9 through 3.11 - use `gitMinimal` instead of `git` for the `reuse` Tox test ## 1.0.2 - withdrawn ## [1.0.1] - 2023-06-29 ### Fixes - Python: - do not pass the `python_version` option to mypy - correctly annotate a test function that returns a `mock.patch()` object - many minor changes suggested by Ruff - Rust: - a couple of minor changes suggested by Clippy ### Additions - Add a Nix expression to only run the Python unit tests using `pytest` - Add two shell helpers for running the Nix expressions with several versions of Python - Python: - add a Ruff Tox test environment - add Tox environment tags for the `tox-stages` tool - add a manually-invoked `pyupgrade` Tox test environment ### Other changes - Convert this changelog to the "Keep a Changelog" format. - Drop the years from my copyright notices. - Switch to SPDX copyright and license tags and add a "reuse" Tox environment for validating the SPDX tags - Python: - drop Python 3.7 support - add the `ruff` and `ruff-all` Tox testing environments, test with Ruff 0.0.275 - drop the `pep8` and `pylint` Tox testing environments, Ruff does most of that - order the Tox environment list a bit more logically - adapt the `tox.ini` file format for Tox 4.x - use black 23.x and mypy 1.x with no changes - use Pytest's own data-driven testing functions instead of the `ddt` library - switch to `hatchling` for the PEP 517 build - use Ruff's isort implementation - move the mypy configuration to the `pyproject.toml` file - use `functools.lru_cache()` in the test suite - Rust: - use variables inline in `format!()` strings, declare MSRV 1.58 - silence clippy's complaints about using blanket restrictions and using the question mark operator ## [1.0.0] - 2022-10-30 ### Incompatible changes - Rust: - the `get_preferred_languages()` function now accepts a reference to the environment variables, since it does not need to modify them - mark the public enums and structs as non-exhaustive - all functions now return errors instead of exiting the program - use our own error type instead of returning `Box` ### New features - Add a Nix expression for running the Python tests in a clean environment - Rust: - allow hashmaps to be constructed with different hashers - keep the `Cargo.lock` file under version control ### Fixes - C: - use `regerror()` more robustly; thanks, John Scott - when freeing a list, free the correct pointer - add a missed `free()` in an error handling case - allow C++ programs to use the `utf8_locale.h` header file - do not use reserved identifiers as an include guard - Python: - specify both lower and upper version constraints for the libraries used in the test environments - Rust: - actually run the preferred language test with real data, not with an empty array ### Other changes - Python: - use pylint 2.14, drop some message overrides - type annotations: use the standard `dict`, `list`, etc, types instead of the `typing` generics - list Python 3.10 and 3.11 as supported versions - drop the `flake8` + `hacking` Tox test environment - Rust: - mark some functions as `const`, `inline`, and `must-use` - document the errors returned by the library functions - use the `thiserror` and `anyhow` libraries for error handling instead of the `quick-error` one - use the `once_cell` library for initializing static values instead of the `lazy_static` one - fix many minor issues reported by the `clippy` tool and add the `run-clippy` tool to run some stringent checks - refactor the internal `build_weights()` function to avoid integer arithmetic; when we mean to use the number of items in a hashmap, use the number of items in the hashmap - explicitly override some of the `clippy` diagnostics ## [0.3.0] - 2022-02-20 ### Incompatible changes - Rust: - the individual functions are no longer visible by default in the top-level namespace; the new builder interface is preferred ### New features - Add a new object-oriented interface for the Python and Rust implementations: configure a `Utf8Detect` or `LanguagesDetect` object, and invoke their `.detect()` method instead of invoking the individual functions. - Add a C implementation: a `libutf8_locale` library and a `u8loc` executable built using CMake. - Add the `tests/full.sh` development helper tool that rebuilds all the implementations and runs their respective tests. - Python: - move the languages test data to the `tests/data.json` definitions, too - add an object-oriented builder interface - Rust: - add an object-oriented builder interface - add the beginnings of a unit test suite using the JSON test definitions ### Fixes - Fix the functional test's behavior if the u8loc executable does not advertise the query-preferred feature. ### Other changes - Add `*.c`, `*.h`, and `*.1` file definitions to the EditorConfig file. - Python: - drop the `b0` suffix from the `black` tool versioned dependencies; the `black` tool is no longer in beta since version 22 - Rust: - use the `lazy_static` crate to only compile regular expressions once - import struct names directly as a more idiomatic style ## [0.2.0] - 2022-02-01 ### New features - The "C" language is now appended to the end of the list returned by the `get_preferred_languages()` function if it is not already there! - Add the `get_utf8_vars()` function returning an environment-like dictionary that only contains the variables that need to be set, i.e. `LC_ALL` and `LANGUAGE`. - Add the `u8loc` command-line tool to the Python implementation. - Add the `u8loc.1` manual page. - Add the `tests/functional.py` functional testing tool. - Add an EditorConfig definitions file. - Add a Rust implementation. ### Other changes - Bring the Python build infrastructure somewhat more up to date. - Require Python 3.7 for dataclasses support. - Push the Python implementation into a `python/` source subdirectory. ## [0.1.1] - 2021-04-05 ### New features - Add a manifest file for the source distribution. ### Fixes - Ignore locales with weird names instead of erroring out. - Ignore the type of a `subprocess.check_output()` mock in the test suite. ## [0.1.0] - 2021-01-04 ### Started - First public release. [Unreleased]: https://gitlab.com/ppentchev/utf8-locale/-/compare/release%2F1.0.3...main [1.0.3]: https://gitlab.com/ppentchev/utf8-locale/-/compare/release%2F1.0.1...release%2F1.0.3 [1.0.1]: https://gitlab.com/ppentchev/utf8-locale/-/compare/release%2F1.0.0...release%2F1.0.1 [1.0.0]: https://gitlab.com/ppentchev/utf8-locale/-/compare/release%2F0.3.0...release%2F1.0.0 [0.3.0]: https://gitlab.com/ppentchev/utf8-locale/-/compare/release%2F0.2.0...release%2F0.3.0 [0.2.0]: https://gitlab.com/ppentchev/utf8-locale/-/compare/release%2F0.1.1...release%2F0.2.0 [0.1.1]: https://gitlab.com/ppentchev/utf8-locale/-/compare/release%2F0.1.0...release%2F0.1.1 [0.1.0]: https://gitlab.com/ppentchev/utf8-locale/-/tags/release%2F0.1.0