| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- #!/bin/bash
- # Run type checkers with common options
- # Usage: ./check-types.sh [--mypy|--pyright|--both] [--strict] [path]
- set -e
- # Colors
- RED='\033[0;31m'
- GREEN='\033[0;32m'
- YELLOW='\033[1;33m'
- BLUE='\033[0;34m'
- NC='\033[0m'
- # Defaults
- CHECKER="both"
- STRICT=""
- TARGET="src"
- # Parse arguments
- while [[ $# -gt 0 ]]; do
- case $1 in
- --mypy)
- CHECKER="mypy"
- shift
- ;;
- --pyright)
- CHECKER="pyright"
- shift
- ;;
- --both)
- CHECKER="both"
- shift
- ;;
- --strict)
- STRICT="--strict"
- shift
- ;;
- *)
- TARGET="$1"
- shift
- ;;
- esac
- done
- # Check if target exists
- if [[ ! -e "$TARGET" ]]; then
- echo -e "${RED}Target not found: $TARGET${NC}"
- exit 1
- fi
- run_mypy() {
- echo -e "${BLUE}=== Running mypy ===${NC}"
- if ! command -v mypy &> /dev/null; then
- echo -e "${YELLOW}mypy not found. Install with: pip install mypy${NC}"
- return 1
- fi
- MYPY_ARGS="--show-error-codes --show-error-context --pretty"
- if [[ -n "$STRICT" ]]; then
- MYPY_ARGS="$MYPY_ARGS --strict"
- fi
- echo "mypy $MYPY_ARGS $TARGET"
- echo ""
- if mypy $MYPY_ARGS "$TARGET"; then
- echo -e "${GREEN}✓ mypy passed${NC}"
- return 0
- else
- echo -e "${RED}✗ mypy found errors${NC}"
- return 1
- fi
- }
- run_pyright() {
- echo -e "${BLUE}=== Running pyright ===${NC}"
- if ! command -v pyright &> /dev/null; then
- echo -e "${YELLOW}pyright not found. Install with: pip install pyright${NC}"
- return 1
- fi
- PYRIGHT_ARGS=""
- if [[ -n "$STRICT" ]]; then
- # Create temporary config for strict mode
- TEMP_CONFIG=$(mktemp)
- cat > "$TEMP_CONFIG" << EOF
- {
- "typeCheckingMode": "strict"
- }
- EOF
- PYRIGHT_ARGS="--project $TEMP_CONFIG"
- fi
- echo "pyright $PYRIGHT_ARGS $TARGET"
- echo ""
- if pyright $PYRIGHT_ARGS "$TARGET"; then
- echo -e "${GREEN}✓ pyright passed${NC}"
- [[ -n "$STRICT" ]] && rm -f "$TEMP_CONFIG"
- return 0
- else
- echo -e "${RED}✗ pyright found errors${NC}"
- [[ -n "$STRICT" ]] && rm -f "$TEMP_CONFIG"
- return 1
- fi
- }
- # Run checkers
- MYPY_STATUS=0
- PYRIGHT_STATUS=0
- case $CHECKER in
- mypy)
- run_mypy || MYPY_STATUS=$?
- ;;
- pyright)
- run_pyright || PYRIGHT_STATUS=$?
- ;;
- both)
- run_mypy || MYPY_STATUS=$?
- echo ""
- run_pyright || PYRIGHT_STATUS=$?
- ;;
- esac
- # Summary
- echo ""
- echo -e "${BLUE}=== Summary ===${NC}"
- if [[ "$CHECKER" == "both" ]] || [[ "$CHECKER" == "mypy" ]]; then
- if [[ $MYPY_STATUS -eq 0 ]]; then
- echo -e "mypy: ${GREEN}✓ passed${NC}"
- else
- echo -e "mypy: ${RED}✗ failed${NC}"
- fi
- fi
- if [[ "$CHECKER" == "both" ]] || [[ "$CHECKER" == "pyright" ]]; then
- if [[ $PYRIGHT_STATUS -eq 0 ]]; then
- echo -e "pyright: ${GREEN}✓ passed${NC}"
- else
- echo -e "pyright: ${RED}✗ failed${NC}"
- fi
- fi
- # Exit with error if any checker failed
- if [[ $MYPY_STATUS -ne 0 ]] || [[ $PYRIGHT_STATUS -ne 0 ]]; then
- exit 1
- fi
|