util.format: Tweak how nil values are handled
authorKim Alvefur <zash@zash.se>
Wed, 28 Nov 2018 20:36:53 +0100
changeset 9660 3da6cc927ee6
parent 9658 ede4e15a0fed
child 9661 bd75edf0e0e2
util.format: Tweak how nil values are handled Because [<nil>] seems exsessive
spec/util_format_spec.lua
util/format.lua
--- a/spec/util_format_spec.lua	Tue Nov 27 21:23:31 2018 +0100
+++ b/spec/util_format_spec.lua	Wed Nov 28 20:36:53 2018 +0100
@@ -5,6 +5,8 @@
 		it("should work", function()
 			assert.equal("hello", format("%s", "hello"));
 			assert.equal("<nil>", format("%s"));
+			assert.equal("<nil>", format("%d"));
+			assert.equal("<nil>", format("%q"));
 			assert.equal(" [<nil>]", format("", nil));
 			assert.equal("true", format("%s", true));
 			assert.equal("[true]", format("%d", true));
--- a/util/format.lua	Tue Nov 27 21:23:31 2018 +0100
+++ b/util/format.lua	Wed Nov 28 20:36:53 2018 +0100
@@ -28,13 +28,12 @@
 		if spec ~= "%%" then
 			i = i + 1;
 			local arg = args[i];
-			if arg == nil then -- special handling for nil
-				arg = "<nil>"
-				args[i] = "<nil>";
-			end
 
 			local option = spec:sub(-1);
-			if option == "q" or option == "s" then -- arg should be string
+			if arg == nil then
+				args[i] = "nil";
+				spec = "<%s>";
+			elseif option == "q" or option == "s" then -- arg should be string
 				args[i] = tostring(arg);
 			elseif type(arg) ~= "number" then -- arg isn't number as expected?
 				args[i] = tostring(arg);