Как я могу применить стандартный стиль для кода Java? - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь представить инструмент для стандартизации формата нашего java кода. Требования:

  • Требуемый формат должен соответствовать стандарту Oracle (или что-то очень похожее)
  • Должны соблюдаться многострочные операторы, т. Е. Если пользователь добавляет разрывы строк для разделения оператор в несколько строк в интересах читабельности, они не должны быть удалены (см. выше)
  • Интеграция Gradle. Если представлен код, который не соответствует правилам, сборка должна завершиться неудачей.
  • Автофиксирование - переформатирование кода для соответствия правилам с помощью команды (Gradle)
  • Интеграция с IDE - переформатирование кода в соответствовать правилам IntelliJ, VSCode и др. c. EditorConfig может быть полезно для этого.

Я пробовал использовать Spotless, но способ форматирования многострочных операторов очень неудовлетворителен. Например, следующий код

var token = Jwts.builder()
        .signWith(Keys.hmacShaKeyFor(signingKey), SignatureAlgorithm.HS512)
        .setHeaderParam("typ", SecurityConstants.TOKEN_TYPE)
        .setIssuer(SecurityConstants.TOKEN_ISSUER)
        .claim("rol", roles)
        .setAudience(SecurityConstants.TOKEN_AUDIENCE)
        .setSubject(user.getUsername())
        .setExpiration(Timestamp.valueOf(tomorrow))
        .addClaims(user.getClaims())
        .compact();

не выполнит проверки Spotless и, если ./gradlew spotlessApply запущен, он будет переформатирован в этот отвратительный беспорядок

var token = Jwts.builder().signWith(Keys.hmacShaKeyFor(signingKey), SignatureAlgorithm.HS512)
        .setHeaderParam("typ", SecurityConstants.TOKEN_TYPE).setIssuer(SecurityConstants.TOKEN_ISSUER)
        .claim("rol", roles).setAudience(SecurityConstants.TOKEN_AUDIENCE).setSubject(user.getUsername())
        .setExpiration(Timestamp.valueOf(tomorrow)).addClaims(user.getClaims()).compact();

Так эффективно, Spotless ведет себя почти как обфускатор. Существует ли инструмент, который может удовлетворить большинство / все вышеперечисленные требования?

1 Ответ

1 голос
/ 05 февраля 2020

Я пытался использовать Spotless, но способ форматирования многострочных операторов очень неудовлетворительный.

Spotless позволяет вам задавать пользовательские правила для удовлетворения ваших требований: https://github.com/diffplug/spotless/tree/master/plugin-gradle#custom

Checkstyle - еще один отличный инструмент для принудительного форматирования. Он используется командой Spring Framework . Он также имеет отличный плагин для IntelliJ .

Так что советуем либо:

  1. Попробуйте написать собственные правила для Spotless, чтобы удовлетворить ваши потребности.
  2. Если (1) неудовлетворительно, исследуйте использование Checkstyle с пользовательскими проверками.

Если представлен код, который не соответствует правилам, сборка должна завершиться неудачей.

Существует несколько способов справиться с этим:

Какой бы форматный плагин вы не использовали, с ним связана задача check. Таким образом, для Spotless это будет spotlessCheck, а Checkstyle - просто check.

Вы можете настроить задачу build так, чтобы зависела от задачи от этих задач.

Другим способом является проверка в вашем конвейере, которая вызывает задачу проверки, которую вы настраиваете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...