@@ -107,55 +107,52 @@ codeLensProvider :: PluginMethodHandler IdeState Method_TextDocumentCodeLens
107
107
codeLensProvider ideState pId CodeLensParams {_textDocument = TextDocumentIdentifier uri} = pluginResponse $ do
108
108
mode <- liftIO $ runAction " codeLens.config" ideState $ usePropertyAction # mode pId properties
109
109
nfp <- getNormalizedFilePath uri
110
- case Shake. getSourceFileOrigin nfp of
111
- Shake. FromDependency -> pure $ InL []
112
- Shake. FromProject -> do
113
- env <- hscEnv . fst
114
- <$> (handleMaybeM " Unable to get GhcSession"
115
- $ liftIO
116
- $ runAction " codeLens.GhcSession" ideState (useWithStale GhcSession nfp)
117
- )
118
- tmr <- fst <$> (
119
- handleMaybeM " Unable to TypeCheck"
120
- $ liftIO
121
- $ runAction " codeLens.TypeCheck" ideState (useWithStale TypeCheck nfp)
122
- )
123
- bindings <- fst <$> (
124
- handleMaybeM " Unable to GetBindings"
125
- $ liftIO
126
- $ runAction " codeLens.GetBindings" ideState (useWithStale GetBindings nfp)
127
- )
128
- (gblSigs@ (GlobalBindingTypeSigsResult gblSigs'), gblSigsMp) <-
129
- handleMaybeM " Unable to GetGlobalBindingTypeSigs"
110
+ env <- hscEnv . fst
111
+ <$> (handleMaybeM " Unable to get GhcSession"
112
+ $ liftIO
113
+ $ runAction " codeLens.GhcSession" ideState (useWithStale GhcSession nfp)
114
+ )
115
+ tmr <- fst <$> (
116
+ handleMaybeM " Unable to TypeCheck"
130
117
$ liftIO
131
- $ runAction " codeLens.GetGlobalBindingTypeSigs" ideState (useWithStale GetGlobalBindingTypeSigs nfp)
132
-
133
- diag <- liftIO $ atomically $ getDiagnostics ideState
134
- hDiag <- liftIO $ atomically $ getHiddenDiagnostics ideState
135
-
136
- let toWorkSpaceEdit tedit = WorkspaceEdit (Just $ Map. singleton uri $ tedit) Nothing Nothing
137
- generateLensForGlobal mp sig@ GlobalBindingTypeSig {gbRendered} = do
138
- range <- toCurrentRange mp =<< srcSpanToRange (gbSrcSpan sig)
139
- tedit <- gblBindingTypeSigToEdit sig (Just gblSigsMp)
140
- let wedit = toWorkSpaceEdit [tedit]
141
- pure $ generateLens pId range (T. pack gbRendered) wedit
142
- generateLensFromDiags f =
143
- [ generateLens pId _range title edit
144
- | (dFile, _, dDiag@ Diagnostic {_range = _range}) <- diag ++ hDiag
145
- , dFile == nfp
146
- , (title, tedit) <- f dDiag
147
- , let edit = toWorkSpaceEdit tedit
148
- ]
149
- -- `suggestLocalSignature` relies on diagnostic, if diagnostics don't have the local signature warning,
150
- -- the `bindings` is useless, and if diagnostic has, that means we parsed success, and the `bindings` is fresh.
151
- pure $ InL $ case mode of
152
- Always ->
153
- mapMaybe (generateLensForGlobal gblSigsMp) gblSigs'
154
- <> generateLensFromDiags
155
- (suggestLocalSignature False (Just env) (Just tmr) (Just bindings)) -- we still need diagnostics for local bindings
156
- Exported -> mapMaybe (generateLensForGlobal gblSigsMp) (filter gbExported gblSigs')
157
- Diagnostics -> generateLensFromDiags
158
- $ suggestSignature False (Just env) (Just gblSigs) (Just tmr) (Just bindings)
118
+ $ runAction " codeLens.TypeCheck" ideState (useWithStale TypeCheck nfp)
119
+ )
120
+ bindings <- fst <$> (
121
+ handleMaybeM " Unable to GetBindings"
122
+ $ liftIO
123
+ $ runAction " codeLens.GetBindings" ideState (useWithStale GetBindings nfp)
124
+ )
125
+ (gblSigs@ (GlobalBindingTypeSigsResult gblSigs'), gblSigsMp) <-
126
+ handleMaybeM " Unable to GetGlobalBindingTypeSigs"
127
+ $ liftIO
128
+ $ runAction " codeLens.GetGlobalBindingTypeSigs" ideState (useWithStale GetGlobalBindingTypeSigs nfp)
129
+
130
+ diag <- liftIO $ atomically $ getDiagnostics ideState
131
+ hDiag <- liftIO $ atomically $ getHiddenDiagnostics ideState
132
+
133
+ let toWorkSpaceEdit tedit = WorkspaceEdit (Just $ Map. singleton uri $ tedit) Nothing Nothing
134
+ generateLensForGlobal mp sig@ GlobalBindingTypeSig {gbRendered} = do
135
+ range <- toCurrentRange mp =<< srcSpanToRange (gbSrcSpan sig)
136
+ tedit <- gblBindingTypeSigToEdit sig (Just gblSigsMp)
137
+ let wedit = toWorkSpaceEdit [tedit]
138
+ pure $ generateLens pId range (T. pack gbRendered) wedit
139
+ generateLensFromDiags f =
140
+ [ generateLens pId _range title edit
141
+ | (dFile, _, dDiag@ Diagnostic {_range = _range}) <- diag ++ hDiag
142
+ , dFile == nfp
143
+ , (title, tedit) <- f dDiag
144
+ , let edit = toWorkSpaceEdit tedit
145
+ ]
146
+ -- `suggestLocalSignature` relies on diagnostic, if diagnostics don't have the local signature warning,
147
+ -- the `bindings` is useless, and if diagnostic has, that means we parsed success, and the `bindings` is fresh.
148
+ pure $ InL $ case mode of
149
+ Always ->
150
+ mapMaybe (generateLensForGlobal gblSigsMp) gblSigs'
151
+ <> generateLensFromDiags
152
+ (suggestLocalSignature False (Just env) (Just tmr) (Just bindings)) -- we still need diagnostics for local bindings
153
+ Exported -> mapMaybe (generateLensForGlobal gblSigsMp) (filter gbExported gblSigs')
154
+ Diagnostics -> generateLensFromDiags
155
+ $ suggestSignature False (Just env) (Just gblSigs) (Just tmr) (Just bindings)
159
156
160
157
generateLens :: PluginId -> Range -> T. Text -> WorkspaceEdit -> CodeLens
161
158
generateLens pId _range title edit =
0 commit comments