The libutils rulesLes règles libutils
When the LU rules are on, and what they check: includes, attributes, migrations, code libutils already gives.Quand les règles LU sont actives, et ce qu'elles vérifient : includes, attributs, migrations, code que libutils fournit déjà.
The LU-* rules push a C++ project that uses libutils to use it the way it is meant to be used.
Les règles LU-* poussent un projet C++ qui utilise libutils à s'en servir comme prévu.
1. When they are onQuand elles sont actives
| Condition | Read from |
|---|---|
| libutils is installed | the headers in /usr/include, /usr/local/include, ~/.local/include, CPATH, else the MinGW sysroot of mingw64-libutils |
| the project uses it | find_package(utils) / utils::utils in the root CMakeLists.txt, or utils.hpp included |
Both are needed (--libutils auto, the default); --libutils on|off (or XSTYLE_LIBUTILS) forces them. Inside libutils itself they are off. The summary says what was found: libutils v4.3.1 installed, used by the project - libutils rules on.
| Condition | Lue depuis |
|---|---|
| libutils est installée | les headers dans /usr/include, /usr/local/include, ~/.local/include, CPATH, sinon le sysroot MinGW de mingw64-libutils |
| le projet l'utilise | find_package(utils) / utils::utils dans le CMakeLists.txt racine, ou utils.hpp inclus |
Il faut les deux (--libutils auto, par défaut) ; --libutils on|off (ou XSTYLE_LIBUTILS) les force. Dans libutils elle-même, elles sont désactivées. Le résumé dit ce qui a été trouvé : libutils v4.3.1 installed, used by the project - libutils rules on.
2. Includes and sectionsIncludes et sections
One root <utils/utils.hpp>, preceded by the #define _Section of every section the file uses, never a libutils header one by one.
#define _Math
#define _Attribute
#include <utils/utils.hpp> // trigo, _nodiscard| Rule | Issue |
|---|---|
LU-INCLUDE | a libutils header included directly |
LU-BARE-INCLUDE | <utils/utils.hpp> with no #define _Section before it |
LU-SECTION | a section used (its utils::<section>:: names, its attribute macros) without its #define |
Un seul <utils/utils.hpp> racine, précédé du #define _Section de chaque section utilisée par le fichier, jamais un header de libutils un par un.
#define _Math
#define _Attribute
#include <utils/utils.hpp> // trigo, _nodiscard| Règle | Problème |
|---|---|
LU-INCLUDE | un header de libutils inclus directement |
LU-BARE-INCLUDE | <utils/utils.hpp> sans aucun #define _Section avant |
LU-SECTION | une section utilisée (ses noms utils::<section>::, ses macros d'attributs) sans son #define |
3. Attributes and migrationsAttributs et migrations
LU-ATTRIBUTE:[[nodiscard]],[[maybe_unused]],alignas(...)... become the libutils macros (_nodiscard,_unused,_alignas...).LU-MIGRATION: a deprecated name becomes the new one, read from the_migrationaliases of the installed headers, plus the names libutils v4.0.0 removed (isloaded()→isLoaded(),utils::network::socket::is_ip→utils::network::is_ip,setStyle→set_style,fixed_string→FixedString).
Both are [auto-fix].
LU-ATTRIBUTE:[[nodiscard]],[[maybe_unused]],alignas(...)... deviennent les macros de libutils (_nodiscard,_unused,_alignas...).LU-MIGRATION: un nom déprécié devient le nouveau, lu dans les alias_migrationdes headers installés, plus les noms supprimés par libutils v4.0.0 (isloaded()→isLoaded(),utils::network::socket::is_ip→utils::network::is_ip,setStyle→set_style,fixed_string→FixedString).
Les deux sont [auto-fix].
4. Code libutils already givesCode que libutils fournit déjà
These are [manual]: the hint names the libutils class to use.
| Rule | Written by hand | Use |
|---|---|---|
LU-EXCEPTION | a standard exception thrown | utils::exception::ErrorException |
LU-ARGS | argv parsed by hand | utils::arguments::ArgParser |
LU-ANSI | raw ANSI sequences | utils::iomanip |
LU-SOCKET | BSD sockets | utils::network (TCPSocket, Server, Client) |
LU-SYSCALL | pipe / dup / fork / epoll / shm_open / dlopen | utils::encapsulation |
LU-THREADS | a thread pool | utils::pool::Cluster, utils::system::Scheduler |
LU-ANGLE | degree / radian conversions | utils::math::trigo |
LU-BASE64 | base64 | utils::smanip::codec::Base64Codec |
LU-VERBOSE | a verbose flag | utils::verbose |
LU-DISTANCE | a string distance | utils::algorithms::c2dmp |
Ces règles sont [manual] : l'indice donne la classe de libutils à utiliser.
| Règle | Écrit à la main | À utiliser |
|---|---|---|
LU-EXCEPTION | une exception standard levée | utils::exception::ErrorException |
LU-ARGS | argv analysé à la main | utils::arguments::ArgParser |
LU-ANSI | séquences ANSI brutes | utils::iomanip |
LU-SOCKET | sockets BSD | utils::network (TCPSocket, Server, Client) |
LU-SYSCALL | pipe / dup / fork / epoll / shm_open / dlopen | utils::encapsulation |
LU-THREADS | un pool de threads | utils::pool::Cluster, utils::system::Scheduler |
LU-ANGLE | conversions degrés / radians | utils::math::trigo |
LU-BASE64 | base64 | utils::smanip::codec::Base64Codec |
LU-VERBOSE | un flag verbose | utils::verbose |
LU-DISTANCE | une distance entre chaînes | utils::algorithms::c2dmp |
5. Is the reference up to date?La référence est-elle à jour ?
xstyle --libutils-check compares the installed libutils with the reference of the libutils skill of ai-utils: exit 0 when up to date, 1 when not. The skill is found at $XSTYLE_LIBUTILS_SKILL, else ~/.claude/skills/libutils, else ~/personal_delivery/other/ai-utils/libutils/libutils.
xstyle --libutils-check compare la libutils installée avec la référence du skill libutils de ai-utils : sortie 0 si à jour, 1 sinon. Le skill est cherché dans $XSTYLE_LIBUTILS_SKILL, sinon ~/.claude/skills/libutils, sinon ~/personal_delivery/other/ai-utils/libutils/libutils.