|
62 | 62 | :group 'psc-ide)
|
63 | 63 |
|
64 | 64 | (defcustom psc-ide-server-executable "psc-ide-server"
|
65 |
| - "Path to the 'psc-ide-server' executable." |
| 65 | + "Path to the 'psc-ide-server' executable" |
| 66 | + :group 'psc-ide |
| 67 | + :type 'string) |
| 68 | + |
| 69 | +(defcustom psc-ide-purs-executable "purs" |
| 70 | + "Path to the 'purs' executable." |
66 | 71 | :group 'psc-ide
|
67 | 72 | :type 'string)
|
68 | 73 |
|
69 | 74 | (defcustom psc-ide-use-npm-bin nil
|
70 |
| - "Whether to use `npm bin` to determine the location of the psc-ide server." |
| 75 | + "Whether to use `npm bin` to determine the location of the psc ide server." |
71 | 76 | :group 'psc-ide
|
72 | 77 | :type 'boolean)
|
73 | 78 |
|
| 79 | +(defcustom psc-ide-use-purs t |
| 80 | + "Whether to use `purs ide' to start psc ide server, if nil fallback to use old psc-ide-server" |
| 81 | + :group 'psc-ide |
| 82 | + :type 'boolean) |
| 83 | + |
74 | 84 | (defcustom psc-ide-port 4242
|
75 | 85 | "The port that psc-ide-server uses."
|
76 | 86 | :group 'psc-ide
|
@@ -360,44 +370,55 @@ use when the search used was with `string-match'."
|
360 | 370 |
|
361 | 371 |
|
362 | 372 | (defun psc-ide-ask-project-dir ()
|
363 |
| - "Ask psc-ide-server for the project dir." |
| 373 | + "Ask psc-ide server for the project dir." |
364 | 374 | (interactive)
|
365 | 375 | (psc-ide-send psc-ide-command-cwd
|
366 | 376 | (-compose 'message 'psc-ide-unwrap-result)))
|
367 | 377 |
|
368 | 378 | (defun psc-ide-server-start-impl (dir-name)
|
369 |
| - "Start psc-ide-server." |
| 379 | + "Start psc-ide server." |
370 | 380 | (apply 'start-process `("*psc-ide-server*" "*psc-ide-server*"
|
371 | 381 | ,@(psc-ide-server-command dir-name))))
|
372 | 382 |
|
373 | 383 | (defun psc-ide-server-command (dir-name)
|
374 |
| - "Tries to find the psc-ide-server-executable and builds up the |
| 384 | + "Tries to find the psc-ide executable and builds up the |
375 | 385 | command by appending eventual options. Returns a list that can
|
376 | 386 | be expanded and passed to start-process"
|
377 |
| - (let* ((npm-bin-path (if psc-ide-use-npm-bin |
378 |
| - (psc-ide-npm-bin-server-executable) |
| 387 | + (let* ((executable-name (psc-ide-executable-name)) |
| 388 | + (npm-bin-path (if psc-ide-use-npm-bin |
| 389 | + (psc-ide-npm-bin-server-executable executable-name) |
379 | 390 | nil))
|
380 |
| - (path (or npm-bin-path (executable-find psc-ide-server-executable))) |
| 391 | + (path (or npm-bin-path (executable-find executable-name))) |
| 392 | + (cmd (if psc-ide-use-purs |
| 393 | + `(,path "ide" "server") |
| 394 | + `(,path))) |
381 | 395 | (port (number-to-string psc-ide-port))
|
382 | 396 | (directory (expand-file-name dir-name))
|
383 |
| - (debug-flag (when psc-ide-debug "--debug")) |
384 |
| - (globs (when (psc-ide--version-gte (psc-ide-server-version) "0.9.2") psc-ide-source-globs))) |
| 397 | + (debug-flags (when psc-ide-debug (if psc-ide-use-purs |
| 398 | + '("--log-level" "debug") |
| 399 | + '("--debug"))))) |
385 | 400 | (if path
|
386 |
| - (remove nil `(,path "-p" ,port "-d" ,directory "--output-directory" ,psc-ide-output-directory ,debug-flag ,@globs)) |
387 |
| - (error (s-join " " '("Couldn't locate the psc-ide-server executable. You" |
388 |
| - "could either customize the psc-ide-server-executable" |
389 |
| - "setting, or set the psc-ide-use-npm-bin variable to" |
390 |
| - "true, or put the executable on your path.")))))) |
391 |
| - |
392 |
| -(defun psc-ide-npm-bin-server-executable () |
393 |
| - "Find psc-ide-server binary of current project by invoking `npm bin`" |
| 401 | + (remove nil `(,@cmd "-p" ,port "-d" ,directory "--output-directory" ,psc-ide-output-directory ,@debug-flags ,@psc-ide-source-globs)) |
| 402 | + (error (s-join " " '("Couldn't locate psc ide executable. You" |
| 403 | + "could either customize the psc-ide-purs-executable" |
| 404 | + " or psc-ide-server-executable if psc-ide-use-purs is nil," |
| 405 | + " or set the psc-ide-use-npm-bin variable to" |
| 406 | + " true, or put the executable on your path.")))))) |
| 407 | +(defun psc-ide-executable-name () |
| 408 | + "Find ide executable name" |
| 409 | + (if psc-ide-use-purs |
| 410 | + psc-ide-purs-executable |
| 411 | + psc-ide-server-executable)) |
| 412 | + |
| 413 | +(defun psc-ide-npm-bin-server-executable (cmd) |
| 414 | + "Find psc-ide server binary of current project by invoking `npm bin`" |
394 | 415 | (let* ((npm-bin (s-trim-right (shell-command-to-string "npm bin")))
|
395 |
| - (server (expand-file-name psc-ide-server-executable npm-bin))) |
| 416 | + (server (expand-file-name cmd npm-bin))) |
396 | 417 | (if (and server (file-executable-p server)) server nil)))
|
397 | 418 |
|
398 | 419 | (defun psc-ide-server-version ()
|
399 | 420 | "Returns the version of the found psc-ide-server executable"
|
400 |
| - (let ((path (executable-find psc-ide-server-executable))) |
| 421 | + (let ((path (executable-find (psc-ide-executable-name)))) |
401 | 422 | (s-chomp (shell-command-to-string (s-concat path " --version")))))
|
402 | 423 |
|
403 | 424 | (defun psc-ide--version-gte (version1 version2)
|
|
0 commit comments