Ubisam-MobileGit/tasks/058-outline-for-windows-cpp.md
choiminyeong 3c1bd1adb2 TASK-058: correct the note about copy
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-28 16:08:04 +09:00

70 lines
2.7 KiB
Markdown

# TASK-058: The outline was empty for C++ written on Windows
Status: implemented; required checks pass; installed on the product owner's Z Fold7, awaiting their confirmation
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.