{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE OverloadedStrings #-}

module Language.LSP.Test.Files (
  swapFiles,
  rootDir,
)
where

import Control.Lens
import Data.Map.Strict qualified as M
import Data.Maybe
import Data.Text qualified as T
import Data.Time.Clock
import Language.LSP.Protocol.Lens qualified as L
import Language.LSP.Protocol.Message
import Language.LSP.Protocol.Types
import System.Directory
import System.FilePath

data Event
  = ClientEv UTCTime FromClientMessage
  | ServerEv UTCTime FromServerMessage

swapFiles :: FilePath -> [Event] -> IO [Event]
swapFiles :: FilePath -> [Event] -> IO [Event]
swapFiles FilePath
relCurBaseDir [Event]
msgs = do
  let capturedBaseDir :: FilePath
capturedBaseDir = [Event] -> FilePath
rootDir [Event]
msgs

  FilePath
curBaseDir <- (FilePath -> FilePath -> FilePath
</> FilePath
relCurBaseDir) (FilePath -> FilePath) -> IO FilePath -> IO FilePath
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO FilePath
getCurrentDirectory
  let transform :: Uri -> Uri
transform Uri
uri =
        let fp :: FilePath
fp = FilePath -> Maybe FilePath -> FilePath
forall a. a -> Maybe a -> a
fromMaybe (FilePath -> FilePath
forall a. HasCallStack => FilePath -> a
error FilePath
"Couldn't transform uri") (Uri -> Maybe FilePath
uriToFilePath Uri
uri)
            newFp :: FilePath
newFp = FilePath
curBaseDir FilePath -> FilePath -> FilePath
</> FilePath -> FilePath -> FilePath
makeRelative FilePath
capturedBaseDir FilePath
fp
         in FilePath -> Uri
filePathToUri FilePath
newFp
      newMsgs :: [Event]
newMsgs = (Event -> Event) -> [Event] -> [Event]
forall a b. (a -> b) -> [a] -> [b]
map ((Uri -> Uri) -> Event -> Event
mapUris Uri -> Uri
transform) [Event]
msgs

  [Event] -> IO [Event]
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return [Event]
newMsgs

rootDir :: [Event] -> FilePath
rootDir :: [Event] -> FilePath
rootDir (ClientEv UTCTime
_ (FromClientMess SMethod m
SMethod_Initialize TMessage m
req) : [Event]
_) =
  FilePath -> Maybe FilePath -> FilePath
forall a. a -> Maybe a -> a
fromMaybe (FilePath -> FilePath
forall a. HasCallStack => FilePath -> a
error FilePath
"Couldn't find root dir") (Maybe FilePath -> FilePath) -> Maybe FilePath -> FilePath
forall a b. (a -> b) -> a -> b
$ do
    Uri
rootUri <- case TMessage m
TRequestMessage 'Method_Initialize
req TRequestMessage 'Method_Initialize
-> Getting
     (Uri |? Null) (TRequestMessage 'Method_Initialize) (Uri |? Null)
-> Uri |? Null
forall s a. s -> Getting a s a -> a
^. (InitializeParams -> Const (Uri |? Null) InitializeParams)
-> TRequestMessage 'Method_Initialize
-> Const (Uri |? Null) (TRequestMessage 'Method_Initialize)
forall s a. HasParams s a => Lens' s a
Lens' (TRequestMessage 'Method_Initialize) InitializeParams
L.params ((InitializeParams -> Const (Uri |? Null) InitializeParams)
 -> TRequestMessage 'Method_Initialize
 -> Const (Uri |? Null) (TRequestMessage 'Method_Initialize))
-> (((Uri |? Null) -> Const (Uri |? Null) (Uri |? Null))
    -> InitializeParams -> Const (Uri |? Null) InitializeParams)
-> Getting
     (Uri |? Null) (TRequestMessage 'Method_Initialize) (Uri |? Null)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Uri |? Null) -> Const (Uri |? Null) (Uri |? Null))
-> InitializeParams -> Const (Uri |? Null) InitializeParams
forall s a. HasRootUri s a => Lens' s a
Lens' InitializeParams (Uri |? Null)
L.rootUri of
      InL Uri
r -> Uri -> Maybe Uri
forall a. a -> Maybe a
Just Uri
r
      InR Null
_ -> FilePath -> Maybe Uri
forall a. HasCallStack => FilePath -> a
error FilePath
"Couldn't find root dir"
    Uri -> Maybe FilePath
uriToFilePath Uri
rootUri
rootDir [Event]
_ = FilePath -> FilePath
forall a. HasCallStack => FilePath -> a
error FilePath
"Couldn't find initialize request in session"

mapUris :: (Uri -> Uri) -> Event -> Event
mapUris :: (Uri -> Uri) -> Event -> Event
mapUris Uri -> Uri
f Event
event =
  case Event
event of
    ClientEv UTCTime
t FromClientMessage' SMethod
msg -> UTCTime -> FromClientMessage' SMethod -> Event
ClientEv UTCTime
t (FromClientMessage' SMethod -> FromClientMessage' SMethod
forall {a :: Method 'ServerToClient 'Request -> *}.
FromClientMessage' a -> FromClientMessage' a
fromClientMsg FromClientMessage' SMethod
msg)
    ServerEv UTCTime
t FromServerMessage
msg -> UTCTime -> FromServerMessage -> Event
ServerEv UTCTime
t (FromServerMessage -> FromServerMessage
fromServerMsg FromServerMessage
msg)
 where
  -- TODO: Handle all other URIs that might need swapped
  fromClientMsg :: FromClientMessage' a -> FromClientMessage' a
fromClientMsg (FromClientMess m :: SMethod m
m@SMethod m
SMethod_Initialize TMessage m
r) = SMethod m -> TMessage m -> FromClientMessage' a
forall (t :: MessageKind) (m :: Method 'ClientToServer t)
       (a :: Method 'ServerToClient 'Request -> *).
SMethod m -> TMessage m -> FromClientMessage' a
FromClientMess SMethod m
m (TMessage m -> FromClientMessage' a)
-> TMessage m -> FromClientMessage' a
forall a b. (a -> b) -> a -> b
$ (InitializeParams -> Identity InitializeParams)
-> TMessage m -> Identity (TMessage m)
(InitializeParams -> Identity InitializeParams)
-> TRequestMessage 'Method_Initialize
-> Identity (TRequestMessage 'Method_Initialize)
forall s a. HasParams s a => Lens' s a
Lens' (TRequestMessage 'Method_Initialize) InitializeParams
L.params ((InitializeParams -> Identity InitializeParams)
 -> TMessage m -> Identity (TMessage m))
-> InitializeParams -> TMessage m -> TMessage m
forall s t a b. ASetter s t a b -> b -> s -> t
.~ InitializeParams -> InitializeParams
transformInit (TMessage m
TRequestMessage 'Method_Initialize
r TRequestMessage 'Method_Initialize
-> Getting
     InitializeParams
     (TRequestMessage 'Method_Initialize)
     InitializeParams
-> InitializeParams
forall s a. s -> Getting a s a -> a
^. Getting
  InitializeParams
  (TRequestMessage 'Method_Initialize)
  InitializeParams
forall s a. HasParams s a => Lens' s a
Lens' (TRequestMessage 'Method_Initialize) InitializeParams
L.params) (TMessage m -> TMessage m) -> TMessage m -> TMessage m
forall a b. (a -> b) -> a -> b
$ TMessage m
r
  fromClientMsg (FromClientMess m :: SMethod m
m@SMethod m
SMethod_TextDocumentDidOpen TMessage m
n) = SMethod m -> TMessage m -> FromClientMessage' a
forall (t :: MessageKind) (m :: Method 'ClientToServer t)
       (a :: Method 'ServerToClient 'Request -> *).
SMethod m -> TMessage m -> FromClientMessage' a
FromClientMess SMethod m
m (TMessage m -> FromClientMessage' a)
-> TMessage m -> FromClientMessage' a
forall a b. (a -> b) -> a -> b
$ Lens'
  (TNotificationMessage 'Method_TextDocumentDidOpen) TextDocumentItem
-> TNotificationMessage 'Method_TextDocumentDidOpen
-> TNotificationMessage 'Method_TextDocumentDidOpen
forall b a. HasUri b Uri => Lens' a b -> a -> a
swapUri ((DidOpenTextDocumentParams -> f DidOpenTextDocumentParams)
-> TNotificationMessage 'Method_TextDocumentDidOpen
-> f (TNotificationMessage 'Method_TextDocumentDidOpen)
forall s a. HasParams s a => Lens' s a
Lens'
  (TNotificationMessage 'Method_TextDocumentDidOpen)
  DidOpenTextDocumentParams
L.params ((DidOpenTextDocumentParams -> f DidOpenTextDocumentParams)
 -> TNotificationMessage 'Method_TextDocumentDidOpen
 -> f (TNotificationMessage 'Method_TextDocumentDidOpen))
-> ((TextDocumentItem -> f TextDocumentItem)
    -> DidOpenTextDocumentParams -> f DidOpenTextDocumentParams)
-> (TextDocumentItem -> f TextDocumentItem)
-> TNotificationMessage 'Method_TextDocumentDidOpen
-> f (TNotificationMessage 'Method_TextDocumentDidOpen)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (TextDocumentItem -> f TextDocumentItem)
-> DidOpenTextDocumentParams -> f DidOpenTextDocumentParams
forall s a. HasTextDocument s a => Lens' s a
Lens' DidOpenTextDocumentParams TextDocumentItem
L.textDocument) TMessage m
TNotificationMessage 'Method_TextDocumentDidOpen
n
  fromClientMsg (FromClientMess m :: SMethod m
m@SMethod m
SMethod_TextDocumentDidChange TMessage m
n) = SMethod m -> TMessage m -> FromClientMessage' a
forall (t :: MessageKind) (m :: Method 'ClientToServer t)
       (a :: Method 'ServerToClient 'Request -> *).
SMethod m -> TMessage m -> FromClientMessage' a
FromClientMess SMethod m
m (TMessage m -> FromClientMessage' a)
-> TMessage m -> FromClientMessage' a
forall a b. (a -> b) -> a -> b
$ Lens'
  (TNotificationMessage 'Method_TextDocumentDidChange)
  VersionedTextDocumentIdentifier
-> TNotificationMessage 'Method_TextDocumentDidChange
-> TNotificationMessage 'Method_TextDocumentDidChange
forall b a. HasUri b Uri => Lens' a b -> a -> a
swapUri ((DidChangeTextDocumentParams -> f DidChangeTextDocumentParams)
-> TNotificationMessage 'Method_TextDocumentDidChange
-> f (TNotificationMessage 'Method_TextDocumentDidChange)
forall s a. HasParams s a => Lens' s a
Lens'
  (TNotificationMessage 'Method_TextDocumentDidChange)
  DidChangeTextDocumentParams
L.params ((DidChangeTextDocumentParams -> f DidChangeTextDocumentParams)
 -> TNotificationMessage 'Method_TextDocumentDidChange
 -> f (TNotificationMessage 'Method_TextDocumentDidChange))
-> ((VersionedTextDocumentIdentifier
     -> f VersionedTextDocumentIdentifier)
    -> DidChangeTextDocumentParams -> f DidChangeTextDocumentParams)
-> (VersionedTextDocumentIdentifier
    -> f VersionedTextDocumentIdentifier)
-> TNotificationMessage 'Method_TextDocumentDidChange
-> f (TNotificationMessage 'Method_TextDocumentDidChange)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (VersionedTextDocumentIdentifier
 -> f VersionedTextDocumentIdentifier)
-> DidChangeTextDocumentParams -> f DidChangeTextDocumentParams
forall s a. HasTextDocument s a => Lens' s a
Lens' DidChangeTextDocumentParams VersionedTextDocumentIdentifier
L.textDocument) TMessage m
TNotificationMessage 'Method_TextDocumentDidChange
n
  fromClientMsg (FromClientMess m :: SMethod m
m@SMethod m
SMethod_TextDocumentWillSave TMessage m
n) = SMethod m -> TMessage m -> FromClientMessage' a
forall (t :: MessageKind) (m :: Method 'ClientToServer t)
       (a :: Method 'ServerToClient 'Request -> *).
SMethod m -> TMessage m -> FromClientMessage' a
FromClientMess SMethod m
m (TMessage m -> FromClientMessage' a)
-> TMessage m -> FromClientMessage' a
forall a b. (a -> b) -> a -> b
$ Lens'
  (TNotificationMessage 'Method_TextDocumentWillSave)
  TextDocumentIdentifier
-> TNotificationMessage 'Method_TextDocumentWillSave
-> TNotificationMessage 'Method_TextDocumentWillSave
forall b a. HasUri b Uri => Lens' a b -> a -> a
swapUri ((WillSaveTextDocumentParams -> f WillSaveTextDocumentParams)
-> TNotificationMessage 'Method_TextDocumentWillSave
-> f (TNotificationMessage 'Method_TextDocumentWillSave)
forall s a. HasParams s a => Lens' s a
Lens'
  (TNotificationMessage 'Method_TextDocumentWillSave)
  WillSaveTextDocumentParams
L.params ((WillSaveTextDocumentParams -> f WillSaveTextDocumentParams)
 -> TNotificationMessage 'Method_TextDocumentWillSave
 -> f (TNotificationMessage 'Method_TextDocumentWillSave))
-> ((TextDocumentIdentifier -> f TextDocumentIdentifier)
    -> WillSaveTextDocumentParams -> f WillSaveTextDocumentParams)
-> (TextDocumentIdentifier -> f TextDocumentIdentifier)
-> TNotificationMessage 'Method_TextDocumentWillSave
-> f (TNotificationMessage 'Method_TextDocumentWillSave)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (TextDocumentIdentifier -> f TextDocumentIdentifier)
-> WillSaveTextDocumentParams -> f WillSaveTextDocumentParams
forall s a. HasTextDocument s a => Lens' s a
Lens' WillSaveTextDocumentParams TextDocumentIdentifier
L.textDocument) TMessage m
TNotificationMessage 'Method_TextDocumentWillSave
n
  fromClientMsg (FromClientMess m :: SMethod m
m@SMethod m
SMethod_TextDocumentDidSave TMessage m
n) = SMethod m -> TMessage m -> FromClientMessage' a
forall (t :: MessageKind) (m :: Method 'ClientToServer t)
       (a :: Method 'ServerToClient 'Request -> *).
SMethod m -> TMessage m -> FromClientMessage' a
FromClientMess SMethod m
m (TMessage m -> FromClientMessage' a)
-> TMessage m -> FromClientMessage' a
forall a b. (a -> b) -> a -> b
$ Lens'
  (TNotificationMessage 'Method_TextDocumentDidSave)
  TextDocumentIdentifier
-> TNotificationMessage 'Method_TextDocumentDidSave
-> TNotificationMessage 'Method_TextDocumentDidSave
forall b a. HasUri b Uri => Lens' a b -> a -> a
swapUri ((DidSaveTextDocumentParams -> f DidSaveTextDocumentParams)
-> TNotificationMessage 'Method_TextDocumentDidSave
-> f (TNotificationMessage 'Method_TextDocumentDidSave)
forall s a. HasParams s a => Lens' s a
Lens'
  (TNotificationMessage 'Method_TextDocumentDidSave)
  DidSaveTextDocumentParams
L.params ((DidSaveTextDocumentParams -> f DidSaveTextDocumentParams)
 -> TNotificationMessage 'Method_TextDocumentDidSave
 -> f (TNotificationMessage 'Method_TextDocumentDidSave))
-> ((TextDocumentIdentifier -> f TextDocumentIdentifier)
    -> DidSaveTextDocumentParams -> f DidSaveTextDocumentParams)
-> (TextDocumentIdentifier -> f TextDocumentIdentifier)
-> TNotificationMessage 'Method_TextDocumentDidSave
-> f (TNotificationMessage 'Method_TextDocumentDidSave)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (TextDocumentIdentifier -> f TextDocumentIdentifier)
-> DidSaveTextDocumentParams -> f DidSaveTextDocumentParams
forall s a. HasTextDocument s a => Lens' s a
Lens' DidSaveTextDocumentParams TextDocumentIdentifier
L.textDocument) TMessage m
TNotificationMessage 'Method_TextDocumentDidSave
n
  fromClientMsg (FromClientMess m :: SMethod m
m@SMethod m
SMethod_TextDocumentDidClose TMessage m
n) = SMethod m -> TMessage m -> FromClientMessage' a
forall (t :: MessageKind) (m :: Method 'ClientToServer t)
       (a :: Method 'ServerToClient 'Request -> *).
SMethod m -> TMessage m -> FromClientMessage' a
FromClientMess SMethod m
m (TMessage m -> FromClientMessage' a)
-> TMessage m -> FromClientMessage' a
forall a b. (a -> b) -> a -> b
$ Lens'
  (TNotificationMessage 'Method_TextDocumentDidClose)
  TextDocumentIdentifier
-> TNotificationMessage 'Method_TextDocumentDidClose
-> TNotificationMessage 'Method_TextDocumentDidClose
forall b a. HasUri b Uri => Lens' a b -> a -> a
swapUri ((DidCloseTextDocumentParams -> f DidCloseTextDocumentParams)
-> TNotificationMessage 'Method_TextDocumentDidClose
-> f (TNotificationMessage 'Method_TextDocumentDidClose)
forall s a. HasParams s a => Lens' s a
Lens'
  (TNotificationMessage 'Method_TextDocumentDidClose)
  DidCloseTextDocumentParams
L.params ((DidCloseTextDocumentParams -> f DidCloseTextDocumentParams)
 -> TNotificationMessage 'Method_TextDocumentDidClose
 -> f (TNotificationMessage 'Method_TextDocumentDidClose))
-> ((TextDocumentIdentifier -> f TextDocumentIdentifier)
    -> DidCloseTextDocumentParams -> f DidCloseTextDocumentParams)
-> (TextDocumentIdentifier -> f TextDocumentIdentifier)
-> TNotificationMessage 'Method_TextDocumentDidClose
-> f (TNotificationMessage 'Method_TextDocumentDidClose)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (TextDocumentIdentifier -> f TextDocumentIdentifier)
-> DidCloseTextDocumentParams -> f DidCloseTextDocumentParams
forall s a. HasTextDocument s a => Lens' s a
Lens' DidCloseTextDocumentParams TextDocumentIdentifier
L.textDocument) TMessage m
TNotificationMessage 'Method_TextDocumentDidClose
n
  fromClientMsg (FromClientMess m :: SMethod m
m@SMethod m
SMethod_TextDocumentDocumentSymbol TMessage m
n) = SMethod m -> TMessage m -> FromClientMessage' a
forall (t :: MessageKind) (m :: Method 'ClientToServer t)
       (a :: Method 'ServerToClient 'Request -> *).
SMethod m -> TMessage m -> FromClientMessage' a
FromClientMess SMethod m
m (TMessage m -> FromClientMessage' a)
-> TMessage m -> FromClientMessage' a
forall a b. (a -> b) -> a -> b
$ Lens'
  (TRequestMessage 'Method_TextDocumentDocumentSymbol)
  TextDocumentIdentifier
-> TRequestMessage 'Method_TextDocumentDocumentSymbol
-> TRequestMessage 'Method_TextDocumentDocumentSymbol
forall b a. HasUri b Uri => Lens' a b -> a -> a
swapUri ((DocumentSymbolParams -> f DocumentSymbolParams)
-> TRequestMessage 'Method_TextDocumentDocumentSymbol
-> f (TRequestMessage 'Method_TextDocumentDocumentSymbol)
forall s a. HasParams s a => Lens' s a
Lens'
  (TRequestMessage 'Method_TextDocumentDocumentSymbol)
  DocumentSymbolParams
L.params ((DocumentSymbolParams -> f DocumentSymbolParams)
 -> TRequestMessage 'Method_TextDocumentDocumentSymbol
 -> f (TRequestMessage 'Method_TextDocumentDocumentSymbol))
-> ((TextDocumentIdentifier -> f TextDocumentIdentifier)
    -> DocumentSymbolParams -> f DocumentSymbolParams)
-> (TextDocumentIdentifier -> f TextDocumentIdentifier)
-> TRequestMessage 'Method_TextDocumentDocumentSymbol
-> f (TRequestMessage 'Method_TextDocumentDocumentSymbol)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (TextDocumentIdentifier -> f TextDocumentIdentifier)
-> DocumentSymbolParams -> f DocumentSymbolParams
forall s a. HasTextDocument s a => Lens' s a
Lens' DocumentSymbolParams TextDocumentIdentifier
L.textDocument) TMessage m
TRequestMessage 'Method_TextDocumentDocumentSymbol
n
  fromClientMsg (FromClientMess m :: SMethod m
m@SMethod m
SMethod_TextDocumentRename TMessage m
n) = SMethod m -> TMessage m -> FromClientMessage' a
forall (t :: MessageKind) (m :: Method 'ClientToServer t)
       (a :: Method 'ServerToClient 'Request -> *).
SMethod m -> TMessage m -> FromClientMessage' a
FromClientMess SMethod m
m (TMessage m -> FromClientMessage' a)
-> TMessage m -> FromClientMessage' a
forall a b. (a -> b) -> a -> b
$ Lens'
  (TRequestMessage 'Method_TextDocumentRename) TextDocumentIdentifier
-> TRequestMessage 'Method_TextDocumentRename
-> TRequestMessage 'Method_TextDocumentRename
forall b a. HasUri b Uri => Lens' a b -> a -> a
swapUri ((RenameParams -> f RenameParams)
-> TRequestMessage 'Method_TextDocumentRename
-> f (TRequestMessage 'Method_TextDocumentRename)
forall s a. HasParams s a => Lens' s a
Lens' (TRequestMessage 'Method_TextDocumentRename) RenameParams
L.params ((RenameParams -> f RenameParams)
 -> TRequestMessage 'Method_TextDocumentRename
 -> f (TRequestMessage 'Method_TextDocumentRename))
-> ((TextDocumentIdentifier -> f TextDocumentIdentifier)
    -> RenameParams -> f RenameParams)
-> (TextDocumentIdentifier -> f TextDocumentIdentifier)
-> TRequestMessage 'Method_TextDocumentRename
-> f (TRequestMessage 'Method_TextDocumentRename)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (TextDocumentIdentifier -> f TextDocumentIdentifier)
-> RenameParams -> f RenameParams
forall s a. HasTextDocument s a => Lens' s a
Lens' RenameParams TextDocumentIdentifier
L.textDocument) TMessage m
TRequestMessage 'Method_TextDocumentRename
n
  fromClientMsg FromClientMessage' a
x = FromClientMessage' a
x

  fromServerMsg :: FromServerMessage -> FromServerMessage
  fromServerMsg :: FromServerMessage -> FromServerMessage
fromServerMsg (FromServerMess m :: SMethod m
m@SMethod m
SMethod_WorkspaceApplyEdit TMessage m
r) = SMethod m -> TMessage m -> FromServerMessage
forall (t :: MessageKind) (m :: Method 'ServerToClient t)
       (a :: Method 'ClientToServer 'Request -> *).
SMethod m -> TMessage m -> FromServerMessage' a
FromServerMess SMethod m
m (TMessage m -> FromServerMessage)
-> TMessage m -> FromServerMessage
forall a b. (a -> b) -> a -> b
$ (ApplyWorkspaceEditParams -> Identity ApplyWorkspaceEditParams)
-> TRequestMessage 'Method_WorkspaceApplyEdit
-> Identity (TRequestMessage 'Method_WorkspaceApplyEdit)
forall s a. HasParams s a => Lens' s a
Lens'
  (TRequestMessage 'Method_WorkspaceApplyEdit)
  ApplyWorkspaceEditParams
L.params ((ApplyWorkspaceEditParams -> Identity ApplyWorkspaceEditParams)
 -> TRequestMessage 'Method_WorkspaceApplyEdit
 -> Identity (TRequestMessage 'Method_WorkspaceApplyEdit))
-> ((WorkspaceEdit -> Identity WorkspaceEdit)
    -> ApplyWorkspaceEditParams -> Identity ApplyWorkspaceEditParams)
-> (WorkspaceEdit -> Identity WorkspaceEdit)
-> TRequestMessage 'Method_WorkspaceApplyEdit
-> Identity (TRequestMessage 'Method_WorkspaceApplyEdit)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (WorkspaceEdit -> Identity WorkspaceEdit)
-> ApplyWorkspaceEditParams -> Identity ApplyWorkspaceEditParams
forall s a. HasEdit s a => Lens' s a
Lens' ApplyWorkspaceEditParams WorkspaceEdit
L.edit ((WorkspaceEdit -> Identity WorkspaceEdit)
 -> TMessage m -> Identity (TMessage m))
-> WorkspaceEdit -> TMessage m -> TMessage m
forall s t a b. ASetter s t a b -> b -> s -> t
.~ WorkspaceEdit -> WorkspaceEdit
swapWorkspaceEdit (TMessage m
TRequestMessage 'Method_WorkspaceApplyEdit
r TRequestMessage 'Method_WorkspaceApplyEdit
-> Getting
     WorkspaceEdit
     (TRequestMessage 'Method_WorkspaceApplyEdit)
     WorkspaceEdit
-> WorkspaceEdit
forall s a. s -> Getting a s a -> a
^. (ApplyWorkspaceEditParams
 -> Const WorkspaceEdit ApplyWorkspaceEditParams)
-> TRequestMessage 'Method_WorkspaceApplyEdit
-> Const WorkspaceEdit (TRequestMessage 'Method_WorkspaceApplyEdit)
forall s a. HasParams s a => Lens' s a
Lens'
  (TRequestMessage 'Method_WorkspaceApplyEdit)
  ApplyWorkspaceEditParams
L.params ((ApplyWorkspaceEditParams
  -> Const WorkspaceEdit ApplyWorkspaceEditParams)
 -> TRequestMessage 'Method_WorkspaceApplyEdit
 -> Const
      WorkspaceEdit (TRequestMessage 'Method_WorkspaceApplyEdit))
-> ((WorkspaceEdit -> Const WorkspaceEdit WorkspaceEdit)
    -> ApplyWorkspaceEditParams
    -> Const WorkspaceEdit ApplyWorkspaceEditParams)
-> Getting
     WorkspaceEdit
     (TRequestMessage 'Method_WorkspaceApplyEdit)
     WorkspaceEdit
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (WorkspaceEdit -> Const WorkspaceEdit WorkspaceEdit)
-> ApplyWorkspaceEditParams
-> Const WorkspaceEdit ApplyWorkspaceEditParams
forall s a. HasEdit s a => Lens' s a
Lens' ApplyWorkspaceEditParams WorkspaceEdit
L.edit) (TMessage m -> TMessage m) -> TMessage m -> TMessage m
forall a b. (a -> b) -> a -> b
$ TMessage m
r
  fromServerMsg (FromServerMess m :: SMethod m
m@SMethod m
SMethod_TextDocumentPublishDiagnostics TMessage m
n) = SMethod m -> TMessage m -> FromServerMessage
forall (t :: MessageKind) (m :: Method 'ServerToClient t)
       (a :: Method 'ClientToServer 'Request -> *).
SMethod m -> TMessage m -> FromServerMessage' a
FromServerMess SMethod m
m (TMessage m -> FromServerMessage)
-> TMessage m -> FromServerMessage
forall a b. (a -> b) -> a -> b
$ Lens'
  (TNotificationMessage 'Method_TextDocumentPublishDiagnostics)
  PublishDiagnosticsParams
-> TNotificationMessage 'Method_TextDocumentPublishDiagnostics
-> TNotificationMessage 'Method_TextDocumentPublishDiagnostics
forall b a. HasUri b Uri => Lens' a b -> a -> a
swapUri (PublishDiagnosticsParams -> f PublishDiagnosticsParams)
-> TNotificationMessage 'Method_TextDocumentPublishDiagnostics
-> f (TNotificationMessage 'Method_TextDocumentPublishDiagnostics)
forall s a. HasParams s a => Lens' s a
Lens'
  (TNotificationMessage 'Method_TextDocumentPublishDiagnostics)
  PublishDiagnosticsParams
L.params TMessage m
TNotificationMessage 'Method_TextDocumentPublishDiagnostics
n
  fromServerMsg (FromServerRsp m :: SMethod m
m@SMethod m
SMethod_TextDocumentDocumentSymbol TResponseMessage m
r) =
    let swapUri' :: ([SymbolInformation] |? [DocumentSymbol] |? Null) -> [SymbolInformation] |? [DocumentSymbol] |? Null
        swapUri' :: ([SymbolInformation] |? ([DocumentSymbol] |? Null))
-> [SymbolInformation] |? ([DocumentSymbol] |? Null)
swapUri' (InR (InL [DocumentSymbol]
dss)) = ([DocumentSymbol] |? Null)
-> [SymbolInformation] |? ([DocumentSymbol] |? Null)
forall a b. b -> a |? b
InR (([DocumentSymbol] |? Null)
 -> [SymbolInformation] |? ([DocumentSymbol] |? Null))
-> ([DocumentSymbol] |? Null)
-> [SymbolInformation] |? ([DocumentSymbol] |? Null)
forall a b. (a -> b) -> a -> b
$ [DocumentSymbol] -> [DocumentSymbol] |? Null
forall a b. a -> a |? b
InL [DocumentSymbol]
dss -- no file locations here
        swapUri' (InR (InR Null
n)) = ([DocumentSymbol] |? Null)
-> [SymbolInformation] |? ([DocumentSymbol] |? Null)
forall a b. b -> a |? b
InR (([DocumentSymbol] |? Null)
 -> [SymbolInformation] |? ([DocumentSymbol] |? Null))
-> ([DocumentSymbol] |? Null)
-> [SymbolInformation] |? ([DocumentSymbol] |? Null)
forall a b. (a -> b) -> a -> b
$ Null -> [DocumentSymbol] |? Null
forall a b. b -> a |? b
InR Null
n
        swapUri' (InL [SymbolInformation]
si) = [SymbolInformation]
-> [SymbolInformation] |? ([DocumentSymbol] |? Null)
forall a b. a -> a |? b
InL (Lens' SymbolInformation Location
-> SymbolInformation -> SymbolInformation
forall b a. HasUri b Uri => Lens' a b -> a -> a
swapUri (Location -> f Location)
-> SymbolInformation -> f SymbolInformation
forall s a. HasLocation s a => Lens' s a
Lens' SymbolInformation Location
L.location (SymbolInformation -> SymbolInformation)
-> [SymbolInformation] -> [SymbolInformation]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [SymbolInformation]
si)
     in SMethod m -> TResponseMessage m -> FromServerMessage
forall (m :: Method 'ClientToServer 'Request)
       (a :: Method 'ClientToServer 'Request -> *).
a m -> TResponseMessage m -> FromServerMessage' a
FromServerRsp SMethod m
m (TResponseMessage m -> FromServerMessage)
-> TResponseMessage m -> FromServerMessage
forall a b. (a -> b) -> a -> b
$ TResponseMessage m
r TResponseMessage m
-> (TResponseMessage m -> TResponseMessage m) -> TResponseMessage m
forall a b. a -> (a -> b) -> b
& (Either
   ResponseError ([SymbolInformation] |? ([DocumentSymbol] |? Null))
 -> Identity
      (Either
         ResponseError ([SymbolInformation] |? ([DocumentSymbol] |? Null))))
-> TResponseMessage m -> Identity (TResponseMessage m)
forall s a. HasResult s a => Lens' s a
Lens'
  (TResponseMessage m)
  (Either
     ResponseError ([SymbolInformation] |? ([DocumentSymbol] |? Null)))
L.result ((Either
    ResponseError ([SymbolInformation] |? ([DocumentSymbol] |? Null))
  -> Identity
       (Either
          ResponseError ([SymbolInformation] |? ([DocumentSymbol] |? Null))))
 -> TResponseMessage m -> Identity (TResponseMessage m))
-> ((([SymbolInformation] |? ([DocumentSymbol] |? Null))
     -> Identity ([SymbolInformation] |? ([DocumentSymbol] |? Null)))
    -> Either
         ResponseError ([SymbolInformation] |? ([DocumentSymbol] |? Null))
    -> Identity
         (Either
            ResponseError ([SymbolInformation] |? ([DocumentSymbol] |? Null))))
-> (([SymbolInformation] |? ([DocumentSymbol] |? Null))
    -> Identity ([SymbolInformation] |? ([DocumentSymbol] |? Null)))
-> TResponseMessage m
-> Identity (TResponseMessage m)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (([SymbolInformation] |? ([DocumentSymbol] |? Null))
 -> Identity ([SymbolInformation] |? ([DocumentSymbol] |? Null)))
-> Either
     ResponseError ([SymbolInformation] |? ([DocumentSymbol] |? Null))
-> Identity
     (Either
        ResponseError ([SymbolInformation] |? ([DocumentSymbol] |? Null)))
forall c a b (p :: * -> * -> *) (f :: * -> *).
(Choice p, Applicative f) =>
p a (f b) -> p (Either c a) (f (Either c b))
_Right ((([SymbolInformation] |? ([DocumentSymbol] |? Null))
  -> Identity ([SymbolInformation] |? ([DocumentSymbol] |? Null)))
 -> TResponseMessage m -> Identity (TResponseMessage m))
-> (([SymbolInformation] |? ([DocumentSymbol] |? Null))
    -> [SymbolInformation] |? ([DocumentSymbol] |? Null))
-> TResponseMessage m
-> TResponseMessage m
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ ([SymbolInformation] |? ([DocumentSymbol] |? Null))
-> [SymbolInformation] |? ([DocumentSymbol] |? Null)
swapUri'
  fromServerMsg (FromServerRsp m :: SMethod m
m@SMethod m
SMethod_TextDocumentRename TResponseMessage m
r) = SMethod m -> TResponseMessage m -> FromServerMessage
forall (m :: Method 'ClientToServer 'Request)
       (a :: Method 'ClientToServer 'Request -> *).
a m -> TResponseMessage m -> FromServerMessage' a
FromServerRsp SMethod m
m (TResponseMessage m -> FromServerMessage)
-> TResponseMessage m -> FromServerMessage
forall a b. (a -> b) -> a -> b
$ TResponseMessage m
r TResponseMessage m
-> (TResponseMessage m -> TResponseMessage m) -> TResponseMessage m
forall a b. a -> (a -> b) -> b
& (Either ResponseError (WorkspaceEdit |? Null)
 -> Identity (Either ResponseError (WorkspaceEdit |? Null)))
-> TResponseMessage m -> Identity (TResponseMessage m)
forall s a. HasResult s a => Lens' s a
Lens'
  (TResponseMessage m) (Either ResponseError (WorkspaceEdit |? Null))
L.result ((Either ResponseError (WorkspaceEdit |? Null)
  -> Identity (Either ResponseError (WorkspaceEdit |? Null)))
 -> TResponseMessage m -> Identity (TResponseMessage m))
-> ((WorkspaceEdit -> Identity WorkspaceEdit)
    -> Either ResponseError (WorkspaceEdit |? Null)
    -> Identity (Either ResponseError (WorkspaceEdit |? Null)))
-> (WorkspaceEdit -> Identity WorkspaceEdit)
-> TResponseMessage m
-> Identity (TResponseMessage m)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((WorkspaceEdit |? Null) -> Identity (WorkspaceEdit |? Null))
-> Either ResponseError (WorkspaceEdit |? Null)
-> Identity (Either ResponseError (WorkspaceEdit |? Null))
forall c a b (p :: * -> * -> *) (f :: * -> *).
(Choice p, Applicative f) =>
p a (f b) -> p (Either c a) (f (Either c b))
_Right (((WorkspaceEdit |? Null) -> Identity (WorkspaceEdit |? Null))
 -> Either ResponseError (WorkspaceEdit |? Null)
 -> Identity (Either ResponseError (WorkspaceEdit |? Null)))
-> ((WorkspaceEdit -> Identity WorkspaceEdit)
    -> (WorkspaceEdit |? Null) -> Identity (WorkspaceEdit |? Null))
-> (WorkspaceEdit -> Identity WorkspaceEdit)
-> Either ResponseError (WorkspaceEdit |? Null)
-> Identity (Either ResponseError (WorkspaceEdit |? Null))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (WorkspaceEdit -> Identity WorkspaceEdit)
-> (WorkspaceEdit |? Null) -> Identity (WorkspaceEdit |? Null)
forall a b (p :: * -> * -> *) (f :: * -> *).
(Choice p, Applicative f) =>
p a (f a) -> p (a |? b) (f (a |? b))
_L ((WorkspaceEdit -> Identity WorkspaceEdit)
 -> TResponseMessage m -> Identity (TResponseMessage m))
-> (WorkspaceEdit -> WorkspaceEdit)
-> TResponseMessage m
-> TResponseMessage m
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ WorkspaceEdit -> WorkspaceEdit
swapWorkspaceEdit
  fromServerMsg FromServerMessage
x = FromServerMessage
x

  swapWorkspaceEdit :: WorkspaceEdit -> WorkspaceEdit
  swapWorkspaceEdit :: WorkspaceEdit -> WorkspaceEdit
swapWorkspaceEdit WorkspaceEdit
e =
    let swapDocumentChangeUri :: DocumentChange -> DocumentChange
        swapDocumentChangeUri :: DocumentChange -> DocumentChange
swapDocumentChangeUri (InL TextDocumentEdit
textDocEdit) = TextDocumentEdit -> DocumentChange
forall a b. a -> a |? b
InL (TextDocumentEdit -> DocumentChange)
-> TextDocumentEdit -> DocumentChange
forall a b. (a -> b) -> a -> b
$ Lens' TextDocumentEdit OptionalVersionedTextDocumentIdentifier
-> TextDocumentEdit -> TextDocumentEdit
forall b a. HasUri b Uri => Lens' a b -> a -> a
swapUri (OptionalVersionedTextDocumentIdentifier
 -> f OptionalVersionedTextDocumentIdentifier)
-> TextDocumentEdit -> f TextDocumentEdit
forall s a. HasTextDocument s a => Lens' s a
Lens' TextDocumentEdit OptionalVersionedTextDocumentIdentifier
L.textDocument TextDocumentEdit
textDocEdit
        swapDocumentChangeUri (InR (InL CreateFile
createFile)) = (CreateFile |? (RenameFile |? DeleteFile)) -> DocumentChange
forall a b. b -> a |? b
InR ((CreateFile |? (RenameFile |? DeleteFile)) -> DocumentChange)
-> (CreateFile |? (RenameFile |? DeleteFile)) -> DocumentChange
forall a b. (a -> b) -> a -> b
$ CreateFile -> CreateFile |? (RenameFile |? DeleteFile)
forall a b. a -> a |? b
InL (CreateFile -> CreateFile |? (RenameFile |? DeleteFile))
-> CreateFile -> CreateFile |? (RenameFile |? DeleteFile)
forall a b. (a -> b) -> a -> b
$ Lens' CreateFile CreateFile -> CreateFile -> CreateFile
forall b a. HasUri b Uri => Lens' a b -> a -> a
swapUri (CreateFile -> f CreateFile) -> CreateFile -> f CreateFile
forall a. a -> a
Lens' CreateFile CreateFile
id CreateFile
createFile
        -- for RenameFile, we swap `newUri`
        swapDocumentChangeUri (InR (InR (InL RenameFile
renameFile))) = (CreateFile |? (RenameFile |? DeleteFile)) -> DocumentChange
forall a b. b -> a |? b
InR ((CreateFile |? (RenameFile |? DeleteFile)) -> DocumentChange)
-> (CreateFile |? (RenameFile |? DeleteFile)) -> DocumentChange
forall a b. (a -> b) -> a -> b
$ (RenameFile |? DeleteFile)
-> CreateFile |? (RenameFile |? DeleteFile)
forall a b. b -> a |? b
InR ((RenameFile |? DeleteFile)
 -> CreateFile |? (RenameFile |? DeleteFile))
-> (RenameFile |? DeleteFile)
-> CreateFile |? (RenameFile |? DeleteFile)
forall a b. (a -> b) -> a -> b
$ RenameFile -> RenameFile |? DeleteFile
forall a b. a -> a |? b
InL (RenameFile -> RenameFile |? DeleteFile)
-> RenameFile -> RenameFile |? DeleteFile
forall a b. (a -> b) -> a -> b
$ (Uri -> Identity Uri) -> RenameFile -> Identity RenameFile
forall s a. HasNewUri s a => Lens' s a
Lens' RenameFile Uri
L.newUri ((Uri -> Identity Uri) -> RenameFile -> Identity RenameFile)
-> Uri -> RenameFile -> RenameFile
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Uri -> Uri
f (RenameFile
renameFile RenameFile -> Getting Uri RenameFile Uri -> Uri
forall s a. s -> Getting a s a -> a
^. Getting Uri RenameFile Uri
forall s a. HasNewUri s a => Lens' s a
Lens' RenameFile Uri
L.newUri) (RenameFile -> RenameFile) -> RenameFile -> RenameFile
forall a b. (a -> b) -> a -> b
$ RenameFile
renameFile
        swapDocumentChangeUri (InR (InR (InR DeleteFile
deleteFile))) = (CreateFile |? (RenameFile |? DeleteFile)) -> DocumentChange
forall a b. b -> a |? b
InR ((CreateFile |? (RenameFile |? DeleteFile)) -> DocumentChange)
-> (CreateFile |? (RenameFile |? DeleteFile)) -> DocumentChange
forall a b. (a -> b) -> a -> b
$ (RenameFile |? DeleteFile)
-> CreateFile |? (RenameFile |? DeleteFile)
forall a b. b -> a |? b
InR ((RenameFile |? DeleteFile)
 -> CreateFile |? (RenameFile |? DeleteFile))
-> (RenameFile |? DeleteFile)
-> CreateFile |? (RenameFile |? DeleteFile)
forall a b. (a -> b) -> a -> b
$ DeleteFile -> RenameFile |? DeleteFile
forall a b. b -> a |? b
InR (DeleteFile -> RenameFile |? DeleteFile)
-> DeleteFile -> RenameFile |? DeleteFile
forall a b. (a -> b) -> a -> b
$ Lens' DeleteFile DeleteFile -> DeleteFile -> DeleteFile
forall b a. HasUri b Uri => Lens' a b -> a -> a
swapUri (DeleteFile -> f DeleteFile) -> DeleteFile -> f DeleteFile
forall a. a -> a
Lens' DeleteFile DeleteFile
id DeleteFile
deleteFile
     in WorkspaceEdit
e
          WorkspaceEdit -> (WorkspaceEdit -> WorkspaceEdit) -> WorkspaceEdit
forall a b. a -> (a -> b) -> b
& (Maybe (Map Uri [TextEdit])
 -> Identity (Maybe (Map Uri [TextEdit])))
-> WorkspaceEdit -> Identity WorkspaceEdit
forall s a. HasChanges s a => Lens' s a
Lens' WorkspaceEdit (Maybe (Map Uri [TextEdit]))
L.changes ((Maybe (Map Uri [TextEdit])
  -> Identity (Maybe (Map Uri [TextEdit])))
 -> WorkspaceEdit -> Identity WorkspaceEdit)
-> ((Map Uri [TextEdit] -> Identity (Map Uri [TextEdit]))
    -> Maybe (Map Uri [TextEdit])
    -> Identity (Maybe (Map Uri [TextEdit])))
-> (Map Uri [TextEdit] -> Identity (Map Uri [TextEdit]))
-> WorkspaceEdit
-> Identity WorkspaceEdit
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Map Uri [TextEdit] -> Identity (Map Uri [TextEdit]))
-> Maybe (Map Uri [TextEdit])
-> Identity (Maybe (Map Uri [TextEdit]))
forall a b (p :: * -> * -> *) (f :: * -> *).
(Choice p, Applicative f) =>
p a (f b) -> p (Maybe a) (f (Maybe b))
_Just ((Map Uri [TextEdit] -> Identity (Map Uri [TextEdit]))
 -> WorkspaceEdit -> Identity WorkspaceEdit)
-> (Map Uri [TextEdit] -> Map Uri [TextEdit])
-> WorkspaceEdit
-> WorkspaceEdit
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ (Uri -> Uri) -> Map Uri [TextEdit] -> Map Uri [TextEdit]
forall k2 k1 a. Ord k2 => (k1 -> k2) -> Map k1 a -> Map k2 a
M.mapKeys Uri -> Uri
f
          WorkspaceEdit -> (WorkspaceEdit -> WorkspaceEdit) -> WorkspaceEdit
forall a b. a -> (a -> b) -> b
& (Maybe [DocumentChange] -> Identity (Maybe [DocumentChange]))
-> WorkspaceEdit -> Identity WorkspaceEdit
forall s a. HasDocumentChanges s a => Lens' s a
Lens' WorkspaceEdit (Maybe [DocumentChange])
L.documentChanges ((Maybe [DocumentChange] -> Identity (Maybe [DocumentChange]))
 -> WorkspaceEdit -> Identity WorkspaceEdit)
-> ((DocumentChange -> Identity DocumentChange)
    -> Maybe [DocumentChange] -> Identity (Maybe [DocumentChange]))
-> (DocumentChange -> Identity DocumentChange)
-> WorkspaceEdit
-> Identity WorkspaceEdit
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([DocumentChange] -> Identity [DocumentChange])
-> Maybe [DocumentChange] -> Identity (Maybe [DocumentChange])
forall a b (p :: * -> * -> *) (f :: * -> *).
(Choice p, Applicative f) =>
p a (f b) -> p (Maybe a) (f (Maybe b))
_Just (([DocumentChange] -> Identity [DocumentChange])
 -> Maybe [DocumentChange] -> Identity (Maybe [DocumentChange]))
-> ((DocumentChange -> Identity DocumentChange)
    -> [DocumentChange] -> Identity [DocumentChange])
-> (DocumentChange -> Identity DocumentChange)
-> Maybe [DocumentChange]
-> Identity (Maybe [DocumentChange])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (DocumentChange -> Identity DocumentChange)
-> [DocumentChange] -> Identity [DocumentChange]
forall (f :: * -> *) a b.
Traversable f =>
IndexedTraversal Int (f a) (f b) a b
IndexedTraversal
  Int [DocumentChange] [DocumentChange] DocumentChange DocumentChange
traversed ((DocumentChange -> Identity DocumentChange)
 -> WorkspaceEdit -> Identity WorkspaceEdit)
-> (DocumentChange -> DocumentChange)
-> WorkspaceEdit
-> WorkspaceEdit
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ DocumentChange -> DocumentChange
swapDocumentChangeUri

  swapUri :: L.HasUri b Uri => Lens' a b -> a -> a
  swapUri :: forall b a. HasUri b Uri => Lens' a b -> a -> a
swapUri Lens' a b
lens = ((b -> Identity b) -> a -> Identity a
Lens' a b
lens ((b -> Identity b) -> a -> Identity a)
-> ((Uri -> Identity Uri) -> b -> Identity b)
-> (Uri -> Identity Uri)
-> a
-> Identity a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Uri -> Identity Uri) -> b -> Identity b
forall s a. HasUri s a => Lens' s a
Lens' b Uri
L.uri) ((Uri -> Identity Uri) -> a -> Identity a)
-> (Uri -> Uri) -> a -> a
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ Uri -> Uri
f

  -- Transforms rootUri/rootPath.
  transformInit :: InitializeParams -> InitializeParams
  transformInit :: InitializeParams -> InitializeParams
transformInit InitializeParams
x =
    let modifyRootPath :: Text -> Text
modifyRootPath Text
p =
          let fp :: FilePath
fp = Text -> FilePath
T.unpack Text
p
              uri :: Uri
uri = FilePath -> Uri
filePathToUri FilePath
fp
           in case Uri -> Maybe FilePath
uriToFilePath (Uri -> Uri
f Uri
uri) of
                Just FilePath
fp -> FilePath -> Text
T.pack FilePath
fp
                Maybe FilePath
Nothing -> Text
p
     in InitializeParams
x
          InitializeParams
-> (InitializeParams -> InitializeParams) -> InitializeParams
forall a b. a -> (a -> b) -> b
& ((Uri |? Null) -> Identity (Uri |? Null))
-> InitializeParams -> Identity InitializeParams
forall s a. HasRootUri s a => Lens' s a
Lens' InitializeParams (Uri |? Null)
L.rootUri (((Uri |? Null) -> Identity (Uri |? Null))
 -> InitializeParams -> Identity InitializeParams)
-> ((Uri -> Identity Uri)
    -> (Uri |? Null) -> Identity (Uri |? Null))
-> (Uri -> Identity Uri)
-> InitializeParams
-> Identity InitializeParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Uri -> Identity Uri) -> (Uri |? Null) -> Identity (Uri |? Null)
forall a b (p :: * -> * -> *) (f :: * -> *).
(Choice p, Applicative f) =>
p a (f a) -> p (a |? b) (f (a |? b))
_L ((Uri -> Identity Uri)
 -> InitializeParams -> Identity InitializeParams)
-> (Uri -> Uri) -> InitializeParams -> InitializeParams
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ Uri -> Uri
f
          InitializeParams
-> (InitializeParams -> InitializeParams) -> InitializeParams
forall a b. a -> (a -> b) -> b
& (Maybe (Text |? Null) -> Identity (Maybe (Text |? Null)))
-> InitializeParams -> Identity InitializeParams
forall s a. HasRootPath s a => Lens' s a
Lens' InitializeParams (Maybe (Text |? Null))
L.rootPath ((Maybe (Text |? Null) -> Identity (Maybe (Text |? Null)))
 -> InitializeParams -> Identity InitializeParams)
-> ((Text -> Identity Text)
    -> Maybe (Text |? Null) -> Identity (Maybe (Text |? Null)))
-> (Text -> Identity Text)
-> InitializeParams
-> Identity InitializeParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Text |? Null) -> Identity (Text |? Null))
-> Maybe (Text |? Null) -> Identity (Maybe (Text |? Null))
forall a b (p :: * -> * -> *) (f :: * -> *).
(Choice p, Applicative f) =>
p a (f b) -> p (Maybe a) (f (Maybe b))
_Just (((Text |? Null) -> Identity (Text |? Null))
 -> Maybe (Text |? Null) -> Identity (Maybe (Text |? Null)))
-> ((Text -> Identity Text)
    -> (Text |? Null) -> Identity (Text |? Null))
-> (Text -> Identity Text)
-> Maybe (Text |? Null)
-> Identity (Maybe (Text |? Null))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Text -> Identity Text)
-> (Text |? Null) -> Identity (Text |? Null)
forall a b (p :: * -> * -> *) (f :: * -> *).
(Choice p, Applicative f) =>
p a (f a) -> p (a |? b) (f (a |? b))
_L ((Text -> Identity Text)
 -> InitializeParams -> Identity InitializeParams)
-> (Text -> Text) -> InitializeParams -> InitializeParams
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ Text -> Text
modifyRootPath