95 lines
2.8 KiB
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 + ')');
|
|
}
|
|
}
|