⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inspect.lua.svn-base

📁 本人找过多个在linux下c++的lua5.1封装库,但很少.luabind已经release的版本只支持lua5.0.这个版本是我从其cvs(svc)上取出的并支持最新的lua5.1.强烈推荐.
💻 SVN-BASE
字号:
-- base class for all inspectors-- every derived class must implement inspect()class 'inspector'  function inspector:__init(name)    self.name = name    self.warnings = {}  end  function inspector:warning(path, str)    table.insert( self.warnings, { path, str } )  end  function inspector:report()    local output = function(_,x)        local name = x[1]:string()        print(name .. ": " .. x[2])    end    local cmp = function(a,b)        return a[1]:string() < b[1]:string()    end    local violations    if table.getn(self.warnings) ~= 0 then      violations = table.getn(self.warnings) .. " violations"    else      violations = "no violations"    end    print("\n-- " .. self.name .. " [" .. violations .. "]\n")    table.sort(self.warnings, cmp)    table.foreach(self.warnings, output)  end  inspector.inspect = nil-- checks filename lengthclass 'filename_length' (inspector)  function filename_length:__init(n)    super("filename length (" .. n .. " characters)")    self.maxlen = n  end  function filename_length:inspect(path)    local n = string.len(path:leaf())      if n > self.maxlen then        self:warning(path, n .. " characters in filename")      end  end-- checks that the filename is all lowercaseclass 'filename_case' (inspector)  function filename_case:__init()    super("filename case")  end  function filename_case:inspect(path)    if string.lower(path:leaf()) ~= path:leaf() then      self:warning(path, "uppercase letters")    end  end-- checks that the file doesn't contain tabsclass 'tab_inspector' (inspector)  function tab_inspector:__init()    super("tab inspector")  end  function tab_inspector:inspect(path)    if has_endings(path:leaf(), ".hpp", ".cpp") then      for line in io.lines(path:string()) do        if string.find(line, '\t') ~= nil then          self:warning(path, "tabs in file")          return        end      end    end  end-- checks that the file doesn't contain too long linesclass 'line_length_inspector' (inspector)  function line_length_inspector:__init(n)    super("line length inspector (" .. n .. " characters)")    self.maxlen = n  end  function line_length_inspector:inspect(path)    if has_endings(path:leaf(), ".hpp", ".cpp") then      for line in io.lines(path:string()) do        if string.len(line) > self.maxlen then          self:warning(path, "lines too long " .. string.len(line))          return        end      end    end  end-- checks for unmatched #define/#undef pairsclass 'define_inspector' (inspector)  function define_inspector:__init()    super("define inspector")  end  function define_inspector:inspect(path)    if has_endings(path:leaf(), ".hpp") then      local defs = {}      for line in io.lines(path:string()) do        local pos, _, def = string.find(line, "#%s*define%s+([%w_]+)")        if pos ~= nil then defs[def] = true end        local pos, _, def = string.find(line, "#%s*undef%s+([%w_]+)")        if pos ~= nil then defs[def] = nil end      end      table.foreach(defs, function(def)              self:warning(path, def)            end)    end  end-- helper functionsfunction file_ending(name)  local pos = string.find(name, "%.")  if pos == nil then return ""  else    return string.sub(name, pos)  endendfunction has_endings(name, ...)  local ending = file_ending(name)  for _,i in arg do    if ending == i then return true end  end  return falseendfunction recurse_dir(path)  for i in path.contents do    if i:is_directory() then recurse_dir(i)    else       table.foreach(inspectors, function(_,x)              x:inspect(i)            end)      number_of_files = number_of_files + 1    end  endend-- maininspectors = { filename_length(31), filename_case(),                tab_inspector(), line_length_inspector(79),               define_inspector() }number_of_files = 0if args.n >= 3 then root = filesystem.path(args[3])else root = filesystem.initial_path() endprint("inspecting '" .. root:string() .. "' ...")recurse_dir(root)print(" ** " .. number_of_files .. " files was inspected")table.foreach(inspectors, function(_,i)        i:report()      end)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -