Open PaulKlint opened 1 month ago
These are very nice ideas. Thanks
Debugging steps are fully controlled by grammar annotations in Rascal.rsc.
Many Popup menu options are a design artefact carried over by the JDT from eclipse. I would propose we use the more LSP-native interaction designs like lenses, hints and code actions.
But these suggestions, however we design them, sound to me of the "how did we ever do without"-kind.
As already mentioned above, popup menus are used widely in VsCode to start execution, debugging etc. It maybe the case though, that these interactions are VSCode-specific and not LSP-specific.
In addition, I think that the use of code lenses to start execution (although funny) has its disadvantages:
I'm guessing these menus are Eclipse specific, because the Java support in VScode is fully based on porting the Eclipse support for java. The rest of VScode and the LSP works more with commands under keyboard access and editor features.
But that's very true what you say; the lenses don't work for the resource views at all. And that's not useful.
Perhaps we can infer popup menu entries for files, from the lenses that are tagged to the entire file and have the best of both worlds. That way we program the feature once, and we get access in the UI in several useful ways.
There are a few things I want to add. And I agree with Jurgen, some of the patterns you've observed Paul are specific to how the Java VS Code extension has designed the interaction, which indeed has some Eclipse style interactions in there.
I find that the extension documentation of VS Code has quite some interesting guidelines for extension authors. An often repeated advice is not to expose the same feature in multiple places. But specifically around execution & code lenses & debugging, there is not a real UX guideline yet.
If you look at the debugging user guide it's all about the launch configurations. This is a point where developing the rascal debugger we spent quite some effort on (@yami2200 spent quite a few weeks on just this topic), so let met share those insights.
launch.json
file, with the exception that if there are no configurations in the whole workspace, there is some fallback behavior that you can configure. Rascal already does this, if you press the "play" triagle without any launch configurations, you'll get the REPL with that module active.:set debugging true
(also discussed in usethesource/rascal#1994 ) was chosen since we wanted to soft launch the debugger. we need better discovery of it.I think one of the problems is that right now, the way we "launch" rascal programs (import into a REPL and run it) is not really aligned with launch configuration assumptions in VS Code. Especially if they stay open for a long time. We could investigate how other extensions with REPLs have solved this?
Aside from that, I agree we need to make debugging more discoverable. But it will involve some effort, especially since we're not a regular process that is launched. Maybe we should model the "attach" style debuggging configurations for remote java processes. But we would have to figure out a way to automatically generate them, without spamming the launch configuration.
First of all, the VSCode plugin for Rascal already gives a fantastic user experience. Here are some suggestions to make it even better
Running a Rascal module via the Explorer
Right clicking on a file name in the Explorer gives a menu with entries:
can we make these work for Rascal?
When positioned on a Java file the following entries are added:
It would be very convenient to have entries
Debugging
Starting the debugger right now is uncool. The only option that really works is typing
:set debugging true
in the consoleJump over a conditional statement jumps over the whole statement rather than over the condition (a long standing, very irritating, issue)
It would be very convenient during debugging to display the text AND the ParseTree when showing values when hovering over a variable of type ParseTree.