#!/usr/bin/env bash # Author: w0rp , hauleth # 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"