From e855a583b3b672fc216d7d0be77e19622f9c466e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20C=C3=A9sar=20Su=C3=A1stegui?= Date: Tue, 21 Jul 2026 00:23:23 -0600 Subject: [PATCH] fix: preserve bracketed and empty scalar values --- jc/parsers/typeset.py | 2 +- tests/fixtures/generic/typeset--plain.json | 2 +- tests/fixtures/generic/typeset--scalar-edge-values.json | 1 + tests/fixtures/generic/typeset--scalar-edge-values.out | 5 +++++ 4 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 tests/fixtures/generic/typeset--scalar-edge-values.json create mode 100644 tests/fixtures/generic/typeset--scalar-edge-values.out diff --git a/jc/parsers/typeset.py b/jc/parsers/typeset.py index 85d5a6f5..b03dee36 100644 --- a/jc/parsers/typeset.py +++ b/jc/parsers/typeset.py @@ -133,7 +133,7 @@ class info(): __version__ = info.version -VAR_DEF_PATTERN = re.compile(r'(?P[a-zA-Z_][a-zA-Z0-9_]*)=(?P[^(][^[].+)$') +VAR_DEF_PATTERN = re.compile(r'(?P[a-zA-Z_][a-zA-Z0-9_]*)=(?P[^(].*)$') SIMPLE_ARRAY_DEF_PATTERN = re.compile(r'(?P[a-zA-Z_][a-zA-Z0-9_]*)=(?P\(\[\d+\]=.+\))$') ASSOCIATIVE_ARRAY_DEF_PATTERN = re.compile(r'(?P[a-zA-Z_][a-zA-Z0-9_]*)=(?P\(\[[a-zA-Z_][a-zA-Z0-9_]*\]=.+\))$') EMPTY_ARRAY_DEF_PATTERN = re.compile(r'(?P[a-zA-Z_][a-zA-Z0-9_]*)=\(\)$') diff --git a/tests/fixtures/generic/typeset--plain.json b/tests/fixtures/generic/typeset--plain.json index 2182ae53..320af6ae 100644 --- a/tests/fixtures/generic/typeset--plain.json +++ b/tests/fixtures/generic/typeset--plain.json @@ -1 +1 @@ -[{"name":"BASHOPTS","value":"checkwinsize:cmdhist:complete_fullquote:expand_aliases:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"BASH_ALIASES","value":[],"type":"array","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"BASH_VERSINFO","value":["5","3","9","1","release","aarch64-apple-darwin24.6.0"],"type":"array","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"BASH_VERSION","value":"'5.3.9(1)-release'","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"IFS","value":"$' \\t\\n'","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"INFOPATH","value":"/opt/homebrew/share/info:","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"JC_COLORS","value":"cyan,default,default,default","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"PS1","value":"'\\s-\\v\\$ '","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"PS2","value":"'> '","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"PS4","value":"'+ '","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"TERM_PROGRAM_VERSION","value":"455.1","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"TERM_SESSION_ID","value":"E5896C5D-9C9A-4178-9246-00158A3F832F","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"XPC_FLAGS","value":"0x0","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"associative_array","value":{"key2":"abc","key3":"1 2 3","key1":"hello \"world\""},"type":"associative","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"integers_array","value":["1","100","999"],"type":"array","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"simple_array","value":["hello \"world\"","abc","1 2 3"],"type":"array","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"uppercase_array","value":["ABC","123","XYZ"],"type":"array","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null}] +[{"name":"BASHOPTS","value":"checkwinsize:cmdhist:complete_fullquote:expand_aliases:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"BASH_ALIASES","value":[],"type":"array","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"BASH_VERSINFO","value":["5","3","9","1","release","aarch64-apple-darwin24.6.0"],"type":"array","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"BASH_VERSION","value":"'5.3.9(1)-release'","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"COLUMNS","value":"92","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"IFS","value":"$' \\t\\n'","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"INFOPATH","value":"/opt/homebrew/share/info:","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"JC_COLORS","value":"cyan,default,default,default","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"PS1","value":"'\\s-\\v\\$ '","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"PS2","value":"'> '","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"PS4","value":"'+ '","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"TERM_PROGRAM_VERSION","value":"455.1","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"TERM_SESSION_ID","value":"E5896C5D-9C9A-4178-9246-00158A3F832F","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"XPC_FLAGS","value":"0x0","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"_","value":"-a","type":"variable","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"associative_array","value":{"key2":"abc","key3":"1 2 3","key1":"hello \"world\""},"type":"associative","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"integers_array","value":["1","100","999"],"type":"array","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"simple_array","value":["hello \"world\"","abc","1 2 3"],"type":"array","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null},{"name":"uppercase_array","value":["ABC","123","XYZ"],"type":"array","readonly":null,"integer":null,"lowercase":null,"uppercase":null,"exported":null}] diff --git a/tests/fixtures/generic/typeset--scalar-edge-values.json b/tests/fixtures/generic/typeset--scalar-edge-values.json new file mode 100644 index 00000000..7460ffd0 --- /dev/null +++ b/tests/fixtures/generic/typeset--scalar-edge-values.json @@ -0,0 +1 @@ +[{"name":"bracketed","value":"[x]","type":"variable","readonly":false,"integer":false,"lowercase":false,"uppercase":false,"exported":false},{"name":"empty","value":"","type":"variable","readonly":false,"integer":false,"lowercase":false,"uppercase":false,"exported":false},{"name":"one","value":"x","type":"variable","readonly":false,"integer":false,"lowercase":false,"uppercase":false,"exported":false},{"name":"two","value":"xy","type":"variable","readonly":false,"integer":false,"lowercase":false,"uppercase":false,"exported":false},{"name":"array","value":["x"],"type":"array","readonly":false,"integer":false,"lowercase":false,"uppercase":false,"exported":false}] diff --git a/tests/fixtures/generic/typeset--scalar-edge-values.out b/tests/fixtures/generic/typeset--scalar-edge-values.out new file mode 100644 index 00000000..88276a96 --- /dev/null +++ b/tests/fixtures/generic/typeset--scalar-edge-values.out @@ -0,0 +1,5 @@ +declare -- bracketed="[x]" +declare -- empty="" +declare -- one="x" +declare -- two="xy" +declare -a array=([0]="x")