35 lines
861 B
Ruby
35 lines
861 B
Ruby
module CodeRay
|
|
module Encoders
|
|
|
|
# Counts the LoC (Lines of Code). Returns an Integer >= 0.
|
|
#
|
|
# Everything that is not comment, markup, doctype/shebang, or an empty line,
|
|
# is considered to be code.
|
|
#
|
|
# For example,
|
|
# * HTML files not containing JavaScript have 0 LoC
|
|
# * in a Java class without comments, LoC is the number of non-empty lines
|
|
#
|
|
# A Scanner class should define the token kinds that are not code in the
|
|
# KINDS_NOT_LOC constant.
|
|
class LinesOfCode < Encoder
|
|
|
|
register_for :lines_of_code
|
|
|
|
NON_EMPTY_LINE = /^\s*\S.*$/
|
|
|
|
def compile tokens, options
|
|
kinds_not_loc = tokens.scanner.class::KINDS_NOT_LOC
|
|
code = tokens.token_class_filter :exclude => kinds_not_loc
|
|
@loc = code.text.scan(NON_EMPTY_LINE).size
|
|
end
|
|
|
|
def finish options
|
|
@loc
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
end
|