Skip to content

Changelog

All notable changes to the utf8-locale project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

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<dyn error>

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.