Skip to content

🚀 Clear assertion greyed-out lines on restart and highlight issue locations#232

Open
svenjeschmitt-ops wants to merge 169 commits intomunich-quantum-toolkit:mainfrom
svenjeschmitt-ops:main
Open

🚀 Clear assertion greyed-out lines on restart and highlight issue locations#232
svenjeschmitt-ops wants to merge 169 commits intomunich-quantum-toolkit:mainfrom
svenjeschmitt-ops:main

Conversation

@svenjeschmitt-ops
Copy link
Contributor

@svenjeschmitt-ops svenjeschmitt-ops commented Dec 18, 2025

Description

This pull request improves the debugging highlight functionality and fixes an issue where greyed-out highlights were not correctly reset between executions.

When an issue is detected in the code, the extension highlights the affected line in red and displays a descriptive error message explaining the nature of the problem. This visual feedback helps users quickly identify both the location of the error and its underlying cause.

A second part of the implementation concerns the assertion functionality. After an assertion failure, the extension greys out all lines of code that cannot have caused the error. While this behaviour is intended, the greyed-out highlights were previously not cleared when a new execution started. As a result, lines remained greyed out until the editor was closed and reopened.

Overall, the highlighting functionality provides an efficient way to show where an error occurred and what caused it. This change introduces an explicit reset of all greyed-out highlights on launch and restart events, ensuring that each execution starts with a clean editor state.

Fixes #(issue)

Checklist:

  • The pull request only contains commits that are focused and relevant to this change.
  • I have added appropriate tests that cover the new/changed functionality.
  • I have updated the documentation to reflect these changes.
  • The changes follow the project's style guidelines and introduce no new warnings.
  • The changes are fully tested and pass the CI checks.
  • I have reviewed my own code changes.

ddsim->qc = std::make_unique<qc::QuantumComputation>(imported);
qc::CircuitOptimizer::flattenOperations(*ddsim->qc, true);
} catch (const ParsingError& e) {
ddsim->lastLoadErrorDetail = e.detail();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Surely we don't need this member variable anymore, right? e.detail() is only used in this function, we might as well make it a local variable.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We still need the member. LoadResult.message is a const char*, and we return ddsim->lastLoadErrorDetail.c_str(). That pointer must stay valid after ddsimLoadCode returns. If we make it a local std::string, the pointer will dangle as soon as the function exits. To remove the member, we’d need to change the API to return an owning string or copy into caller-owned storage.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@svenjeschmitt-ops you resolved this comment, but I think it still isn't addressed, right? The member variable is still in there.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, the member variable is still there intentionally. We can’t safely make it local because LoadResult.message is a const char* that must remain valid after ddsimLoadCode returns, and we return ddsim->lastLoadErrorDetail.c_str(). If we want to remove the member, we’d need to change the API to return an owning string or require caller-provided storage.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gotcha, but then it would be cleaner to have the LoadResult own the string rather than use a pointer I think...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment on lines +1135 to +1138
auto* ddsim = toDDSimulationState(self);
if (!ddsim->ready) {
return ERROR;
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry to bother you on this, but I'd actually appreciate a response here 😅

@svenjeschmitt-ops svenjeschmitt-ops force-pushed the main branch 2 times, most recently from fdfd0c8 to 0606738 Compare February 15, 2026 07:54
Copy link
Collaborator

@DRovara DRovara left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @svenjeschmitt-ops, here's the latest review.

There's just 2 remaining points: the open discussion and the unneeded member variable. It would be cool if we could fix that soon so that the PR can be merged before it deviates too much from the main branch.

Comment on lines +1135 to +1138
auto* ddsim = toDDSimulationState(self);
if (!ddsim->ready) {
return ERROR;
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just in case you responded: I still cannot see any response from you here. Please make sure that no orange "Pending" symbol is shown next to your comments.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants