refactor: extract some functions from Argcfile.sh to scripts (#38)
This commit is contained in:
@@ -1,4 +1,6 @@
|
|||||||
/tmp
|
/tmp
|
||||||
|
functions.txt
|
||||||
|
bots.txt
|
||||||
tools.txt
|
tools.txt
|
||||||
functions.json
|
functions.json
|
||||||
/bin
|
/bin
|
||||||
|
|||||||
+4
-60
@@ -292,9 +292,9 @@ EOF
|
|||||||
_ask_json_data() {
|
_ask_json_data() {
|
||||||
declaration="$1"
|
declaration="$1"
|
||||||
echo 'Missing the JSON data but here are its properties:'
|
echo 'Missing the JSON data but here are its properties:'
|
||||||
echo "$declaration" | _inspect_declaration_params | sed 's/^/> /'
|
echo "$declaration" | ./scripts/declarations-util.sh pretty-print | sed -n '2,$s/^/>/p'
|
||||||
echo 'Generate placeholder data:'
|
echo 'Generate placeholder data:'
|
||||||
data="$(echo "$declaration" | _generate_data_according_declaration)"
|
data="$(echo "$declaration" | _declarations_json_data)"
|
||||||
echo "> $data"
|
echo "> $data"
|
||||||
read -r -p 'Use the generated data? (y/n) ' res
|
read -r -p 'Use the generated data? (y/n) ' res
|
||||||
case "$res" in
|
case "$res" in
|
||||||
@@ -308,64 +308,8 @@ _ask_json_data() {
|
|||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
_inspect_declaration_params() {
|
_declarations_json_data() {
|
||||||
jq -r '
|
./scripts/declarations-util.sh generate-json | tail -n +2
|
||||||
def get_indicator:
|
|
||||||
.value.type as $type |
|
|
||||||
[
|
|
||||||
{ condition: ($type == "array" and .required), result: "+" },
|
|
||||||
{ condition: ($type == "array"), result: "*" },
|
|
||||||
{ condition: .required, result: "!" },
|
|
||||||
{ condition: true, result: "" }
|
|
||||||
] | map(select(.condition) | .result) | first;
|
|
||||||
|
|
||||||
def get_kind:
|
|
||||||
.value.type as $type |
|
|
||||||
(.value.enum // []) as $enum |
|
|
||||||
([
|
|
||||||
{ condition: ($type == "array"), result: "string[]" },
|
|
||||||
{ condition: ($type == "string" and ($enum | length > 0)), result: ($enum | join("|")) },
|
|
||||||
{ condition: ($type == "string"), result: "" },
|
|
||||||
{ condition: true, result: $type }
|
|
||||||
] | map(select(.condition) | .result) | first) as $kind |
|
|
||||||
if $kind != "" then "(\($kind))" else "" end;
|
|
||||||
|
|
||||||
def print_property:
|
|
||||||
.key as $key |
|
|
||||||
(.value.description | split("\n")[0]) as $description |
|
|
||||||
(. | get_kind) as $kind |
|
|
||||||
(. | get_indicator) as $indicator |
|
|
||||||
"\($key)\($kind)\($indicator): \($description)";
|
|
||||||
|
|
||||||
.parameters |
|
|
||||||
.required as $requiredProperties |
|
|
||||||
.properties | to_entries[] |
|
|
||||||
.key as $key | .+ { "required": ($requiredProperties | index($key) != null) } |
|
|
||||||
print_property
|
|
||||||
'
|
|
||||||
}
|
|
||||||
|
|
||||||
_generate_data_according_declaration() {
|
|
||||||
jq -c '
|
|
||||||
def convert_string:
|
|
||||||
if has("enum") then .enum[0] else "foo" end;
|
|
||||||
|
|
||||||
def convert_property:
|
|
||||||
.key as $key |
|
|
||||||
.value.type as $type |
|
|
||||||
[
|
|
||||||
{ condition: ($type == "string"), result: { $key: (.value | convert_string) }},
|
|
||||||
{ condition: ($type == "boolean"), result: { $key: false }},
|
|
||||||
{ condition: ($type == "integer"), result: { $key: 42 }},
|
|
||||||
{ condition: ($type == "number"), result: { $key: 3.14 }},
|
|
||||||
{ condition: ($type == "array"), result: { $key: [ "v1" ] } }
|
|
||||||
] | map(select(.condition) | .result) | first;
|
|
||||||
|
|
||||||
.parameters |
|
|
||||||
[
|
|
||||||
.properties | to_entries[] | convert_property
|
|
||||||
] | add // {}
|
|
||||||
'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_normalize_path() {
|
_normalize_path() {
|
||||||
|
|||||||
Regular → Executable
Regular → Executable
Executable
+133
@@ -0,0 +1,133 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# @cmd Pretty print declarations
|
||||||
|
#
|
||||||
|
# Examples:
|
||||||
|
# ./scripts/declarations.sh pretty-print functions.json
|
||||||
|
# cat functions.json | ./scripts/declarations.sh pretty-print functions.json
|
||||||
|
# @flag --no-type Do not to display param type info
|
||||||
|
# @arg json-file The json file, Read stdin if omitted
|
||||||
|
pretty-print() {
|
||||||
|
_run _pretty_print
|
||||||
|
}
|
||||||
|
|
||||||
|
# @cmd Generate placeholder json according to declarations
|
||||||
|
# Examples:
|
||||||
|
# ./scripts/declarations.sh generate-json-data functions.json
|
||||||
|
# cat functions.json | ./scripts/declarations.sh generate-json-data functions.json
|
||||||
|
# @arg json-file The json file, Read stdin if omitted
|
||||||
|
generate-json() {
|
||||||
|
_run _generate_json
|
||||||
|
}
|
||||||
|
|
||||||
|
_run() {
|
||||||
|
func="$1"
|
||||||
|
_get_declarations_data
|
||||||
|
if [[ "$json_type" == "object" ]]; then
|
||||||
|
echo "$json_data" | $func
|
||||||
|
elif [[ "$json_type" == "array" ]]; then
|
||||||
|
for i in $(seq 1 $json_array_len); do
|
||||||
|
echo "$json_data" | jq '.['$((i-1))']' | $func
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_get_declarations_data() {
|
||||||
|
if [[ -f "$argc_json_file" ]]; then
|
||||||
|
json_data="$(cat "$argc_json_file")"
|
||||||
|
else
|
||||||
|
json_data="$(cat)"
|
||||||
|
fi
|
||||||
|
json_type="$(echo "$json_data" | jq -r '
|
||||||
|
if type == "array" then
|
||||||
|
(. | length) as $len | "array;\($len)"
|
||||||
|
else
|
||||||
|
if type == "object" then
|
||||||
|
type
|
||||||
|
else
|
||||||
|
""
|
||||||
|
end
|
||||||
|
end
|
||||||
|
' 2>/dev/null || true)"
|
||||||
|
if [[ "$json_type" == *object* ]]; then
|
||||||
|
:;
|
||||||
|
elif [[ "$json_type" == *array* ]]; then
|
||||||
|
json_array_len="${json_type#*;}"
|
||||||
|
json_type="${json_type%%;*}"
|
||||||
|
if [[ ! "$json_array_len" -gt 0 ]]; then
|
||||||
|
json_type=""
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ -z "$json_type" ]]; then
|
||||||
|
echo "invalid JSON data"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_pretty_print() {
|
||||||
|
jq --arg no_type "$argc_no_type" -r '
|
||||||
|
def get_type:
|
||||||
|
.value.type as $type |
|
||||||
|
(if .required then "" else "?" end) as $symbol |
|
||||||
|
(.value.enum // []) as $enum |
|
||||||
|
([
|
||||||
|
{ condition: ($type == "array"), result: "string[]" },
|
||||||
|
{ condition: ($type == "string" and ($enum | length > 0)), result: ($enum | join("|")) },
|
||||||
|
{ condition: ($type == "string"), result: "" },
|
||||||
|
{ condition: true, result: $type }
|
||||||
|
] | map(select(.condition) | .result) | first) as $kind |
|
||||||
|
if $kind != "" then "(\($kind))\($symbol)" else $symbol end;
|
||||||
|
|
||||||
|
def oneline_description: split("\n")[0];
|
||||||
|
|
||||||
|
def parse_property:
|
||||||
|
.key as $key |
|
||||||
|
(.value.description | oneline_description) as $description |
|
||||||
|
(if $no_type != "1" then (. | get_type) else "" end) as $type |
|
||||||
|
" \($key)\($type): \($description)";
|
||||||
|
|
||||||
|
def print_params:
|
||||||
|
.parameters |
|
||||||
|
.required as $requiredProperties |
|
||||||
|
.properties | to_entries[] |
|
||||||
|
.key as $key | .+ { "required": ($requiredProperties | index($key) != null) } |
|
||||||
|
parse_property;
|
||||||
|
|
||||||
|
def print_title:
|
||||||
|
(.description | oneline_description) as $description |
|
||||||
|
"\(.name): \($description)";
|
||||||
|
|
||||||
|
print_title, print_params
|
||||||
|
'
|
||||||
|
}
|
||||||
|
|
||||||
|
_generate_json() {
|
||||||
|
jq -r -c '
|
||||||
|
def convert_string:
|
||||||
|
if has("enum") then .enum[0] else "foo" end;
|
||||||
|
|
||||||
|
def parse_property:
|
||||||
|
.key as $key |
|
||||||
|
.value.type as $type |
|
||||||
|
[
|
||||||
|
{ condition: ($type == "string"), result: { $key: (.value | convert_string) }},
|
||||||
|
{ condition: ($type == "boolean"), result: { $key: false }},
|
||||||
|
{ condition: ($type == "integer"), result: { $key: 42 }},
|
||||||
|
{ condition: ($type == "number"), result: { $key: 3.14 }},
|
||||||
|
{ condition: ($type == "array"), result: { $key: [ "v1" ] } }
|
||||||
|
] | map(select(.condition) | .result) | first;
|
||||||
|
|
||||||
|
.name,
|
||||||
|
(
|
||||||
|
.parameters |
|
||||||
|
[
|
||||||
|
.properties | to_entries[] | parse_property
|
||||||
|
] | add // {}
|
||||||
|
)
|
||||||
|
'
|
||||||
|
}
|
||||||
|
|
||||||
|
# See more details at https://github.com/sigoden/argc
|
||||||
|
eval "$(argc --argc-eval "$0" "$@")"
|
||||||
Reference in New Issue
Block a user