Skip to content

Instantly share code, notes, and snippets.

@Srlion
Created November 26, 2025 19:56
Show Gist options
  • Select an option

  • Save Srlion/b1877c6575778664f81f83c9498e8549 to your computer and use it in GitHub Desktop.

Select an option

Save Srlion/b1877c6575778664f81f83c9498e8549 to your computer and use it in GitHub Desktop.
Pretty Print
---@format disable
local function pprint(...)
local seen = {}
local C = {}
for k,v in pairs({
str="96FF96", num="64C8FF", bool="FF96C8", func="C896FF",
tbl="FFDC64", key="FFA050", nil_="969696", ent="FF6464",
ply="64FFFF", vec="64FFC8", clr="FF64B4", w="FFFFFF"
}) do C[k] = HexToColor("#"..v) end
local function p(v, i)
local t, pad = type(v), (" "):rep(i or 0)
if IsColor(v) then
MsgC(C.w, "Color(") MsgC(C.clr, v.r) MsgC(C.w, ", ") MsgC(C.clr, v.g) MsgC(C.w, ", ") MsgC(C.clr, v.b)
if v.a ~= 255 then MsgC(C.w, ", ") MsgC(C.clr, v.a) end
MsgC(C.w, ")")
elseif t == "string" then MsgC(C.str, '"'..v..'"')
elseif t == "number" then MsgC(C.num, v)
elseif t == "boolean" then MsgC(C.bool, tostring(v))
elseif t == "nil" then MsgC(C.nil_, "nil")
elseif t == "function" then MsgC(C.func, tostring(v))
elseif t == "table" then
if seen[v] then MsgC(C.tbl, "*ref*") return end
seen[v] = true
MsgC(C.tbl, "{\n")
for k, x in pairs(v) do
MsgC(C.nil_, pad.." [") p(k) MsgC(C.nil_, "] = ")
p(x, (i or 0) + 1) MsgC(C.nil_, ",\n")
end
MsgC(C.nil_, pad) MsgC(C.tbl, "}")
elseif t == "Vector" then
MsgC(C.w, "Vector(") MsgC(C.vec, v.x) MsgC(C.w, ", ") MsgC(C.vec, v.y) MsgC(C.w, ", ") MsgC(C.vec, v.z) MsgC(C.w, ")")
elseif t == "Angle" then
MsgC(C.w, "Angle(") MsgC(C.vec, v.p) MsgC(C.w, ", ") MsgC(C.vec, v.y) MsgC(C.w, ", ") MsgC(C.vec, v.r) MsgC(C.w, ")")
elseif t == "Player" then
MsgC(C.w, "Player(") MsgC(C.ply, v:EntIndex()) MsgC(C.w, "-") MsgC(C.ply, v:Nick()) MsgC(C.w, ")")
elseif isentity(v) then
if v:IsWorld() then MsgC(C.w, "Entity(") MsgC(C.ent, "World") MsgC(C.w, ")")
elseif not IsValid(v) then MsgC(C.w, "Entity(") MsgC(C.ent, "NULL") MsgC(C.w, ")")
else MsgC(C.w, "Entity(") MsgC(C.ent, v:EntIndex()) MsgC(C.w, ")") end
else MsgC(C.nil_, tostring(v)) end
end
for i, v in ipairs({...}) do if i > 1 then MsgC(C.nil_, " ") end p(v) end
MsgC(C.nil_, "\n")
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment