Skip to content
This repository has been archived by the owner on Jan 2, 2021. It is now read-only.

Enhancements to top-level signatures #232

Merged
merged 8 commits into from
Dec 16, 2019
Merged

Conversation

serras
Copy link
Contributor

@serras serras commented Dec 11, 2019

I am trying to implement #231. However, I think I have done something very wrong, because I get a BadDependency error message.
@cocreature @ndmitchell could you provide some help? Thanks in advance :)

@@ -104,7 +104,8 @@ typecheckModule (IdeDefer defer) packageState deps pm =
let modSummary = pm_mod_summary pm
modSummary' <- initPlugins modSummary
(warnings, tcm) <- withWarnings "typecheck" $ \tweak ->
GHC.typecheckModule $ demoteIfDefer pm{pm_mod_summary = tweak modSummary'}
GHC.typecheckModule $ enableTopLevelWarnings
Copy link
Collaborator

Choose a reason for hiding this comment

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

I’ve brought this up a couple of times before but I really dislike the idea of enabling warnings by default. If users care about these warnings, they should enable them in their cabal file. I don’t want to see a bunch of warnings in my IDE that I haven’t enabled. If we manage to make this work such that we only show the codelenses by default but not the warnings, I could be convinced that this is fine but given that the codelenses are based on diagnostics this doesn’t seem trivial and I think the complexity of trying to make this work is probably not worth it.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I am happy both ways. I can attempt to write something which remembers whether these warning were already in effect at the beginning, so that we can filter out diagnostics if needed. But I agree: it might be quite complicated.
@ndmitchell you seemed to have an idea of how to achieve this in #231. Any suggestions?

Copy link
Collaborator

Choose a reason for hiding this comment

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

Code which doesn't have a warning is more likely to have top-level signatures omitted, and more likely to benefit from having them as code lenses, since I see them as helpful docs, rather than a mechanism to easily add them. I separately think that turning on some warnings in the IDE vs compiler is reasonable, but see that as unrelated to this patch.

I'm not convinced the code is that complex. You turn on the warning always, but demote the warning to an info if errMsgReason is missing top level signatures. At some point (if we want) we ditch info level diagnostics before sending them to the LSP client. A few lines here, a few lines (that will be generally useful) in the diagnostic sending code.

Copy link
Collaborator

Choose a reason for hiding this comment

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

I am admittedly a bit biased here, I don’t recall the last time I worked on a project that didn’t have these warnings enabled and that seems to be quite common in the ecosystem in general, so I’m somewhat hesitant to add any complexity (even if it’s probably not too much) to cater to that usecase.

That said, the argument that we’ll need this for other warnings eventually that are less popular is compelling so I’m fine with adding it.

Copy link
Collaborator

Choose a reason for hiding this comment

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

None of my projects have it turned on :)

Copy link
Collaborator

Choose a reason for hiding this comment

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

That’s your loss :trollface:

Copy link
Collaborator

Choose a reason for hiding this comment

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

My loss is not getting to work with you awesome guys every day anymore!

Copy link
Collaborator

Choose a reason for hiding this comment

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

🤗

Copy link
Contributor Author

Choose a reason for hiding this comment

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

It took a while, but finally I managed to "degrade" warnings about missing signatures to info level if they were not explicitly enabled by the user. They look great in VSCode, since they are shown with a blue underline.

Copy link
Collaborator

@cocreature cocreature left a comment

Choose a reason for hiding this comment

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

Looks great with one minor comment, thank you!

@@ -53,14 +55,16 @@ codeLens
-> CodeLensParams
-> IO (List CodeLens)
codeLens _lsp ideState CodeLensParams{_textDocument=TextDocumentIdentifier uri} = do
diag <- getDiagnostics ideState
-- diag <- getDiagnostics ideState
Copy link
Collaborator

Choose a reason for hiding this comment

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

It looks like this line can be removed?

@cocreature cocreature merged commit 4440a26 into haskell:master Dec 16, 2019
cocreature added a commit that referenced this pull request Dec 16, 2019
I’ve tried out the new behavior added in #232 and it is extremely
noisy, in particular, the warnings enabled by
Opt_WarnMissingLocalSignatures which I don’t want to see. I think for
now it makes more sense to disable them completely. We still show the
codelenses which is somewhat on the edge but at least they don’t
clutter the problems tab/CLI output so I’m fine with keeping those
even if they are not enabled.
pepeiborra pushed a commit to pepeiborra/ide that referenced this pull request Dec 29, 2020
* Try adding a dependency on TypeCheck

* Show warning regardless of the status of -Wall

* Try diagnostics after type checking, again

* Use `useE` instead of `use_` to not get a `BadDependency` error

* Degrade information about signatures if not present in user options

* Fix tests

* Better suggested signatures for polymorphic bindings

* Remove old comment
pepeiborra pushed a commit to pepeiborra/ide that referenced this pull request Dec 29, 2020
* Try adding a dependency on TypeCheck

* Show warning regardless of the status of -Wall

* Try diagnostics after type checking, again

* Use `useE` instead of `use_` to not get a `BadDependency` error

* Degrade information about signatures if not present in user options

* Fix tests

* Better suggested signatures for polymorphic bindings

* Remove old comment
pepeiborra pushed a commit to pepeiborra/ide that referenced this pull request Dec 29, 2020
* Try adding a dependency on TypeCheck

* Show warning regardless of the status of -Wall

* Try diagnostics after type checking, again

* Use `useE` instead of `use_` to not get a `BadDependency` error

* Degrade information about signatures if not present in user options

* Fix tests

* Better suggested signatures for polymorphic bindings

* Remove old comment
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants