Skip to content

Commit 2fa7d22

Browse files
Integrate trivial-system-loader into micros
This ensures that no external dependencies need to be introduced.
1 parent 23f52d5 commit 2fa7d22

3 files changed

Lines changed: 49 additions & 4 deletions

File tree

lsp-api-load-systems.lisp

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
;;; trivial-system-loader.lisp
2+
;;;
3+
;;; SPDX-License-Identifier: MIT
4+
;;;
5+
;;; Copyright (C) 2024 Anthony Green and Michał 'phoe' Herda
6+
;;;
7+
;;; Permission is hereby granted, free of charge, to any person obtaining a copy
8+
;;; of this software and associated documentation files (the "Software"), to deal
9+
;;; in the Software without restriction, including without limitation the rights
10+
;;; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
;;; copies of the Software, and to permit persons to whom the Software is
12+
;;; furnished to do so, subject to the following conditions:
13+
;;;
14+
;;; The above copyright notice and this permission notice shall be included in all
15+
;;; copies or substantial portions of the Software.
16+
;;;
17+
;;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
;;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
;;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
;;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
;;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
;;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+
;;; SOFTWARE.
24+
;;;
25+
26+
(in-package :micros/lsp-api)
27+
28+
(defun load-systems (systems &key (verbose nil) (silent t))
29+
"Load system SYSTEMS, potentially downloading them from an external
30+
repository. SYSTEMS may be a single system or a list of
31+
systems. Loader behavior is modified by VERBOSE and SILENT."
32+
(unless (listp systems)
33+
(setf systems (list systems)))
34+
(flet ((try-load-system (system)
35+
(or
36+
(when (find-package '#:OCICL-RUNTIME)
37+
(progv (list (find-symbol "*DOWNLOAD*" '#:OCICL-RUNTIME)
38+
(find-symbol "*VERBOSE*" '#:OCICL-RUNTIME))
39+
(list t (or verbose (not silent)))
40+
(funcall (find-symbol "LOAD-SYSTEM" '#:asdf) system)))
41+
(when (find-package '#:QUICKLISP)
42+
(funcall (find-symbol "QUICKLOAD" '#:QUICKLISP)
43+
system :verbose verbose :silent silent))
44+
(when (find-package '#:ASDF)
45+
(funcall (find-symbol "LOAD-SYSTEM" '#:ASDF) system))
46+
(error "Unable to find any system-loading mechanism."))))
47+
(mapcar #'try-load-system systems)))

lsp-api.lisp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,9 +203,6 @@
203203
:kind (when symbol (symbol-kind symbol))))))
204204

205205
;;;
206-
(defun load-systems (system-names)
207-
(ql:quickload system-names))
208-
209206
(defun compile-and-load-file (filename)
210207
(uiop:with-temporary-file (:pathname output-file :type "fasl")
211208
(let* ((stream (make-broadcast-stream))

micros.asd

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@
5757
(:file "defmethod-form")
5858
(:file "loop-form")
5959
(:file "data-and-control-flow")))))
60-
(:file "lsp-api")))
60+
(:file "lsp-api")
61+
(:file "lsp-api-load-systems")))
6162

6263
(defsystem "micros/tests"
6364
:depends-on ("rove" "micros")

0 commit comments

Comments
 (0)