Spotless는 <antlr | c | C# | C++ | CSS | 흐름 | 그래프ql | 그루비 | HTML | 자바 | 자바스크립트 | JSON | jsx | 코틀린 | 덜 | 라이센스 헤더 | 인하 | 목표-C | 프로토부프 | 파이썬 | 스칼라 | scss | 쉘 | SQL | 타입스크립트 | 뷰 | YAML | 무엇이든> <gradle | 메이븐 | SBT | 뭐든지>.
아마도 아래 링크 중 하나를 원할 것입니다.
user@machine repo % ./gradlew build:spotlessJavaCheck FAILED 다음 파일에 형식 위반이 있습니다. srcmainjavacomdiffpluggradlespotlessFormatExtension.java -tt····if·(targets.length·==·0)·{ +ttif·(targets.length· ==·0)·{ 이러한 위반 사항을 수정하려면 './gradlew spotlessApply'를 실행하세요.user@machine repo % ./gradlew spotlessApply:spotlessApplyBUILD 성공user@machine repo % ./gradlew buildBUILD 성공
user@machine repo % mvn Spotless:check[ERROR] > 다음 파일에 형식 위반이 있습니다.[ERROR] srcmainjavacomdiffpluggradlespotlessFormatExtension.java[ERROR] -tt····if·(targets.length·==·0)·{[ 오류] +ttif·(targets.length·==·0)·{[오류] 'mvn 실행 이러한 위반 사항을 수정하려면 Spotless:apply'를 사용합니다.user@machine repo % mvn spotless:apply[INFO] BUILD SUCCESSuser@machine repo % mvn spotless:check[INFO] BUILD SUCCESS
이상적으로, 코드 포맷터는 포맷 오류를 찾는 것 이상의 작업을 수행할 수 있으며 오류를 수정해야 합니다. 이러한 포맷터는 잠재적으로 포맷되지 않은 입력의 포맷된 버전을 반환하는 Function<String, String>
입니다.
이러한 함수를 구축하는 것은 쉽지만 몇 가지 문제와 많은 통합 작업(줄 바꿈, 문자 인코딩, 멱등성, git 래칫팅 및 빌드 시스템 통합)이 있습니다. Spotless는 이러한 문제를 해결 하므로 다른 포맷터와 구성하고 Spotless의 무기고에서 도구를 구축할 수 있는 간단한 Function<String, String>
에만 집중할 수 있습니다 .
기능 / FormatterStep | 그래들 | 메이븐 | sbt | (여기에 빌드 도구가 있습니다) |
---|---|---|---|---|
자동 멱등성 보호 | ? | ? | ? | ⬜ |
잘못 구성된 인코딩 보호 장치 | ? | ? | ? | ⬜ |
spotless:off 및 spotless:on 으로 전환합니다. | ? | ? | ⬜ | ⬜ |
origin/main 또는 기타 git ref의 래칫 | ? | ? | ⬜ | ⬜ |
git을 사용하여 줄 끝 정의 | ? | ? | ? | ⬜ |
빠른 증분 형식 및 최신 확인 | ? | ? | ⬜ | ⬜ |
BuildCache를 사용하여 새로 결제할 때 빠른 포맷 | ? | ⬜ | ⬜ | ⬜ |
generic.EndWithNewlineStep | ? | ? | ⬜ | ⬜ |
generic.IndentStep | ? | ? | ⬜ | ⬜ |
generic.Jsr223Step | ⬜ | ? | ⬜ | ⬜ |
generic.LicenseHeaderStep | ? | ? | ? | ⬜ |
generic.NativeCmdStep | ? | ? | ⬜ | ⬜ |
generic.ReplaceRegexStep | ? | ? | ⬜ | ⬜ |
generic.ReplaceStep | ? | ? | ⬜ | ⬜ |
generic.TrimTrailingWhitespaceStep | ? | ? | ⬜ | ⬜ |
antlr4.Antlr4FormatterStep | ? | ? | ⬜ | ⬜ |
biome.BiomeStep | ? | ? | ⬜ | ⬜ |
cpp.ClangFormatStep | ? | ⬜ | ⬜ | ⬜ |
cpp.EclipseFormatterStep | ? | ? | ? | ⬜ |
go.GofmtFormatStep | ? | ⬜ | ⬜ | ⬜ |
gherkin.GherkinUtilsStep | ? | ? | ⬜ | ⬜ |
groovy.GrEclipseFormatterStep | ? | ? | ? | ⬜ |
java.GoogleJavaFormatStep | ? | ? | ? | ⬜ |
java.ImportOrderStep | ? | ? | ? | ⬜ |
java.PalantirJavaFormatStep | ? | ? | ⬜ | ⬜ |
java.RemoveUnusedImportsStep | ? | ? | ? | ⬜ |
java.EclipseJdtFormatterStep | ? | ? | ? | ⬜ |
java.FormatAnnotationsStep | ? | ? | ⬜ | ⬜ |
java.CleanthatJavaStep | ? | ? | ⬜ | ⬜ |
json.gson.GsonStep | ? | ? | ⬜ | ⬜ |
json.JacksonJsonStep | ? | ? | ⬜ | ⬜ |
json.JsonSimpleStep | ? | ? | ⬜ | ⬜ |
json.JsonPatchStep | ? | ? | ⬜ | ⬜ |
kotlin.KtLintStep | ? | ? | ? | ⬜ |
kotlin.KtfmtStep | ? | ? | ⬜ | ⬜ |
kotlin.DiktatStep | ? | ? | ⬜ | ⬜ |
markdown.FreshMarkStep | ? | ⬜ | ⬜ | ⬜ |
markdown.FlexmarkStep | ? | ? | ⬜ | ⬜ |
npm.EslintFormatterStep | ? | ? | ⬜ | ⬜ |
npm.PrettierFormatterStep | ? | ? | ⬜ | ⬜ |
npm.TsFmtFormatterStep | ? | ? | ⬜ | ⬜ |
pom.SortPomStep | ? | ? | ⬜ | ⬜ |
protobuf.BufStep | ? | ⬜ | ⬜ | ⬜ |
python.BlackStep | ? | ⬜ | ⬜ | ⬜ |
rdf.RdfFormatterStep | ⬜ | ? | ⬜ | ⬜ |
scala.ScalaFmtStep | ? | ? | ? | ⬜ |
shell.ShfmtStep | ? | ? | ⬜ | ⬜ |
sql.DBeaverSQLFormatterStep | ? | ? | ? | ⬜ |
wtp.EclipseWtpFormatterStep | ? | ? | ⬜ | ⬜ |
yaml.JacksonYamlStep | ? | ? | ⬜ | ⬜ |
(여기에 FormatterStep이 있습니다) | ⬜ | ⬜ | ⬜ | ⬜ |
많은 프로젝트는 규모가 커질수록 작업하기가 더 어려워집니다. Spotless는 그 어느 때보다 작업하기가 더 쉽습니다. 그 이유 중 하나는 기여자가 "매트릭스를 채우도록" 요구하지 않기 때문입니다. Bazel 지원을 추가하고 싶다면 사용하는 포맷터 하나만 지원하더라도 PR을 기꺼이 받아들입니다. 그리고 FooFormatter 지원을 추가하고 싶다면 사용하는 빌드 시스템 하나만 지원하더라도 PR을 기꺼이 받아들일 것입니다.
누군가가 포맷터/빌드 시스템 매트릭스의 한 사각형을 채우고 나면 이제 필요한 모든 부분에 대한 실제 예제를 갖게 되므로 관심 있는 당사자가 빈 사각형을 채우기가 쉽습니다.
Maven 플러그인을 구현 및 유지 관리하고 Gradle에 대한 원격 빌드 캐시 지원을 수정한 Konstantin Lutovich에게 감사드립니다.
greclipse를 통한 Groovy 지원, CDT를 통한 C++ 지원, WTP를 통한 XML 지원 및 기타 Eclipse 기반 포맷터를 사용한 대규모 작업에 대해 Frank Vennemeyer에게 감사드립니다.
Jonathan Bluett-Duncan에게 감사드립니다.
최신 확인 구현 #31
도서관에 흠집 없이 침입하기 #56
다른 많은 것들, 특히 spotlessCheck
의 diff 지원
고품질 코드 검토를 통해 다양한 주제에 대한 지속적인 개선
빌드 캐시, InputChanges 및 지연 구성을 지원하기 위해 Gradle 플러그인의 기능을 재작업한 Daz DeBoer에게 감사드립니다.
Spotless Gradle용 VS Code 확장을 만든 Richard Willis에게 감사드립니다.
Spotless Gradle용 IntelliJ 플러그인을 만들어준 Ryan Gurney에게 감사드립니다.
일반 기본 포맷터, jsr-223 포맷터 및 maven pom 정렬을 추가해 주신 Markus Heberling에게 감사드립니다.
Antlr에 대한 지원을 추가해 주신 Matthias Balke에게 감사드립니다.
google-java-format 1.8+에 대한 지원을 추가해 주신 Matthias Andreas Benkard에게 감사드립니다(#563).
google-java-format의 Skip-reflowing-long-strings 옵션에 대한 지원을 추가한 Thomas Broyer에게 감사드립니다.
ktfmt에 대한 지원을 추가해 주신 Ranadeep Polavarapu에게 감사드립니다(#569).
prettier
및 tsfmt
두 번 포함하여 npm 기반 포맷터에 대한 지원을 추가한 Simon Gamma에게 감사드립니다.
가져오기 분류기에 와일드카드 마지막 지원을 추가해 주신 Hakanai에게 감사드립니다.
모든 Eclipse 기반 포맷터를 4.13으로 업데이트하고 다중 프로젝트용 Groovy를 수정한 Kevin Brooks에게 감사드립니다.
JDBI 바인드 목록 매개변수에 대한 SQL 형식 지정 지원을 수정한 Dylan Baroody에게 감사드립니다.
google-java-format에 맞춤 mavenCoordinate 지원을 추가해 주신 figroc에게 감사드립니다.
파일 권한 방해 버그를 찾아 수정한 Thomas Glaeser에게 감사드립니다.
scalafmt 통합을 수정한 Joan Goyeau에게 감사드립니다.
scalafmt 2.0 이후 문제를 해결해 준 Nick Sutcliffe에게 감사드립니다.
Baptiste Mesta에게 감사드립니다.
DBeaver 포맷터를 Spotless로 포팅하고, 뛰어난 SQL 포맷터를 제공한 DBeaver와 그 작성자에게 감사드립니다.
라이센스 헤더에서 날짜를 인식하도록 만들기 #179
각각 Gradle(#322) 및 Maven(#392)에서 특정 파일에 대한 형식 지정을 제한하는 기능을 추가한 vmdominguez 및 Luis Fors에게 감사드립니다.
Java 9(#426)에서 클래스 로딩을 수정한 benter316에게 감사드립니다.
Gradle의 내부 메커니즘에 많은 도움을 준 Stefan Oehme에게 감사드립니다.
날짜 인식 라이센스 헤더에 구성 가능한 날짜 범위를 추가해 주신 eyalkaspi에게 감사드립니다.
Kotlin Gradle에 ktfmt 지원을 추가한 Andrew Parmet에게 감사드립니다.
Spotless의 google-java-format 통합을 위한 AOSP 지원을 추가해 주신 Oliver Horn에게 감사드립니다.
Eclipse로 포맷하기
Eclipse 코드 포맷터를 대폭 개선한 Mateusz Matela에게 특별히 감사드립니다!
많은 요청을 받은 ktlint 0.34+ 지원(#469), 여러 빌드 업데이트 및 Gradle 지원 중단 경고(#434 및 기타)를 수정한 Zac Sweers에게 감사드립니다.
ktlint FilenameRule(#974)에 대한 지원을 추가해 주신 Stephen Panaro에게 감사드립니다.
Android 문서 개선, 버전 범프 및 빌드 개선을 위해 Nelson Osacky에게 감사드립니다.
ktlint 통합에 도움을 준 Stanley Shyiko에게 감사드립니다.
Gradle Kotlin DSL 파일에 ktlint 지원을 추가해 주신 Jonathan Leitschuh에게 감사드립니다.
원래 Youri Bonnaffé가 gradle-format-plugin에서 분기했습니다.
eclipse-jdt deps를 4.11로 올려준 Ismaël Mejía에게 감사드립니다. 홍보 #60.
로깅 및 다중 프로젝트 지원을 개선한 Gábor Bernát에게 감사드립니다.
tsfmt와 prettier를 maven으로 포팅한 Oliver Szymanski에게 감사드립니다.
Java가 아닌 소스 세트에서 Java 소스 형식 지정을 개선한 Andrew Oberstar에게 감사드립니다. 홍보 #60.
IntelliJ 스타일 연도 자리 표시자에 대한 지원을 추가한 Sameer Balasubrahmanyam에게 감사드립니다.
간단한 JSON 포맷터를 추가해 준 Jamie Tanna에게 감사드립니다.
#506의 까다로운 원인을 추적한 Adib Saikali와 Paul Merlin에게 감사드립니다.
EclipseCodeFormatter에서 순서를 가져옵니다.
Gradle로 제작되었습니다.
junit에서 테스트했습니다.
DiffPlug에서 관리합니다.