@@ -409,7 +409,7 @@ codeActionProvider ideState pluginId (CodeActionParams _ _ documentId _ context)
409409 | let TextDocumentIdentifier uri = documentId
410410 , Just docNormalizedFilePath <- uriToNormalizedFilePath (toNormalizedUri uri)
411411 = do
412- version <- ( ^. LSP. version) <$> getVersionedTextDoc documentId
412+ verTxtDocId <- getVersionedTextDoc documentId
413413 liftIO $ fmap (Right . LSP. List . map LSP. InR ) $ do
414414 allDiagnostics <- atomically $ getDiagnostics ideState
415415
@@ -429,19 +429,19 @@ codeActionProvider ideState pluginId (CodeActionParams _ _ documentId _ context)
429429 pure if | Just modSummaryResult <- modSummaryResult
430430 , Just source <- source
431431 , let dynFlags = ms_hspp_opts $ msrModSummary modSummaryResult ->
432- diags >>= diagnosticToCodeActions dynFlags source pluginId documentId version
432+ diags >>= diagnosticToCodeActions dynFlags source pluginId verTxtDocId
433433 | otherwise -> []
434434 | otherwise -> pure []
435435 if numHintsInDoc > 1 && numHintsInContext > 0 then do
436- pure $ singleHintCodeActions ++ [applyAllAction version ]
436+ pure $ singleHintCodeActions ++ [applyAllAction verTxtDocId ]
437437 else
438438 pure singleHintCodeActions
439439 | otherwise
440440 = pure $ Right $ LSP. List []
441441
442442 where
443- applyAllAction version =
444- let args = Just [toJSON (documentId ^. LSP. uri, version) ]
443+ applyAllAction verTxtDocId =
444+ let args = Just [toJSON verTxtDocId ]
445445 cmd = mkLspCommand pluginId " applyAll" " Apply all hints" args
446446 in LSP. CodeAction " Apply all hints" (Just LSP. CodeActionQuickFix ) Nothing Nothing Nothing Nothing (Just cmd) Nothing
447447
@@ -455,25 +455,24 @@ codeActionProvider ideState pluginId (CodeActionParams _ _ documentId _ context)
455455
456456-- | Convert a hlint diagnostic into an apply and an ignore code action
457457-- if applicable
458- diagnosticToCodeActions :: DynFlags -> T. Text -> PluginId -> TextDocumentIdentifier -> TextDocumentVersion -> LSP. Diagnostic -> [LSP. CodeAction ]
459- diagnosticToCodeActions dynFlags fileContents pluginId documentId version diagnostic
458+ diagnosticToCodeActions :: DynFlags -> T. Text -> PluginId -> VersionedTextDocumentIdentifier -> LSP. Diagnostic -> [LSP. CodeAction ]
459+ diagnosticToCodeActions dynFlags fileContents pluginId verTxtDocId diagnostic
460460 | LSP. Diagnostic { _source = Just " hlint" , _code = Just (InR code), _range = LSP. Range start _ } <- diagnostic
461- , let TextDocumentIdentifier uri = documentId
462461 , let isHintApplicable = " refact:" `T.isPrefixOf` code
463462 , let hint = T. replace " refact:" " " code
464463 , let suppressHintTitle = " Ignore hint \" " <> hint <> " \" in this module"
465464 , let suppressHintTextEdits = mkSuppressHintTextEdits dynFlags fileContents hint
466465 , let suppressHintWorkspaceEdit =
467466 LSP. WorkspaceEdit
468- (Just (Map. singleton uri (List suppressHintTextEdits)))
467+ (Just (Map. singleton (verTxtDocId ^. LSP. uri) (List suppressHintTextEdits)))
469468 Nothing
470469 Nothing
471470 = catMaybes
472471 -- Applying the hint is marked preferred because it addresses the underlying error.
473472 -- Disabling the rule isn't, because less often used and configuration can be adapted.
474473 [ if | isHintApplicable
475474 , let applyHintTitle = " Apply hint \" " <> hint <> " \" "
476- applyHintArguments = [toJSON (AOP (documentId ^. LSP. uri) start hint version )]
475+ applyHintArguments = [toJSON (AOP verTxtDocId start hint)]
477476 applyHintCommand = mkLspCommand pluginId " applyOne" applyHintTitle (Just applyHintArguments) ->
478477 Just (mkCodeAction applyHintTitle diagnostic Nothing (Just applyHintCommand) True )
479478 | otherwise -> Nothing
@@ -515,13 +514,13 @@ mkSuppressHintTextEdits dynFlags fileContents hint =
515514 combinedTextEdit : lineSplitTextEditList
516515-- ---------------------------------------------------------------------
517516
518- applyAllCmd :: Recorder (WithPriority Log ) -> CommandFunction IdeState ( Uri , TextDocumentVersion )
519- applyAllCmd recorder ide (uri, version) = do
520- let file = maybe (error $ show uri ++ " is not a file." )
517+ applyAllCmd :: Recorder (WithPriority Log ) -> CommandFunction IdeState VersionedTextDocumentIdentifier
518+ applyAllCmd recorder ide verTxtDocId = do
519+ let file = maybe (error $ show (verTxtDocId ^. LSP. uri) ++ " is not a file." )
521520 toNormalizedFilePath'
522- (uriToFilePath' uri)
521+ (uriToFilePath' (verTxtDocId ^. LSP. uri) )
523522 withIndefiniteProgress " Applying all hints" Cancellable $ do
524- res <- liftIO $ applyHint recorder ide file Nothing version
523+ res <- liftIO $ applyHint recorder ide file Nothing verTxtDocId
525524 logWith recorder Debug $ LogApplying file res
526525 case res of
527526 Left err -> pure $ Left (responseError (T. pack $ " hlint:applyAll: " ++ show err))
@@ -532,11 +531,10 @@ applyAllCmd recorder ide (uri, version) = do
532531-- ---------------------------------------------------------------------
533532
534533data ApplyOneParams = AOP
535- { file :: Uri
534+ { verTxtDocId :: VersionedTextDocumentIdentifier
536535 , start_pos :: Position
537536 -- | There can be more than one hint suggested at the same position, so HintTitle is used to distinguish between them.
538537 , hintTitle :: HintTitle
539- , textVersion :: TextDocumentVersion
540538 } deriving (Eq ,Show ,Generic ,FromJSON ,ToJSON )
541539
542540type HintTitle = T. Text
@@ -547,22 +545,22 @@ data OneHint = OneHint
547545 } deriving (Eq , Show )
548546
549547applyOneCmd :: Recorder (WithPriority Log ) -> CommandFunction IdeState ApplyOneParams
550- applyOneCmd recorder ide (AOP uri pos title version ) = do
548+ applyOneCmd recorder ide (AOP verTxtDocId pos title) = do
551549 let oneHint = OneHint pos title
552- let file = maybe (error $ show uri ++ " is not a file." ) toNormalizedFilePath'
553- (uriToFilePath' uri)
550+ let file = maybe (error $ show (verTxtDocId ^. LSP. uri) ++ " is not a file." ) toNormalizedFilePath'
551+ (uriToFilePath' (verTxtDocId ^. LSP. uri) )
554552 let progTitle = " Applying hint: " <> title
555553 withIndefiniteProgress progTitle Cancellable $ do
556- res <- liftIO $ applyHint recorder ide file (Just oneHint) version
554+ res <- liftIO $ applyHint recorder ide file (Just oneHint) verTxtDocId
557555 logWith recorder Debug $ LogApplying file res
558556 case res of
559557 Left err -> pure $ Left (responseError (T. pack $ " hlint:applyOne: " ++ show err))
560558 Right fs -> do
561559 _ <- sendRequest SWorkspaceApplyEdit (ApplyWorkspaceEditParams Nothing fs) (\ _ -> pure () )
562560 pure $ Right Null
563561
564- applyHint :: Recorder (WithPriority Log ) -> IdeState -> NormalizedFilePath -> Maybe OneHint -> TextDocumentVersion -> IO (Either String WorkspaceEdit )
565- applyHint recorder ide nfp mhint version =
562+ applyHint :: Recorder (WithPriority Log ) -> IdeState -> NormalizedFilePath -> Maybe OneHint -> VersionedTextDocumentIdentifier -> IO (Either String WorkspaceEdit )
563+ applyHint recorder ide nfp mhint verTxtDocId =
566564 runExceptT $ do
567565 let runAction' :: Action a -> IO a
568566 runAction' = runAction " applyHint" ide
@@ -619,8 +617,7 @@ applyHint recorder ide nfp mhint version =
619617#endif
620618 case res of
621619 Right appliedFile -> do
622- let uri = fromNormalizedUri (filePathToUri' nfp)
623- let wsEdit = diffText' True (uri, oldContent) (T. pack appliedFile) IncludeDeletions version
620+ let wsEdit = diffText' True (verTxtDocId, oldContent) (T. pack appliedFile) IncludeDeletions
624621 ExceptT $ return (Right wsEdit)
625622 Left err ->
626623 throwE err
0 commit comments