From b8eeac469a6a79b847aeca4829bbc8603ae9f591 Mon Sep 17 00:00:00 2001 From: Vitalii Elenhaupt Date: Tue, 31 Oct 2017 17:50:05 +0200 Subject: [PATCH] New rule: trailing blank lines --- spec/ameba/rules/trailing_blank_lines_spec.cr | 37 +++++++++++++++++++ src/ameba/rule.cr | 1 + src/ameba/rules/trailing_blank_lines.cr | 8 ++++ 3 files changed, 46 insertions(+) create mode 100644 spec/ameba/rules/trailing_blank_lines_spec.cr create mode 100644 src/ameba/rules/trailing_blank_lines.cr diff --git a/spec/ameba/rules/trailing_blank_lines_spec.cr b/spec/ameba/rules/trailing_blank_lines_spec.cr new file mode 100644 index 00000000..7fc34061 --- /dev/null +++ b/spec/ameba/rules/trailing_blank_lines_spec.cr @@ -0,0 +1,37 @@ +require "../../spec_helper" + +module Ameba::Rules + subject = TrailingBlankLines.new + + describe TrailingBlankLines do + it "passes if there is no blank lines at the end" do + source = Source.new "", "no-blankline" + subject.catch(source).valid?.should be_true + end + + it "fails if there is a blank line at the end of a source" do + source = Source.new "", "a = 1\n \n " + subject.catch(source).valid?.should be_false + end + + it "passes if source is empty" do + source = Source.new "", "" + subject.catch(source).valid?.should be_true + end + + it "passes if last line is not blank" do + source = Source.new "", "\n\n\n puts 22" + subject.catch(source).valid?.should be_true + end + + it "reports rule, pos and message" do + source = Source.new "", "a = 1\n\n " + subject.catch(source) + + error = source.errors.first + error.rule.should_not be_nil + error.pos.should eq 3 + error.message.should eq "Blank lines detected at the end of the file" + end + end +end diff --git a/src/ameba/rule.cr b/src/ameba/rule.cr index 6bc6585b..e917df5d 100644 --- a/src/ameba/rule.cr +++ b/src/ameba/rule.cr @@ -1,6 +1,7 @@ module Ameba RULES = [ Rules::LineLength, + Rules::TrailingBlankLines, Rules::TrailingWhitespace, ] diff --git a/src/ameba/rules/trailing_blank_lines.cr b/src/ameba/rules/trailing_blank_lines.cr new file mode 100644 index 00000000..24e8034d --- /dev/null +++ b/src/ameba/rules/trailing_blank_lines.cr @@ -0,0 +1,8 @@ +# A rule that disallows trailing blank lines at the end of the source file. + +Ameba.rule TrailingBlankLines do |source| + if source.lines.size > 1 && source.lines[-2, 2].join.strip == "" + source.error self, source.lines.size, + "Blank lines detected at the end of the file" + end +end