diff options
| author | ruki <[email protected]> | 2019-07-16 17:28:30 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2019-07-16 17:28:30 +0800 |
| commit | 0724fda9aa61ee9d2b39198559a08cd22064d7a3 (patch) | |
| tree | 1dc6c47bc57d31c41fd11fa9d82ebe166a7cd9c5 /xmake/core | |
| parent | d6be8e7effeca32a035ce89f1d02c28501b6a839 (diff) | |
| parent | 18714381a6257fd93c93344cb559fc409f6b1017 (diff) | |
Merge pull request #486 from OpportunityLiu/dev
Improve dump & fix vsxmake
Diffstat (limited to 'xmake/core')
| -rw-r--r-- | xmake/core/base/dump.lua | 47 | ||||
| -rw-r--r-- | xmake/core/base/utils.lua | 8 | ||||
| -rw-r--r-- | xmake/core/sandbox/modules/import/core/sandbox/sandbox.lua | 6 |
3 files changed, 43 insertions, 18 deletions
diff --git a/xmake/core/base/dump.lua b/xmake/core/base/dump.lua index cfa25918b..dd5492879 100644 --- a/xmake/core/base/dump.lua +++ b/xmake/core/base/dump.lua @@ -23,7 +23,6 @@ local dump = dump or {} -- load modules local colors = require("base/colors") -local table = require("base/table") -- format string with theme colors function dump._format(fmtkey, fmtdefault, ...) @@ -37,7 +36,12 @@ end -- translate string with theme formats function dump._translate(str) - return colors.translate(str, { patch_reset = false, ignore_unknown = true }) + local theme = colors.theme() + if theme then + return colors.translate(str, { patch_reset = false, ignore_unknown = true }) + else + return colors.ignore(str) + end end -- print string @@ -82,17 +86,17 @@ end -- print value with default format function dump._print_default(value) - io.write(dump._translate("${reset}${color.dump.default}"), dump._format("text.dump.default_format", "<%s>", value), dump._translate("${reset}")) + io.write(dump._translate("${reset}${color.dump.default}"), dump._format("text.dump.default_format", "%s", value), dump._translate("${reset}")) end -- print udata value with scalar format function dump._print_udata_scalar(value) - io.write(dump._translate("${reset}${color.dump.udata}"), dump._format("text.dump.udata_format", "[%s]", value), dump._translate("${reset}")) + io.write(dump._translate("${reset}${color.dump.udata}"), dump._format("text.dump.udata_format", "%s", value), dump._translate("${reset}")) end -- print table value with scalar format function dump._print_table_scalar(value) - io.write(dump._translate("${reset}${color.dump.table}"), dump._format("text.dump.table_format", "{%s}", value), dump._translate("${reset}")) + io.write(dump._translate("${reset}${color.dump.table}"), dump._format("text.dump.table_format", "%s", value), dump._translate("${reset}")) end -- print scalar value @@ -205,10 +209,26 @@ function dump._print_metatable(value, metatable, inner_indent, printed_set, prin return has_record end +-- returns printed_set, is_first_level +function dump._init_printed_set(printed_set) + local first_level = not printed_set + if type(printed_set) ~= "table" then + printed_set = { len = 0 } + end + return printed_set, first_level +end + -- print udata -function dump._print_udata(value, first_indent, remain_indent) +function dump._print_udata(value, first_indent, remain_indent, printed_set) + local first_level + printed_set, first_level = dump._init_printed_set(printed_set) io.write(first_indent) + + if not first_level then + return dump._print_udata_scalar(value) + end + local metatable = getmetatable(value) local inner_indent = remain_indent .. " " @@ -216,7 +236,7 @@ function dump._print_udata(value, first_indent, remain_indent) io.write(dump._translate("${reset}${color.dump.udata}[${reset}")) -- print metatable - local no_value = not dump._print_metatable(value, metatable, inner_indent, { len = 0 }, false) + local no_value = not dump._print_metatable(value, metatable, inner_indent, printed_set, false) -- print close brackets if no_value then @@ -229,7 +249,8 @@ end -- print table function dump._print_table(value, first_indent, remain_indent, printed_set) - local first_level = not printed_set + local first_level + printed_set, first_level = dump._init_printed_set(printed_set) io.write(first_indent) local metatable = getmetatable(value) local tostringmethod = metatable and rawget(metatable, "__tostring") @@ -239,7 +260,7 @@ function dump._print_table(value, first_indent, remain_indent, printed_set) return dump._print_table_scalar(strrep) end end - printed_set = printed_set or { len = 0 } + local inner_indent = remain_indent .. " " local first_value = true @@ -260,7 +281,7 @@ function dump._print_table(value, first_indent, remain_indent, printed_set) end -- print array items - local is_arr = table.is_array(value) and (table.maxn(value) < 2 * #value) + local is_arr = (value[1] ~= nil) and (table.maxn(value) < 2 * #value) if is_arr then for i = 1,table.maxn(value) do print_newline() @@ -306,12 +327,12 @@ function dump._print_table(value, first_indent, remain_indent, printed_set) end -- print value -function dump._print(value, indent) +function dump._print(value, indent, verbose) indent = tostring(indent or "") if type(value) == "table" then - dump._print_table(value, indent, indent:gsub(".", " "), nil) + dump._print_table(value, indent, indent:gsub(".", " "), not verbose) elseif type(value) == "userdata" then - dump._print_udata(value, indent, indent:gsub(".", " ")) + dump._print_udata(value, indent, indent:gsub(".", " "), not verbose) else io.write(indent) dump._print_scalar(value) diff --git a/xmake/core/base/utils.lua b/xmake/core/base/utils.lua index d8f1ec7c2..5b0c68a5e 100644 --- a/xmake/core/base/utils.lua +++ b/xmake/core/base/utils.lua @@ -35,8 +35,10 @@ function utils.dump(...) return ... end + local diagnosis = option.get("diagnosis") + -- show caller info - if option.get("diagnosis") then + if diagnosis then local info = debug.getinfo(2) local line = info.currentline if not line or line < 0 then line = info.linedefined end @@ -58,11 +60,11 @@ function utils.dump(...) end if values_count == 1 then - dump(values[1], indent or "") + dump(values[1], indent or "", diagnosis) io.write("\n") else for i = 1, values_count do - dump(values[i], indent or string.format("%2d: ", i)) + dump(values[i], indent or string.format("%2d: ", i), diagnosis) io.write("\n") end end diff --git a/xmake/core/sandbox/modules/import/core/sandbox/sandbox.lua b/xmake/core/sandbox/modules/import/core/sandbox/sandbox.lua index 5aa55a0c6..a6f19f93d 100644 --- a/xmake/core/sandbox/modules/import/core/sandbox/sandbox.lua +++ b/xmake/core/sandbox/modules/import/core/sandbox/sandbox.lua @@ -30,14 +30,16 @@ local utils = require("base/utils") local table = require("base/table") local history = require("project/history") local dump = require("base/dump") +local option = require("base/option") -- print variables for interactive mode function sandbox_core_sandbox._interactive_dump(...) + local diagnosis = option.get("diagnosis") local values = table.pack(...) -- do not use #values since nil might be included local n = values.n if n <= 1 then - dump(values[1], "< ") + dump(values[1], "< ", diagnosis) io.write("\n") else local fmt = "< %d: " @@ -50,7 +52,7 @@ function sandbox_core_sandbox._interactive_dump(...) fmt = "< %2d: " end for i = 1, n do - dump(values[i], string.format(fmt, i)) + dump(values[i], string.format(fmt, i), diagnosis) io.write("\n") end end |
