BBRUNER PatrickAdd command-line navigation to a log line (#58)
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
update interfaces and a few more smaller fixes | 6 个月前 | |
update interfaces and a few more smaller fixes | 6 个月前 | |
update interfaces and a few more smaller fixes | 6 个月前 | |
extracting more interfaces from the LogWindow and LogfileReader, and using the ILogfileReader interface for real | 5 个月前 | |
update interfaces and a few more smaller fixes | 6 个月前 | |
refactor: split ILogWindow into role interfaces Candidate 3 of the 2026-07-26 architecture review. ColumnizerCallback and FilterPipe took the whole ILogWindow for a fraction of it, so Core fakes had to implement the full interface. Carve role interfaces sized to each Core consumer: - ILogLineSource (LineCount, GetLineMemory, GetCurrentFileName) — the columnizer callbacks and, as the Core face of the paint context, the UI's ILogPaintContextUI. The empty ILogPaintContext marker is deleted and IFileViewContext.LogPaintContext retyped to it. - ILineSelectable (SelectLine) — FilterPipe.OriginWindow (was LogWindow). - ISessionSnapshotSource (GatherSessionSnapshot) — FilterPipe.ResultWindow (was OwnLogWindow). ILogWindow survives as the empty composition of the three, kept only for identity holders (the filter-list / highlight-group changed event args). Six members that had no interface-typed caller were dropped from it; the dead GetLogLineMemoryWithWait was removed from LogWindow. New ColumnizerCallbackTests pin both callbacks against a hand-rolled three-member ILogLineSource fake — no Log Window, no Logfile Reader. CONTEXT.md gains the Log Window roles section. | 2 个月前 | |
refactor: split ILogWindow into role interfaces Candidate 3 of the 2026-07-26 architecture review. ColumnizerCallback and FilterPipe took the whole ILogWindow for a fraction of it, so Core fakes had to implement the full interface. Carve role interfaces sized to each Core consumer: - ILogLineSource (LineCount, GetLineMemory, GetCurrentFileName) — the columnizer callbacks and, as the Core face of the paint context, the UI's ILogPaintContextUI. The empty ILogPaintContext marker is deleted and IFileViewContext.LogPaintContext retyped to it. - ILineSelectable (SelectLine) — FilterPipe.OriginWindow (was LogWindow). - ISessionSnapshotSource (GatherSessionSnapshot) — FilterPipe.ResultWindow (was OwnLogWindow). ILogWindow survives as the empty composition of the three, kept only for identity holders (the filter-list / highlight-group changed event args). Six members that had no interface-typed caller were dropped from it; the dead GetLogLineMemoryWithWait was removed from LogWindow. New ColumnizerCallbackTests pin both callbacks against a hand-rolled three-member ILogLineSource fake — no Log Window, no Logfile Reader. CONTEXT.md gains the Log Window roles section. | 2 个月前 | |
restructure tests for better organisation added different progress reporter | 5 个月前 | |
Add command-line navigation to a log line (#58) | 22 天前 | |
refactor: split ILogWindow into role interfaces Candidate 3 of the 2026-07-26 architecture review. ColumnizerCallback and FilterPipe took the whole ILogWindow for a fraction of it, so Core fakes had to implement the full interface. Carve role interfaces sized to each Core consumer: - ILogLineSource (LineCount, GetLineMemory, GetCurrentFileName) — the columnizer callbacks and, as the Core face of the paint context, the UI's ILogPaintContextUI. The empty ILogPaintContext marker is deleted and IFileViewContext.LogPaintContext retyped to it. - ILineSelectable (SelectLine) — FilterPipe.OriginWindow (was LogWindow). - ISessionSnapshotSource (GatherSessionSnapshot) — FilterPipe.ResultWindow (was OwnLogWindow). ILogWindow survives as the empty composition of the three, kept only for identity holders (the filter-list / highlight-group changed event args). Six members that had no interface-typed caller were dropped from it; the dead GetLogLineMemoryWithWait was removed from LogWindow. New ColumnizerCallbackTests pin both callbacks against a hand-rolled three-member ILogLineSource fake — no Log Window, no Logfile Reader. CONTEXT.md gains the Log Window roles section. | 2 个月前 | |
Remove dead stream-reader spikes (Channel, Pipeline, PipelineNew) These three readers were performance spikes attempting to beat .NET's buffered StreamReader. They were never wired into the ReaderType enum or the factory, so the factory could only ever produce Legacy, System, or SystemDirect. Channel and PipelineNew were referenced nowhere; Pipeline lived only in a doc comment and one test. The spikes' payoff was the finding that stream I/O is not the read-path bottleneck (buffer creation and line-location are) — already captured in PositionAwareStreamReaderDirect. The code artifacts are spent. - Delete Channel/Pipeline/PipelineNew (~2,186 lines) - Remove the 7 Pipeline* tests (seeking/unicode/max-length/empty-line behaviour is already covered by the System and Direct tests) - Update ILogStreamReader doc comment to list the three real readers and drop the NotSupportedException reference to the removed Pipeline reader The three-reader seam is kept deliberately: it varies across a speed-vs-format-robustness axis (see ADR 0006). | 3 个月前 | |
Lift char-block detachment onto the reader interface The LogfileReader read loop type-checked `reader is …System/…Direct` at three sites (six branches) to call DetachBlocks(), reaching through the ILogStreamReaderMemory seam to the concrete readers. Adding a reader meant editing every site, and the Legacy reader was silently skipped — its pooling allocator was never detached and never disposed, orphaning its rented blocks (a latent ArrayPool leak). Add DetachCharBlocks() to ILogStreamReaderMemory so the loop calls it unconditionally: - Direct: rename DetachBlocks() -> DetachCharBlocks(); drop the dead `BlockAllocator => null` shim. - System/Legacy: implement DetachCharBlocks() over their allocator and make BlockAllocator private — detachment is the only seam-crossing surface now. - Legacy: add the Dispose override System already had, closing the leak. - LogfileReader: six `is`-branches collapse to one DetachCharBlocks() call per site. Legacy now participates uniformly. Tests migrated off reader.BlockAllocator onto the public DetachCharBlocks() seam. | 3 个月前 | |
update interfaces and a few more smaller fixes | 6 个月前 | |
Add command-line navigation to a log line (#58) | 22 天前 | |
update interfaces and a few more smaller fixes | 6 个月前 | |
refactor: split ILogWindow into role interfaces Candidate 3 of the 2026-07-26 architecture review. ColumnizerCallback and FilterPipe took the whole ILogWindow for a fraction of it, so Core fakes had to implement the full interface. Carve role interfaces sized to each Core consumer: - ILogLineSource (LineCount, GetLineMemory, GetCurrentFileName) — the columnizer callbacks and, as the Core face of the paint context, the UI's ILogPaintContextUI. The empty ILogPaintContext marker is deleted and IFileViewContext.LogPaintContext retyped to it. - ILineSelectable (SelectLine) — FilterPipe.OriginWindow (was LogWindow). - ISessionSnapshotSource (GatherSessionSnapshot) — FilterPipe.ResultWindow (was OwnLogWindow). ILogWindow survives as the empty composition of the three, kept only for identity holders (the filter-list / highlight-group changed event args). Six members that had no interface-typed caller were dropped from it; the dead GetLogLineMemoryWithWait was removed from LogWindow. New ColumnizerCallbackTests pin both callbacks against a hand-rolled three-member ILogLineSource fake — no Log Window, no Logfile Reader. CONTEXT.md gains the Log Window roles section. | 2 个月前 | |
extracting more interfaces from the LogWindow and LogfileReader, and using the ILogfileReader interface for real | 5 个月前 | |
extracting more interfaces from the LogWindow and LogfileReader, and using the ILogfileReader interface for real | 5 个月前 | |
missing diagnostics if | 5 个月前 | |
extracting more interfaces from the LogWindow and LogfileReader, and using the ILogfileReader interface for real | 5 个月前 | |
update interfaces and a few more smaller fixes | 6 个月前 | |
refactor: inject IPluginRegistry into LogWindow Replaces the 12 static PluginRegistry.Instance reaches in LogWindow with a constructor-injected IPluginRegistry, mirroring the IConfigManager pattern. Widens IPluginRegistry with RegisteredContextMenuPlugins and FindKeywordActionPluginByName (both already on the concrete registry) so the keyword-action trigger lookup and context-menu population go through the seam. | 2 个月前 | |
feat: add TimestampLocator — pure timestamp lookup over ILogfileReader Ticket 1 of the Timestamp Locator extraction (candidate 6, docs/improve/logwindow-architecture-review.html). Ports LogWindow's four timestamp-lookup methods (binary search + forward/backward scan) into a Core module tested against a fake ITimestampSource — no WinForms type involved. Lands unused; LogWindow is migrated in the next commit. FindForward returns a tuple instead of using a ref int (closes the referenced-int shape of issue #404 for this seam), and positions the Columnizer callback on every line it inspects in both directions — the original forward scan never did, unlike its backward counterpart. 32 tests cover both scan directions, the binary search, the negated near-miss return on a search miss (including the -0/hit-at-line-zero ambiguity, preserved rather than "fixed" since it's inherent to the ported algorithm), and cancellation. | 2 个月前 | |
refactor: split ILogWindow into role interfaces Candidate 3 of the 2026-07-26 architecture review. ColumnizerCallback and FilterPipe took the whole ILogWindow for a fraction of it, so Core fakes had to implement the full interface. Carve role interfaces sized to each Core consumer: - ILogLineSource (LineCount, GetLineMemory, GetCurrentFileName) — the columnizer callbacks and, as the Core face of the paint context, the UI's ILogPaintContextUI. The empty ILogPaintContext marker is deleted and IFileViewContext.LogPaintContext retyped to it. - ILineSelectable (SelectLine) — FilterPipe.OriginWindow (was LogWindow). - ISessionSnapshotSource (GatherSessionSnapshot) — FilterPipe.ResultWindow (was OwnLogWindow). ILogWindow survives as the empty composition of the three, kept only for identity holders (the filter-list / highlight-group changed event args). Six members that had no interface-typed caller were dropped from it; the dead GetLogLineMemoryWithWait was removed from LogWindow. New ColumnizerCallbackTests pin both callbacks against a hand-rolled three-member ILogLineSource fake — no Log Window, no Logfile Reader. CONTEXT.md gains the Log Window roles section. | 2 个月前 | |
Font is now used correctly - in all gridviews | 4 个月前 | |
update interfaces and a few more smaller fixes | 6 个月前 |