Add shellcheck hook and configuration
This commit is contained in:
22
.claude/hooks/shellcheck.sh
Executable file
22
.claude/hooks/shellcheck.sh
Executable file
@@ -0,0 +1,22 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -E -o errexit -o nounset -o pipefail
|
||||||
|
|
||||||
|
# Exit silently if required tools are missing
|
||||||
|
command -v shellcheck > /dev/null 2>&1 || exit 0
|
||||||
|
command -v file > /dev/null 2>&1 || exit 0
|
||||||
|
command -v jq > /dev/null 2>&1 || exit 0
|
||||||
|
|
||||||
|
input=$(cat)
|
||||||
|
file_path=$(printf '%s' "$input" | jq -r '.tool_input.file_path // empty')
|
||||||
|
|
||||||
|
[[ -z "$file_path" || ! -f "$file_path" ]] && exit 0
|
||||||
|
|
||||||
|
file_type=$(file --brief "$file_path")
|
||||||
|
case "$file_type" in
|
||||||
|
*"Bourne-Again shell"*|*"bash"*|*"/bin/bash"*) ;;
|
||||||
|
*"shell script"*|*"/bin/sh"*) ;;
|
||||||
|
*) exit 0 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
shellcheck --format=gcc "$file_path" >&2
|
||||||
15
.claude/settings.json
Normal file
15
.claude/settings.json
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"hooks": {
|
||||||
|
"PostToolUse": [
|
||||||
|
{
|
||||||
|
"matcher": "Edit|Write",
|
||||||
|
"hooks": [
|
||||||
|
{
|
||||||
|
"type": "command",
|
||||||
|
"command": ".claude/hooks/shellcheck.sh"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
12
.shellcheckrc
Normal file
12
.shellcheckrc
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# Default shell for sourced files without shebang (SC2148)
|
||||||
|
shell=bash
|
||||||
|
|
||||||
|
# Sourced files define variables used by other files after source
|
||||||
|
disable=SC2034
|
||||||
|
|
||||||
|
# Non-constant and external source paths are intentional
|
||||||
|
disable=SC1090
|
||||||
|
disable=SC1091
|
||||||
|
|
||||||
|
# Functions invoked indirectly via trap/callback
|
||||||
|
disable=SC2317
|
||||||
Reference in New Issue
Block a user