Class: Tailor::Rulers::SpacesInEmptyBracesRuler
- Inherits:
-
Tailor::Ruler
- Object
- Tailor::Ruler
- Tailor::Rulers::SpacesInEmptyBracesRuler
- Defined in:
- lib/tailor/rulers/spaces_in_empty_braces_ruler.rb
Overview
Checks for spaces that exist between a { and } when there is only space in between them.
Instance Attribute Summary
Attributes inherited from Tailor::Ruler
Instance Method Summary collapse
-
#count_spaces(lexed_line, column) ⇒ Fixnum
The number of spaces before the rbrace.
- #embexpr_beg_update(_, _, _) ⇒ Object
-
#initialize(config, options) ⇒ SpacesInEmptyBracesRuler
constructor
A new instance of SpacesInEmptyBracesRuler.
- #lbrace_update(_, _, _) ⇒ Object
-
#measure(actual_spaces, lineno, column) ⇒ Object
Checks to see if the counted spaces between an lbrace and an rbrace equals the value at @config.
- #nl_update(lexed_line, lineno, column) ⇒ Object
-
#rbrace_update(lexed_line, lineno, column) ⇒ Object
This has to keep track of {s and only follow through with the check if the { was an lbrace because Ripper doesn’t scan the } of an embedded expression (embexpr_end) as such..
Methods inherited from Tailor::Ruler
#add_child_ruler, #problem_type, #problems
Methods included from Logger::Mixin
Constructor Details
#initialize(config, options) ⇒ SpacesInEmptyBracesRuler
Returns a new instance of SpacesInEmptyBracesRuler.
8 9 10 11 12 |
# File 'lib/tailor/rulers/spaces_in_empty_braces_ruler.rb', line 8 def initialize(config, ) super(config, ) add_lexer_observers :embexpr_beg, :lbrace, :rbrace @lbrace_nesting = [] end |
Instance Method Details
#count_spaces(lexed_line, column) ⇒ Fixnum
Returns The number of spaces before the rbrace.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/tailor/rulers/spaces_in_empty_braces_ruler.rb', line 17 def count_spaces(lexed_line, column) current_index = lexed_line.event_index(column) log "Current event index: #{current_index}" previous_event = lexed_line.at(current_index - 1) log "Previous event: #{previous_event}" if column.zero? || previous_event.nil? return end if previous_event[1] == :on_lbrace return 0 end if previous_event[1] == :on_sp second_previous_event = lexed_line.at(current_index - 2) if second_previous_event[1] == :on_lbrace previous_event.last.size else nil end end end |
#embexpr_beg_update(_, _, _) ⇒ Object
42 43 44 |
# File 'lib/tailor/rulers/spaces_in_empty_braces_ruler.rb', line 42 def embexpr_beg_update(_, _, _) @lbrace_nesting << :embexpr_beg end |
#lbrace_update(_, _, _) ⇒ Object
46 47 48 |
# File 'lib/tailor/rulers/spaces_in_empty_braces_ruler.rb', line 46 def lbrace_update(_, _, _) @lbrace_nesting << :lbrace end |
#measure(actual_spaces, lineno, column) ⇒ Object
Checks to see if the counted spaces between an lbrace and an rbrace equals the value at @config.
60 61 62 63 64 65 66 67 68 |
# File 'lib/tailor/rulers/spaces_in_empty_braces_ruler.rb', line 60 def measure(actual_spaces, lineno, column) if actual_spaces != @config msg = "Line has #{actual_spaces} space(s) in between empty " msg << "braces, but should have #{@config}." @problems << Problem.new(problem_type, lineno, column, msg, @options[:level]) end end |
#nl_update(lexed_line, lineno, column) ⇒ Object
50 51 52 |
# File 'lib/tailor/rulers/spaces_in_empty_braces_ruler.rb', line 50 def nl_update(lexed_line, lineno, column) ignored_nl_update(lexed_line, lineno, column) end |
#rbrace_update(lexed_line, lineno, column) ⇒ Object
This has to keep track of {s and only follow through with the check if the { was an lbrace because Ripper doesn’t scan the } of an embedded expression (embexpr_end) as such.
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/tailor/rulers/spaces_in_empty_braces_ruler.rb', line 77 def rbrace_update(lexed_line, lineno, column) if @lbrace_nesting.last == :embexpr_beg @lbrace_nesting.pop return end @lbrace_nesting.pop count = count_spaces(lexed_line, column) if count.nil? log "Braces aren't empty. Moving on." return else log "Found #{count} space(s) before rbrace." end measure(count, lineno, column) end |