[clang] [clang-format] Ignore imports in comments for Java import sorting (PR #177326)
via cfe-commits
cfe-commits at lists.llvm.org
Sat Feb 14 23:23:24 PST 2026
================
@@ -3753,26 +3752,43 @@ tooling::Replacements sortJavaImports(const FormatStyle &Style, StringRef Code,
StringRef FileName,
tooling::Replacements &Replaces) {
unsigned Prev = 0;
- unsigned SearchFrom = 0;
+ bool HasImport = false;
llvm::Regex ImportRegex(JavaImportRegexPattern);
+ llvm::Regex PackageRegex(JavaPackageRegexPattern);
SmallVector<StringRef, 4> Matches;
SmallVector<JavaImportDirective, 16> ImportsInBlock;
SmallVector<StringRef> AssociatedCommentLines;
- bool FormattingOff = false;
-
- for (;;) {
- auto Pos = Code.find('\n', SearchFrom);
- StringRef Line =
- Code.substr(Prev, (Pos != StringRef::npos ? Pos : Code.size()) - Prev);
+ for (bool FormattingOff = false;;) {
+ auto Pos = Code.find('\n', Prev);
+ auto GetLine = [&] {
+ return Code.substr(Prev,
+ (Pos != StringRef::npos ? Pos : Code.size()) - Prev);
+ };
+ StringRef Line = GetLine();
StringRef Trimmed = Line.trim();
- if (isClangFormatOff(Trimmed))
+ if (Trimmed.empty() || PackageRegex.match(Trimmed)) {
+ // Skip empty line and package statement.
+ } else if (isClangFormatOff(Trimmed)) {
FormattingOff = true;
- else if (isClangFormatOn(Trimmed))
+ } else if (isClangFormatOn(Trimmed)) {
FormattingOff = false;
-
- if (ImportRegex.match(Line, &Matches)) {
+ } else if (Trimmed.starts_with("//")) {
+ // Associating comments within the imports with the nearest import below.
+ if (HasImport)
+ AssociatedCommentLines.push_back(Line);
+ } else if (Trimmed.starts_with("/*")) {
+ const auto EndPos = Code.find("*/", Prev + 2);
+ Pos = EndPos != StringRef::npos ? Code.find('\n', EndPos + 2)
+ : StringRef::npos;
----------------
owenca wrote:
As suggested in https://github.com/llvm/llvm-project/pull/177326#discussion_r2778877233:
```suggestion
Pos = Code.find("*/", Pos + 2);
if (Pos != StringRef::npos)
Pos = Code.find('\n', Pos + 2);
```
https://github.com/llvm/llvm-project/pull/177326
More information about the cfe-commits
mailing list