Repository navigation
Preserve relative indentation in <pre>{@code ...} blocks lacking leading *. - #1476
Merged
Merged
Conversation
…ading `*`. In classic Javadoc, lines inside `<pre>` blocks that omit the `*` margin prefix previously had all leading whitespace stripped via `line.stripLeading()`, destroying relative indentation in code samples. Instead, strip only up to the comment's base indentation column so that `JavadocLexer.deindentPreCodeBlocks` can preserve the relative indentation of the sample. PiperOrigin-RevId: 994305827
copybara-service
Bot
force-pushed
the
test_993625345
branch
from
October 6, 2026 11:25
10b817b to
1f9d2ac
Compare
abashev
added a commit
to openjavaformat/open-java-format
that referenced
this pull request
Oct 9, 2026
…*` (#117) Lines inside a `<pre>{@code ...}` block that omit the `*` margin lost all their leading whitespace, because the lexer's newline pattern ate the indentation of every continuation line. Code samples written this way (the JDK's java.lang.invoke docs, for one) came out flush left. The lexer now strips the margins line by line before tokenizing, as upstream does in JavadocFormatter.classicCommentText: the `*` prefix and the space after it from lines that have one, and the comment's own indentation from lines that do not. That indentation is the smaller of the shortest `*` prefix and the shortest bare-line indentation, so a bare line is never cut into and both kinds of line stay aligned with each other. What remains is relative to the comment, which is what deindentPreCodeBlocks expects. The newline pattern shrinks to the trailing whitespace and the newline itself. HTML comments were the one construct that still saw the raw margins, so the writer now puts the margin back on each of their lines, as upstream's does; commentMostlyUntouched takes upstream's current expectation (`* abc`, `* def`, `* -->`) instead of the raw `*abc`. Resolves the same defect as google/google-java-format#1476, whose patch does not apply here (no classicCommentText in this fork). Tests first: preCodeWithoutLeadingStarPreservesIndent (upstream's case), preCodeWithoutLeadingStarInIndentedComment (comment indented by four, the base column must go) and preCodeMixedStarAndBareLinesKeepRelativeIndent all failed with the sample flush left. java.base of JDK 21 with Javadoc formatting on: 6 of 3,474 files change, all of them bare-line code samples regaining their indentation.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Preserve relative indentation in
<pre>{@code ...}blocks lacking leading*.In classic Javadoc, lines inside
<pre>blocks that omit the*margin prefixpreviously had all leading whitespace stripped via
line.stripLeading(),destroying relative indentation in code samples.
Instead, strip only up to the comment's base indentation column so that
JavadocLexer.deindentPreCodeBlockscan preserve the relative indentation ofthe sample.