mirror of
https://github.com/logos-co/logos-cpp-sdk.git
synced 2026-08-31 09:41:06 +00:00
fix: attach doc comments to same-line logos_events/access-specifier decls
Address review feedback: the first pass cleared pendingDoc on every specifier match, so a `///` comment above a collapsed `logos_events : void foo();` did not attach to the event. In the collapsed form there is nowhere else to put the doc comment, so this left documentation formatting-dependent — the same bug class as #76, one level up. Only clear pendingDoc for a *bare* specifier (a section boundary, matching Qt `signals:` semantics); when a declaration shares the line, keep the pending doc so the declaration parser attaches it. Extend the fixture with a `///`-documented same-line event and assert the description is captured. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
e2f28b9245
commit
5231663a33
@@ -337,12 +337,13 @@ ImplParseResult parseImplHeader(const QString& headerPath,
|
||||
// event prototypes from. (At preprocess time, `logos_events`
|
||||
// expands to `public`, but the raw source still carries the
|
||||
// token we recognise here.)
|
||||
bool specifierStripped = false;
|
||||
while (true) {
|
||||
QRegularExpressionMatch em = eventsRe.match(line);
|
||||
if (em.hasMatch()) {
|
||||
state = InLogosEvents;
|
||||
pendingDoc.clear();
|
||||
line = line.mid(em.capturedEnd()).trimmed();
|
||||
specifierStripped = true;
|
||||
continue;
|
||||
}
|
||||
QRegularExpressionMatch am = accessRe.match(line);
|
||||
@@ -350,12 +351,22 @@ ImplParseResult parseImplHeader(const QString& headerPath,
|
||||
QString spec = am.captured(1);
|
||||
if (spec == "public") state = InPublic;
|
||||
else state = InPrivate;
|
||||
pendingDoc.clear();
|
||||
line = line.mid(am.capturedEnd()).trimmed();
|
||||
specifierStripped = true;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
// A *bare* specifier (nothing after the colon) is a section
|
||||
// boundary and resets any pending doc-comment, mirroring Qt's
|
||||
// `signals:`. But when a declaration shares the line, the doc
|
||||
// comment preceding the whole line must still attach to that
|
||||
// declaration — otherwise documentation, like the declaration
|
||||
// itself (#76), would become formatting-dependent. So only clear
|
||||
// here for the bare form; the same-line form keeps pendingDoc and
|
||||
// attaches it in the declaration parser below.
|
||||
if (specifierStripped && line.isEmpty())
|
||||
pendingDoc.clear();
|
||||
|
||||
// Only doc comments (/// or /** ... */ / /*! ... */) accumulate as
|
||||
// the pending description for the next method. Plain // and /*
|
||||
|
||||
Reference in New Issue
Block a user