#!/bin/sh
#
# Run all linting tools.
#

set -euC
vimgodir=$(cd -P "$(dirname "$0")/.." > /dev/null && pwd)
cd "$vimgodir"

### Setup Vim and other dependencies.
#####################################
if [ -z "${1:-}" ]; then
  echo "unknown version: '${1:-}'"
  echo "First argument must be 'vim-8.2', 'vim-9.1' or 'nvim'."
	exit 1
fi

vim=$1
vimdir="/tmp/vim-go-test/$vim-install"
export GOPATH=$vimdir
export PATH="${GOPATH}/bin:$PATH"

if [ ! -f "$vimdir/bin/vim" ]; then
	echo "$vimdir/bin/vim doesn't exist; did you install it with the install-vim script?"
	exit 1
fi

### Run vint
############
failed=0
printf "Running vint ... "
if [ -x "$(command -v vint)" ]; then
  lint=$(vint "$vimgodir" 2>&1 ||:)
  if [ -n "$lint" ]; then
    echo "FAILED"
    echo "$lint"
    echo
    failed=6
  else
    echo "PASSED"
  fi
else
  echo "SKIPPED"
  echo "'vint' binary not found; use 'pip install vim-vint' to install it."
fi

### Run vim-vimlint
###################
printf "Running vim-vimlint ... "
lint=$(sh "$vimdir/share/vim/vimgo/pack/vim-go/start/vim-vimlint/bin/vimlint.sh" \
  -p "$vimdir/share/vim/vimgo/pack/vim-go/start/vim-vimlparser" \
  -l "$vimdir/share/vim/vimgo/pack/vim-go/start/vim-vimlint" \
  -u \
  -c func_abort=1 \
  -e EVL110=1 -e EVL103=1 -e EVL104=1 -e EVL102=1 \
  "$vimgodir" \
  2>&1)
result="$?"
if [ "$result" -eq "2" ]; then
  echo "$lint"
  echo
  failed=6
else
  echo "PASSED"
fi

### Run vimhelplint.
####################
printf "Running vimhelplint ... "

# set modeline explicitly so that the modeline will be respected when run as root.
lint=$($vimdir/bin/vim -esNR \
  --cmd "set rtp+=$vimdir/share/vim/vimgo/pack/vim-go/start/vim-vimhelplint/" \
  --cmd 'set modeline' \
  +'filetype plugin on' \
  +"e $vimgodir/doc/vim-go.txt" \
  +'verbose VimhelpLintEcho' \
  +q \
  2>&1 ||:)
if [ "$lint" ]; then
  echo "FAILED"
  echo "$lint"
  failed=6
else
  echo "PASSED"
fi

exit "$failed"
