class Tailor::Rulers::MaxCodeLinesInMethodRuler

Public Class Methods

new(config, options) click to toggle source
Calls superclass method Tailor::Ruler::new
# File lib/tailor/rulers/max_code_lines_in_method_ruler.rb, line 9
def initialize(config, options)
  super(config, options)
  add_lexer_observers(:ignored_nl, :kw, :nl)
  @method_start_lines = []
  @kw_start_lines = []
  @end_last_method = false
end

Public Instance Methods

ignored_nl_update(lexed_line, _, _) click to toggle source
# File lib/tailor/rulers/max_code_lines_in_method_ruler.rb, line 17
def ignored_nl_update(lexed_line, _, _)
  return if @method_start_lines.empty?
  return if lexed_line.only_spaces?
  return if lexed_line.comment_line?

  @method_start_lines.each do |line|
    line[:count] += 1
    log "Method from line #{line[:lineno]} now at #{line[:count]} lines."
  end

  if @end_last_method
    measure(@method_start_lines.last[:count],
      @method_start_lines.last[:lineno],
      @method_start_lines.last[:column])
    @method_start_lines.pop
    @end_last_method = false
  end
end
kw_update(token, _, lineno, column) click to toggle source
# File lib/tailor/rulers/max_code_lines_in_method_ruler.rb, line 36
def kw_update(token, _, lineno, column)
  if token == 'def'
    @method_start_lines << { lineno: lineno, column: column, count: 0 }
    log "Method start lines: #{@method_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 method."

    unless @method_start_lines.empty?
      if @method_start_lines.last[:lineno] == @kw_start_lines.last
        #msg = "Method from line #{@method_start_lines.last[:lineno]}"
        #msg << " was #{@method_start_lines.last[:count]} lines long."
        #log msg
        @end_last_method = true
      end
    end

    @kw_start_lines.pop
    log "End of keyword statement.  Keywords: #{@kw_start_lines}"
  end
end
measure(actual_count, lineno, column) click to toggle source

Checks to see if the actual count of code lines in the method is greater than the value in +@config+.

@param [Fixnum] actual_count The number of code lines found. @param [Fixnum] lineno The line the potential problem is on. @param [Fixnum] column The column the potential problem is on.

# File lib/tailor/rulers/max_code_lines_in_method_ruler.rb, line 77
def measure(actual_count, lineno, column)
  if actual_count > @config
    msg = "Method 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) click to toggle source
# File lib/tailor/rulers/max_code_lines_in_method_ruler.rb, line 67
def nl_update(lexed_line, lineno, column)
  ignored_nl_update(lexed_line, lineno, column)
end