Ubisam-MobileGit/tasks/058-outline-for-windows-cpp.md
choiminyeong f6ac20c8ed TASK-063: task records say what is actually open
No task waits on a Codex review; the redesign tasks are confirmed on the
product owner's Z Fold7; TASK-016's leftovers are on hold; no biometric
reauthentication.

Agent: main (opus)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 20:25:49 +09:00

70 lines
2.7 KiB
Markdown

# TASK-058: The outline was empty for C++ written on Windows
Status: implemented; required checks pass; confirmed by the human product owner on their Z Fold7 (2026-09-29)
Owner: Claude
Reviewer: human product owner
## Outcome
The human product owner reported that a `.cpp` and its `.h` showed no classes or functions in the
side pane, although both plainly contain them.
## Cause
Reproduced in a unit test, not on the owner's files (their repository is private and was not read).
1. Lines ending in `\r\n`. The viewer split text on `\n` only, so every line of a file written on
Windows ended in an invisible `\r`. The patterns that recognize a method must match a whole
line, and `.` does not match `\r`, so no method was ever recognized -- in C++ and in C# alike.
A class was still found, because that pattern only has to match the start of the line. A `.cpp`
holding only function definitions therefore had an empty outline.
2. Found while reproducing, in MFC-style code: a macro in a class body (`DECLARE_MESSAGE_MAP()`)
was listed as a method, and because it has no `;` the declaration on the next line was skipped.
3. Found while reproducing: a block opened in both branches of an `#if`/`#else` was counted twice,
leaving a scope that never closed; every function after it in the file was missing.
## Scope
- Included: the three causes above, with a test for each.
- Excluded: declarations produced by macros, and declarations split across lines before their
name. The outline recognizes patterns; it is not a parser.
## Writable paths
- `app/src/main/java/com/ubisam/ubgitea/feature/codebrowser/`
- `app/src/test/java/com/ubisam/ubgitea/feature/codebrowser/`
- `tasks/`, `docs/`
## Acceptance criteria
- [x] A header, a source file and a C# file with `\r\n` line endings list their methods.
- [x] A capitalized macro in a class body is not listed and does not hide what follows it.
- [x] A block opened in each branch of a conditional is counted once.
## Security and privacy
No additional concerns.
## Required checks
```text
./gradlew compileDebugKotlin compileDebugUnitTestKotlin testDebugUnitTest assembleDebug lintDebug
```
## Evidence
- Required checks pass: 435 unit tests, 0 failures; lint 0 errors.
- Installed on the SM-F966N over wireless `adb`.
- Not verified against the files the product owner was reading. If their outline is still empty,
the cause is something these three do not cover, and a sample of the file is needed.
## Known limitations
- A header whose class showed nothing at all is not explained by cause 1, which still finds
classes. It may be explained by the owner looking at the `.cpp`'s outline while both were open.
- "Copy" is unchanged: it copies the file's text as received, `\r\n` included.
## Review findings
None yet.