summaryrefslogtreecommitdiff
path: root/lib/coderay/encoders/lines_of_code.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/coderay/encoders/lines_of_code.rb')
-rw-r--r--lib/coderay/encoders/lines_of_code.rb17
1 files changed, 16 insertions, 1 deletions
diff --git a/lib/coderay/encoders/lines_of_code.rb b/lib/coderay/encoders/lines_of_code.rb
index 8ffe9dc..32c0192 100644
--- a/lib/coderay/encoders/lines_of_code.rb
+++ b/lib/coderay/encoders/lines_of_code.rb
@@ -1,12 +1,27 @@
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
- @loc = tokens.token_class_filter(:exclude => [:comment, :doctype]).text.scan(/^\s*\S.*$/).size
+ 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