| #!/bin/bash |
| |
| |
|
|
| set -euo pipefail |
|
|
| |
| if [ $# -eq 0 ]; then |
| echo "Usage: $0 <path/to/settings.local.md>" |
| echo "" |
| echo "Validates plugin settings file for:" |
| echo " - File existence and readability" |
| echo " - YAML frontmatter structure" |
| echo " - Required --- markers" |
| echo " - Field format" |
| echo "" |
| echo "Example: $0 .claude/my-plugin.local.md" |
| exit 1 |
| fi |
|
|
| SETTINGS_FILE="$1" |
|
|
| echo "π Validating settings file: $SETTINGS_FILE" |
| echo "" |
|
|
| |
| if [ ! -f "$SETTINGS_FILE" ]; then |
| echo "β File not found: $SETTINGS_FILE" |
| exit 1 |
| fi |
| echo "β
File exists" |
|
|
| |
| if [ ! -r "$SETTINGS_FILE" ]; then |
| echo "β File is not readable" |
| exit 1 |
| fi |
| echo "β
File is readable" |
|
|
| |
| MARKER_COUNT=$(grep -c '^---$' "$SETTINGS_FILE" 2>/dev/null || echo "0") |
|
|
| if [ "$MARKER_COUNT" -lt 2 ]; then |
| echo "β Invalid frontmatter: found $MARKER_COUNT '---' markers (need at least 2)" |
| echo " Expected format:" |
| echo " ---" |
| echo " field: value" |
| echo " ---" |
| echo " Content..." |
| exit 1 |
| fi |
| echo "β
Frontmatter markers present" |
|
|
| |
| FRONTMATTER=$(sed -n '/^---$/,/^---$/{ /^---$/d; p; }' "$SETTINGS_FILE") |
|
|
| if [ -z "$FRONTMATTER" ]; then |
| echo "β Empty frontmatter (nothing between --- markers)" |
| exit 1 |
| fi |
| echo "β
Frontmatter not empty" |
|
|
| |
| if ! echo "$FRONTMATTER" | grep -q ':'; then |
| echo "β οΈ Warning: Frontmatter has no key:value pairs" |
| fi |
|
|
| |
| echo "" |
| echo "Detected fields:" |
| echo "$FRONTMATTER" | grep '^[a-z_][a-z0-9_]*:' | while IFS=':' read -r key value; do |
| echo " - $key: ${value:0:50}" |
| done |
|
|
| |
| for field in enabled strict_mode; do |
| VALUE=$(echo "$FRONTMATTER" | grep "^${field}:" | sed "s/${field}: *//" || true) |
| if [ -n "$VALUE" ]; then |
| if [ "$VALUE" != "true" ] && [ "$VALUE" != "false" ]; then |
| echo "β οΈ Field '$field' should be boolean (true/false), got: $VALUE" |
| fi |
| fi |
| done |
|
|
| |
| BODY=$(awk '/^---$/{i++; next} i>=2' "$SETTINGS_FILE") |
|
|
| echo "" |
| if [ -n "$BODY" ]; then |
| BODY_LINES=$(echo "$BODY" | wc -l | tr -d ' ') |
| echo "β
Markdown body present ($BODY_LINES lines)" |
| else |
| echo "β οΈ No markdown body (frontmatter only)" |
| fi |
|
|
| echo "" |
| echo "ββββββββββββββββββββββββββββββββββββββββ" |
| echo "β
Settings file structure is valid" |
| echo "" |
| echo "Reminder: Changes to this file require restarting Claude Code" |
| exit 0 |
|
|