From 7d3d0902e5e66f4f2da36736f26d9998965873f5 Mon Sep 17 00:00:00 2001 From: Vitalii Elenhaupt Date: Mon, 30 Oct 2017 22:35:11 +0200 Subject: [PATCH] New rule: trailing whitespace --- spec/ameba/rules/trailing_whitespace_spec.cr | 27 ++++++++++++++++++++ src/ameba/rule.cr | 1 + src/ameba/rules/line_length.cr | 5 ++-- src/ameba/rules/trailing_whitespace.cr | 11 ++++++++ 4 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 spec/ameba/rules/trailing_whitespace_spec.cr create mode 100644 src/ameba/rules/trailing_whitespace.cr diff --git a/spec/ameba/rules/trailing_whitespace_spec.cr b/spec/ameba/rules/trailing_whitespace_spec.cr new file mode 100644 index 00000000..6c799563 --- /dev/null +++ b/spec/ameba/rules/trailing_whitespace_spec.cr @@ -0,0 +1,27 @@ +require "../../spec_helper" + +module Ameba::Rules + subject = TrailingWhitespace.new + + describe TrailingWhitespace do + it "passes if all lines do not have trailing whitespace" do + source = Source.new "", "no-whispace" + subject.catch(source).valid?.should be_true + end + + it "fails if there is a line with trailing whitespace" do + source = Source.new "", "whitespace at the end " + subject.catch(source).valid?.should be_false + end + + it "reports rule, pos and message" do + source = Source.new "", "a = 1\n b = 2 " + subject.catch(source).valid?.should be_false + + error = source.errors.first + error.rule.should_not be_nil + error.pos.should eq 2 + error.message.should eq "Trailing whitespace detected" + end + end +end diff --git a/src/ameba/rule.cr b/src/ameba/rule.cr index 72fa994c..25664c84 100644 --- a/src/ameba/rule.cr +++ b/src/ameba/rule.cr @@ -1,6 +1,7 @@ module Ameba RULES = [ Rules::LineLength, + Rules::TrailingWhitespace, ] abstract struct Rule diff --git a/src/ameba/rules/line_length.cr b/src/ameba/rules/line_length.cr index 87c573a6..520ef46e 100644 --- a/src/ameba/rules/line_length.cr +++ b/src/ameba/rules/line_length.cr @@ -6,9 +6,8 @@ module Ameba::Rules struct LineLength < Rule def test(source) source.lines.each_with_index do |line, index| - if line.size > 79 - source.error self, index + 1, "Line too long (#{line.size} symbols)" - end + next unless line.size > 79 + source.error self, index + 1, "Line too long (#{line.size} symbols)" end end end diff --git a/src/ameba/rules/trailing_whitespace.cr b/src/ameba/rules/trailing_whitespace.cr new file mode 100644 index 00000000..93ec84c7 --- /dev/null +++ b/src/ameba/rules/trailing_whitespace.cr @@ -0,0 +1,11 @@ +module Ameba::Rules + # A rule that disallows trailing whitespace at the end of a line. + struct TrailingWhitespace < Rule + def test(source) + source.lines.each_with_index do |line, index| + next unless line =~ /\s$/ + source.error self, index + 1, "Trailing whitespace detected" + end + end + end +end