Lmod Code Conventions¶
This section is meant to be a secret decoder ring, a trail map when traveling through the code of Lmod.
Variable Naming¶
The key data structure in Lua is table which can implement both a dictionary or an array. In Lmod, when a table is used as an array it is decorated with a trailing A (e.g. moduleA, argA). When a table is used as a hash table (aka a dictionary) then it has a trailing T (e.g. varT, spiderT). Note that temporary loop variable typically do not follow this convention. Names like a, aa, b, c are used for temporary arrays and t, tt are used for temporary tables.
Class names are written in camel case that starts with a uppercase letter (e.g MName, Cosmic, FrameStk) and an instance start with a lowercase letter (e.g mname, cosmic, frameStk)
Function Naming and location¶
Functions named l_something () like l_lazyEval () are local functions
and can only be called from inside that *.lua file. This helps in tracking
where changes to a function. Names without a leading l_ are global in scope.
If they are not in a separate file like collectFileA.lua or loadModuleFile.lua
they are typically found in src/util.lua
Design Pattern usage in Lmod¶
Three design patterns are used in Lmod:
Singletons: Reference a single object instance no matter how many time a class is contructed. This is used extensively throughout the code base.
Factories: Factories are used build the derived objects from a base case. Examples include building
mcpandshellinstances.Template pattern: In l_lazyEval routine, Lmod loops over derived functions complete the search for a modulefile from the module name given.