|
7 | 7 | [eca.messenger :as messenger] |
8 | 8 | [eca.shared :as shared])) |
9 | 9 |
|
10 | | -(defn ^:private diagnostics [arguments {:keys [messenger]}] |
| 10 | +(defn ^:private diagnostics [arguments {:keys [messenger config]}] |
11 | 11 | (or (tools.util/invalid-arguments arguments [["path" #(or (nil? %) |
12 | 12 | (string/blank? %) |
13 | 13 | (not (fs/directory? %))) "Path needs to be a file, not a directory."]]) |
14 | | - (let [uri (some-> (get arguments "path") not-empty shared/filename->uri)] |
| 14 | + (let [uri (some-> (get arguments "path") not-empty shared/filename->uri) |
| 15 | + timeout-ms (* 1000 (get config :lspTimeoutSeconds 30))] |
15 | 16 | (try |
16 | | - (let [diags (:diagnostics @(messenger/editor-diagnostics messenger uri))] |
17 | | - (if (seq diags) |
18 | | - {:error false |
| 17 | + (let [response (deref (messenger/editor-diagnostics messenger uri) timeout-ms ::timeout)] |
| 18 | + (if (= response ::timeout) |
| 19 | + {:error true |
19 | 20 | :contents [{:type :text |
20 | | - :text (reduce |
21 | | - (fn [s {:keys [uri range severity code message]}] |
22 | | - (str s (format "%s:%s:%s: %s: %s%s" |
23 | | - (shared/uri->filename uri) |
24 | | - (-> range :start :line) |
25 | | - (-> range :start :character) |
26 | | - severity |
27 | | - (if code (format "[%s] " code) "") |
28 | | - message))) |
29 | | - "" |
30 | | - diags)}]} |
31 | | - {:error false |
32 | | - :contents [{:type :text |
33 | | - :text "No diagnostics found"}]})) |
| 21 | + :text "Timeout waiting for editor diagnostics response"}]} |
| 22 | + (let [diags (:diagnostics response)] |
| 23 | + (if (seq diags) |
| 24 | + {:error false |
| 25 | + :contents [{:type :text |
| 26 | + :text (reduce |
| 27 | + (fn [s {:keys [uri range severity code message]}] |
| 28 | + (str s (format "%s:%s:%s: %s: %s%s" |
| 29 | + (shared/uri->filename uri) |
| 30 | + (-> range :start :line) |
| 31 | + (-> range :start :character) |
| 32 | + severity |
| 33 | + (if code (format "[%s] " code) "") |
| 34 | + message))) |
| 35 | + "" |
| 36 | + diags)}]} |
| 37 | + {:error false |
| 38 | + :contents [{:type :text |
| 39 | + :text "No diagnostics found"}]})))) |
34 | 40 | (catch Exception e |
35 | 41 | (logger/error (format "Error getting editor diagnostics for arguments %s: %s" arguments e)) |
36 | 42 | {:error true |
|
0 commit comments