Class: Collie::Linter::Rules::TrailingWhitespace

Inherits:
Base
  • Object
show all
Defined in:
lib/collie/linter/rules/trailing_whitespace.rb

Overview

Detects trailing whitespace in source code

Defined Under Namespace

Classes: Node

Instance Method Summary collapse

Methods inherited from Base

#autocorrectable?, #initialize

Constructor Details

This class inherits a constructor from Collie::Linter::Base

Instance Method Details

#check(_ast, context = {}) ⇒ Object



16
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/collie/linter/rules/trailing_whitespace.rb', line 16

def check(_ast, context = {})
  source = context[:source]
  return @offenses unless source

  source.lines.each_with_index do |line, index|
    line_number = index + 1
    next unless line.match?(/[ \t]+\n$|[ \t]+$/)

    location = AST::Location.new(
      file: context[:file] || "grammar",
      line: line_number,
      column: line.rstrip.length + 1
    )

    add_offense(
      Node.new(location),
      message: "Trailing whitespace detected",
      autocorrect: lambda {
        context[:source] = source.gsub(/[ \t]+\n/, "\n").gsub(/[ \t]+$/, "")
      }
    )
  end

  @offenses
end