diff options
author | Ćukasz Jan Niemier <lukasz@niemier.pl> | 2016-10-22 14:52:49 +0200 |
---|---|---|
committer | w0rp <w0rp@users.noreply.github.com> | 2016-10-22 13:52:49 +0100 |
commit | e293e0b5abd182ec006e49ef975fc648797444ba (patch) | |
tree | 901fde7da350ecf73150017f080af2b3af6d5b7b | |
parent | 216eadbcbead15613e1725aa023bbcfd014b7573 (diff) | |
download | ale-e293e0b5abd182ec006e49ef975fc648797444ba.zip |
Use `cat` instead of `read -r` to stream stdin to file (#120)
* Use `cat` instead of `read -r` to stream stdin to file
* Cleanup dmd-wrapper
* Fix typo
* Make wrapper work on macOS
* Use fifo instead of temporary file
* Fix stdin-wrapper
* Use `awk` instead of `read` hackery
* Finish refactoring
* Fix `exec` issue
* Add myself as an coauthor of wrapper scripts (no shame at all :P)
* Fix dmd-wrapper
* Extract check_dubfile
-rwxr-xr-x | dmd-wrapper | 57 | ||||
-rwxr-xr-x | stdin-wrapper | 20 |
2 files changed, 43 insertions, 34 deletions
diff --git a/dmd-wrapper b/dmd-wrapper index a72472e8..0a643500 100755 --- a/dmd-wrapper +++ b/dmd-wrapper @@ -1,40 +1,41 @@ -#!/bin/bash -eu +#!/usr/bin/env bash -# Author: w0rp <devw0rp@gmail.com> +# 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. -temp_file=`mktemp` -mv "$temp_file" "$temp_file".d -temp_file="$temp_file".d +set -eu -trap "rm $temp_file" EXIT +check_dubfile() { + [[ -e "$1/dub.json" || -e "$1/dub.sdl" || -e "$1/package.json" ]] +} -while read; do - echo "$REPLY" >> "$temp_file" -done +traverse() { + path=$(pwd) + while [ "$path" != "/" ] \ + && ! check_dubfile "$path" + do + path=$(dirname "$path") + done -# Read imports from DUB. -original_path="$(pwd)" -path="$original_path" -import_line_options='' + echo "$path" +} -# We need to look for variable configuration files in parent directories. -while [ "$path" != '/' ]; do - if [ -f "$path/dub.sdl" ] || [ -f "$path/dub.json" ] || [ -f "$path/package.json" ]; then +import_line_options() { + root="$(traverse)" - cd "$path" + if check_dubfile "$root" + then + dub describe --root="$root" --import-paths | awk '{ print "-I" $0 }' + else + echo -n + fi +} - while read import_line; do - import_line_options="$import_line_options -I$import_line" - done <<< "$(dub describe --import-paths)" +temp_dir=$(mktemp -d 2>/dev/null || mktemp -d -t 'ale_linters') +temp_file="$temp_dir/file.d" +trap 'rm -r "$temp_dir"' EXIT - cd "$original_path" +cp /dev/stdin "$temp_file" - break - fi - - path="$(dirname "$path")" -done - -dmd $import_line_options "$@" "$temp_file" +dmd $(import_line_options) "$@" "$temp_file" diff --git a/stdin-wrapper b/stdin-wrapper index c1758df0..492035e1 100755 --- a/stdin-wrapper +++ b/stdin-wrapper @@ -1,20 +1,28 @@ #!/usr/bin/env bash -# Author: w0rp <devw0rp@gmail.com> +# Authors: w0rp <devw0rp@gmail.com>, hauleth <lukasz@niemier.pl> # Description: This script implements a wrapper for any program which does not accept # stdin input on most Unix machines. The input to the script is read to a # temporary file, and the first argument sets a particular file extension # for the temporary file. +set -eu + # All of the following arguments are read as command to run. file_extension="$1" shift -temp_file=$(mktemp --tmpdir "ale-XXXXXXXXX$file_extension") -trap 'rm $temp_file' EXIT +temp_dir=$(mktemp -d 2>/dev/null || mktemp -d -t 'ale_linter') +temp_file="$temp_dir/file$file_extension" +trap 'rm -r "$temp_dir"' EXIT -while read -r; do - echo "$REPLY" >> "$temp_file" -done +# In perfect world it wouldn't be needed, but some tools (`go vet`, I am looking +# at you) do not fit in line and require filename ending. Otherwise it would be +# simple as +# +# "$@" /dev/stdin +# +# without all that hackery with copying `/dev/stdin` +cp /dev/stdin "$temp_file" "$@" "$temp_file" |