In fact *after* I wrote the email I actually thought about that.
IMHO we need to have a method which gave us only the LOC of the “side” we are
interested in, i.e., there is no way to access only the LOC of the instance
side and for me this is wrong. Something like
actualLinesOfCode
^ self localMethods inject: 0 into: [:sum :each | sum + each
linesOfCode].
and then
linesOfCode
"An approximate measure of lines of code.
Includes comments, but excludes blank lines."
| lines |
lines := self actualLinesOfCode
^ self isMeta
ifTrue: [lines]
ifFalse: [lines + self class linesOfCode]
So that one can invoke Object>>#linesOfCode and have the current behavior, or
Object>>#actualLinesOfCode and have just the instance side lines of code, and
Object class>>#actualLinesOfCode and get only the meta-lines of code.
Cheers,
R
On Nov 15, 2013, at 2:30 PM, Marcus Denker <[email protected]> wrote:
>
> On 15 Nov 2013, at 14:18, Marcus Denker <[email protected]> wrote:
>
>>
>> On 15 Nov 2013, at 14:07, Roberto Minelli <[email protected]> wrote:
>>
>>> Hi,
>>>
>>> I looked at the implementation of #linesOfCode of ClassDescription. It is
>>> actually wrong, a correct version should be:
>>>
>>> linesOfCode
>>> "An approximate measure of lines of code. Includes comments, but
>>> excludes blank lines."
>>> | lines |
>>>
>>> lines := self localMethods inject: 0 into: [:sum :each | sum + each
>>> linesOfCode].
>>> ^ self isMeta not
>>> ifTrue: [lines]
>>> ifFalse: [lines + self class linesOfCode]
>>>
>>
>> indeed!
>>
> Hmm… not that sure after thinking about it.
>
> On the meta side, we just take the linesOfCode of all methods. On the
> instance side, we take the linesOfCode of all method *and* the
> ones of the meta.
>
> When you call
>
> Object linesOfCode
>
> this means it takes
>
> linesOfCode of Instance Side + linesOfCode of class side of Object
>
> which seems ok.
>
> Marcus
>