mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-13 05:17:13 +02:00
commands code generation (#871)
* commands code generation (#803) * commands code generation for only frames command * fix cmake file and add Caller files * working exptime, fully extended commands file and its variants * start adding template commands * add INT_CMD_VEC_ID template * add list command, generate multiple bins, format code * reach 208 commands using the cpp macros * add tests for command parser * start adding tests for commands parser * fix typo to use commands.yaml * add more tests for command_parser * add all template functions (up to 218 commands) * finish template functions and add more CmdProxy.cpp functions (250+) * 257 commands * 300 commands the rest are very special commands * add special commands without generation * separate special functions from generated c++ file * implementing one command for put and get (buggy) * add infer action in a separate file * generate header for special commands from yaml * allow only 0 or 1 for bool inputs * group all commands in gen_commands.py * add help to gen_commands.py * add autocomplete bash script * autocompletion: add support for module levels and help * remove debugging line * add autocompletion, help to commands, change int [0,1] to bool * copy tests for Caller.cpp. Tests pass * update with the new developer branch changes * fix errors after merging (there is problems with tests) * fixed port/stopport in yaml (intput typo), added '_caller' to the test dac and test on chip dac command in global test for cmdcaller * undo previous test simulator debug change * add documentation for the generated code * reducing the comment to be replaced in length so formatting does not split into 2 lines * removed formatting specific style of C++11 in gen_commands.py to keep with the top level clang format of the project * regeneratign code for commands * automation generated * Redirect deprecated commands (#872) * working implementation, need to fix dac * fixed deprecation redirect for dac command * Detector specific autocomplete (#873) * working implementation, need to fix dac * fixed deprecation redirect for dac command * detector specific completion for dac * added autocomplete using detector specific * fixed error when autocompleting partial words * Generate commands/fix commands (#875) * fix vm_a, im_a etc have deg Celsius suffix, also help missing or changed in some places * dac: require det id for all, arg0 to be printed at output, help for onchip dac and dac, onchipdac: spacing * getscan detid and blocking trigger help * udp_Dstlist det_id fixed, but rx_id invalid * cmdApp in line with cmdLineApp (missing version, receiver_id, not creating det object in help action * added set_command to differentiate between check_det_id and require_det_id (mixed up), args: -1 needs to check for at least one argument * reordering * reordering and checked till integer_command_hex * fixed a lot more commands * fix caller tests for eiger * changes to tests after Bechir left * changing .cmd to .cmdcall for the caller commands * fixed tests for caller, still warning for setexptime about cast input * autocomplete ran * add moench test * regenerating autocomplete and commands * fixing other things from merge conflicts (renaming slsDetectorDefs to defs in commands.yaml) * formatting * added code injection to help (#876) * updated 3 commands to have get output that can be put into put (#877) * updated some commands to have get output that can be put into put * fix tests for clkdiv * adding help to free (#878) * removing old commands and renaming them, (also making it work for parameters command as it was still calling cmdproxy) (#879) * More helpful error messages for unsupported actions (#880) * removing old commands and renaming them, (also making it work for parameters command as it was still calling cmdproxy) * Added specific help for unsupported actions * fixed a vetofile get special exception message. more specific warning for special exception message instead of no function warning * added condition checking true in exceptions for special message --------- Co-authored-by: Bechir Brahem <bachbrahem@gmail.com> Co-authored-by: Erik Frojdh <erik.frojdh@gmail.com> Co-authored-by: Dhanya Thattil <dhanya.thattil@psi.ch>
This commit is contained in:
@ -0,0 +1,164 @@
|
||||
# GENERATED FILE - DO NOT EDIT
|
||||
# ANY CHANGES TO THIS FILE WILL BE OVERWRITTEN
|
||||
|
||||
_sd() {
|
||||
|
||||
# Taken from https://github.com/scop/bash-completion/blob/15b74b1050333f425877a7cbd99af2998b95c476/bash_completion#L770C12-L770C12
|
||||
# Reassemble command line words, excluding specified characters from the
|
||||
# list of word completion separators (COMP_WORDBREAKS).
|
||||
# @param $1 chars Characters out of $COMP_WORDBREAKS which should
|
||||
# NOT be considered word breaks. This is useful for things like scp where
|
||||
# we want to return host:path and not only path, so we would pass the
|
||||
# colon (:) as $1 here.
|
||||
# @param $2 words Name of variable to return words to
|
||||
# @param $3 cword Name of variable to return cword to
|
||||
#
|
||||
_comp__reassemble_words()
|
||||
{
|
||||
local exclude="" i j line ref
|
||||
# Exclude word separator characters?
|
||||
if [[ $1 ]]; then
|
||||
# Yes, exclude word separator characters;
|
||||
# Exclude only those characters, which were really included
|
||||
exclude="[${1//[^$COMP_WORDBREAKS]/}]"
|
||||
fi
|
||||
|
||||
# Default to cword unchanged
|
||||
printf -v "$3" %s "$COMP_CWORD"
|
||||
# Are characters excluded which were former included?
|
||||
if [[ $exclude ]]; then
|
||||
# Yes, list of word completion separators has shrunk;
|
||||
line=$COMP_LINE
|
||||
# Re-assemble words to complete
|
||||
for ((i = 0, j = 0; i < ${#COMP_WORDS[@]}; i++, j++)); do
|
||||
# Is current word not word 0 (the command itself) and is word not
|
||||
# empty and is word made up of just word separator characters to
|
||||
# be excluded and is current word not preceded by whitespace in
|
||||
# original line?
|
||||
while [[ $i -gt 0 && ${COMP_WORDS[i]} == +($exclude) ]]; do
|
||||
# Is word separator not preceded by whitespace in original line
|
||||
# and are we not going to append to word 0 (the command
|
||||
# itself), then append to current word.
|
||||
[[ $line != [[:blank:]]* ]] && ((j >= 2)) && ((j--))
|
||||
# Append word separator to current or new word
|
||||
ref="$2[$j]"
|
||||
printf -v "$ref" %s "${!ref-}${COMP_WORDS[i]}"
|
||||
# Indicate new cword
|
||||
((i == COMP_CWORD)) && printf -v "$3" %s "$j"
|
||||
# Remove optional whitespace + word separator from line copy
|
||||
line=${line#*"${COMP_WORDS[i]}"}
|
||||
# Indicate next word if available, else end *both* while and
|
||||
# for loop
|
||||
if ((i < ${#COMP_WORDS[@]} - 1)); then
|
||||
((i++))
|
||||
else
|
||||
break 2
|
||||
fi
|
||||
# Start new word if word separator in original line is
|
||||
# followed by whitespace.
|
||||
[[ $line == [[:blank:]]* ]] && ((j++))
|
||||
done
|
||||
# Append word to current word
|
||||
ref="$2[$j]"
|
||||
printf -v "$ref" %s "${!ref-}${COMP_WORDS[i]}"
|
||||
# Remove optional whitespace + word from line copy
|
||||
line=${line#*"${COMP_WORDS[i]}"}
|
||||
# Indicate new cword
|
||||
((i == COMP_CWORD)) && printf -v "$3" %s "$j"
|
||||
done
|
||||
((i == COMP_CWORD)) && printf -v "$3" %s "$j"
|
||||
else
|
||||
# No, list of word completions separators hasn't changed;
|
||||
for i in "${!COMP_WORDS[@]}"; do
|
||||
printf -v "$2[i]" %s "${COMP_WORDS[i]}"
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
local FCN_RETURN=""
|
||||
local IS_PATH=0
|
||||
|
||||
|
||||
# -- THIS LINE WILL BE REPLACED WITH GENERATED CODE --
|
||||
|
||||
|
||||
COMPREPLY=()
|
||||
local OPTIONS_NEW=""
|
||||
|
||||
# check if bash or zsh
|
||||
# _get_comp_words_by_ref is a bash built-in function, we check if it exists
|
||||
declare -Ff _get_comp_words_by_ref > /dev/null && IS_BASH=1 || IS_BASH=0
|
||||
|
||||
|
||||
# bash interprets the colon character : as a special character and splits the argument in two
|
||||
# different than what zsh does
|
||||
# https://stackoverflow.com/a/3224910
|
||||
# https://stackoverflow.com/a/12495727
|
||||
local cur
|
||||
local cword words=()
|
||||
_comp__reassemble_words ":" words cword
|
||||
cur=${words[cword]}
|
||||
|
||||
# check the action (get or put)
|
||||
case "${words[0]}" in
|
||||
"sls_detector_get" | "g" | "detg")
|
||||
local IS_GET=1
|
||||
;;
|
||||
*)
|
||||
local IS_GET=0
|
||||
;;
|
||||
esac
|
||||
|
||||
# if no command is written, autocomplete with the commands
|
||||
if [[ ${cword} -eq 1 ]]; then
|
||||
# local SLS_COMMANDS="trimbits exptime"
|
||||
local SLS_COMMANDS_NEW=""
|
||||
|
||||
case "$cur" in
|
||||
[0-9]*:*)
|
||||
local suggestions=($(compgen -W "${SLS_COMMANDS}" -- "${cur#*:}"))
|
||||
COMPREPLY=( ${suggestions[*]} )
|
||||
;;
|
||||
[0-9]*)
|
||||
COMPREPLY=()
|
||||
;;
|
||||
*)
|
||||
COMPREPLY=( $( compgen -W "$SLS_COMMANDS -h" -- "$cur" ) );;
|
||||
|
||||
esac
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [[ ${cword} -eq 2 ]] && [[ ${words[1]} == "-h" ]]; then
|
||||
COMPREPLY=( $( compgen -W "$SLS_COMMANDS" -- "$cur" ) )
|
||||
return 0
|
||||
fi
|
||||
|
||||
# if a command is written, autocomplete with the options
|
||||
# call the function for the command
|
||||
|
||||
if [[ "$SLS_COMMANDS" == *"${words[1]##*:}"* ]]; then
|
||||
__"${words[1]##*:}"
|
||||
fi
|
||||
|
||||
# if IS_PATH is activated, autocomplete with the path
|
||||
if [[ ${IS_PATH} -eq 1 ]]; then
|
||||
COMPREPLY=($(compgen -f -- "${cur}"))
|
||||
return 0
|
||||
fi
|
||||
|
||||
# autocomplete with the options
|
||||
COMPREPLY=($(compgen -W "${FCN_RETURN}" -- "${cur}"))
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
complete -F _sd -o filenames sls_detector_get
|
||||
complete -F _sd -o filenames g
|
||||
complete -F _sd -o filenames detg
|
||||
|
||||
complete -F _sd -o filenames sls_detector_put
|
||||
complete -F _sd -o filenames p
|
||||
complete -F _sd -o filenames detp
|
Reference in New Issue
Block a user