forked from extern/httpie-cli
more refinements
This commit is contained in:
parent
5af4acc798
commit
0dce332b16
@ -2,64 +2,79 @@
|
||||
# Copyright (c) 2015 Github zsh-users
|
||||
# Based on the initial work of http://github.com/zsh-users
|
||||
|
||||
methods=("GET" "POST" "PUT" "DELETE" "HEAD" "OPTIONS" "PATCH" "TRACE" "CONNECT" )
|
||||
METHODS=("GET" "POST" "PUT" "DELETE" "HEAD" "OPTIONS" "PATCH" "TRACE" "CONNECT" )
|
||||
|
||||
_httpie_params () {
|
||||
local ret=1 expl
|
||||
local first_arg=$words[NORMARG]
|
||||
if (( CURRENT == NORMARG )) && [[ $words[NORMARG] != *:* ]]; then
|
||||
# URL
|
||||
_httpie_urls && ret=0
|
||||
elif (( CURRENT == NORMARG + 1 )) && [[ ${methods[(ie)$first_arg]} -le ${#methods} ]]; then
|
||||
# When the first argument is the method, suggest the URL as well.
|
||||
_httpie_urls && ret=0
|
||||
elif (( CURRENT > NORMARG )); then
|
||||
# regular param, if we already have a url
|
||||
# ignore all prefix stuff
|
||||
compset -P '(#b)([^:@=]#)'
|
||||
local name=$match[1]
|
||||
|
||||
if false; then
|
||||
false;
|
||||
elif compset -P ':'; then
|
||||
_message "$name HTTP Headers"
|
||||
|
||||
elif compset -P '=='; then
|
||||
_message "$name URL Parameters"
|
||||
|
||||
elif compset -P '='; then
|
||||
_message "$name Data Fields"
|
||||
|
||||
elif compset -P ':='; then
|
||||
_message "$name Raw JSON Fields"
|
||||
|
||||
elif compset -P '@'; then
|
||||
_files
|
||||
|
||||
else
|
||||
typeset -a ops
|
||||
ops=(
|
||||
"\::Arbitrary HTTP header, e.g X-API-Token:123"
|
||||
"==:Querystring parameter to the URL, e.g limit==50"
|
||||
"=:Data fields to be serialized as JSON (default) or Form Data (with --form)"
|
||||
"\:=:Data field for real JSON types."
|
||||
"@:Path field for uploading a file."
|
||||
)
|
||||
_describe -t httpparams 'parameter types' ops -Q -S ''
|
||||
fi
|
||||
ret=0
|
||||
local current=$words[$CURRENT]
|
||||
if (( CURRENT > NORMARG )); then
|
||||
local predecessor=$words[(( $CURRENT - 1 ))]
|
||||
fi
|
||||
|
||||
# first arg may be a request method
|
||||
(( CURRENT == NORMARG )) &&
|
||||
_wanted http_method expl 'Request Method' \
|
||||
compadd GET POST PUT DELETE HEAD OPTIONS PATCH TRACE CONNECT && ret=0
|
||||
|
||||
|
||||
if (( CURRENT == NORMARG + 0 )); then
|
||||
_httpie_method && ret=0
|
||||
fi
|
||||
if (( CURRENT == NORMARG + 0 )); then
|
||||
_httpie_url && ret=0
|
||||
fi
|
||||
if (( CURRENT == NORMARG + 1 )) && [[ ${METHODS[(ie)$predecessor]} -le ${#METHODS} ]]; then
|
||||
_httpie_url && ret=0
|
||||
fi
|
||||
if (( CURRENT >= NORMARG + 2 )) && ! [[ $current == -* ]]; then
|
||||
_httpie_request_item && ret=0
|
||||
fi
|
||||
if (( CURRENT >= NORMARG + 1 )) && ! [[ ${METHODS[(ie)$predecessor]} -le ${#METHODS} ]] && ! [[ $current == -* ]]; then
|
||||
_httpie_request_item && ret=0
|
||||
fi
|
||||
|
||||
|
||||
return $ret
|
||||
|
||||
}
|
||||
|
||||
_httpie_urls() {
|
||||
_httpie_request_item() {
|
||||
compset -P '(#b)([^:@=]#)'
|
||||
local name=$match[1]
|
||||
|
||||
if false; then
|
||||
false;
|
||||
elif compset -P ':'; then
|
||||
_message "$name HTTP Headers"
|
||||
|
||||
elif compset -P '=='; then
|
||||
_message "$name URL Parameters"
|
||||
|
||||
elif compset -P '='; then
|
||||
_message "$name Data Fields"
|
||||
|
||||
elif compset -P ':='; then
|
||||
_message "$name Raw JSON Fields"
|
||||
|
||||
elif compset -P '@'; then
|
||||
_files
|
||||
|
||||
else
|
||||
typeset -a ops
|
||||
ops=(
|
||||
"\::Arbitrary HTTP header, e.g X-API-Token:123"
|
||||
"==:Querystring parameter to the URL, e.g limit==50"
|
||||
"=:Data fields to be serialized as JSON (default) or Form Data (with --form)"
|
||||
"\:=:Data field for real JSON types."
|
||||
"@:Path field for uploading a file."
|
||||
)
|
||||
_describe -t httpparams 'parameter types' ops -Q -S ''
|
||||
fi
|
||||
return 1;
|
||||
}
|
||||
|
||||
_httpie_method() {
|
||||
_wanted http_method expl 'Request Method' \
|
||||
compadd GET POST PUT DELETE HEAD OPTIONS PATCH TRACE CONNECT && ret=0
|
||||
return 1;
|
||||
}
|
||||
|
||||
_httpie_url() {
|
||||
local ret=1
|
||||
|
||||
if ! [[ -prefix [-+.a-z0-9]#:// ]]; then
|
||||
@ -73,26 +88,6 @@ _httpie_urls() {
|
||||
return $ret
|
||||
}
|
||||
|
||||
_httpie_printflags () {
|
||||
local ret=1
|
||||
|
||||
# not sure why this is necessary, but it will complete "-pH" style without it
|
||||
[[ $IPREFIX == "-p" ]] && IPREFIX+=" "
|
||||
|
||||
compset -P '(#b)([a-zA-Z]#)'
|
||||
|
||||
local -a flags
|
||||
[[ $match[1] != *H* ]] && flags+=( "H:request headers" )
|
||||
[[ $match[1] != *B* ]] && flags+=( "B:request body" )
|
||||
[[ $match[1] != *h* ]] && flags+=( "h:response headers" )
|
||||
[[ $match[1] != *b* ]] && flags+=( "b:response body" )
|
||||
[[ $match[1] != *m* ]] && flags+=( "b:response meta" )
|
||||
|
||||
_describe -t printflags "print flags" flags -S '' && ret=0
|
||||
|
||||
return $ret
|
||||
}
|
||||
|
||||
integer NORMARG
|
||||
|
||||
_arguments -n -C -s \
|
||||
|
@ -2,55 +2,70 @@
|
||||
# Copyright (c) 2015 Github zsh-users
|
||||
# Based on the initial work of http://github.com/zsh-users
|
||||
|
||||
methods=({% for method in methods -%} "{{ method }}" {% endfor -%})
|
||||
METHODS=({% for method in methods -%} "{{ method }}" {% endfor -%})
|
||||
|
||||
_httpie_params () {
|
||||
local ret=1 expl
|
||||
local first_arg=$words[NORMARG]
|
||||
if (( CURRENT == NORMARG )) && [[ $words[NORMARG] != *:* ]]; then
|
||||
# URL
|
||||
_httpie_urls && ret=0
|
||||
elif (( CURRENT == NORMARG + 1 )) && [[ ${methods[(ie)$first_arg]} -le ${{ '{#' }}methods} ]]; then
|
||||
# When the first argument is the method, suggest the URL as well.
|
||||
_httpie_urls && ret=0
|
||||
elif (( CURRENT > NORMARG )); then
|
||||
# regular param, if we already have a url
|
||||
# ignore all prefix stuff
|
||||
compset -P '(#b)([^:@=]#)'
|
||||
local name=$match[1]
|
||||
|
||||
if false; then
|
||||
false;
|
||||
{% for option_name, _, operator, desc in request_items.nested_options -%}
|
||||
elif compset -P '{{ operator }}'; then
|
||||
{% if is_file_based_operator(operator) -%}
|
||||
_files
|
||||
{% else -%}
|
||||
_message "$name {{ option_name }}"
|
||||
{% endif %}
|
||||
{% endfor -%}
|
||||
else
|
||||
typeset -a ops
|
||||
ops=(
|
||||
{% for option_name, _, operator, desc in request_items.nested_options -%}
|
||||
"{{ escape_zsh(operator) }}:{{ desc }}"
|
||||
{% endfor -%}
|
||||
)
|
||||
_describe -t httpparams 'parameter types' ops -Q -S ''
|
||||
fi
|
||||
ret=0
|
||||
local current=$words[$CURRENT]
|
||||
if (( CURRENT > NORMARG )); then
|
||||
local predecessor=$words[(( $CURRENT - 1 ))]
|
||||
fi
|
||||
|
||||
# first arg may be a request method
|
||||
(( CURRENT == NORMARG )) &&
|
||||
_wanted http_method expl 'Request Method' \
|
||||
compadd {% for method in methods -%} {{ method }} {% endfor -%} && ret=0
|
||||
{% raw %}
|
||||
if (( CURRENT == NORMARG + 0 )); then
|
||||
_httpie_method && ret=0
|
||||
fi
|
||||
if (( CURRENT == NORMARG + 0 )); then
|
||||
_httpie_url && ret=0
|
||||
fi
|
||||
if (( CURRENT == NORMARG + 1 )) && [[ ${METHODS[(ie)$predecessor]} -le ${#METHODS} ]]; then
|
||||
_httpie_url && ret=0
|
||||
fi
|
||||
if (( CURRENT >= NORMARG + 2 )) && ! [[ $current == -* ]]; then
|
||||
_httpie_request_item && ret=0
|
||||
fi
|
||||
if (( CURRENT >= NORMARG + 1 )) && ! [[ ${METHODS[(ie)$predecessor]} -le ${#METHODS} ]] && ! [[ $current == -* ]]; then
|
||||
_httpie_request_item && ret=0
|
||||
fi
|
||||
{% endraw %}
|
||||
|
||||
return $ret
|
||||
|
||||
}
|
||||
|
||||
_httpie_urls() {
|
||||
_httpie_request_item() {
|
||||
compset -P '(#b)([^:@=]#)'
|
||||
local name=$match[1]
|
||||
|
||||
if false; then
|
||||
false;
|
||||
{% for option_name, _, operator, desc in request_items.nested_options -%}
|
||||
elif compset -P '{{ operator }}'; then
|
||||
{% if is_file_based_operator(operator) -%}
|
||||
_files
|
||||
{% else -%}
|
||||
_message "$name {{ option_name }}"
|
||||
{% endif %}
|
||||
{% endfor -%}
|
||||
else
|
||||
typeset -a ops
|
||||
ops=(
|
||||
{% for option_name, _, operator, desc in request_items.nested_options -%}
|
||||
"{{ escape_zsh(operator) }}:{{ desc }}"
|
||||
{% endfor -%}
|
||||
)
|
||||
_describe -t httpparams 'parameter types' ops -Q -S ''
|
||||
fi
|
||||
return 1;
|
||||
}
|
||||
|
||||
_httpie_method() {
|
||||
_wanted http_method expl 'Request Method' \
|
||||
compadd {% for method in methods -%} {{ method }} {% endfor -%} && ret=0
|
||||
return 1;
|
||||
}
|
||||
|
||||
_httpie_url() {
|
||||
local ret=1
|
||||
|
||||
if ! [[ -prefix [-+.a-z0-9]#:// ]]; then
|
||||
@ -64,26 +79,6 @@ _httpie_urls() {
|
||||
return $ret
|
||||
}
|
||||
|
||||
_httpie_printflags () {
|
||||
local ret=1
|
||||
|
||||
# not sure why this is necessary, but it will complete "-pH" style without it
|
||||
[[ $IPREFIX == "-p" ]] && IPREFIX+=" "
|
||||
|
||||
compset -P '(#b)([a-zA-Z]#)'
|
||||
|
||||
local -a flags
|
||||
[[ $match[1] != *H* ]] && flags+=( "H:request headers" )
|
||||
[[ $match[1] != *B* ]] && flags+=( "B:request body" )
|
||||
[[ $match[1] != *h* ]] && flags+=( "h:response headers" )
|
||||
[[ $match[1] != *b* ]] && flags+=( "b:response body" )
|
||||
[[ $match[1] != *m* ]] && flags+=( "b:response meta" )
|
||||
|
||||
_describe -t printflags "print flags" flags -S '' && ret=0
|
||||
|
||||
return $ret
|
||||
}
|
||||
|
||||
integer NORMARG
|
||||
|
||||
_arguments -n -C -s \
|
||||
|
@ -35,9 +35,9 @@ def compile_zsh(node: Node) -> ...:
|
||||
|
||||
@compile_zsh.register(If)
|
||||
def compile_if(node: If) -> str:
|
||||
check = compile(node.check)
|
||||
action = compile(node.action)
|
||||
return f'if {check}; then\n {action};\nfi'
|
||||
check = compile_zsh(node.check)
|
||||
action = compile_zsh(node.action)
|
||||
return f'if {check}; then\n {action} && ret=0\nfi'
|
||||
|
||||
|
||||
@compile_zsh.register(Check)
|
||||
@ -71,14 +71,17 @@ def compile_check(node: Check) -> str:
|
||||
|
||||
@compile_zsh.register(And)
|
||||
def compile_and(node: And) -> str:
|
||||
return ' && '.join(compile(check) for check in node.checks)
|
||||
return ' && '.join(compile_zsh(check) for check in node.checks)
|
||||
|
||||
|
||||
@compile_zsh.register(Not)
|
||||
def compile_not(node: Not) -> str:
|
||||
return f'! {compile(node.check)}'
|
||||
return f'! {compile_zsh(node.check)}'
|
||||
|
||||
|
||||
@compile_zsh.register(Suggest)
|
||||
def compile_suggest(node: Suggest) -> str:
|
||||
return SUGGESTION_TO_FUNCTION[node.suggestion]
|
||||
|
||||
for item in main_flow():
|
||||
print(compile_zsh(item))
|
||||
|
Loading…
Reference in New Issue
Block a user