gitpod-io / gitpod

The developer platform for on-demand cloud development environments to create software faster and more securely.
https://www.gitpod.io
GNU Affero General Public License v3.0
12.68k stars 1.21k forks source link

Broken links in Gitpod VS Code browser IDE hover widget #16494

Open jankeromnes opened 1 year ago

jankeromnes commented 1 year ago

Bug description

When using a tool like https://github.com/autometrics-dev/autometrics-rs in Gitpod (VS Code browser), which adds localhost links with a specific query parameter to hover messages in the IDE, we can observe that clicking on these links doesn't work in VS Code browser.

Here is an IDE hover message with a few links (to localhost:9090) in it:

Screenshot 2023-02-21 at 12 20 56

However, when you click on them in Gitpod VS Code browser, the opened window shows an error that is due to a malformed query:

Screenshot 2023-02-21 at 12 53 24

If we look at the differences between the URL before Gitpod's rewrite (i.e. http://localhost:9090/...) and after Gitpod's rewrite (i.e. https://9090-<workspace_ID>.<cluster>.gitpod.io/...), we can observe several suspicious changes in the URL's query parameter:

Screenshot 2023-02-21 at 12 19 23

Steps to reproduce

  1. Open https://gitpod.io/#https://github.com/autometrics-dev/autometrics-rs
  2. Search for an occurrence of the #[autometrics macro in the code
  3. Hover over the symbol name that is just below this macro -- this will open a hover widget with some links in it
  4. Click on Request Rate (the first link)

Workspace affected

No response

Expected behavior

This should work equally well in VS Code browser and VS Code desktop.

But instead, it fails in Gitpod's VS Code browser.

Example repository

https://github.com/autometrics-dev/autometrics-rs

Anything else?

As you can see in the diff screenshot above, Gitpod's URL rewriter seems to be escaping or unescaping various characters in the link's query parameter:

Question: Why does Gitpod seem to change anything about the query parameter? I would assume that it only needs to change the protocol + hostname + port, and leave the rest of URLs 100% unchanged. 💭

jeanp413 commented 1 year ago

Upstream issue https://github.com/microsoft/vscode/issues/85930

jeanp413 commented 1 year ago

Partially fixed in insiders, remaining edge case is if the query part contains a %26(&)