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

Problematic makeRelativeToProject use in importGQLDocument #843

Open
goertzenator opened this issue Aug 18, 2023 · 1 comment
Open

Problematic makeRelativeToProject use in importGQLDocument #843

goertzenator opened this issue Aug 18, 2023 · 1 comment

Comments

@goertzenator
Copy link

Summary: The makeRelativeToProject call in importQGLDocument should be removed.

Detail:

importQGLDocument is using the function makeRelativeToProject internally which implies that the parameter to importQGLDocument should be a relative path. However in at least one of the examples the path passed is implied to be an absolute path due to the explicit makeRelativeToProject call:

makeRelativeToProject "src/Server/API/simple.gql" >>= importGQLDocument

In the case above, makeRelativeToProject ends up getting called twice; this works by coincidence because the project root usually resolves to "./".

But in multi-component projects this is not the case and the extra makeRelativeToProject will cause problems. In my case this was compounded by a bug in Haskell Language Server which is returning an incorrect root for multi-component projects; the internal call to makeRelativeToProject made the HLS bug even harder to work around.

So, that's why I think makeRelativeToProject should be removed from importQGLDocument. The exact call I'm talking about is here. I also see a usage in readWith; that should probably go too.

@goertzenator
Copy link
Author

Additional thought: For maximum flexibility the QGL document could be accepted as a string instead of as a filename. The HLS issue linked above suggests the use of the embed-file package for more robust file imports. With this package you could do something like this:

embedStringFile "myschema.gql" >>= importGQLString

Where importGQLString accepts the doc as a string. One also gains more flexibility to generate it in other ways such as using external tools or downloading direct from a URL.

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

No branches or pull requests

1 participant