Files
LithosAnanake/docs/working/architecture/doxygen/DOXYGEN_QUICK_REFERENCE.adoc
T

452 lines
7.4 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Moved from docs/src/doxygen/DOXYGEN_QUICK_REFERENCE.adoc to docs/working/scratch/src/doxygen/DOXYGEN_QUICK_REFERENCE.adoc on 2026-06-16 (docs reorg Phase 2)
== Doxygen Quick Reference Card
:toc: left
:toc-title: Contents
:toclevels: 3
xref:../README.adoc[← Back to Documentation Index]
One-page cheat sheet for adding Doxygen documentation to StarForth code.
=== Essential Commands
[source,bash]
----
make docs # Generate all formats (HTML, PDF, AsciiDoc, MD, Man)
make docs-html # HTML only (fastest)
make docs-open # Generate and open in browser
make docs-clean # Remove generated docs
----
=== Basic Comment Syntax
==== File Header
[source,c]
----
/**
* @file filename.h
* @brief One-line file description
* @author Your Name
* @date 2025-10-01
*/
----
==== Function
[source,c]
----
/**
* @brief One-line description
* @param name Parameter description
* @return Return value description
*/
type function(type name);
----
==== Struct
[source,c]
----
/**
* @struct StructName
* @brief One-line description
*/
typedef struct {
int member; /**< Member description */
} StructName;
----
==== Enum
[source,c]
----
/**
* @enum EnumName
* @brief One-line description
*/
typedef enum {
VALUE_A, /**< Description of A */
VALUE_B /**< Description of B */
} EnumName;
----
==== Macro
[source,c]
----
/**
* @def MACRO_NAME
* @brief One-line description
*/
#define MACRO_NAME value
----
==== Typedef
[source,c]
----
/**
* @typedef TypeName
* @brief One-line description
*/
typedef type TypeName;
----
=== Common Tags
[width="100%",cols="23%,29%,48%",options="header",]
|===
|Tag |Purpose |Example
|`+@brief+` |Short description |`+@brief Initialize VM+`
|`+@details+` |Detailed description
|`+@details Allocates memory and...+`
|`+@param name+` |Parameter |`+@param vm VM instance pointer+`
|`+@return+` |Return value |`+@return 0 on success+`
|`+@retval value+` |Specific return |`+@retval 0 Success+`
|`+@see+` |Cross-reference |`+@see vm_cleanup()+`
|`+@note+` |Important note |`+@note Thread-safe+`
|`+@warning+` |Warning |`+@warning May block+`
|`+@bug+` |Known bug |`+@bug Issue #42+`
|`+@todo+` |Future work |`+@todo Add optimization+`
|`+@deprecated+` |Deprecated |`+@deprecated Use foo() instead+`
|===
=== Conditions and Invariants
[source,c]
----
/**
* @pre condition must be true before call
* @post condition will be true after call
* @invariant condition always true
*/
----
=== Code Examples
[source,c]
----
/**
* @par Example:
* @code
* VM vm;
* vm_init(&vm);
* vm_push(&vm, 42);
* @endcode
*/
----
=== Grouping Functions
[source,c]
----
/**
* @defgroup group_name Group Display Name
* @brief Group description
* @{
*/
/** Function in group */
void func1(void);
/** Another function in group */
void func2(void);
/** @} */ // End of group_name
----
=== Formatting
==== Lists
[source,c]
----
/**
* List example:
* - Item 1
* - Item 2
* - Item 3
*/
----
==== Numbered Lists
[source,c]
----
/**
* Steps:
* 1. First step
* 2. Second step
* 3. Third step
*/
----
==== Sections
[source,c]
----
/**
* ## Section Title
*
* ### Subsection
*
* Content here.
*/
----
==== Emphasis
[source,c]
----
/**
* *Italic text*
* **Bold text**
* `code text`
*/
----
=== Quick Templates
==== Simple Function
[source,c]
----
/**
* @brief Short description
* @param p1 First parameter
* @param p2 Second parameter
* @return Result
*/
int my_func(int p1, int p2);
----
==== Complex Function
[source,c]
----
/**
* @brief Short description
*
* @details
* Detailed explanation of what this function does,
* how it works, and any important considerations.
*
* @param vm VM instance pointer
* @param value Input value
*
* @return Result value
* @retval 0 Success
* @retval -1 Error
*
* @pre vm must be initialized
* @post vm->state is updated
*
* @note Important implementation detail
* @warning Potential issue to be aware of
*
* @see related_function()
*
* @par Example:
* @code
* int result = my_func(&vm, 42);
* if (result < 0) {
* handle_error();
* }
* @endcode
*/
int my_func(VM *vm, int value);
----
==== Structure
[source,c]
----
/**
* @struct MyStruct
* @brief Short description
*
* @details
* Detailed explanation of the structure's purpose
* and usage.
*/
typedef struct MyStruct {
/** @brief Field 1 description */
int field1;
/**
* @brief Field 2 description
* @note Special consideration for field2
*/
char *field2;
int field3; /**< Field 3 inline description */
} MyStruct;
----
=== Best Practices
==== DO:
* ✅ Document ALL public functions
* ✅ Keep @brief to one line
* ✅ Use @details for longer explanations
* ✅ Provide examples for complex functions
* ✅ Cross-reference related functions with @see
* ✅ Document all parameters and return values
* ✅ Use @warning for dangerous operations
* ✅ Use @note for important details
==== DONT:
* ❌ Document obvious things
* ❌ Repeat the function name in description
* ❌ Leave out parameter descriptions
* ❌ Forget to document return values
* ❌ Write vague descriptions
* ❌ Use unclear variable names in examples
* ❌ Forget to update docs when changing code
=== IDE Integration
==== Visual Studio Code
[arabic]
. Install "`Doxygen Documentation Generator`" extension
. Type `+/**+` above function
. Press Enter → template generated
==== CLion
[arabic]
. Built-in support
. Type `+/**+` and Enter
. Fill in generated template
==== Vim
[arabic]
. Install DoxygenToolkit.vim
. Position cursor on function
. Use `+:Dox+` command
=== Checking Your Work
[source,bash]
----
# Generate docs
make docs-html
# Check for warnings
cat docs/api/doxygen_warnings.log
# View in browser
make docs-open
----
=== Common Warnings and Fixes
[cols=",",options="header",]
|===
|Warning |Fix
|"`Member X is not documented`" |Add `+@param X description+`
|"`No documentation for function`" |Add `+@brief+` comment
|"`Return value not documented`" |Add `+@return description+`
|"`Warning: invalid cross-reference`" |Check @see target exists
|===
=== Example Workflow
[arabic]
. *Write function:*
+
[source,c]
----
void my_function(int param) {
// implementation
}
----
. *Add basic docs:*
+
[source,c]
----
/**
* @brief Does something with param
* @param param Input value
*/
void my_function(int param) {
// implementation
}
----
. *Generate and check:*
+
[source,bash]
----
make docs-html
cat docs/api/doxygen_warnings.log
----
. *View result:*
+
[source,bash]
----
make docs-open
----
. *Enhance docs if needed:*
+
[source,c]
----
/**
* @brief Does something with param
*
* @details
* More detailed explanation here.
*
* @param param Input value (must be > 0)
* @return Processed result
*
* @pre param > 0
* @post Result is always positive
*
* @see related_function()
*
* @par Example:
* @code
* int result = my_function(42);
* @endcode
*/
void my_function(int param) {
// implementation
}
----
=== Resources
* *Full Style Guide:* `+docs/DOXYGEN_STYLE_GUIDE.md+`
* *Example Header:* `+docs/examples/doxygen_example.h+`
* *User Guide:* `+docs/DOCUMENTATION_README.md+`
* *Documentation Overview:* `+docs/DOCUMENTATION_README.md+`
* *Doxygen Manual:* https://www.doxygen.nl/manual/
=== Time Estimates
* Simple function: 2-5 minutes
* Complex function with example: 10-15 minutes
* Struct with 10 fields: 10-15 minutes
* Complete header file (20 functions): 1-2 hours
'''''
*Keep this card handy while documenting!* *Print or bookmark for quick
reference.*