Class: Tailor::Rulers::SpacesAfterLparenRuler

Inherits:
Tailor::Ruler show all
Defined in:
lib/tailor/rulers/spaces_after_lparen_ruler.rb

Instance Attribute Summary

Attributes inherited from Tailor::Ruler

#lexer_observers

Instance Method Summary collapse

Methods inherited from Tailor::Ruler

#add_child_ruler, #problem_type, #problems

Methods included from Logger::Mixin

included

Constructor Details

#initialize(config, options) ⇒ SpacesAfterLparenRuler

Returns a new instance of SpacesAfterLparenRuler.



6
7
8
9
10
# File 'lib/tailor/rulers/spaces_after_lparen_ruler.rb', line 6

def initialize(config, options)
  super(config, options)
  add_lexer_observers :comment, :ignored_nl, :lparen, :nl
  @lparen_columns = []
end

Instance Method Details

#check_spaces_after_lparen(lexed_line, lineno) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/tailor/rulers/spaces_after_lparen_ruler.rb', line 47

def check_spaces_after_lparen(lexed_line, lineno)
  unless @lparen_columns.empty?
    log "lparens found at: #{@lparen_columns}"
  end

  @lparen_columns.each do |column|
    actual_spaces = count_spaces(lexed_line, column)
    next if actual_spaces.nil?

    if !@do_measurement
      log 'Skipping measurement.'
    else
      measure(actual_spaces, lineno, column)
    end

    @do_measurement = true
  end

  @lparen_columns.clear
end

#comment_update(token, lexed_line, _, lineno, column) ⇒ Object



12
13
14
15
16
17
# File 'lib/tailor/rulers/spaces_after_lparen_ruler.rb', line 12

def comment_update(token, lexed_line, _, lineno, column)
  if token =~ /\n$/
    log 'Found comment with trailing newline.'
    ignored_nl_update(lexed_line, lineno, column)
  end
end

#count_spaces(lexed_line, column) ⇒ Fixnum

Counts the number of spaces after the lparen.

Parameters:

  • lexed_line (LexedLine)

    The LexedLine that contains the context the lparen was found in.

  • column (Fixnum)

    Column the lparen was found at.

Returns:

  • (Fixnum)

    The number of spaces found after the lparen.



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/tailor/rulers/spaces_after_lparen_ruler.rb', line 74

def count_spaces(lexed_line, column)
  event_index = lexed_line.event_index(column)

  if event_index.nil?
    log 'No lparen in this line.  Moving on...'
    @do_measurement = false
    return
  end

  next_event = lexed_line.at(event_index + 1)
  log "Next event: #{next_event}"

  if next_event.nil?
    log 'lparen must be at the end of the line.'
    @do_measurement = false
    return 0
  end

  [:on_nl, :on_ignored_nl].each do |event|
    if next_event[1] == event
      log "lparen is followed by a '#{event}'.  Moving on."
      return 0
    end
  end

  if next_event[1] == :on_rparen
    log 'lparen is followed by an rparen.  Moving on.'
    @do_measurement = false
    return 0
  end

  second_next_event = lexed_line.at(event_index + 2)
  log "Event + 2: #{second_next_event}"

  [:on_comment, :on_lbrace, :on_lparen].each do |event|
    if second_next_event[1] == event
      log "Event + 2 is a #{event}.  Moving on."
      @do_measurement = false
      return next_event.last.size
    end
  end

  next_event[1] != :on_sp ? 0 : next_event.last.size
end

#ignored_nl_update(lexed_line, lineno, _) ⇒ Object



19
20
21
# File 'lib/tailor/rulers/spaces_after_lparen_ruler.rb', line 19

def ignored_nl_update(lexed_line, lineno, _)
  check_spaces_after_lparen(lexed_line, lineno)
end

#lparen_update(_, column) ⇒ Object



23
24
25
# File 'lib/tailor/rulers/spaces_after_lparen_ruler.rb', line 23

def lparen_update(_, column)
  @lparen_columns << column
end

#measure(actual_spaces, lineno, column) ⇒ Object

Checks to see if the number of spaces after an lparen equals the value at @config.

Parameters:

  • actual_spaces (Fixnum)

    The number of spaces after the lparen.

  • lineno (Fixnum)

    Line the potential problem is on.

  • column (Fixnum)

    Column the potential problem is on.



37
38
39
40
41
42
43
44
45
# File 'lib/tailor/rulers/spaces_after_lparen_ruler.rb', line 37

def measure(actual_spaces, lineno, column)
  if actual_spaces != @config
    msg = "Line has #{actual_spaces} space(s) after a (, "
    msg << "but should have #{@config}."

    @problems << Problem.new(problem_type, lineno, column + 1, msg,
      @options[:level])
  end
end

#nl_update(lexed_line, lineno, column) ⇒ Object



27
28
29
# File 'lib/tailor/rulers/spaces_after_lparen_ruler.rb', line 27

def nl_update(lexed_line, lineno, column)
  ignored_nl_update(lexed_line, lineno, column)
end