Skip to content
This repository was archived by the owner on Oct 26, 2023. It is now read-only.

Commit 127302b

Browse files
dannypsnljeapostrophe
authored andcommitted
add simple CodeAction that can fix intensional unused variable
Signed-off-by: Lîm Tsú-thuàn <[email protected]>
1 parent 14bfe52 commit 127302b

File tree

4 files changed

+52
-1
lines changed

4 files changed

+52
-1
lines changed

doc-trace.rkt

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
(define completions (list))
2323
(define requires (make-interval-map))
2424
(define definitions (make-hash))
25+
(define quickfixs (mutable-set))
2526
;; decl -> (set pos ...)
2627
(define sym-decls (make-interval-map))
2728
;; pos -> decl
@@ -33,7 +34,8 @@
3334
(set! sym-decls (make-interval-map))
3435
(set! sym-bindings (make-interval-map))
3536
(set! requires (make-interval-map))
36-
(set! definitions (make-hash)))
37+
(set! definitions (make-hash))
38+
(set! quickfixs (mutable-set)))
3739
(define/public (expand start end)
3840
(define inc (- end start))
3941
(move-interior-intervals sym-decls (- start 1) inc)
@@ -72,6 +74,7 @@
7274
(define/public (get-sym-decls) sym-decls)
7375
(define/public (get-sym-bindings) sym-bindings)
7476
(define/public (get-definitions) definitions)
77+
(define/public (get-quickfixs) quickfixs)
7578
;; Overrides
7679
(define/override (syncheck:find-source-object stx)
7780
(and (equal? src (syntax-source stx))
@@ -90,6 +93,22 @@
9093
#:severity Diag-Information
9194
#:source (path->uri src-obj)
9295
#:message "unused variable"))
96+
97+
(set-add! quickfixs
98+
(CodeAction
99+
#:title "Add prefix `_` to ignore"
100+
#:kind "quickfix"
101+
#:diagnostics (list diag)
102+
#:isPreferred #f
103+
#:edit (WorkspaceEdit
104+
#:changes
105+
(hasheq (string->symbol (path->uri src-obj))
106+
(TextEdit #:range (Range #:start (abs-pos->Pos doc-text start)
107+
#:end (abs-pos->Pos doc-text finish))
108+
#:newText "_")))
109+
#:data (Range #:start (abs-pos->Pos doc-text start)
110+
#:end (abs-pos->Pos doc-text finish))))
111+
93112
(set-add! warn-diags diag)))
94113
(define/override (syncheck:add-mouse-over-status src-obj start finish text)
95114
;; Infer a length of 1 for zero-length ranges in the document.

interfaces.rkt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@
1111
(define-json-expander TextEdit
1212
[range any/c]
1313
[newText string?])
14+
(define-json-expander CodeAction
15+
[title string?]
16+
[kind string?]
17+
[diagnostics any/c]
18+
[isPreferred boolean?]
19+
[edit any/c]
20+
;; here, we put edit range
21+
[data any/c])
1422

1523
(define-json-expander Diagnostic
1624
[range any/c]

methods.rkt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@
6161
(shutdown id)]
6262
["textDocument/hover"
6363
(text-document/hover id params)]
64+
["textDocument/codeAction"
65+
(text-document/code-action id params)]
6466
["textDocument/completion"
6567
(text-document/completion id params)]
6668
["textDocument/signatureHelp"
@@ -127,6 +129,7 @@
127129
(define server-capabilities
128130
(hasheq 'textDocumentSync sync-options
129131
'hoverProvider #t
132+
'codeActionProvider #t
130133
'definitionProvider #t
131134
'referencesProvider #t
132135
'completionProvider (hasheq 'triggerCharacters (list "("))
@@ -155,3 +158,4 @@
155158
(contract-out
156159
[process-message
157160
(jsexpr? . -> . void?)]))
161+

text-document.rkt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,25 @@
149149
[_
150150
(error-response id INVALID-PARAMS "textDocument/hover failed")]))
151151

152+
;; Code Action request
153+
(define (code-action id params)
154+
(match params
155+
[(hash-table ['textDocument (DocIdentifier #:uri uri)]
156+
['range range]
157+
; TODO: _ctx has three fields
158+
; 1. `diagnostics`
159+
; 2. `only: CodeActionKind[]` server should use this to filter out client-unwanted code action
160+
; 3. `triggerKind?: CodeActionTriggerKind` the reason why code action were requested
161+
['context _ctx])
162+
#:when (uri-is-path? uri)
163+
(match-define (doc _doc-text doc-trace)
164+
(hash-ref open-docs (string->symbol uri)))
165+
(define code-action-list (set->list (send doc-trace get-quickfixs)))
166+
(success-response id code-action-list)]
167+
[(hash-table ['textDocument (DocIdentifier #:uri uri)])
168+
(error-response id INVALID-PARAMS (format "textDocument/codeAction failed uri is not a path ~a" uri))]
169+
[_ (error-response id INVALID-PARAMS "textDocument/codeAction failed")]))
170+
152171
;; Signature Help request
153172
(define (signatureHelp id params)
154173
(match params
@@ -584,6 +603,7 @@
584603
[did-close! (jsexpr? . -> . void?)]
585604
[did-change! (jsexpr? . -> . void?)]
586605
[hover (exact-nonnegative-integer? jsexpr? . -> . jsexpr?)]
606+
[code-action (exact-positive-integer? jsexpr? . -> . jsexpr?)]
587607
[completion (exact-nonnegative-integer? jsexpr? . -> . jsexpr?)]
588608
[signatureHelp (exact-nonnegative-integer? jsexpr? . -> . jsexpr?)]
589609
[definition (exact-nonnegative-integer? jsexpr? . -> . jsexpr?)]

0 commit comments

Comments
 (0)