changeset 655: | 65102f74d1ae |
parent: | 328e1ff73938 |
child: | 517c65b51e6b |
author: | Richard Westhaver <ellis@rwest.io> |
date: | Mon, 16 Sep 2024 21:28:33 -0400 |
permissions: | -rw-r--r-- |
description: | some optimizations, may have muddied the waters with cli-opt a bit though.. tbd |
419
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
1 | ;;; cli/clap/proto.lisp --- Clap Protocol |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
2 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
3 | ;; |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
4 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
5 | ;;; Code: |
426
3e721a3349a0
completed phase2 of clap migration
Richard Westhaver <ellis@rwest.io>
parents:
419
diff
changeset
|
6 | (in-package :cli/clap/proto) |
419
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
7 | |
645 | 8 | (define-condition clap-condition () ()) |
9 | (eval-always |
|
10 | (deferror clap-error (clap-condition) ()) |
|
11 | (defwarning clap-warning (clap-condition) ()) |
|
12 | (deferror clap-simple-error (simple-error clap-error) () (:auto t)) |
|
13 | (deferror clap-unknown-argument (clap-error unknown-argument) ()) |
|
646
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
14 | (deferror clap-missing-argument (clap-error missing-argument) |
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
15 | ((kind :initarg :kind :initform nil))) |
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
16 | (deferror clap-invalid-argument (clap-error invalid-argument) ()) |
645 | 17 | (defwarning clap-simple-warning (simple-warning clap-warning) () (:auto t))) |
419
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
18 | |
652 | 19 | (defun clap-unknown-argument (arg kind) |
646
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
20 | (error 'clap-unknown-argument :name arg :kind kind)) |
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
21 | |
652 | 22 | (defun clap-missing-argument (arg kind) |
646
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
23 | (error 'clap-missing-argument :item arg :kind kind)) |
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
24 | |
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
25 | (defun clap-invalid-argument (arg &key reason kind) |
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
26 | (error 'clap-invalid-argument :name arg :kind kind :reason reason)) |
419
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
27 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
28 | (defgeneric push-cmd (cmd place)) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
29 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
30 | (defgeneric push-opt (opt place)) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
31 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
32 | (defgeneric pop-cmd (place)) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
33 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
34 | (defgeneric pop-opt (place)) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
35 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
36 | (defgeneric find-cmd (self name &optional active)) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
37 | |
655
65102f74d1ae
some optimizations, may have muddied the waters with cli-opt a bit though.. tbd
Richard Westhaver <ellis@rwest.io>
parents:
652
diff
changeset
|
38 | (defgeneric (setf find-cmd) (new self name &optional active)) |
65102f74d1ae
some optimizations, may have muddied the waters with cli-opt a bit though.. tbd
Richard Westhaver <ellis@rwest.io>
parents:
652
diff
changeset
|
39 | |
65102f74d1ae
some optimizations, may have muddied the waters with cli-opt a bit though.. tbd
Richard Westhaver <ellis@rwest.io>
parents:
652
diff
changeset
|
40 | (defgeneric find-opt (self name &optional active)) |
65102f74d1ae
some optimizations, may have muddied the waters with cli-opt a bit though.. tbd
Richard Westhaver <ellis@rwest.io>
parents:
652
diff
changeset
|
41 | |
65102f74d1ae
some optimizations, may have muddied the waters with cli-opt a bit though.. tbd
Richard Westhaver <ellis@rwest.io>
parents:
652
diff
changeset
|
42 | (defgeneric (setf find-opt) (new self name &optional active)) |
65102f74d1ae
some optimizations, may have muddied the waters with cli-opt a bit though.. tbd
Richard Westhaver <ellis@rwest.io>
parents:
652
diff
changeset
|
43 | |
419
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
44 | (defgeneric find-opts (self name &key active recurse)) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
45 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
46 | (defgeneric active-cmds (self)) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
47 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
48 | (defgeneric active-opts (self &optional global)) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
49 | |
649 | 50 | (defgeneric activate-opt (self)) |
51 | ||
52 | (defgeneric activate-cmd (self)) |
|
53 | ||
419
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
54 | (defgeneric find-short-opts (self ch &key)) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
55 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
56 | (defgeneric call-opt (self arg)) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
57 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
58 | (defgeneric do-opt (self)) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
59 | |
625 | 60 | (defgeneric do-opts (self &optional global)) |
61 | ||
419
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
62 | (defgeneric call-cmd (self args opts)) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
63 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
64 | (defgeneric do-cmd (self) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
65 | (:documentation "Run the command SELF with args parsed at runtime.")) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
66 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
67 | (defgeneric print-help (self &optional stream) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
68 | (:documentation "Format cli SELF as a helpful string.")) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
69 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
70 | (defgeneric print-version (self &optional stream) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
71 | (:documentation "Print the version of SELF.")) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
72 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
73 | (defgeneric print-usage (self &optional stream) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
74 | (:documentation "Format cli SELF as a useful string.")) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
75 | |
646
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
76 | (defgeneric handle-unknown-opt (self opt) |
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
77 | (:documentation "Handle an unknown cli-opt.")) |
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
78 | |
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
79 | (defgeneric handle-missing-opt (self opt) |
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
80 | (:documentation "Handle a missing cli-opt.")) |
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
81 | |
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
82 | (defgeneric handle-invalid-opt (self opt &optional reason) |
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
83 | (:documentation "Handle an invalid cli-opt.")) |
419
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
84 | |
646
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
85 | (defgeneric handle-unknown-arg (self arg) |
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
86 | (:documentation "Handle an unknown cli-arg.")) |
419
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
87 | |
646
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
88 | (defgeneric handle-missing-arg (self arg) |
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
89 | (:documentation "Handle a missing cli-arg.")) |
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
90 | |
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
91 | (defgeneric handle-invalid-arg (self arg &optional reason) |
95fd920af398
error handling methods for clap
Richard Westhaver <ellis@rwest.io>
parents:
645
diff
changeset
|
92 | (:documentation "Handle an invalid cli-arg.")) |
419
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
93 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
94 | (defgeneric cli-equal (a b)) |