Move back commands/options parsing to separate shell scripts
It made the Makefile more difficult to read and this way we can take advantage of `set -e`, `-o pipefail` and friends. Clean up debugging targets
This commit is contained in:
parent
effb1be0e6
commit
5c2dd6fa2f
@ -20,28 +20,8 @@ endif
|
||||
|
||||
DESTDIR ?=
|
||||
|
||||
# Parse hledger's help and output all commands and command aliases in
|
||||
# parenthesis. Do not output single letter command aliases, it's not useful.
|
||||
COMMANDS_TMP := commands.tmp
|
||||
|
||||
define PARSE_COMMANDS :=
|
||||
hledger > $(COMMANDS_TMP) ;
|
||||
{ \
|
||||
sed -rn 's/^\s+([a-z][-a-z]+)\s+.*/\1/p' $(COMMANDS_TMP) ; \
|
||||
sed -rn 's/^\s+[a-z][-a-z]+\s+\(([a-z][ ,a-z]+)\).*/\1/p' $(COMMANDS_TMP) | \
|
||||
sed 's/\s*,\s*/\n/g' | \
|
||||
sed '/^.$$/d' ; \
|
||||
} | sed '/^hledger/d' | sort -u
|
||||
endef
|
||||
|
||||
# Parse hledger's help and output long options. Do not propose single letter
|
||||
# completions. Options requiring an argument make that explicit by appending the
|
||||
# equal sign (=)
|
||||
define PARSE_OPTIONS :=
|
||||
sed -rn '/^\s+-/p' | \
|
||||
sed -rn 's/^\s{1,4}(-.)?\s{1,4}(--[a-zA-Z][-_a-zA-Z0-9]+=?).*/\2/p' | \
|
||||
sort -u
|
||||
endef
|
||||
PARSE_COMMANDS := ./parse-commands.sh
|
||||
PARSE_OPTIONS := ./parse-options.sh
|
||||
|
||||
EXTENSIONS := ui web api
|
||||
INSTALLED_EXTENSIONS := $(foreach EXT,$(EXTENSIONS),$(shell type hledger-$(EXT) >/dev/null 2>&1 && echo $(EXT)))
|
||||
@ -87,25 +67,12 @@ commands-list.txt:
|
||||
printf "%s," $(COMMANDS) | sed 's/,$$//' > $@
|
||||
|
||||
generic-options.txt:
|
||||
hledger -h | $(PARSE_OPTIONS) > $@
|
||||
$(PARSE_OPTIONS) > $@
|
||||
|
||||
options-%.txt:
|
||||
hledger $* -h | $(PARSE_OPTIONS) > $@
|
||||
$(PARSE_OPTIONS) $* > $@
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -f $(COMMANDS_TMP) commands*.txt generic-options.txt options-*.txt
|
||||
rm -f commands*.txt generic-options.txt options-*.txt
|
||||
rm -f hledger-completion.bash
|
||||
|
||||
|
||||
# Basic REGEX debugging targets. Example usage:
|
||||
# diff <(make -s debug-options) <(make -s debug-options CMD=reg)
|
||||
|
||||
.PHONY: debug-commands
|
||||
debug-commands:
|
||||
$(PARSE_COMMANDS)
|
||||
|
||||
.PHONY: debug-options
|
||||
debug-options: CMD :=
|
||||
debug-options:
|
||||
hledger $(CMD) -h | $(PARSE_OPTIONS)
|
||||
|
||||
13
shell-completion/parse-commands.sh
Executable file
13
shell-completion/parse-commands.sh
Executable file
@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env bash
|
||||
# Parse hledger's help and output all commands and command aliases in
|
||||
# parenthesis. Do not output single letter command aliases, it's not useful.
|
||||
set -euo pipefail
|
||||
|
||||
declare commands_help
|
||||
commands_help=$(hledger)
|
||||
{
|
||||
sed -rn 's/^\s+([a-z][-a-z]+)\s+.*/\1/p' <<< "$commands_help"
|
||||
sed -rn 's/^\s+[a-z][-a-z]+\s+\(([a-z][ ,a-z]+)\).*/\1/p' <<< "$commands_help" |
|
||||
sed 's/\s*,\s*/\n/g' |
|
||||
sed '/^.$/d'
|
||||
} | sed '/^hledger/d' | sort -u
|
||||
14
shell-completion/parse-options.sh
Executable file
14
shell-completion/parse-options.sh
Executable file
@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env bash
|
||||
# Parse hledger's help and output long options. Do not propose single letter
|
||||
# completions. Options requiring an argument make that explicit by appending the
|
||||
# equal sign (=)
|
||||
set -euo pipefail
|
||||
|
||||
declare subcommand=${1:-}
|
||||
declare hledgerArgs=(--help)
|
||||
[[ -n $subcommand ]] && hledgerArgs=("$subcommand" "${hledgerArgs[@]}")
|
||||
|
||||
hledger "${hledgerArgs[@]}" |
|
||||
sed -rn '/^\s+-/p' |
|
||||
sed -rn 's/^\s{1,4}(-.)?\s{1,4}(--[a-zA-Z][-_a-zA-Z0-9]+=?).*/\2/p' |
|
||||
sort -u
|
||||
Loading…
Reference in New Issue
Block a user