Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Inline variable refactor doesn't work for let bindings inside do block #4408

Open
BogdanYarotsky opened this issue Sep 21, 2024 · 4 comments
Labels
component: hls-retrie-plugin status: blocked Not actionable, because blocked by upstream/GHC etc. type: bug Something isn't right: doesn't work as intended, documentation is missing/outdated, etc..

Comments

@BogdanYarotsky
Copy link

Your environment

Which OS do you use?
MacOS

Which version of GHC do you use and how did you install it?
Tested with GHC 9.4.8 installed with ghcup.

How is your project built (alternative: link to the project)?
Cabal (exe + lib + tests). Link: https://github.com/BogdanYarotsky/async-http-client/blob/main/app/Main.hs

Which LSP client (editor/plugin) do you use?
VS Code + Haskell extension

Which version of HLS do you use and how did you install it?
2.9.0.1 installed from ghcup.

Have you configured HLS in any way (especially: a hie.yaml file)?
No

Steps to reproduce

  1. Enter the following code
data Uri = Uri
  { host :: String,
    path :: String
  }

simpleHttpGet :: Uri -> IO String
simpleHttpGet uri' = 
  return "doesn't matter"

main :: IO ()
main = do
  let path' = "/"
  response <- simpleHttpGet (Uri "example.com" path')
  putStrLn response
  1. Try to inline the let binding inside a do block using a code action.

Expected behavior

In the example path’ should be replaced with “/“ in the place of invocation (Uri constructor) like this:


main = do
  response <- simpleHttpGet (Uri "example.com" "/")
  putStrLn response


Actual behavior

2 cryptic error messages from HLS and no changes to the code:

  1. retrie: Internal Error: Retrie - inline produced no changes
  2. Error condition, please check your setup and/or the issue tracker: retrie: Internal Error: Retrie - inline produced no changes

Please check the video below:

Screen.Recording.2024-09-21.at.09.33.58.mov

May be related to issue #4374

@BogdanYarotsky BogdanYarotsky added status: needs triage type: bug Something isn't right: doesn't work as intended, documentation is missing/outdated, etc.. labels Sep 21, 2024
@BogdanYarotsky
Copy link
Author

Also tested with latest GHC (9.10.1), the code action is missing all together.
image

@fendor fendor added component: hls-retrie-plugin status: blocked Not actionable, because blocked by upstream/GHC etc. and removed status: needs triage labels Sep 22, 2024
@fendor
Copy link
Collaborator

fendor commented Sep 22, 2024

Hi, thank you for your bug report!

This looks like it is a bug with hls-retrie-plugin, which is powered by https://github.com/facebookincubator/retrie.

The CodeAction doesn't show up at all with GHC 9.10.1 because retrie doesn't work with 9.10.1

@BogdanYarotsky
Copy link
Author

Hi @fendor, thank you for a quick reply! Is there anything I can do to help with the fix of this issue? I would be happy to contribute.

@fendor
Copy link
Collaborator

fendor commented Sep 22, 2024

Unfortunately, the issue is complicated and likely not easy to fix. You can try to reproduce the issue with only the retrie executable and open a bug report. If you manage to write a reproducer, you can try to look into the retrie codebase, maybe write a failing test case and start on a fix.

However, support for 9.10.1 is an even bigger challenge facebookincubator/retrie#64, and potentially impossible due to changes to ghc-exactprint. Additionally, retrie seems to be no longer actively developed (only maintenance work afaict), and we have discussed dropping the hls-retrie-plugin for that reason.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
component: hls-retrie-plugin status: blocked Not actionable, because blocked by upstream/GHC etc. type: bug Something isn't right: doesn't work as intended, documentation is missing/outdated, etc..
Projects
None yet
Development

No branches or pull requests

2 participants