summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2026-06-06 14:51:02 +0800
committerGitHub <[email protected]>2026-06-06 14:51:02 +0800
commit7321e2c79352c7c03d304b2f81775e8b4e94d212 (patch)
tree18971b50facd07948e673bc4bc0fb9ab5c76a9aa
parent2245e0b6ed0f954aae1dafe225c2b436ae98cfcd (diff)
parent88c1ce87032df1c1f215cadaf6fff8a7958b06b8 (diff)
Merge pull request #7587 from Meha555/fix/enable-show-format-json
Enable `xmake show --format=json`
-rw-r--r--tests/plugins/show/test.lua21
-rw-r--r--xmake/plugins/show/showlist.lua8
2 files changed, 27 insertions, 2 deletions
diff --git a/tests/plugins/show/test.lua b/tests/plugins/show/test.lua
index dea98c204..d7cb35953 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.iorunv("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