Class: Tailor::Rulers::MaxCodeLinesInClassRuler
- Inherits:
-
Tailor::Ruler
- Object
- Tailor::Ruler
- Tailor::Rulers::MaxCodeLinesInClassRuler
- Includes:
- LexerConstants
- Defined in:
- lib/tailor/rulers/max_code_lines_in_class_ruler.rb
Constant Summary
Constants included from LexerConstants
LexerConstants::CONTINUATION_KEYWORDS, LexerConstants::KEYWORDS_AND_MODIFIERS, LexerConstants::KEYWORDS_TO_INDENT, LexerConstants::LOOP_KEYWORDS, LexerConstants::MODIFIERS, LexerConstants::MULTILINE_OPERATORS
Instance Attribute Summary
Attributes inherited from Tailor::Ruler
Instance Method Summary collapse
- #ignored_nl_update(lexed_line, _, _) ⇒ Object
-
#initialize(config, options) ⇒ MaxCodeLinesInClassRuler
constructor
A new instance of MaxCodeLinesInClassRuler.
- #kw_update(token, _, lineno, column) ⇒ Object
-
#measure(actual_count, lineno, column) ⇒ Object
Checks to see if the actual count of code lines in the class is greater than the value in @config.
- #nl_update(lexed_line, lineno, column) ⇒ Object
Methods inherited from Tailor::Ruler
#add_child_ruler, #problem_type, #problems
Methods included from Logger::Mixin
Constructor Details
#initialize(config, options) ⇒ MaxCodeLinesInClassRuler
Returns a new instance of MaxCodeLinesInClassRuler.
9 10 11 12 13 14 15 |
# File 'lib/tailor/rulers/max_code_lines_in_class_ruler.rb', line 9 def initialize(config, ) super(config, ) add_lexer_observers(:ignored_nl, :kw, :nl) @class_start_lines = [] @kw_start_lines = [] @end_last_class = false end |
Instance Method Details
#ignored_nl_update(lexed_line, _, _) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/tailor/rulers/max_code_lines_in_class_ruler.rb', line 17 def ignored_nl_update(lexed_line, _, _) return if @class_start_lines.empty? return if lexed_line.only_spaces? return if lexed_line.comment_line? @class_start_lines.each do |line| line[:count] += 1 log "Class from line #{line[:lineno]} now at #{line[:count]} lines." end if @end_last_class measure(@class_start_lines.last[:count], @class_start_lines.last[:lineno], @class_start_lines.last[:column]) @class_start_lines.pop @end_last_class = false end end |
#kw_update(token, _, lineno, column) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/tailor/rulers/max_code_lines_in_class_ruler.rb', line 36 def kw_update(token, _, lineno, column) if token == 'class' || token == 'module' @class_start_lines << { lineno: lineno, column: column, count: 0 } log "Class start lines: #{@class_start_lines}" end unless token.modifier_keyword? || !token.keyword_to_indent? || token.do_is_for_a_loop? || token.continuation_keyword? @kw_start_lines << lineno log "Keyword start lines: #{@kw_start_lines}" end if token == 'end' log "Got 'end' of class/module." unless @class_start_lines.empty? if @class_start_lines.last[:lineno] == @kw_start_lines.last msg = "Class/module from line #{@class_start_lines.last[:lineno]}" msg << " was #{@class_start_lines.last[:count]} lines long." log msg @end_last_class = true end end @kw_start_lines.pop log "End of keyword statement. Keywords: #{@kw_start_lines}" end end |
#measure(actual_count, lineno, column) ⇒ Object
Checks to see if the actual count of code lines in the class is greater than the value in @config.
77 78 79 80 81 82 83 84 85 |
# File 'lib/tailor/rulers/max_code_lines_in_class_ruler.rb', line 77 def measure(actual_count, lineno, column) if actual_count > @config msg = "Class/module has #{actual_count} code lines, but " msg << "should have no more than #{@config}." @problems << Problem.new(problem_type, lineno, column, msg, @options[:level]) end end |
#nl_update(lexed_line, lineno, column) ⇒ Object
67 68 69 |
# File 'lib/tailor/rulers/max_code_lines_in_class_ruler.rb', line 67 def nl_update(lexed_line, lineno, column) ignored_nl_update(lexed_line, lineno, column) end |