mirror of
https://github.com/stedolan/jq.git
synced 2024-05-11 05:55:39 +00:00
Add filename/line functions to jq (fix #753)
This adds `input_filename` and `input_line_number` built-in functions
for use in, for example, `error` messages.
Example:
$ printf '{"a":1}\n{"a":2}\n' > 4.json
$ printf '{"a":"hello"}\n' > 5.json
$ ./jq '{ "file":input_filename, "line":input_line_number, "value":.a }' 4.json 5.json
{
"file": "4.json",
"line": 1,
"value": 1
}
{
"file": "4.json",
"line": 2,
"value": 2
}
{
"file": "5.json",
"line": 1,
"value": "hello"
}
This commit is contained in:
committed by
Nicolas Williams
parent
c7f063188f
commit
d1cb8ee0ad
23
util.c
23
util.c
@@ -341,6 +341,29 @@ jv jq_util_input_get_position(jq_state *jq) {
|
||||
return v;
|
||||
}
|
||||
|
||||
jv jq_util_input_get_current_filename(jq_state* jq) {
|
||||
jq_input_cb cb=NULL;
|
||||
void *cb_data=NULL;
|
||||
jq_get_input_cb(jq, &cb, &cb_data);
|
||||
if (cb != jq_util_input_next_input_cb)
|
||||
return jv_invalid_with_msg(jv_string("Unknown input filename"));
|
||||
jq_util_input_state s = (jq_util_input_state)cb_data;
|
||||
jv v = jv_copy(s->current_filename);
|
||||
return v;
|
||||
}
|
||||
|
||||
jv jq_util_input_get_current_line(jq_state* jq) {
|
||||
jq_input_cb cb=NULL;
|
||||
void *cb_data=NULL;
|
||||
jq_get_input_cb(jq, &cb, &cb_data);
|
||||
if (cb != jq_util_input_next_input_cb)
|
||||
return jv_invalid_with_msg(jv_string("Unknown input line number"));
|
||||
jq_util_input_state s = (jq_util_input_state)cb_data;
|
||||
jv v = jv_number(s->current_line);
|
||||
return v;
|
||||
}
|
||||
|
||||
|
||||
// Blocks to read one more input from stdin and/or given files
|
||||
// When slurping, it returns just one value
|
||||
jv jq_util_input_next_input(jq_util_input_state state) {
|
||||
|
||||
Reference in New Issue
Block a user