Calculate class or package length in sloc
Here's a code snippet to calculate the length of a class or a package in lines of code:
ClassMethod ProjectLength(Mask As %String = "%Package%")
{
Set count = 0
Set sql = "SELECT Name "_
"FROM %Dictionary.ClassDefinition "_
"WHERE NOT Name %STARTSWITH '%sqlcq' AND Name LIKE ? AND GeneratedBy IS NULL"
Set rset = ##class(%SQL.Statement).%ExecDirect(, sql, Mask)
While rset.%Next() {
Set class = rset.%Get("Name")
Do ##class(%Compiler.UDL.TextServices).GetTextAsArray(, class, .raw)
Set lines = $ORDER(raw($CHAR(0)), -1)
Write class, $JUSTIFY("", 40-$LENGTH(class)), $JUSTIFY(lines, 7), !
Set count = count + lines
}
Write "Total ", $JUSTIFY("",34), $JUSTIFY(count, 7)
}
All classes matching Mask would be displayed.
Use example:
USER>do ##class(Utils.CLS).ProjectLength("DSW%") DSW.Installer 169 DSW.InstallerData 628 Total 797
Also available on GitHub Gist.