-
Notifications
You must be signed in to change notification settings - Fork 32
Expand file tree
/
Copy pathInsertFields.hs
More file actions
33 lines (30 loc) · 1.07 KB
/
Copy pathInsertFields.hs
File metadata and controls
33 lines (30 loc) · 1.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
module StaticLS.IDE.CodeActions.InsertFields where
import Data.Text qualified as T
import Language.LSP.Protocol.Types qualified as LSP
import StaticLS.IDE.CodeActions.Utils (indentation, prefer, quickFix)
codeAction ::
LSP.TextDocumentIdentifier ->
LSP.Diagnostic ->
T.Text ->
Maybe T.Text ->
[T.Text] ->
LSP.CodeAction
codeAction = insertFields
insertFields ::
LSP.TextDocumentIdentifier ->
LSP.Diagnostic ->
T.Text ->
Maybe T.Text ->
[T.Text] ->
LSP.CodeAction
insertFields tdi diag ctor existingFields missingFields =
let spaces = indentation diag._range
seps = "{ " : repeat ", "
formatNewField sep fld = T.concat [spaces, sep, fld, " = _"]
formatOldFields flds = T.concat [spaces, ", ", flds]
newFields = zipWith formatNewField seps missingFields
allFields = case existingFields of
Nothing -> newFields
Just flds -> newFields <> [formatOldFields flds]
renderedExpr = T.concat [ctor, "\n" <> T.unlines allFields <> spaces <> "}\n"]
in prefer $ quickFix tdi diag "Insert fields." (diag._range) renderedExpr