Simplify some handlers case-try to avoid use of where clause.
This commit is contained in:
parent
bb2ccd67c2
commit
80b4f9d29a
@ -97,8 +97,7 @@ Every time the client sends a message, it gets handled by a function in the corr
|
|||||||
(catch _ nil))))
|
(catch _ nil))))
|
||||||
|
|
||||||
;; DocumentHighlightKind
|
;; DocumentHighlightKind
|
||||||
(local documentHighlightKind
|
(local documentHighlightKind {:Text 1 :Read 2 :Write 3})
|
||||||
{:Text 1 :Read 2 :Write 3})
|
|
||||||
|
|
||||||
(λ requests.textDocument/documentHighlight [server _send {: position
|
(λ requests.textDocument/documentHighlight [server _send {: position
|
||||||
:textDocument {: uri}}]
|
:textDocument {: uri}}]
|
||||||
@ -107,32 +106,30 @@ Every time the client sends a message, it gets handled by a function in the corr
|
|||||||
(case-try (analyzer.find-symbol file.ast byte)
|
(case-try (analyzer.find-symbol file.ast byte)
|
||||||
symbol
|
symbol
|
||||||
(analyzer.find-nearest-definition server file symbol byte)
|
(analyzer.find-nearest-definition server file symbol byte)
|
||||||
(where definition (not= definition.referenced-by nil))
|
{: referenced-by : file : binding}
|
||||||
(let [result (icollect [_ {: symbol} (ipairs definition.referenced-by)]
|
(icollect [_ {: symbol} (ipairs referenced-by)
|
||||||
{:range (message.ast->range server definition.file symbol)
|
&into [{:range (message.ast->range server file binding)
|
||||||
:kind documentHighlightKind.Read})]
|
:kind documentHighlightKind.Write}]]
|
||||||
(table.insert result
|
|
||||||
{:range (message.ast->range server definition.file definition.binding)
|
|
||||||
:kind documentHighlightKind.Write})
|
|
||||||
|
|
||||||
;; TODO don't include duplicates
|
;; TODO don't include duplicates
|
||||||
result)
|
{:range (message.ast->range server file symbol)
|
||||||
|
:kind documentHighlightKind.Read})
|
||||||
(catch _ nil))))
|
(catch _ nil))))
|
||||||
|
|
||||||
(λ requests.textDocument/references [server _send {: position
|
(λ requests.textDocument/references [server _send {: position
|
||||||
:textDocument {: uri}
|
:textDocument {: uri}
|
||||||
:context {:includeDeclaration ?include-declaration?}}]
|
:context {:includeDeclaration
|
||||||
|
include-declaration?}}]
|
||||||
(let [file (files.get-by-uri server uri)
|
(let [file (files.get-by-uri server uri)
|
||||||
byte (utils.position->byte file.text position server.position-encoding)]
|
byte (utils.position->byte file.text position server.position-encoding)]
|
||||||
(case-try (analyzer.find-symbol file.ast byte)
|
(case-try (analyzer.find-symbol file.ast byte)
|
||||||
symbol
|
symbol
|
||||||
(analyzer.find-nearest-definition server file symbol byte)
|
(analyzer.find-nearest-definition server file symbol byte)
|
||||||
(where definition (not= definition.referenced-by nil))
|
{: referenced-by : file : binding}
|
||||||
(let [result (icollect [_ {: symbol} (ipairs definition.referenced-by)]
|
(let [result (icollect [_ {: symbol} (ipairs referenced-by)]
|
||||||
(message.range-and-uri server definition.file symbol))]
|
(message.range-and-uri server file symbol))]
|
||||||
(if ?include-declaration?
|
(when include-declaration?
|
||||||
(table.insert result
|
(table.insert result
|
||||||
(message.range-and-uri server definition.file definition.binding)))
|
(message.range-and-uri server file binding)))
|
||||||
|
|
||||||
;; TODO don't include duplicates
|
;; TODO don't include duplicates
|
||||||
result)
|
result)
|
||||||
@ -259,26 +256,27 @@ Every time the client sends a message, it gets handled by a function in the corr
|
|||||||
symbol
|
symbol
|
||||||
(analyzer.find-nearest-definition server file symbol symbol.bytestart)
|
(analyzer.find-nearest-definition server file symbol symbol.bytestart)
|
||||||
;; TODO we are assuming that every reference is in the same file
|
;; TODO we are assuming that every reference is in the same file
|
||||||
(where definition (not= definition.referenced-by nil))
|
{: referenced-by : file : binding}
|
||||||
(let [usages (icollect [_ {: symbol} (ipairs definition.referenced-by)
|
(let [usages (icollect [_ {: symbol} (ipairs referenced-by)
|
||||||
&into [{:range (message.multisym->range server definition.file definition.binding 1)
|
&into [{:range (message.multisym->range
|
||||||
|
server file binding 1)
|
||||||
:newText new-name}]]
|
:newText new-name}]]
|
||||||
(if (and (. file.lexical symbol)
|
(if (and (. file.lexical symbol)
|
||||||
(not (rawequal symbol definition.binding)))
|
(not (rawequal symbol binding)))
|
||||||
{:newText new-name
|
{:newText new-name
|
||||||
:range (message.multisym->range server definition.file symbol 1)}))]
|
:range (message.multisym->range server file symbol 1)}))]
|
||||||
|
|
||||||
;; NOTE: I don't care about encoding here because we just need the relative positions
|
;; NOTE: I don't care about encoding here because we just need the relative positions
|
||||||
(table.sort usages
|
(table.sort usages
|
||||||
#(> (utils.position->byte definition.file.text $1.range.start :utf-8)
|
#(> (utils.position->byte file.text $1.range.start :utf-8)
|
||||||
(utils.position->byte definition.file.text $2.range.start :utf-8)))
|
(utils.position->byte file.text $2.range.start :utf-8)))
|
||||||
(var prev {})
|
(var prev {})
|
||||||
(let [usages-dedup (icollect [_ edit (ipairs usages)]
|
(let [usages-dedup (icollect [_ edit (ipairs usages)]
|
||||||
(when (or (not= edit.range.start.line prev.line)
|
(when (or (not= edit.range.start.line prev.line)
|
||||||
(not= edit.range.start.character prev.character))
|
(not= edit.range.start.character prev.character))
|
||||||
(set prev edit.range.start)
|
(set prev edit.range.start)
|
||||||
edit))]
|
edit))]
|
||||||
{:changes {definition.file.uri usages-dedup}}))
|
{:changes {file.uri usages-dedup}}))
|
||||||
(catch _ nil))))
|
(catch _ nil))))
|
||||||
|
|
||||||
(fn pos<= [pos-1 pos-2]
|
(fn pos<= [pos-1 pos-2]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user