|  |  | @ -18,7 +18,7 @@ IGNORED_DIRS="^third_party.*|^msgq.*|^msgq_repo.*|^opendbc.*|^opendbc_repo.*|^ce | 
			
		
	
		
		
			
				
					
					|  |  |  | function run() { |  |  |  | function run() { | 
			
		
	
		
		
			
				
					
					|  |  |  |   shopt -s extglob |  |  |  |   shopt -s extglob | 
			
		
	
		
		
			
				
					
					|  |  |  |   case $1 in |  |  |  |   case $1 in | 
			
		
	
		
		
			
				
					
					|  |  |  |     $SKIP ) return 0 ;; |  |  |  |     $SKIP | $RUN ) return 0 ;; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   esac |  |  |  |   esac | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   echo -en "$1" |  |  |  |   echo -en "$1" | 
			
		
	
	
		
		
			
				
					|  |  | @ -63,29 +63,46 @@ function run_tests() { | 
			
		
	
		
		
			
				
					
					|  |  |  | function help() { |  |  |  | function help() { | 
			
		
	
		
		
			
				
					
					|  |  |  |   echo "A fast linter" |  |  |  |   echo "A fast linter" | 
			
		
	
		
		
			
				
					
					|  |  |  |   echo "" |  |  |  |   echo "" | 
			
		
	
		
		
			
				
					
					|  |  |  |   echo -e "${BOLD}${UNDERLINE}Usage:${NC} op lint [OPTIONS]" |  |  |  |   echo -e "${BOLD}${UNDERLINE}Usage:${NC} op lint [TESTS] [OPTIONS]" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   echo "" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   echo -e "${BOLD}${UNDERLINE}Tests:${NC}" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   echo -e "  ${BOLD}ruff${NC}" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   echo -e "  ${BOLD}mypy${NC}" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   echo -e "  ${BOLD}lint-imports${NC}" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   echo -e "  ${BOLD}codespell${NC}" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   echo -e "  ${BOLD}check_added_large_files${NC}" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   echo -e "  ${BOLD}check_shebang_scripts_are_executable${NC}" | 
			
		
	
		
		
			
				
					
					|  |  |  |   echo "" |  |  |  |   echo "" | 
			
		
	
		
		
			
				
					
					|  |  |  |   echo -e "${BOLD}${UNDERLINE}Options:${NC}" |  |  |  |   echo -e "${BOLD}${UNDERLINE}Options:${NC}" | 
			
		
	
		
		
			
				
					
					|  |  |  |   echo -e "  ${BOLD}-f, --fast${NC}" |  |  |  |   echo -e "  ${BOLD}-f, --fast${NC}" | 
			
		
	
		
		
			
				
					
					|  |  |  |   echo "          Skip slow tests" |  |  |  |   echo "          Skip slow tests" | 
			
		
	
		
		
			
				
					
					|  |  |  |   echo -e "  ${BOLD}-s, --skip${NC}" |  |  |  |   echo -e "  ${BOLD}-s, --skip${NC}" | 
			
		
	
		
		
			
				
					
					|  |  |  |   echo "          Specify a test to skip" |  |  |  |   echo "          Specify tests to skip separated by spaces" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   echo "" |  |  |  |   echo "" | 
			
		
	
		
		
			
				
					
					|  |  |  |   echo -e "${BOLD}${UNDERLINE}Examples:${NC}" |  |  |  |   echo -e "${BOLD}${UNDERLINE}Examples:${NC}" | 
			
		
	
		
		
			
				
					
					|  |  |  |   echo "  op lint --skip mypy --skip ruff" |  |  |  |   echo "  op lint mypy ruff" | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   echo "          Skip the ruff and mypy check" |  |  |  |   echo "          Only run the mypy and ruff tests" | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   echo "" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   echo "  op lint --skip mypy ruff" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   echo "          Skip the mypy and ruff tests" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   echo "" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   echo "  op lint" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   echo "          Run all the tests" | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | while true; do |  |  |  | SKIP="" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | RUN="" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | while [[ $# -gt 0 ]]; do | 
			
		
	
		
		
			
				
					
					|  |  |  |   case $1 in |  |  |  |   case $1 in | 
			
		
	
		
		
			
				
					
					|  |  |  |     -f | --fast ) shift 1; FAST="1" ;; |  |  |  |     -f | --fast ) shift 1; FAST="1" ;; | 
			
		
	
		
		
			
				
					
					|  |  |  |     -s | --skip ) shift 1; SKIP+="$1|"; shift 1 ;; |  |  |  |     -s | --skip ) shift 1; SKIP=" " ;; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     -h | --help | -help | --h ) help; exit 0 ;; |  |  |  |     -h | --help | -help | --h ) help; exit 0 ;; | 
			
		
	
		
		
			
				
					
					|  |  |  |     * )           break ;; |  |  |  |     * ) if [[ -n $SKIP ]]; then SKIP+="$1 "; else RUN+="$1 "; fi; shift 1 ;; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   esac |  |  |  |   esac | 
			
		
	
		
		
			
				
					
					|  |  |  | done |  |  |  | done | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | SKIP="@($(echo $SKIP | sed 's/|$//'))" |  |  |  | RUN=$([ -z "$RUN" ] && echo "" || echo "!($(echo $RUN | sed 's/ /|/g'))") | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | SKIP="@($(echo $SKIP | sed 's/ /|/g'))" | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | GIT_FILES="$(git ls-files | sed -E "s/$IGNORED_FILES|$IGNORED_DIRS//g")" |  |  |  | GIT_FILES="$(git ls-files | sed -E "s/$IGNORED_FILES|$IGNORED_DIRS//g")" | 
			
		
	
		
		
			
				
					
					|  |  |  | ALL_FILES="" |  |  |  | ALL_FILES="" | 
			
		
	
	
		
		
			
				
					|  |  | 
 |