#!/bin/sh while [ "$#" -gt 0 ]; do case $1 in -h|-?|--help|help) HELP=1 ;; -*) echo "Error: Unsupported flag $1" >&2 return 1 ;; *) # No more options break ;; esac shift done if [ "$HELP" ]; then printf "\ usage %s \n -?|-h|--help\tthis message " "$(basename "$0")" exit fi generate_combinations() { items="$1" size=$2 current=$3 combination="$4" if [ "$current" -eq "$size" ]; then echo "$combination" return fi # Split items into positional parameters set -- $items while [ $# -gt 0 ]; do item=$1 shift new_combination="$combination $item" remaining_items="$@" generate_combinations "$remaining_items" $size $(($current + 1)) "$new_combination" set -- "$item" $@ done } CARGO_PATH="$1" if [ -z "$CARGO_PATH" ]; then printf "please provide path to Cargo.toml\n" exit fi if [ -d "$CARGO_PATH" ]; then CARGO_PATH="${CARGO_PATH}/Cargo.toml" fi features=$(grep '^\[features\]' "$CARGO_PATH" -A99999999 | grep '^\[' -m 2 -B99999999 | grep -v '^\[' | cut -d '=' -f 1 | grep -v 'default') num_features=$(echo "$features" | wc -w | tr -d ' ') i=1 while [ $i -le $num_features ]; do echo "Generating combinations of size $i" combos=$(generate_combinations "$features" $i 0 "") echo "$combos" | while IFS= read -r line; do combo=$(echo $line | xargs) # Trim echo "Running clippy with features: $combo" if ! cargo clippy --features "$combo"; then echo "Error found in combination: $combo" exit 1 fi done i=$((i + 1)) done