Coverage report: /home/ellis/comp/core/app/skel/core/header.lisp
Kind | Covered | All | % |
expression | 49 | 78 | 62.8 |
branch | 0 | 0 | nil |
Key
Not instrumented
Conditionalized out
Executed
Not executed
Both branches taken
One branch taken
Neither branch taken
1
;;; lib/skel/core/header.lisp --- Skel file-header proto
6
(in-package :skel/core/header)
9
(deftype file-header-kind () '(member :source :shebang))
11
(defclass sk-file-header (file-header)
12
((kind :initform :source :type file-header-kind :initarg :kind)))
14
(defun make-file-header (kind hl)
15
(make-instance 'sk-file-header :kind kind :headline hl))
17
(defun make-source-file-header (str)
18
(make-file-header :source str))
20
(defun make-shebang-file-header (str)
21
(make-file-header :shebang str))
23
(defun make-source-header-comment (name &key (cchar #\;) (timestamp nil) (description nil) (opts nil))
24
"Generate a generic file-header with optional timestamp, description, and opts."
25
(format nil "~A ~A~A~A~A~%" (make-string 3 :initial-element cchar)
28
(multiple-value-bind (s m h d mo y) (decode-universal-time (get-universal-time) 0)
29
(format nil " @ ~4,'0d-~2,'0d-~2,'0d.~2,'0d:~2,'0d:~2,'0d" y mo d h m s))
32
(format nil " --- ~A" description)
35
(format nil " -*- ~{~A~^;~} -*-" opts)
38
(defun make-shebang-comment (shell &rest args)
39
"Generate a shebang file-header line."
40
(format nil "#~A ~{~A~^ ~}~%" shell args))
42
(defun parse-stream-file-header (stream)
43
"Parse a file-header from STREAM."
44
(std:when-let ((l (read-line stream nil nil)))
47
(defun parse-source-file-header (file)
48
"Return a FILE-HEADER based on the first line of FILE."
49
(with-open-file (f file)
50
(make-file-header :source (parse-stream-file-header f))))
52
(defun extract-source-file-header (str)
53
"Extract a FILE-HEADER from STR, returning two values: the extracted object, and the modified string."
54
(with-input-from-string (s str)
56
(make-file-header :source (parse-stream-file-header s))