Summary:\n- added Codex marketplace registry plus awareness/ethics/guardrails sub-plugins\n- mirrored Claude plugin commands/scripts/hooks into codex api/ci/code/collect/coolify/core/issue/perf/qa/review/verify\n- embedded Axioms of Life ethics modal, guardrails, and kernel files under codex/ethics\n- added Codex parity report, improvements list, and MCP integration plan\n- extended Gemini MCP tools and docs for Codex awareness
99 lines
2.9 KiB
Bash
Executable file
99 lines
2.9 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
CLASS_NAME=$1
|
|
TARGET_PATH=$2
|
|
|
|
if [ -z "$CLASS_NAME" ] || [ -z "$TARGET_PATH" ]; then
|
|
echo "Usage: doc-class.sh <ClassName> <TargetPath>" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Find the file in the target path
|
|
FILE_PATH=$(find "$TARGET_PATH" -type f -name "${CLASS_NAME}.php")
|
|
|
|
if [ -z "$FILE_PATH" ]; then
|
|
echo "Error: File for class '$CLASS_NAME' not found in '$TARGET_PATH'." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ $(echo "$FILE_PATH" | wc -l) -gt 1 ]; then
|
|
echo "Error: Multiple files found for class '$CLASS_NAME':" >&2
|
|
echo "$FILE_PATH" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# --- PARSING ---
|
|
SCRIPT_DIR=$(dirname "$0")
|
|
# Use the new PHP parser to get a JSON representation of the class.
|
|
# The `jq` tool is used to parse the JSON. It's a common dependency.
|
|
PARSED_JSON=$(php "${SCRIPT_DIR}/doc-class-parser.php" "$FILE_PATH")
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: PHP parser failed." >&2
|
|
echo "$PARSED_JSON" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# --- MARKDOWN GENERATION ---
|
|
CLASS_NAME=$(echo "$PARSED_JSON" | jq -r '.className')
|
|
CLASS_DESCRIPTION=$(echo "$PARSED_JSON" | jq -r '.description')
|
|
|
|
echo "# $CLASS_NAME"
|
|
echo ""
|
|
echo "$CLASS_DESCRIPTION"
|
|
echo ""
|
|
echo "## Methods"
|
|
echo ""
|
|
|
|
# Iterate over each method in the JSON
|
|
echo "$PARSED_JSON" | jq -c '.methods[]' | while read -r METHOD_JSON; do
|
|
METHOD_NAME=$(echo "$METHOD_JSON" | jq -r '.name')
|
|
# This is a bit fragile, but it's the best we can do for now
|
|
# to get the full signature.
|
|
METHOD_SIGNATURE=$(grep "function ${METHOD_NAME}" "$FILE_PATH" | sed -e 's/.*public function //' -e 's/{//' | xargs)
|
|
|
|
echo "### $METHOD_SIGNATURE"
|
|
|
|
# Method description
|
|
METHOD_DESCRIPTION=$(echo "$METHOD_JSON" | jq -r '.description')
|
|
if [ -n "$METHOD_DESCRIPTION" ]; then
|
|
echo ""
|
|
echo "$METHOD_DESCRIPTION"
|
|
fi
|
|
|
|
# Parameters
|
|
PARAMS_JSON=$(echo "$METHOD_JSON" | jq -c '.params | to_entries')
|
|
if [ "$PARAMS_JSON" != "[]" ]; then
|
|
echo ""
|
|
echo "**Parameters:**"
|
|
echo "$PARAMS_JSON" | jq -c '.[]' | while read -r PARAM_JSON; do
|
|
PARAM_NAME=$(echo "$PARAM_JSON" | jq -r '.key')
|
|
PARAM_TYPE=$(echo "$PARAM_JSON" | jq -r '.value.type')
|
|
PARAM_REQUIRED=$(echo "$PARAM_JSON" | jq -r '.value.required')
|
|
PARAM_DESC=$(echo "$PARAM_JSON" | jq -r '.value.description')
|
|
|
|
REQUIRED_TEXT=""
|
|
if [ "$PARAM_REQUIRED" = "true" ]; then
|
|
REQUIRED_TEXT=", required"
|
|
fi
|
|
|
|
echo "- \`$PARAM_NAME\` ($PARAM_TYPE$REQUIRED_TEXT) $PARAM_DESC"
|
|
done
|
|
fi
|
|
|
|
# Return type
|
|
RETURN_JSON=$(echo "$METHOD_JSON" | jq -c '.return')
|
|
if [ "$RETURN_JSON" != "null" ]; then
|
|
RETURN_TYPE=$(echo "$RETURN_JSON" | jq -r '.type')
|
|
RETURN_DESC=$(echo "$RETURN_JSON" | jq -r '.description')
|
|
echo ""
|
|
if [ -n "$RETURN_DESC" ]; then
|
|
echo "**Returns:** \`$RETURN_TYPE\` $RETURN_DESC"
|
|
else
|
|
echo "**Returns:** \`$RETURN_TYPE\`"
|
|
fi
|
|
fi
|
|
echo ""
|
|
done
|
|
|
|
exit 0
|