`removeUnusedImports()` does not parse Markdown Javadoc
Mantenedores costumam responder em até 1 dia
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 48/100
- Tipo de issue
- Bug
- Clareza
- Razoavelmente clara
- Status de atividade
- Ativa
- Stack de tecnologia
- java
- Domínio
- build-system, tooling
Direção de pesquisa
Start by tracing the Java removeUnusedImports() implementation and its formatter integration; the issue identifies Gradle classloading and javac's service loader as the suspected path. Reproduce with the provided Java snippet and default settings, then check whether ArrayList and Collection remain imported when referenced only in Markdown Javadoc. Done means those references are preserved during formatting.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
- Java version: 25.0.5.0.3
- Gradle version: 9.7.1
- Gradle plugin version: 8.11.0
When using removeUnusedImports() with the default settings, the formatter does not parse Markdown Javadoc comments, meaning classes only referenced within them will be stripped. For example, with the following config:
spotless {
java {
removeUnusedImports()
}
}
This file:
import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Predicate;
/// [ArrayList#add] [Collection#removeIf(Predicate)]
class Test {}
Will be reformatted to:
/// [ArrayList#add] [Collection#removeIf(Predicate)]
class Test {}
Google's formatter uses javac to parse the classes, so this in theory should work. However, Markdown parsing is handled in a separate step — javac uses a service loader to load the class responsible for parsing/transforming markdown.
Due to Gradle's funky classloading, the service loader doesn't find the Markdown parser, and so Markdown doc comments are ignored. I'm not really sure there's a good way to fix this, short of running the formatter in a separate forked process.
- Linguagem predominante
- Java
- Estrelas
- 5.7k
- Forks
- 565
- Merge médio
- 3d 7h
- PRs com merge (30d)
- 13
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de diffplug/spotless
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 64/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
Mantenedores costumam responder em até 1 dia
-
Spotless for DockerfileAberta
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 45/100
Mantenedores costumam responder em até 1 dia
-
Support Ktlint 2.0Aberta
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 70/100
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 43/100
diffplug/spotless#3147 · 1 reação ·
Mantenedores costumam responder em até 1 dia
Todas as issues de diffplug/spotless
Issues semelhantes
-
bug web-ui
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 67/100
jenkinsci/jenkins#27705 · 3 comentários ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 80/100
googleads/googleads-mobile-flutter#1541 ·
Mantenedores costumam responder em até 4 dias
-
Keyboard crashes Chrome tabsAberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 73/100
Julow/Unexpected-Keyboard#1490 ·
Mantenedores costumam responder em até 4 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 67/100
Vakore/ZappierGames#275 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
unitycatalog/unitycatalog#2148 ·
Mantenedores costumam responder em até 2 dias