Variable: majutsu-template--type-registry
majutsu-template--type-registry is a variable defined in
majutsu-template.el.
Value
Large value
#s(hash-table test eq data
(AnnotationLine
#s(majutsu-template--type AnnotationLine
"Annotation/annotate line context."
((Boolean . no)
(Serialize . no)
(Template . no)))
Any
#s(majutsu-template--type Any
"Generic expression value."
((Boolean . no)
(Serialize . maybe)
(Template . maybe)))
Boolean
#s(majutsu-template--type Boolean "Boolean value."
((Boolean . yes)
(Serialize . yes)
(Template . yes)))
ChangeId
#s(majutsu-template--type ChangeId "Change identifier."
((Boolean . no)
(Serialize . yes)
(Template . yes)))
Commit
#s(majutsu-template--type Commit "Commit object."
((Boolean . no)
(Serialize . yes)
(Template . no)))
CommitEvolutionEntry
#s(majutsu-template--type CommitEvolutionEntry
"Commit evolution information."
((Boolean . no)
(Serialize . yes)
(Template . no)))
CommitId
#s(majutsu-template--type CommitId "Commit identifier."
((Boolean . no)
(Serialize . yes)
(Template . yes)))
CommitRef
#s(majutsu-template--type CommitRef
"Commit reference (bookmark/tag)."
((Boolean . no)
(Serialize . yes)
(Template . yes)))
ConfigValue
#s(majutsu-template--type ConfigValue
"Configuration value."
((Boolean . no)
(Serialize . yes)
(Template . yes)))
CryptographicSignature
#s(majutsu-template--type CryptographicSignature
"Cryptographic signature metadata."
((Boolean . no)
(Serialize . no)
(Template . no)))
DiffStatEntry
#s(majutsu-template--type DiffStatEntry
"Per-file diff stat entry."
((Boolean . no)
(Serialize . no)
(Template . no)))
DiffStats
#s(majutsu-template--type DiffStats
"Diff statistics histogram."
((Boolean . no)
(Serialize . no)
(Template . yes)))
Email
#s(majutsu-template--type Email
"Email address component."
((Boolean . yes)
(Serialize . yes)
(Template . yes)))
Integer
#s(majutsu-template--type Integer "Integer value."
((Boolean . no)
(Serialize . yes)
(Template . yes)))
Lambda
#s(majutsu-template--type Lambda
"Template lambda/expression."
((Boolean . no)
(Serialize . no)
(Template . no)))
List
#s(majutsu-template--type List "Generic list."
((Boolean . yes)
(Serialize . maybe)
(Template . maybe)))
Operation
#s(majutsu-template--type Operation "Operation object."
((Boolean . no)
(Serialize . yes)
(Template . no)))
OperationId
#s(majutsu-template--type OperationId
"Operation identifier."
((Boolean . no)
(Serialize . yes)
(Template . yes)))
Option
#s(majutsu-template--type Option "Optional value."
((Boolean . yes)
(Serialize . maybe)
(Template . maybe)))
RefSymbol
#s(majutsu-template--type RefSymbol "Reference symbol."
((Boolean . no)
(Serialize . yes)
(Template . yes)
(String . yes)))
RepoPath
#s(majutsu-template--type RepoPath "Repository path."
((Boolean . no)
(Serialize . yes)
(Template . yes)))
Serialize
#s(majutsu-template--type Serialize
"Serializable expression."
((Serialize . yes)))
ShortestIdPrefix
#s(majutsu-template--type ShortestIdPrefix
"Shortest id prefix."
((Boolean . no)
(Serialize . yes)
(Template . yes)))
Signature
#s(majutsu-template--type Signature "Commit signature."
((Boolean . no)
(Serialize . yes)
(Template . yes)))
SizeHint
#s(majutsu-template--type SizeHint "Size hint bounds."
((Boolean . no)
(Serialize . yes)
(Template . no)))
String
#s(majutsu-template--type String "String value."
((Boolean . yes)
(Serialize . yes)
(Template . yes)
(StringPattern . yes)))
StringLiteral
#s(majutsu-template--type StringLiteral
"Compile-time string literal."
((Boolean . yes)
(Serialize . yes)
(Template . yes)
(String . yes)
(StringLiteral . yes)
(StringPattern . yes)))
Stringify
#s(majutsu-template--type Stringify
"Stringified template value."
((Boolean . no)
(Serialize . maybe)
(Template . yes)))
StringPattern
#s(majutsu-template--type StringPattern
"String pattern literal."
((Boolean . no)
(Serialize . no)
(Template . no)))
Template
#s(majutsu-template--type Template "Template fragment."
((Boolean . no)
(Serialize . no)
(Template . yes)))
Timestamp
#s(majutsu-template--type Timestamp "Timestamp value."
((Boolean . no)
(Serialize . yes)
(Template . yes)))
TimestampRange
#s(majutsu-template--type TimestampRange
"Timestamp range."
((Boolean . no)
(Serialize . yes)
(Template . yes)))
Trailer
#s(majutsu-template--type Trailer "Commit trailer."
((Boolean . no)
(Serialize . no)
(Template . yes)))
TreeDiff
#s(majutsu-template--type TreeDiff "Tree diff."
((Boolean . no)
(Serialize . no)
(Template . no)))
TreeDiffEntry
#s(majutsu-template--type TreeDiffEntry
"Tree diff entry."
((Boolean . no)
(Serialize . no)
(Template . no)))
TreeEntry
#s(majutsu-template--type TreeEntry "Tree entry."
((Boolean . no)
(Serialize . no)
(Template . no)))
WorkspaceRef
#s(majutsu-template--type WorkspaceRef
"Workspace reference."
((Boolean . no)
(Serialize . yes)
(Template . yes)))))
Documentation
Registry of known template types keyed by symbol.
Source Code
;; Defined in /nix/store/jagqw3nms546pad0gxi5f3wsckk6pji7-emacs-packages-deps/share/emacs/site-lisp/majutsu-template.el
;;;; Type and callable metadata
(eval-and-compile
(cl-defstruct (majutsu-template--type
(:constructor majutsu-template--make-type))
"Metadata describing a template value type."
name
doc
converts-to)
(defvar majutsu-template--type-registry (make-hash-table :test #'eq)
"Registry of known template types keyed by symbol.")
(defun majutsu-template--normalize-converts (value)
"Normalize VALUE describing type conversions into a canonical list.
Accepts nil, a list of symbols, or a list of (TYPE . STATUS) pairs."
(cond
((null value) nil)
((and (listp value) (consp (car value)) (symbolp (caar value)))
value)
((listp value)
(mapcar (lambda (type) (cons type 'yes)) value))
((symbolp value)
(list (cons value 'yes)))
(t
(user-error "majutsu-template: invalid :converts specification %S" value))))
(defun majutsu-template-define-type (name &rest plist)
"Register template type NAME with optional metadata PLIST.
Recognised keys: :doc (string), :converts or :converts-to (list)."
(cl-check-type name symbol)
(let* ((doc (plist-get plist :doc))
(raw-converts (or (plist-get plist :converts)
(plist-get plist :converts-to)))
(converts-to (majutsu-template--normalize-converts raw-converts)))
(puthash name
(majutsu-template--make-type
:name name
:doc doc
:converts-to converts-to)
majutsu-template--type-registry)))
(defun majutsu-template--lookup-type (name)
"Return registered type metadata for NAME or nil."
(gethash name majutsu-template--type-registry))
(defun majutsu-template--type-ref-normalize (type)
"Normalize TYPE into a minimal internal type reference."
(cond
((null type) 'Unknown)
((and (consp type) (memq (car type) '(:list :option :lambda)))
(pcase (car type)
(:list (list :list (majutsu-template--type-ref-normalize (cadr type))))
(:option (list :option (majutsu-template--type-ref-normalize (cadr type))))
(:lambda (list :lambda
(mapcar #'majutsu-template--type-ref-normalize (cadr type))
(majutsu-template--type-ref-normalize (caddr type))))))
((or (keywordp type) (symbolp type)) type)
((stringp type) (intern type))
(t 'Unknown)))
(defun majutsu-template--type-ref-base-type (type)
"Return nominal base type symbol for TYPE reference."
(setq type (majutsu-template--type-ref-normalize type))
(cond
((symbolp type)
(pcase type
(:self 'Template)
(:element 'Template)
(:option-value 'Template)
(_ type)))
((consp type)
(pcase (car type)
(:list 'List)
(:option 'Option)
(:lambda 'Lambda)
(_ 'Unknown)))
(t 'Unknown)))
(defun majutsu-template--type-ref-dispatch-fragment (type)
"Return canonical dispatch-name fragment derived from TYPE reference."
(setq type (majutsu-template--type-ref-normalize type))
(pcase type
((pred symbolp)
(symbol-name (majutsu-template--type-ref-base-type type)))
(`(:list ,inner)
(concat (majutsu-template--type-ref-dispatch-fragment inner) "List"))
(`(:option ,inner)
(concat (majutsu-template--type-ref-dispatch-fragment inner) "Opt"))
(`(:lambda . ,_)
"Lambda")
(_
(symbol-name (majutsu-template--type-ref-base-type type)))))
(defun majutsu-template--type-ref-dispatch-kind (type)
"Return internal dispatch kind symbol derived from TYPE reference."
(intern (majutsu-template--type-ref-dispatch-fragment type))))