Skip to main content

header-api-review

Cute Framework public header conventions and review checklist. Reference before creating or modifying any file in include/.

Quellinformationen

Repository
RandyGaul/cute_framework
Letzte Quellaktivität
1. März 2026 um 04:12
Erkannte Sprache von SKILL.md
Englisch
Sterne
850
Forks
48

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
header-api-review
description
Cute Framework public header conventions and review checklist. Reference before creating or modifying any file in include/.
user-invocable
false
# CF Header Conventions ## File Naming - Public headers: `cute_<name>.h` in `include/` - Source files: `cute_<name>.cpp` in `src/` ## Generated vs Hand-Written Headers - **Generated** (do NOT edit manually): `*_shd.h` shader bytecode files produced by `build/cute-shaderc` - **Hand-written** (edit normally): all other `include/cute_*.h` files, including `cute_shader_bytecode.h` which defines shared shader structures and is NOT generated ## Include Guards Format: `CF_<NAME>_H` where `<NAME>` is the filename with `cute_` prefix stripped, uppercased. - `cute_graphics.h` → `CF_GRAPHICS_H` - `cute_sprite.h` → `CF_SPRITE_H` - `cute.h` → `CF_H` ## Copyright Header Every file must begin with exactly: ``` /* Cute Framework Copyright (C) 2024 Randy Gaul https://randygaul.github.io/ This software is dual-licensed with zlib or Unlicense, check LICENSE.txt for more info */ ``` ## Header Structure ```c #ifndef CF_NAME_H #define CF_NAME_H #include "cute_defines.h" // ... other includes with quotes for CF headers, angle brackets for system/SDL ... //-------------------------------------------------------------------------------------------------- // C API #ifdef __cplusplus extern "C" { #endif // __cplusplus // ... C declarations ... #ifdef __cplusplus } #endif // __cplusplus //-------------------------------------------------------------------------------------------------- // C++ API #ifdef __cplusplus namespace Cute { // ... C++ wrappers ... } // namespace Cute #endif // __cplusplus #endif // CF_NAME_H ``` ## Naming Conventions - Public C functions: `cf_` prefix, snake_case → `cf_make_sprite`, `cf_draw_line` - Public C structs/enums/typedefs: `CF_` prefix → `CF_Sprite`, `CF_PIXEL_FORMAT_R8` - X-macro enum patterns: `CF_<NAME>_DEFS` macro + `CF_<NAME>` enum typedef - Static internal functions: `s_` prefix — never in public headers - C++ namespace: `namespace Cute`, functions snake_case without `cf_` prefix ## Lifecycle Functions Prefer `cf_make_<name>(...)` for creation and `cf_destroy_<name>(...)` for destruction. Avoid other lifecycle verbs unless strongly motivated. ## Deprecation Pattern Old name stays as the real implementation; new name is a `CF_INLINE` forwarder (or vice versa). The deprecated symbol's doc comment must include `@deprecated Use cf_new_name instead.` ```c /** * @function cf_old_function * @category example * @brief Does the thing. * @deprecated Use cf_new_function instead. * @related cf_new_function */ CF_INLINE void cf_old_function(int x) { cf_new_function(x); } ``` ## Documentation Format All public declarations use `/** ... */` block comments with ` * ` on every interior line. **Never use `///` style comments for documentation.** ### Tag ordering (follow this sequence) 1. `@function` / `@struct` / `@enum` — declaration kind; value is the symbol name 2. `@category` — groups symbol in docs (e.g. `graphics`, `audio`, `input`, `allocator`, `sprite`) 3. `@brief` — one-line summary 4. `@param` — one entry per parameter (omit if none) 5. `@return` — return value description (omit for `void`) 6. `@remarks` — extended notes, caveats, usage details (optional) 7. `@example` — code example with `>` title (optional) 8. `@related` — space-separated list of related symbols (highly recommended) ### Function / typedef / macro ```c /** * @function cf_noise2 * @category noise * @brief Generates a random value given a 2D coordinate. * @param noise The noise settings. * @param x Noise at this x-component. * @param y Noise at this y-component. * @return Returns a random value at the specified point. * @remarks You're probably looking for image generation functions such as `cf_noise_pixels` or * `cf_noise_fbm_pixels`. This function is fairly low-level. * @related CF_Noise cf_make_noise cf_destroy_noise cf_noise2 cf_noise3 cf_noise4 */ CF_API float CF_CALL cf_noise2(CF_Noise noise, float x, float y); ``` ### Struct — with `// @end` marker and `/* @member */` inline comments ```c /** * @struct CF_Result * @category utility * @brief Information about the result of a function, containing any potential error details. * @remarks Check if a result is an error or not with `cf_is_error`. * @related CF_Result cf_is_error cf_result_make cf_result_error cf_result_success */ typedef struct CF_Result { /* @member Either 0 for success, or -1 for failure. */ int code; /* @member String containing details about any error encountered. */ const char* details; } CF_Result; // @end ``` ### Enum — X-macro pattern with `/* @entry */` and `/* @end */` ```c /** * @enum CF_PlayDirection * @category sprite * @brief The direction a sprite plays frames. * @related CF_PlayDirection cf_play_direction_to_string CF_Animation */ #define CF_PLAY_DIRECTION_DEFS \ /* @entry Flips through the frames of an animation forwards. */ \ CF_ENUM(PLAY_DIRECTION_FORWARDS, 0) \ /* @entry Flips through the frames of an animation backwards. */ \ CF_ENUM(PLAY_DIRECTION_BACKWARDS, 1) \ /* @end */ typedef enum CF_PlayDirection { #define CF_ENUM(K, V) CF_##K = V, CF_PLAY_DIRECTION_DEFS #undef CF_ENUM } CF_PlayDirection; ``` ### @example — indented code, title after `>` ```c * @example > Creating a dynamic array and freeing it afterwards. * dyna int* a = NULL; * apush(a, 5); * afree(a); ``` Code lines are indented to align under the title text (no triple-backtick fences in `@example`). ### @remarks — embedded code uses fenced blocks When `@remarks` contains a multi-line code snippet, use fenced ` ```c ` blocks: ```c * @remarks The members are stored tightly as an array. To access them: * * ```c * for (int i = 0; i < info.num_uniforms; ++i) { * printf("%s\n", info.uniforms[i].block_name); * } * ``` ``` ### Formatting rules - **@param alignment**: pad the parameter name so all descriptions align in a column - **@remarks continuation**: indent continuation lines to align with the first word of the description - **@related**: single space-separated line; include both the type (`CF_Foo`) and related functions - **Inline code**: backticks around all symbol names in prose: `` `cf_make_noise` ``, `` `CF_Noise` `` - **Links**: standard Markdown `[text](url)` for external docs - **"Default X" / "Out parameter"**: suffix in `@param` descriptions where applicable ## Includes - CF headers: quotes → `#include "cute_defines.h"` - System/SDL headers: angle brackets → `#include <SDL3/SDL.h>` - `cute_defines.h` is almost always needed (provides `CF_INLINE`, `CF_API`, `CF_GLOBAL`, etc.) ## New Header Checklist - [ ] Copyright header (exact format) - [ ] Include guard `CF_<NAME>_H` - [ ] `#include "cute_defines.h"` at minimum - [ ] `extern "C" { ... }` wrapping for C section - [ ] All public C functions: `cf_` prefix - [ ] All public types: `CF_` prefix - [ ] `/** ... */` Doxygen comments on all public declarations with `@function`/`@struct`/`@enum`, `@category`, `@brief`, and `@related` tags - [ ] `namespace Cute` C++ wrappers section - [ ] Added to `include/cute.h` umbrella include (follow that file's existing include ordering conventions) - [ ] Source file `cute_<name>.cpp` added to top-level `CMakeLists.txt` (in the `CF_SRCS` list)
Auf GitHub ansehen