Skip to content

Commit e255bbb

Browse files
committed
WIP: install server
1 parent cc2bbd9 commit e255bbb

File tree

5 files changed

+37
-18
lines changed

5 files changed

+37
-18
lines changed

src/main/clojure/com/github/clojure_lsp/intellij/client.clj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@
1313

1414
(defn execute-command [^String name ^String text ^Project project]
1515
(-> (CommandExecutor/executeCommand
16-
(doto (LSPCommandContext. (Command. text name) project)
17-
(.setPreferredLanguageServerId "clojure-lsp")))
16+
(doto (LSPCommandContext. (Command. text name) project)
17+
(.setPreferredLanguageServerId "clojure-lsp")))
1818
(.response)))

src/main/clojure/com/github/clojure_lsp/intellij/db.clj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
{:status :disconnected
1111
:downloaded-server-path nil
1212
:server-process nil
13-
:server nil
1413
:project nil
1514
:diagnostics {}
1615
:settings {:trace-level "off"

src/main/clojure/com/github/clojure_lsp/intellij/extension/init_db_startup.clj

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
(:import
1111
[com.github.clojure_lsp.intellij.extension SettingsState]
1212
[com.intellij.openapi.project Project]
13-
[com.redhat.devtools.lsp4ij LanguageServerManager LanguageServerWrapper]
13+
[com.redhat.devtools.lsp4ij LanguageServerWrapper]
1414
[com.redhat.devtools.lsp4ij.lifecycle LanguageServerLifecycleListener LanguageServerLifecycleManager]))
1515

1616
(set! *warn-on-reflection* true)
@@ -25,9 +25,6 @@
2525
(handleStatusChanged [_ ^LanguageServerWrapper server-wrapper]
2626
(let [status (keyword (.toString (.getServerStatus server-wrapper)))]
2727
(db/assoc-in project [:status] status)
28-
(when (= :started status)
29-
(db/assoc-in project [:server] (.getLanguageServer (LanguageServerManager/getInstance project)
30-
"clojure-lsp")))
3128
(run! #(% status) (db/get-in project [:on-status-changed-fns]))))
3229
(handleLSPMessage [_ _ _ _])
3330
(handleError [_ _ _])

src/main/clojure/com/github/clojure_lsp/intellij/extension/language_server_factory.clj

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@
33
:name com.github.clojure_lsp.intellij.extension.LanguageServerFactory
44
:implements [com.redhat.devtools.lsp4ij.LanguageServerFactory])
55
(:require
6+
[com.github.clojure-lsp.intellij.server :as server]
7+
[com.github.ericdallo.clj4intellij.logger :as logger]
8+
[com.github.ericdallo.clj4intellij.tasks :as tasks]
69
[com.rpl.proxy-plus :refer [proxy+]])
710
(:import
811
[com.intellij.execution.configurations GeneralCommandLine]
9-
[com.intellij.openapi.project Project]
12+
[com.intellij.openapi.project Project ProjectLocator]
13+
[com.intellij.openapi.vfs VirtualFile]
1014
[com.redhat.devtools.lsp4ij.client LanguageClientImpl]
1115
[com.redhat.devtools.lsp4ij.client.features LSPClientFeatures]
1216
[com.redhat.devtools.lsp4ij.server OSProcessStreamConnectionProvider]
@@ -21,16 +25,41 @@
2125
OSProcessStreamConnectionProvider)
2226
(.setCommandLine (GeneralCommandLine. ["/home/greg/dev/clojure-lsp/clojure-lsp" "listen"]))))
2327

24-
;; TODO custom commands
2528
(defn -createLanguageClient [_ ^Project project]
2629
(LanguageClientImpl. project))
2730

2831
;; TODO custom server methods
2932
(defn -getServerInterface [_] LanguageServer)
3033

34+
(defonce ^:private server (atom {:status :not-found}))
35+
36+
(defn ^:private install-server [project]
37+
(swap! server assoc :status :installing)
38+
(tasks/run-background-task!
39+
project
40+
"Installing clojure-lsp"
41+
(fn [indicator]
42+
(tasks/set-progress indicator "Clojure LSP: downloading server")
43+
(Thread/sleep 5000) ;; Simulate download server
44+
45+
(swap! server assoc :status :installed)
46+
(server/start-server! project))))
47+
3148
;; TODO client features
3249
(defn -createClientFeatures [_]
3350
(proxy+ [] LSPClientFeatures
51+
(isEnabled [_this ^VirtualFile file]
52+
(logger/info "-----> isEnabled" @server)
53+
(case (:status @server)
54+
:installing
55+
false
56+
57+
:installed
58+
true
59+
60+
:not-found
61+
(do (install-server (.guessProjectForFile (ProjectLocator/getInstance) file))
62+
false)))
3463
(initializeParams [_ ^InitializeParams params]
3564
(.setWorkDoneToken params "clojure-lsp-startup")
3665
(.setInitializationOptions params {"dependency-scheme" "jar"
Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,12 @@
11
(ns com.github.clojure-lsp.intellij.server
2-
(:require
3-
[com.github.clojure-lsp.intellij.db :as db])
42
(:import
53
[com.intellij.openapi.project Project]
6-
[com.redhat.devtools.lsp4ij LanguageServerItem LanguageServerManager]))
4+
[com.redhat.devtools.lsp4ij LanguageServerManager]))
75

86
(set! *warn-on-reflection* true)
97

108
(defn start-server! [^Project project]
11-
(when-let [item ^LanguageServerItem @(db/get-in project [:server])]
12-
(when-let [server ^LanguageServerManager (.getServer item)]
13-
(.start server "clojure-lsp"))))
9+
(.start (LanguageServerManager/getInstance project) "clojure-lsp"))
1410

1511
(defn shutdown! [^Project project]
16-
(when-let [item ^LanguageServerItem @(db/get-in project [:server])]
17-
(when-let [server ^LanguageServerManager (.getServer item)]
18-
(.stop server "clojure-lsp"))))
12+
(.stop (LanguageServerManager/getInstance project) "clojure-lsp"))

0 commit comments

Comments
 (0)