44 lines
		
	
	
		
			847 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			847 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env bash
 | 
						|
 | 
						|
# Author: w0rp <devw0rp@gmail.com>, hauleth <lukasz@niemier.pl>
 | 
						|
# Description: This script wraps DMD so we can get something which is capable of reading
 | 
						|
#   D code from stdin.
 | 
						|
 | 
						|
set -eu
 | 
						|
 | 
						|
check_dubfile() {
 | 
						|
  [[ -e "$1/dub.json" || -e "$1/dub.sdl" || -e "$1/package.json" ]]
 | 
						|
}
 | 
						|
 | 
						|
traverse() {
 | 
						|
  path=$(pwd)
 | 
						|
  while [ "$path" != "/" ] \
 | 
						|
    && ! check_dubfile "$path"
 | 
						|
  do
 | 
						|
    path=$(dirname "$path")
 | 
						|
  done
 | 
						|
 | 
						|
  echo "$path"
 | 
						|
}
 | 
						|
 | 
						|
import_line_options() {
 | 
						|
  root="$(traverse)"
 | 
						|
 | 
						|
  if check_dubfile "$root"
 | 
						|
  then
 | 
						|
    dub describe --root="$root" --import-paths | awk '{ print "-I" $0 }'
 | 
						|
  else
 | 
						|
    echo -n
 | 
						|
  fi
 | 
						|
}
 | 
						|
 | 
						|
temp_dir=$(mktemp -d 2>/dev/null || mktemp -d -t 'ale_linters')
 | 
						|
temp_file="$temp_dir/file.d"
 | 
						|
trap 'rm -r "$temp_dir"' EXIT
 | 
						|
 | 
						|
while read -r; do
 | 
						|
  echo "$REPLY" >> "$temp_file"
 | 
						|
done
 | 
						|
 | 
						|
dmd $(import_line_options) "$@" "$temp_file"
 |