代码格式化工具 |
|
免责声明:您没有义务使用此脚本!您在将代码片段或脚本粘贴到 wiki 编辑器中时可能会遇到制表符问题。此脚本旨在帮助您。希望通过使用类似的源代码格式,此 wiki 将看起来更加一致和井井有条。请不要就什么是好的格式和坏的格式引发争论。您可以随意操作。
lua -f codeformat.lua ...options...
。
--file <lua 文件>
- 要处理的 Lua 文件
--ts <大小>
- 制表符的大小,例如 --ts 4
(空格)
--in <缩进大小>
- 用于缩进的空格数。
lua -f codeformat.lua --file myfile.lua --ts 4 --in 4
用于制表符大小为 4 个空格且缩进步长为 4 个空格的文件。
此脚本适用于 Lua 5.0。(感谢更新了来自 Lua 4.0 版本的库调用的人。)
-- Lua code formatter -- Removes tabs and checks lines arent too long. -- Nick Trout -- $Header: /Tools/build/codefmt.lua 3 16/08/01 20:00 Nick $ -- For Lua 5.0 mytabs = 4 -- spaces (default) myindent = 4 -- spaces (default) codetabsize = 8 -- spaces codeindent = 2 -- spaces per indent codelinelength = 80 -- characters usage = [[ Usage: lua -f codeformat.lua ...options... Options are: --file <lua file> --ts <spaces>, tabsize: number of spaces in your tabs --in <spaces>, indent size: number of spaces for each indentation ]] function process_args() -- get args set by user in command line local t,i = {},1 while i<table.getn(arg) do local a=arg[i] if a=="--file" then t.filename,i = arg[i+1],i+2 elseif a=="--ts" then t.mytabsize,i = arg[i+1]+0,i+2 elseif a=="--in" then t.myindent,i = arg[i+1]+0,i+2 else print(usage.."Bad flag: "..a) os.exit(-1) end end return t end function readfile(f) local fh=io.open(f,"rt") local t={} while 1 do local ln=fh:read("*l") if ln then table.insert(t,ln) else break end end fh:close() return t end -- convert any leading tabs in a given string to spaces. -- the number of spaces to replace the tab by is given by args.mytabsize function convertTabsToSpaces(ln) local s,e = string.find(ln,"\t+",1) if s and s==1 then local spc = string.rep(" ",args.mytabsize*(e-s+1)) ln = spc..string.sub(ln,e+1) end return ln end -- convert any indentation to use the standard indent function indent(ln) local s,e = string.find(ln," +",1) if s==1 then local indent = (e-s+1)/args.myindent ln = string.rep(" ",codeindent*indent)..string.sub(ln,e+1) end return ln end function process(lines) for li=1,table.getn(lines) do local line=lines[li] line = convertTabsToSpaces(line) line = indent(line) -- warn if length too long local len=string.len(line) if len>codelinelength then print("-- ######## Line too long ("..len.." chars) ######## :") end print(line) end end args = process_args() if not args.filename then error(usage.."no Lua file given") end args.mytabsize = args.mytabsize or mytabs args.myindent = args.myindent or myindent process( readfile(args.filename) )