Skip to content

Empty states and failed navigation are silent, and the resolved log path is never shown #8

Description

@GabrielBBaldez

Three places where the tool window shows nothing and explains nothing. All small, all in StacktalePanel / ReportNavigator.

1. A log with zero reports renders as a blank window

refresh() handles "no file found" with a helpful message (:115-120), but the case where the file exists and yields no reports falls into the else at :139, which sets the detail text to "" and leaves an empty list. That is indistinguishable from a plugin that failed to load.

It is a real state: right after rotation, or a file containing only a session marker and repeat lines.

Fix: in that branch, say so — the VS Code extension words it "No error reports yet — the file has none." — and include the resolved path.

2. Double-clicking a report with no culprit does nothing

ReportNavigator.navigate returns false when there is no frame (:19), and the return value is discarded at StacktalePanel.java:174. The row looks identical to a navigable one.

This is not an edge case: ERROR (no exception): ... reports are a documented class in FORMAT.md with no stack at all, plus every case in the parser-conformance issue.

Fix: when navigate returns false, show a notification or set the detail pane to "report #id has no source frame to open".

3. You cannot tell which errors-ai.log you are reading

findLog() (:150-164) prefers the project root and otherwise takes whatever the index hands back first, from an unordered collection — order is undefined and can change between sessions. In a monorepo with services/orders/errors-ai.log and services/billing/errors-ai.log and none at the root, you can be debugging the wrong service with no way to notice.

Fix (minimum): show the resolved path in the tool-window subtitle. Fix (proper): the path setting in #5, plus a combo box in the toolbar listing every indexed errors-ai.log.

Related

Jump-to-culprit has the same ambiguity: the report carries only the simple class name (StackDistiller uses simpleName(...)), so OrderService.java in two modules is unresolvable from the frame alone, and ReportNavigator.java:23-25 takes .next() from an unordered collection. On more than one match, show a popup. Better: rank candidates using the abbreviated logger FQCN on the report's log: line, which is already in the block.

Verify

./gradlew runIde against a project with an empty errors-ai.log, a no-throwable report, and two modules each containing an OrderService.java.

Metadata

Metadata

Assignees

Labels

bugSomething isn't workinggood first issueGood for newcomers

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions