diff options
| author | Meha555 <[email protected]> | 2026-06-05 22:39:37 +0800 |
|---|---|---|
| committer | Meha555 <[email protected]> | 2026-06-05 22:59:54 +0800 |
| commit | 70c73fe03cde67fd85e082cbdd2be3a406181b1b (patch) | |
| tree | 2c77ced41d326b66dac5b72e4594c5844db16af8 | |
| parent | 2245e0b6ed0f954aae1dafe225c2b436ae98cfcd (diff) | |
Enable `xmake show --format=json`
Fix: #7585
| -rw-r--r-- | tests/plugins/show/test.lua | 21 | ||||
| -rw-r--r-- | xmake/plugins/show/showlist.lua | 8 |
2 files changed, 27 insertions, 2 deletions
diff --git a/tests/plugins/show/test.lua b/tests/plugins/show/test.lua index dea98c204..d7a59727a 100644 --- a/tests/plugins/show/test.lua +++ b/tests/plugins/show/test.lua @@ -1,5 +1,26 @@ import("core.base.json") +function test_list_targets_json_format(t) + local outdata = os.iorunv("xmake", {"show", "-l", "targets", "--format=json"}) + local targets = json.decode(outdata) + + t:require(table.contains(targets, "app")) + t:require(table.contains(targets, "core")) + t:require(table.contains(targets, "ui")) +end + +function test_list_targets_plain_format(t) + local outdata = os.iorunv("xmake", {"show", "-l", "targets", "--format=plain"}) + t:require(outdata:find("app", 1, true)) + t:require(outdata:find("core", 1, true)) + t:require(outdata:find("ui", 1, true)) +end + +function test_list_targets_unsupported_format(t) + local ok = try { function () os.execv("xmake", {"show", "-l", "targets", "--format=dot"}) end } + t:require(not ok) +end + function test_depgraph_json(t) local outdata = os.iorunv("xmake", {"show", "--info=depgraph", "--json"}) local graph = json.decode(outdata) diff --git a/xmake/plugins/show/showlist.lua b/xmake/plugins/show/showlist.lua index 205ae21ed..6adda6bd0 100644 --- a/xmake/plugins/show/showlist.lua +++ b/xmake/plugins/show/showlist.lua @@ -49,9 +49,11 @@ function _show_json(values) end function main(values) - if option.get("json") then + local format = option.get("format") + -- List providers only support plain text and JSON output. + if option.get("json") or format == "json" then _show_json(values) - else + elseif format == nil or format == "plain" then if table.is_dictionary(values) then for k, v in pairs(values) do cprint("${bright}%s:", k) @@ -60,5 +62,7 @@ function main(values) else _show_text(values) end + else + raise("unsupported list output format: %s", format) end end |
