Function: forge--topic-parse-template

forge--topic-parse-template is a byte-compiled function defined in forge-topic.el.

Signature

(forge--topic-parse-template NAME)

Source Code

;; Defined in ~/.emacs.d/elpa/forge-20260408.1922/forge-topic.el
(defun forge--topic-parse-template (name)
  (goto-char (point-min))
  (skip-chars-forward "\s\t\n\r")
  (if-let ((beg (and (looking-at "^---[\s\t]*$")
                     (point)))
           (end (and (zerop (forward-line))
                     (re-search-forward "^---[\s\t]*$" nil t)
                     (match-beginning 0)))
           (repoid (oref (forge-get-repository :tracked) id)))
      (let-alist (yaml-parse-string (buffer-str beg end)
                                    :object-type 'alist
                                    :sequence-type 'list
                                    :null-object nil
                                    :false-object nil)
        (when (stringp .name)
          (setq name .name))
        (setq name (propertize .name 'face 'bold))
        `((prompt    . ,(if .about (format "%s — %s" name .about) name))
          (title     . ,(and .title
                             (stringp .title)
                             (string-trim .title)))
          (text      . ,(string-trim (buffer-str (point))))
          ;; Prevent ad hock creation or previously unknown labels.
          (labels    . ,(cl-intersection
                         (ensure-list .labels)
                         (forge-sql-car [:select name :from label
                                         :where (= repository $s1)]
                                        repoid)
                         :test #'equal))
          ;; Server errors on invalid assignees.
          (assignees . ,(cl-intersection
                         (ensure-list .assignees)
                         (forge-sql-car [:select login :from assignee
                                         :where (= repository $s1)]
                                        repoid)
                         :test #'equal))
          (draft     . ,(and (booleanp .draft) .draft))))
    `((prompt . ,(propertize name 'face 'bold))
      (text   . ,(string-trim (buffer-str))))))