/** * We assume that comment on a first line - is a header with license. * However possible to imagine corner case: file may contain commented-out code starting from first line. * But we assume that probability of this is really low. */ private static boolean isHeader(SyntaxTrivia syntaxTrivia) { return ((InternalSyntaxTrivia) syntaxTrivia).getLine() == 1; }
@Override public void visitToken(SyntaxToken syntaxToken) { int tokenLine = ((InternalSyntaxToken) syntaxToken).getLine(); if (tokenLine != previousTokenLine) { for (SyntaxTrivia trivia : syntaxToken.trivias()) { if (((InternalSyntaxTrivia)trivia).getLine() == previousTokenLine) { String comment = trivia.comment(); comment = comment.startsWith("//") ? comment.substring(2) : comment.substring(2, comment.length() - 2); comment = comment.trim(); if (!pattern.matcher(comment).matches() && !containsExcludedPattern(comment)) { addIssue(previousTokenLine, "Move this trailing comment on the previous empty line."); } } } } previousTokenLine = tokenLine; }
/** * Detects commented-out code in remaining candidates. */ private void leaveFile() { List<Integer> commentedOutCodeLines = Lists.newArrayList(); for (SyntaxTrivia syntaxTrivia : comments) { String[] lines = syntaxTrivia.comment().split("\r\n?|\n"); for (int i = 0; i < lines.length; i++) { if (codeRecognizer.isLineOfCode(lines[i])) { // Mark all remaining lines from this comment as a commented out lines of code for (int j = i; j < lines.length; j++) { commentedOutCodeLines.add(((InternalSyntaxTrivia) syntaxTrivia).getLine() + j); } break; } } } // Greedy algorithm to split lines on blocks and to report only one violation per block Collections.sort(commentedOutCodeLines); int prev = Integer.MIN_VALUE; for (int i = 0; i < commentedOutCodeLines.size(); i++) { int current = commentedOutCodeLines.get(i); if (prev + 1 < current) { addIssue(current, "This block of commented-out lines of code should be removed."); } prev = current; } comments = null; }
public void checkTrivia(SyntaxTrivia syntaxTrivia) { String comment = syntaxTrivia.comment(); if (StringUtils.containsIgnoreCase(comment, pattern)) { String[] lines = comment.split("\r\n?|\n"); for (int i = 0; i < lines.length; i++) { if (StringUtils.containsIgnoreCase(lines[i], pattern) && !isLetterAround(lines[i], pattern)) { newCheck.addIssue(((InternalSyntaxTrivia)syntaxTrivia).getLine()+i, message); } } } } }