projects
/
lsp-test.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
56c39e4
)
Fix DocumentChange related stuff in Session.hs
author
Ting-Gian LUA
<banacorn@gmail.com>
Fri, 11 Dec 2020 10:29:38 +0000
(18:29 +0800)
committer
Ting-Gian LUA
<banacorn@gmail.com>
Fri, 11 Dec 2020 10:29:38 +0000
(18:29 +0800)
src/Language/LSP/Test/Session.hs
patch
|
blob
|
history
diff --git
a/src/Language/LSP/Test/Session.hs
b/src/Language/LSP/Test/Session.hs
index aabf04f2b73e18620de2af30cec84055a31a1219..36007391c35965676be1a5f87a337e33947a3afb 100644
(file)
--- a/
src/Language/LSP/Test/Session.hs
+++ b/
src/Language/LSP/Test/Session.hs
@@
-296,6
+296,14
@@
updateStateC = awaitForever $ \msg -> do
updateState msg
yield msg
updateState msg
yield msg
+
+-- extract Uri out from DocumentChange
+documentChangeUri :: DocumentChange -> Uri
+documentChangeUri (InL x) = x ^. textDocument . uri
+documentChangeUri (InR (InL x)) = x ^. uri
+documentChangeUri (InR (InR (InL x))) = x ^. oldUri
+documentChangeUri (InR (InR (InR x))) = x ^. uri
+
updateState :: (MonadIO m, HasReader SessionContext m, HasState SessionState m)
=> FromServerMessage -> m ()
updateState :: (MonadIO m, HasReader SessionContext m, HasState SessionState m)
=> FromServerMessage -> m ()
@@
-323,8
+331,8
@@
updateState (FromServerMess SWorkspaceApplyEdit r) = do
-- First, prefer the versioned documentChanges field
allChangeParams <- case r ^. params . edit . documentChanges of
Just (List cs) -> do
-- First, prefer the versioned documentChanges field
allChangeParams <- case r ^. params . edit . documentChanges of
Just (List cs) -> do
- mapM_ (checkIfNeedsOpened .
(^. textDocument . uri)
) cs
- return $ map
getParams
cs
+ mapM_ (checkIfNeedsOpened .
documentChangeUri
) cs
+ return $ map
Maybe getParamsFromDocumentChange
cs
-- Then fall back to the changes field
Nothing -> case r ^. params . edit . changes of
Just cs -> do
-- Then fall back to the changes field
Nothing -> case r ^. params . edit . changes of
Just cs -> do
@@
-371,10
+379,16
@@
updateState (FromServerMess SWorkspaceApplyEdit r) = do
let (newVFS,_) = openVFS (vfs s) msg
return $ s { vfs = newVFS }
let (newVFS,_) = openVFS (vfs s) msg
return $ s { vfs = newVFS }
- getParams (TextDocumentEdit docId (List edits)) =
+ getParamsFromTextDocumentEdit :: TextDocumentEdit -> DidChangeTextDocumentParams
+ getParamsFromTextDocumentEdit (TextDocumentEdit docId (List edits)) =
let changeEvents = map (\e -> TextDocumentContentChangeEvent (Just (e ^. range)) Nothing (e ^. newText)) edits
in DidChangeTextDocumentParams docId (List changeEvents)
let changeEvents = map (\e -> TextDocumentContentChangeEvent (Just (e ^. range)) Nothing (e ^. newText)) edits
in DidChangeTextDocumentParams docId (List changeEvents)
+ getParamsFromDocumentChange :: DocumentChange -> Maybe DidChangeTextDocumentParams
+ getParamsFromDocumentChange (InL textDocumentEdit) = Just $ getParamsFromTextDocumentEdit textDocumentEdit
+ getParamsFromDocumentChange _ = Nothing
+
+
-- For a uri returns an infinite list of versions [n,n+1,n+2,...]
-- where n is the current version
textDocumentVersions uri = do
-- For a uri returns an infinite list of versions [n,n+1,n+2,...]
-- where n is the current version
textDocumentVersions uri = do
@@
-387,8
+401,8
@@
updateState (FromServerMess SWorkspaceApplyEdit r) = do
vers <- textDocumentVersions uri
pure $ map (\(v, e) -> TextDocumentEdit v (List [e])) $ zip vers edits
vers <- textDocumentVersions uri
pure $ map (\(v, e) -> TextDocumentEdit v (List [e])) $ zip vers edits
- getChangeParams uri (List edits) =
- map <$> pure getParams <*> textDocumentEdits uri (reverse edits)
+ getChangeParams uri (List edits) =
do
+ map <$> pure getParams
FromTextDocumentEdit
<*> textDocumentEdits uri (reverse edits)
mergeParams :: [DidChangeTextDocumentParams] -> DidChangeTextDocumentParams
mergeParams params = let events = concat (toList (map (toList . (^. contentChanges)) params))
mergeParams :: [DidChangeTextDocumentParams] -> DidChangeTextDocumentParams
mergeParams params = let events = concat (toList (map (toList . (^. contentChanges)) params))