Я пытаюсь представить инструмент для стандартизации формата нашего 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 ведет себя почти как обфускатор. Существует ли инструмент, который может удовлетворить большинство / все вышеперечисленные требования?