Initial commit
This commit is contained in:
113
skills/clap-patterns/scripts/validate-cargo.sh
Executable file
113
skills/clap-patterns/scripts/validate-cargo.sh
Executable file
@@ -0,0 +1,113 @@
|
||||
#!/usr/bin/env bash
|
||||
# Validate Cargo.toml for correct Clap configuration
|
||||
#
|
||||
# Usage: ./validate-cargo.sh [path-to-Cargo.toml]
|
||||
#
|
||||
# Checks:
|
||||
# - Clap dependency exists
|
||||
# - Clap version is 4.x or newer
|
||||
# - Required features are enabled (derive)
|
||||
# - Optional features (env, cargo) are present if needed
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
CARGO_TOML="${1:-Cargo.toml}"
|
||||
|
||||
if [ ! -f "$CARGO_TOML" ]; then
|
||||
echo "❌ Error: $CARGO_TOML not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Validating Clap configuration in: $CARGO_TOML"
|
||||
echo ""
|
||||
|
||||
# Check if clap is listed as a dependency
|
||||
if ! grep -q "clap" "$CARGO_TOML"; then
|
||||
echo "❌ Clap not found in dependencies"
|
||||
echo ""
|
||||
echo "Add to $CARGO_TOML:"
|
||||
echo ""
|
||||
echo '[dependencies]'
|
||||
echo 'clap = { version = "4.5", features = ["derive"] }'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✓ Clap dependency found"
|
||||
|
||||
# Extract clap version
|
||||
VERSION=$(grep -A 5 '^\[dependencies\]' "$CARGO_TOML" | grep 'clap' | head -1)
|
||||
|
||||
# Check version
|
||||
if echo "$VERSION" | grep -q '"4\.' || echo "$VERSION" | grep -q "'4\."; then
|
||||
echo "✓ Clap version 4.x detected"
|
||||
elif echo "$VERSION" | grep -q '"3\.' || echo "$VERSION" | grep -q "'3\."; then
|
||||
echo "⚠️ Warning: Clap version 3.x detected"
|
||||
echo " Consider upgrading to 4.x for latest features"
|
||||
else
|
||||
echo "⚠️ Warning: Could not determine Clap version"
|
||||
fi
|
||||
|
||||
# Check for derive feature
|
||||
if echo "$VERSION" | grep -q 'features.*derive' || echo "$VERSION" | grep -q 'derive.*features'; then
|
||||
echo "✓ 'derive' feature enabled"
|
||||
else
|
||||
echo "❌ 'derive' feature not found"
|
||||
echo " Add: features = [\"derive\"]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check for optional but recommended features
|
||||
echo ""
|
||||
echo "Optional features:"
|
||||
|
||||
if echo "$VERSION" | grep -q '"env"' || echo "$VERSION" | grep -q "'env'"; then
|
||||
echo "✓ 'env' feature enabled (environment variable support)"
|
||||
else
|
||||
echo " 'env' feature not enabled"
|
||||
echo " Add for environment variable support: features = [\"derive\", \"env\"]"
|
||||
fi
|
||||
|
||||
if echo "$VERSION" | grep -q '"cargo"' || echo "$VERSION" | grep -q "'cargo'"; then
|
||||
echo "✓ 'cargo' feature enabled (automatic version from Cargo.toml)"
|
||||
else
|
||||
echo " 'cargo' feature not enabled"
|
||||
echo " Add for automatic version: features = [\"derive\", \"cargo\"]"
|
||||
fi
|
||||
|
||||
if echo "$VERSION" | grep -q '"color"' || echo "$VERSION" | grep -q "'color'"; then
|
||||
echo "✓ 'color' feature enabled (colored output)"
|
||||
else
|
||||
echo " 'color' feature not enabled"
|
||||
echo " Add for colored help: features = [\"derive\", \"color\"]"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# Check for common patterns in src/
|
||||
if [ -d "src" ]; then
|
||||
echo "Checking source files for Clap usage patterns..."
|
||||
|
||||
if grep -r "use clap::Parser" src/ &>/dev/null; then
|
||||
echo "✓ Parser trait usage found"
|
||||
fi
|
||||
|
||||
if grep -r "use clap::Subcommand" src/ &>/dev/null; then
|
||||
echo "✓ Subcommand trait usage found"
|
||||
fi
|
||||
|
||||
if grep -r "use clap::ValueEnum" src/ &>/dev/null; then
|
||||
echo "✓ ValueEnum trait usage found"
|
||||
fi
|
||||
|
||||
if grep -r "#\[derive(Parser)\]" src/ &>/dev/null; then
|
||||
echo "✓ Parser derive macro usage found"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "✓ Validation complete!"
|
||||
echo ""
|
||||
echo "Recommended Cargo.toml configuration:"
|
||||
echo ""
|
||||
echo '[dependencies]'
|
||||
echo 'clap = { version = "4.5", features = ["derive", "env", "cargo"] }'
|
||||
Reference in New Issue
Block a user