Initial commit
This commit is contained in:
51
hooks/format-csharp.sh
Normal file
51
hooks/format-csharp.sh
Normal file
@@ -0,0 +1,51 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck shell=bash
|
||||
set -euo pipefail
|
||||
|
||||
# Check if hook is disabled via environment variable
|
||||
if [ "${CC_HANDBOOK_DOTNET_DISABLE_HOOKS:-false}" = "true" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Read JSON input from stdin
|
||||
input=$(cat)
|
||||
|
||||
# Extract file path from tool_input
|
||||
file_path=$(echo "$input" | jq -r '.tool_input.file_path // empty')
|
||||
|
||||
# Exit silently if no file path
|
||||
if [ -z "$file_path" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Only process C# files (.cs, .CS, .csx, .CSX)
|
||||
if [[ ! "$file_path" =~ \.(cs|CS|csx|CSX)$ ]]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Check if file exists
|
||||
if [ ! -f "$file_path" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Determine which CSharpier command to use
|
||||
# Try dotnet csharpier first (local or global dotnet tool)
|
||||
if dotnet csharpier --version &>/dev/null; then
|
||||
FORMATTER_CMD="dotnet csharpier"
|
||||
# Fall back to csharpier executable (global standalone)
|
||||
elif command -v csharpier &>/dev/null; then
|
||||
FORMATTER_CMD="csharpier"
|
||||
else
|
||||
echo "Error: CSharpier not found. Install with: dotnet tool install -g csharpier" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Run CSharpier with specified options
|
||||
# --skip-validation: Skip validation for better performance
|
||||
# --compilation-errors-as-warnings: Don't block on compilation errors
|
||||
if ! $FORMATTER_CMD format "$file_path" --skip-validation --compilation-errors-as-warnings 2>&1; then
|
||||
echo "Warning: CSharpier formatting failed for $file_path" >&2
|
||||
exit 1 # Non-zero exit (not 2) - warns user but doesn't block Claude
|
||||
fi
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user