netty5-build/src/main/java/io/netty/build/checkstyle/NewlineCheck.java

95 lines
2.8 KiB
Java

/*
* Copyright 2013 The Netty Project
*
* The Netty Project licenses this file to you under the Apache License,
* version 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package io.netty.build.checkstyle;
import com.puppycrawl.tools.checkstyle.api.AbstractFileSetCheck;
import com.puppycrawl.tools.checkstyle.api.FileText;
import java.io.File;
import java.util.regex.Pattern;
public class NewlineCheck extends AbstractFileSetCheck {
private enum NewlineType {
UNKNOWN,
CR,
LF,
CRLF,
LFCR,
RS
}
private static final Pattern NON_CRLF = Pattern.compile("(?:[^\r]\n|\r[^\n])");
private static final Pattern NON_LFCR = Pattern.compile("(?:[^\n]\r|\n[^\r])");
private static final NewlineType NEWLINE_TYPE;
static {
final String newline = System.lineSeparator();
if ("\n".equals(newline)) {
NEWLINE_TYPE = NewlineType.LF;
} else if ("\r".equals(newline)) {
NEWLINE_TYPE = NewlineType.CR;
} else if ("\r\n".equals(newline)) {
NEWLINE_TYPE = NewlineType.CRLF;
} else if ("\n\r".equals(newline)) {
NEWLINE_TYPE = NewlineType.LFCR;
} else if ("\u001E".equals(newline)) {
NEWLINE_TYPE = NewlineType.RS;
} else {
NEWLINE_TYPE = NewlineType.UNKNOWN;
}
}
@Override
protected void processFiltered(File file, FileText fileText) {
String text = fileText.getFullText().toString();
switch (NEWLINE_TYPE) {
case LF:
if (text.indexOf('\r') >= 0) {
reportNewlineViolation();
}
break;
case CR:
if (text.indexOf('\n') >= 0) {
reportNewlineViolation();
}
break;
case CRLF:
if (NON_CRLF.matcher(text).find()) {
reportNewlineViolation();
}
break;
case LFCR:
if (NON_LFCR.matcher(text).find()) {
reportNewlineViolation();
}
break;
case RS:
if (text.indexOf('\u001E') >= 0) {
reportNewlineViolation();
}
break;
}
}
private void reportNewlineViolation() {
log(0, "invalid newline character (expected: " + NEWLINE_TYPE + ')');
}
}