From cd3920f51f5b7dc5af87513a786b04addc0e7661 Mon Sep 17 00:00:00 2001 From: Adi Date: Mon, 29 Feb 2016 10:10:18 +0000 Subject: [PATCH] added allowEmptyLineAfterComment option to EmptyLinesCheck --- .gitignore | 3 + check-style-report.json | 261 --------------------------- check-style-report.xml | 101 ----------- checkstyle/checks/EmptyLinesCheck.hx | 12 +- test/EmptyLinesCheckTest.hx | 77 +++++++- 5 files changed, 87 insertions(+), 367 deletions(-) delete mode 100644 check-style-report.json delete mode 100644 check-style-report.xml diff --git a/.gitignore b/.gitignore index d6e8123c..4e70fc5b 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,6 @@ *.zip *.hxproj .haxelib/ + +check-style-report.json +check-style-report.xml diff --git a/check-style-report.json b/check-style-report.json deleted file mode 100644 index 76934e59..00000000 --- a/check-style-report.json +++ /dev/null @@ -1,261 +0,0 @@ -[ - { - "fileName": "checkstyle/Checker.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/AccessOrderCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/AnonymousCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/ArrayInstantiationCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/AvoidStarImportCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/BlockFormatCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/Check.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/ConstantNameCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/CyclomaticComplexityCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/DynamicCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/EmptyLinesCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/ERegInstantiationCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/FileLengthCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/HexadecimalLiteralsCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/HiddenFieldCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/IndentationCharacterCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/InnerAssignmentCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/LeftCurlyCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/LineLengthCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/ListenerNameCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/LocalVariableNameCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/MagicNumberCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/MemberNameCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/MethodLengthCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/MethodNameCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/MultipleStringLiteralsCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/NameCheckBase.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/NeedBracesCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/NestedForDepthCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/NestedIfDepthCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/NestedTryDepthCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/ParameterNameCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/ParameterNumberCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/PublicPrivateCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/ReturnCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/RightCurlyCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/SpacingCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/TabForAligningCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/TODOCommentCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/TrailingWhitespaceCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/TypeCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/TypeNameCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/checks/VariableInitialisationCheck.hx", - "messages": [] - }, - { - "fileName": "checkstyle/ChecksInfo.hx", - "messages": [] - }, - { - "fileName": "checkstyle/ComplexTypeUtils.hx", - "messages": [] - }, - { - "fileName": "checkstyle/ExprUtils.hx", - "messages": [] - }, - { - "fileName": "checkstyle/LintFile.hx", - "messages": [] - }, - { - "fileName": "checkstyle/LintMessage.hx", - "messages": [] - }, - { - "fileName": "checkstyle/Main.hx", - "messages": [ - { - "column": 71, - "line": 73, - "message": "Left curly should be at EOL (only linebreak or comment after curly)", - "severity": "info" - } - ] - }, - { - "fileName": "checkstyle/Report.hx", - "messages": [] - }, - { - "fileName": "checkstyle/reporter/ExitCodeReporter.hx", - "messages": [] - }, - { - "fileName": "checkstyle/reporter/IReporter.hx", - "messages": [] - }, - { - "fileName": "checkstyle/reporter/JSONReporter.hx", - "messages": [] - }, - { - "fileName": "checkstyle/reporter/Reporter.hx", - "messages": [] - }, - { - "fileName": "checkstyle/reporter/XMLReporter.hx", - "messages": [] - }, - { - "fileName": "checkstyle/TokenStream.hx", - "messages": [] - }, - { - "fileName": "checkstyle/TokenTree.hx", - "messages": [ - { - "column": 2, - "line": 104, - "message": "Invalid enum member signature: ALL (name should be ~/^[a-z][a-zA-Z0-9]*$/)", - "severity": "info" - }, - { - "column": 2, - "line": 105, - "message": "Invalid enum member signature: FIRST (name should be ~/^[a-z][a-zA-Z0-9]*$/)", - "severity": "info" - } - ] - }, - { - "fileName": "checkstyle/TokenTreeBuilder.hx", - "messages": [ - { - "column": 19, - "line": 796, - "message": "TODO comment: TODO handle other #directives", - "severity": "info" - } - ] - } -] \ No newline at end of file diff --git a/check-style-report.xml b/check-style-report.xml deleted file mode 100644 index 0a0bbc33..00000000 --- a/check-style-report.xml +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/checkstyle/checks/EmptyLinesCheck.hx b/checkstyle/checks/EmptyLinesCheck.hx index 0134dcb8..c5340ac5 100644 --- a/checkstyle/checks/EmptyLinesCheck.hx +++ b/checkstyle/checks/EmptyLinesCheck.hx @@ -1,31 +1,37 @@ package checkstyle.checks; +import StringTools; import checkstyle.LintMessage.SeverityLevel; @name("EmptyLines") -@desc("Checks for consecutive empty lines (default 1)") +@desc("Checks for consecutive empty lines") class EmptyLinesCheck extends Check { public var max:Int; + public var allowEmptyLineAfterComment:Bool; public function new() { super(); max = 1; + allowEmptyLineAfterComment = true; } override function actualRun() { - var re = ~/^\s*$/; var inGroup = false; var start = 0; var end = 0; for (i in 0 ... checker.lines.length) { var line = checker.lines[i]; - if (re.match(line)) { + if (~/^\s*$/.match(line)) { if (!inGroup) { inGroup = true; start = i; } end = i; + + if (i > 0 && !allowEmptyLineAfterComment && ~/^(\/\/).*|^(\/\*).*|(\*\/)$/.match(StringTools.trim(checker.lines[i - 1]))) { + log('Empty line not allowed after comment(s)', start, 0, null, Reflect.field(SeverityLevel, severity)); + } } else { if (inGroup) { diff --git a/test/EmptyLinesCheckTest.hx b/test/EmptyLinesCheckTest.hx index 16176627..3bfff1ed 100644 --- a/test/EmptyLinesCheckTest.hx +++ b/test/EmptyLinesCheckTest.hx @@ -1,5 +1,3 @@ -package ; - import checkstyle.checks.EmptyLinesCheck; class EmptyLinesCheckTest extends CheckTestCase { @@ -21,6 +19,41 @@ class EmptyLinesCheckTest extends CheckTestCase { var msg = checkMessage(EmptyLinesTests.TEST3, check); assertEquals(msg, ''); } + + public function testEmptyLineAfterSingleLineComment() { + var check = new EmptyLinesCheck(); + check.allowEmptyLineAfterComment = false; + + var msg = checkMessage(EmptyLinesTests.TEST4, check); + assertEquals(msg, 'Empty line not allowed after comment(s)'); + + msg = checkMessage(EmptyLinesTests.TEST5, check); + assertEquals(msg, 'Empty line not allowed after comment(s)'); + + msg = checkMessage(EmptyLinesTests.TEST6, check); + assertEquals(msg, 'Empty line not allowed after comment(s)'); + } + + public function testEmptyLineAfterMultiLineComment() { + var check = new EmptyLinesCheck(); + check.allowEmptyLineAfterComment = false; + + var msg = checkMessage(EmptyLinesTests.TEST6, check); + assertEquals(msg, 'Empty line not allowed after comment(s)'); + + msg = checkMessage(EmptyLinesTests.TEST7, check); + assertEquals(msg, 'Empty line not allowed after comment(s)'); + } + + public function testAllowEmptyLineAfterComment() { + var check = new EmptyLinesCheck(); + + var msg = checkMessage(EmptyLinesTests.TEST6, check); + assertEquals(msg, ''); + + msg = checkMessage(EmptyLinesTests.TEST7, check); + assertEquals(msg, ''); + } } class EmptyLinesTests { @@ -47,4 +80,44 @@ class EmptyLinesTests { } }"; + + public static inline var TEST4:String = + "class Test { + + // comments + + public function new() { + var b:Int; + } + }"; + + public static inline var TEST5:String = + "class Test { + + // comments + + var a:Int; + }"; + + public static inline var TEST6:String = + "class Test { + + /** + *comments + */ + + var a:Int; + }"; + + public static inline var TEST7:String = + "class Test { + + /** + *comments + */ + + public function new() { + var b:Int; + } + }"; } \ No newline at end of file