blob: 4845ace58179fcbfe19f05d12575cd197bffb174 [file] [log] [blame]
Dave Barach9b8ffd92016-07-08 08:13:45 -04001#!/usr/bin/emacs --script
2
Dave Barach2bc547c2016-08-11 12:13:55 -04003;; Insert style boilerplate if it's not already there
Dave Barach987fdfa2016-07-17 11:52:10 -04004;;
5;; Breaking the string in half keeps emacs
6;; from trying to interpret the local variable
7;; settings e.g. when it reads the lisp source code
8
Dave Barach9b8ffd92016-07-08 08:13:45 -04009(defun insert-style-boilerplate () (interactive)
Dave Barach2bc547c2016-08-11 12:13:55 -040010 (save-excursion
11 (goto-char (point-min))
12 (if (eq nil (search-forward "coding-style-patch-verification"
13 (point-max) t))
14 (let ((junk 0)) (goto-char (point-max))
15 (insert "
Dave Barach9b8ffd92016-07-08 08:13:45 -040016/*
17 * fd.io coding-style-patch-verification: ON
18 *
Dave Barach987fdfa2016-07-17 11:52:10 -040019 * Local Var" "iables:
Dave Barach9b8ffd92016-07-08 08:13:45 -040020 * eval: (c-set-style \"gnu\")
21 * End:
Dave Barach2bc547c2016-08-11 12:13:55 -040022 */")))))
23
24;; (cons xxx <list>) means insert xxx at the head of <list>
25;; Build a sorted list of *INDENT-OFF* lines, by searching
26;; backwards. The initial (setq indent-offset-list nil)
27;; results in (cdr <last-cell>) nil, which makes it a proper list
28
29(defun find-indent-offs () (interactive)
30 (save-excursion
31 (if (boundp 'indent-offset-list)
32 (makunbound 'indent-offset-list))
33 (setq indent-offset-list nil)
34 (goto-char (point-max))
35 (while (search-backward "*INDENT-OFF*" (point-min) t)
36 (move-beginning-of-line nil)
37 (setq indent-offset-list (cons (point) indent-offset-list))
38 (previous-line))))
Dave Barach9b8ffd92016-07-08 08:13:45 -040039
Dave Barach987fdfa2016-07-17 11:52:10 -040040;; Insert indent-off ... indent-on brackets around
41;; a certain xxx_foreach macro, etc. which "indent"
42;; completely screws up. Doesn't handle nesting, of which there
43;; are few examples (fortunately).
Dave Barach8a7fb0c2016-07-08 14:44:23 -040044
45(defun fix-initializer (what) (interactive)
Dave Barach2bc547c2016-08-11 12:13:55 -040046 (find-indent-offs)
Dave Barach8a7fb0c2016-07-08 14:44:23 -040047 (save-excursion
48 (goto-char (point-min))
49 (while (search-forward-regexp what (point-max) t)
50 (move-beginning-of-line nil)
Dave Barach2bc547c2016-08-11 12:13:55 -040051 (previous-line)
52 (let ((index 0)(pointval 0))
53 (while (and (< pointval (point))(elt indent-offset-list index))
54 (setq pointval (elt indent-offset-list index))
55 (setq index (1+ index)))
56 (if (not (eq pointval (point)))
57 (let ((junk 0))
58 (next-line)
59 (open-line 1)
60 (c-indent-line-or-region)
61 (insert "/* *INDENT-OFF* */")
62 (search-forward "{")
63 (backward-char)
64 (forward-sexp)
65 (move-end-of-line nil)
66 (newline 1)
67 (c-indent-line-or-region)
68 (insert "/* *INDENT-ON* */")
69 (find-indent-offs))
70 (search-forward "*INDENT-ON*"))))))
Dave Barach8a7fb0c2016-07-08 14:44:23 -040071
Dave Barach987fdfa2016-07-17 11:52:10 -040072(defun fix-pool-foreach () (interactive)
73 (fix-initializer "pool_foreach *("))
74
Keith Burns (alagalah)5f3ca642016-08-06 11:03:59 -070075(defun fix-pool-foreach-index () (interactive)
76 (fix-initializer "pool_foreach_index *("))
77
Dave Barach987fdfa2016-07-17 11:52:10 -040078(defun fix-hash-foreach () (interactive)
79 (fix-initializer "hash_foreach *("))
80
81(defun fix-hash-foreach-pair () (interactive)
82 (fix-initializer "hash_foreach_pair *("))
83
Keith Burns (alagalah)114e8a92016-08-04 09:27:23 -070084(defun fix-hash-foreach-mem () (interactive)
85 (fix-initializer "hash_foreach_mem *("))
86
Dave Barach987fdfa2016-07-17 11:52:10 -040087(defun fix-clib-fifo-foreach () (interactive)
88 (fix-initializer "clib_fifo_foreach *("))
89
90(defun fix-clib-bitmap-foreach () (interactive)
91 (fix-initializer "clib_bitmap_foreach *("))
92
93(defun fix-foreach-ip-interface-address () (interactive)
94 (fix-initializer "foreach_ip_interface_address *("))
95
Dave Barach8a7fb0c2016-07-08 14:44:23 -040096(defun fix-vlib-register-thread () (interactive)
97 (fix-initializer "VLIB_REGISTER_THREAD *("))
98
99(defun fix-vlib-cli-command () (interactive)
100 (fix-initializer "VLIB_CLI_COMMAND *("))
101
102(defun fix-vlib-register-node () (interactive)
103 (fix-initializer "VLIB_REGISTER_NODE *("))
104
Dave Baracha8d77ed2016-08-05 18:09:54 -0400105(defun fix-reply-macro2 () (interactive)
106 (fix-initializer "REPLY_MACRO2 *("))
Dave Barach8a7fb0c2016-07-08 14:44:23 -0400107
Dave Barachba868bb2016-08-08 09:51:21 -0400108(defun fix-vnet-device-class () (interactive)
109 (fix-initializer "VNET_DEVICE_CLASS *("))
110
111(defun fix-vnet-hw-interface-class () (interactive)
112 (fix-initializer "VNET_HW_INTERFACE_CLASS *("))
113
Dave Barach75f69042016-08-11 16:03:03 -0400114(defun fix-clib-packed () (interactive)
115 (fix-initializer "CLIB_PACKED *("))
116
Dave Barach987fdfa2016-07-17 11:52:10 -0400117;; Driver routine which runs the set of functions
118;; defined above, as well as the bottom boilerplate function
Dave Barach9b8ffd92016-07-08 08:13:45 -0400119
120(defun fd-io-styleify () (interactive)
Dave Barach987fdfa2016-07-17 11:52:10 -0400121 (fix-pool-foreach)
Keith Burns (alagalah)5f3ca642016-08-06 11:03:59 -0700122 (fix-pool-foreach-index)
Dave Barach987fdfa2016-07-17 11:52:10 -0400123 (fix-hash-foreach)
124 (fix-hash-foreach-pair)
Keith Burns (alagalah)114e8a92016-08-04 09:27:23 -0700125 (fix-hash-foreach-mem)
Dave Barach987fdfa2016-07-17 11:52:10 -0400126 (fix-foreach-ip-interface-address)
127 (fix-clib-fifo-foreach)
128 (fix-clib-bitmap-foreach)
Dave Barach8a7fb0c2016-07-08 14:44:23 -0400129 (fix-vlib-register-thread)
130 (fix-vlib-cli-command)
131 (fix-vlib-register-node)
Dave Baracha8d77ed2016-08-05 18:09:54 -0400132 (fix-reply-macro2)
Dave Barachba868bb2016-08-08 09:51:21 -0400133 (fix-vnet-device-class)
134 (fix-vnet-hw-interface-class)
Dave Barach75f69042016-08-11 16:03:03 -0400135 (fix-clib-packed)
Dave Barach2bc547c2016-08-11 12:13:55 -0400136 (insert-style-boilerplate)
137 (if (boundp 'indent-offset-list)
138 (makunbound 'indent-offset-list)))
Dave Barach987fdfa2016-07-17 11:52:10 -0400139
140;; When run as a script, this sexp
141;; walks the list of files supplied on the command line.
142;;
143;; (elt argv index) returns nil if you M-x eval-buffer
144;; or M-x load-file the file, so we won't accidentally
145;; evaluate (save-buffers-kill-emacs)...
146
Dave Barach2bc547c2016-08-11 12:13:55 -0400147(let ((file-index 0))
148 (if (elt argv file-index)
149 (while (elt argv file-index)
150 (find-file (elt argv file-index))
Dave Barach987fdfa2016-07-17 11:52:10 -0400151 (fd-io-styleify)
Dave Barach2bc547c2016-08-11 12:13:55 -0400152 (message "Done %s..." (elt argv file-index))
153 (setq file-index (1+ file-index))))
154 (if (> file-index 0)
155 (let ((junk 0))
156 (message "Save and quit...")
157 (save-buffers-kill-emacs t))))
Dave Baracha8d77ed2016-08-05 18:09:54 -0400158
159