Module:No globals

--

--- No globals prevents nil global variables from being written to or read. -- This module greatly reduces the chance of errors from overriding globals. -- --  To use the module, add the following code below your module table -- definition: -- --  &#010; --  --  The @{require} function sets the `arg` global in the package library when -- loading a module - see the [source code](https://git.io/JfKu8) in Scribunto -- core. To ensure Scribunto can load modules, the `arg` global is whitelisted. -- --  @script             getmetatable(_G) -- @alias              mt --  @release            stable -- @author             Jackmcbarn (Wikipedia) -- @author             Dessamator -- @attribution        Wikipedia local mt = getmetatable(_G) or {}

--- Read access restriction on @{_G} global table. -- @function           mt.__index -- @param              {table} t Global table - @{_G}. -- @param              k Indexed key. -- @error[opt,28]      {string} 'tried to read nil global $k' function mt.__index(t, k)   if k ~= 'arg' then error('Tried to read nil global ' .. tostring(k), 2) end return nil end

--- Write access restriction on @{_G} global table. -- @function           mt.__newindex -- @param              {table} t Global table - @{_G}. -- @param              k Indexed key. -- @param              v Value to be assigned. -- @error[opt,42]      {string} 'tried to write global $k' function mt.__newindex(t, k, v)   if k ~= 'arg' then error('Tried to write global ' .. tostring(k), 2) end rawset(t, k, v) end

setmetatable(_G, mt)