Regex для правильного закрытия checkstyle

Есть ли способ создать регулярное выражение, которое будет проверять правильность «закрытия» стиля проверки (который начинается с //)?

// CHECKSTYLE:OFF
protected void doSomething() {

}
// CHECKSTYLE:ON

// CHECKSTYLE:OFF
protected void doSomethingElse() {
// CHECKSTYLE:ON
}

Если есть опечатка в первом CHECKSTYLE: ON, остальные checkstyles будут проигнорированы.

Я чувствую, что вам действительно нужен синтаксический анализатор, а не регулярное выражение. Каков ваш ожидаемый результат от того, что вы здесь имеете в виду?

Tim Biegeleisen 17.04.2018 08:25

У меня есть плагин IntelliJ под названием CheckStyle-IDEA, и я хочу написать правильный <module> для перехвата «незакрытых» тегов CHECKSTYLE.

m1sha 17.04.2018 10:25
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
36
1

Ответы 1

Я не знаю, подойдет ли здесь чистое регулярное выражение. Ваша проблема - это то, чем занимаются парсеры. На самом деле, я даже не знаю, как бы мы обнаружили // CHECKSTYLE:ON с опечаткой. Но одним из вариантов здесь было бы просто сканировать ваш файл построчно и потерпеть неудачу, если мы когда-нибудь встретим два // CHECKSTYLE:OFF подряд. Если это произойдет, то это означает, что либо стиль проверки ON был полностью опущен, либо был введен неверно.

static final String CHECK_ON = "// CHECKSTYLE:ON";
static final String CHECK_OFF = "// CHECKSTYLE:OFF";

File file = new File("your_input.ext");
boolean checkstyleIsOn = false;

try {
    Scanner sc = new Scanner(file);
    int lineNum = 0;

    while (sc.hasNextLine()) {
        ++lineNum;
        String line = sc.nextLine();

        if (CHECK_OFF.equals(line)( {
            if (!checkStyleIsOn) {
                System.out.println("Found extra checkstyle off at line " + lineNum);
                break;
            }
            else {
                checkStyleIsOn = false;
            }
        }
        if (CHECK_ON.equals(line)( {
            if (checkStyleIsOn) {
                System.out.println("Found extra checkstyle on at line " + lineNum);
                break;
            }
            else {
                checkStyleIsOn = true;
            }
        }

    }
    sc.close();
} 
catch (FileNotFoundException e) {
    e.printStackTrace();
}

Другие вопросы по теме