diff --git a/src/fennel-ls/handlers.fnl b/src/fennel-ls/handlers.fnl index fe56152..6404941 100644 --- a/src/fennel-ls/handlers.fnl +++ b/src/fennel-ls/handlers.fnl @@ -234,9 +234,9 @@ Every time the client sends a message, it gets handled by a function in the corr (send (message.diagnostics file)))) (λ notifications.textDocument/didChange [server send {: contentChanges :textDocument {: uri}}] - (local file (files.get-by-uri server uri)) - (files.set-uri-contents server uri (utils.apply-changes file.text contentChanges server.position-encoding)) - (push-diagnostics server file send)) + (let [file (files.get-by-uri server uri) + file (files.set-uri-contents server uri (utils.apply-changes file.text contentChanges server.position-encoding))] + (push-diagnostics server file send))) (λ notifications.textDocument/didOpen [server send {:textDocument {: text : uri}}] (local file (files.set-uri-contents server uri text)) diff --git a/test/diagnostic.fnl b/test/diagnostic.fnl index e0897e6..6d89d82 100644 --- a/test/diagnostic.fnl +++ b/test/diagnostic.fnl @@ -192,10 +192,28 @@ [{:message "expected whitespace before token"}] [])) +(fn test-after-edit [] + (let [{: uri : client : locations} + (create-client "(fn abc [] (+ a====)) + {: abc}" + ;; wants push notifications + {:capabilities {:textDocument {:publishDiagnostics true}}}) + [{:params {: diagnostics}}] (client:change-text! uri [{:range (. locations 1 :range) :text " b"}])] + (faith.= diagnostics [{:code "compiler-error" + :message "unknown identifier: a" + :range {:end {:character 15 :line 0} :start {:character 14 :line 0}} + :severity 1} + {:code "compiler-error" + :message "unknown identifier: b" + :range {:end {:character 17 :line 0} :start {:character 16 :line 0}} + :severity 1}]) + nil)) + {: test-lua-versions : test-macro-environment : test-compile-error : test-parse-error : test-macro-error : test-multiple-errors - : test-warnings} + : test-warnings + : test-after-edit} diff --git a/test/utils/client.fnl b/test/utils/client.fnl index 90805e7..ecf4a73 100644 --- a/test/utils/client.fnl +++ b/test/utils/client.fnl @@ -24,6 +24,15 @@ (fn pretend-this-file-exists! [self name text] (tset self.server.preload name text)) +(fn change-text! [self name contentChanges] + (dispatch.handle* self.server + (message.create-notification :textDocument/didChange + {: contentChanges + :textDocument + {:uri name + :languageId "fennel" + :version 2}}))) + (fn completion [self file position] (dispatch.handle* self.server (message.create-request (next-id! self) :textDocument/completion @@ -103,6 +112,7 @@ (local client-mt {:__index {: open-file! + : change-text! : pretend-this-file-exists! : completion : completion-item-resolve