]> gitweb.factorcode.org Git - factor.git/blob - misc/fuel/fuel-syntax.el
alien.fortran: update tests to reflect new pointer c-type objects
[factor.git] / misc / fuel / fuel-syntax.el
1 ;;; fuel-syntax.el --- auxiliar definitions for factor code navigation.\r
2 \r
3 ;; Copyright (C) 2008, 2009  Jose Antonio Ortega Ruiz\r
4 ;; See http://factorcode.org/license.txt for BSD license.\r
5 \r
6 ;; Author: Jose Antonio Ortega Ruiz <jao@gnu.org>\r
7 ;; Keywords: languages\r
8 \r
9 ;;; Commentary:\r
10 \r
11 ;; Auxiliar constants and functions to parse factor code.\r
12 \r
13 ;;; Code:\r
14 \r
15 (require 'thingatpt)\r
16 \r
17 \f\r
18 ;;; Thing-at-point support for factor symbols:\r
19 \r
20 (defun fuel-syntax--beginning-of-symbol ()\r
21   "Move point to the beginning of the current symbol."\r
22   (skip-syntax-backward "w_()"))\r
23 \r
24 (defsubst fuel-syntax--beginning-of-symbol-pos ()\r
25   (save-excursion (fuel-syntax--beginning-of-symbol) (point)))\r
26 \r
27 (defun fuel-syntax--end-of-symbol ()\r
28   "Move point to the end of the current symbol."\r
29   (skip-syntax-forward "w_()"))\r
30 \r
31 (defsubst fuel-syntax--end-of-symbol-pos ()\r
32   (save-excursion (fuel-syntax--end-of-symbol) (point)))\r
33 \r
34 (put 'factor-symbol 'end-op 'fuel-syntax--end-of-symbol)\r
35 (put 'factor-symbol 'beginning-op 'fuel-syntax--beginning-of-symbol)\r
36 \r
37 (defsubst fuel-syntax-symbol-at-point ()\r
38   (let ((s (substring-no-properties (thing-at-point 'factor-symbol))))\r
39     (and (> (length s) 0) s)))\r
40 \r
41 \r
42 \f\r
43 ;;; Regexps galore:\r
44 \r
45 (defconst fuel-syntax--parsing-words\r
46   '(":" "::" ";" "&:" "<<" "<PRIVATE" ">>"\r
47     "ABOUT:" "ALIAS:" "ALIEN:" "ARTICLE:"\r
48     "B" "BIN:"\r
49     "C:" "CALLBACK:" "C-ENUM:" "C-STRUCT:" "C-TYPE:" "C-UNION:" "CHAR:" "CONSTANT:" "call-next-method"\r
50     "DEFER:"\r
51     "EBNF:" ";EBNF" "ERROR:" "EXCLUDE:"\r
52     "f" "FORGET:" "FROM:" "FUNCTION:"\r
53     "GAME:" "GENERIC#" "GENERIC:"\r
54     "GLSL-SHADER:" "GLSL-PROGRAM:"\r
55     "HELP:" "HEX:" "HOOK:"\r
56     "IN:" "initial:" "INSTANCE:" "INTERSECTION:"\r
57     "LIBRARY:"\r
58     "M:" "M::" "MACRO:" "MACRO::" "MAIN:" "MATH:"\r
59     "MEMO:" "MEMO:" "METHOD:" "MIXIN:"\r
60     "OCT:"\r
61     "POSTPONE:" "PREDICATE:" "PRIMITIVE:" "PRIVATE>" "PROVIDE:"\r
62     "QUALIFIED-WITH:" "QUALIFIED:"\r
63     "read-only" "RENAME:" "REQUIRE:"  "REQUIRES:"\r
64     "SINGLETON:" "SINGLETONS:" "SLOT:" "SPECIALIZED-ARRAY:" "SPECIALIZED-ARRAYS:" "STRING:" "STRUCT:" "SYMBOL:" "SYMBOLS:" "SYNTAX:"\r
65     "TUPLE:" "t" "t?" "TYPEDEF:" "TYPED:" "TYPED::"\r
66     "UNIFORM-TUPLE:" "UNION:" "UNION-STRUCT:" "USE:" "USING:"\r
67     "VARS:" "VERTEX-FORMAT:"))\r
68 \r
69 (defconst fuel-syntax--parsing-words-regex\r
70   (regexp-opt fuel-syntax--parsing-words 'words))\r
71 \r
72 (defconst fuel-syntax--bracers\r
73   '("B" "BV" "C" "CS" "H" "T" "V" "W"))\r
74 \r
75 (defconst fuel-syntax--brace-words-regex\r
76   (format "%s{" (regexp-opt fuel-syntax--bracers t)))\r
77 \r
78 (defconst fuel-syntax--declaration-words\r
79   '("flushable" "foldable" "inline" "parsing" "recursive" "delimiter"))\r
80 \r
81 (defconst fuel-syntax--declaration-words-regex\r
82   (regexp-opt fuel-syntax--declaration-words 'words))\r
83 \r
84 (defsubst fuel-syntax--second-word-regex (prefixes)\r
85   (format "%s +\\([^ \r\n]+\\)" (regexp-opt prefixes t)))\r
86 \r
87 (defconst fuel-syntax--method-definition-regex\r
88   "^M::? +\\([^ ]+\\) +\\([^ ]+\\)")\r
89 \r
90 (defconst fuel-syntax--integer-regex\r
91   "\\_<-?[0-9]+\\_>")\r
92 \r
93 (defconst fuel-syntax--raw-float-regex\r
94   "[0-9]*\\.[0-9]*\\([eE][+-]?[0-9]+\\)?")\r
95 \r
96 (defconst fuel-syntax--float-regex\r
97   (format "\\_<-?%s\\_>" fuel-syntax--raw-float-regex))\r
98 \r
99 (defconst fuel-syntax--number-regex\r
100   (format "\\([0-9]+\\|%s\\)" fuel-syntax--raw-float-regex))\r
101 \r
102 (defconst fuel-syntax--ratio-regex\r
103   (format "\\_<[+-]?%s/-?%s\\_>"\r
104           fuel-syntax--number-regex\r
105           fuel-syntax--number-regex))\r
106 \r
107 (defconst fuel-syntax--bad-string-regex\r
108   "\\_<\"[^>]\\([^\"\n]\\|\\\\\"\\)*\n")\r
109 \r
110 (defconst fuel-syntax--word-definition-regex\r
111   (format "\\_<\\(%s\\)?: +\\_<\\(\\w+\\)\\_>"\r
112           (regexp-opt\r
113            '(":" "GENERIC" "DEFER" "HOOK" "MAIN" "MATH" "POSTPONE"\r
114              "SYMBOL" "SYNTAX" "TYPED" "RENAME"))))\r
115 \r
116 (defconst fuel-syntax--alias-definition-regex\r
117   "^ALIAS: +\\(\\_<.+?\\_>\\) +\\(\\_<.+?\\_>\\)")\r
118 \r
119 (defconst fuel-syntax--vocab-ref-regexp\r
120   (fuel-syntax--second-word-regex\r
121    '("IN:" "USE:" "FROM:" "EXCLUDE:" "QUALIFIED:" "QUALIFIED-WITH:")))\r
122 \r
123 (defconst fuel-syntax--int-constant-def-regex\r
124   (fuel-syntax--second-word-regex '("ALIEN:" "CHAR:" "BIN:" "HEX:" "OCT:")))\r
125 \r
126 (defconst fuel-syntax--type-definition-regex\r
127   (fuel-syntax--second-word-regex\r
128    '("C-STRUCT:" "C-UNION:" "MIXIN:" "TUPLE:" "SINGLETON:" "SPECIALIZED-ARRAY:" "STRUCT:" "UNION:" "UNION-STRUCT:")))\r
129 \r
130 (defconst fuel-syntax--tuple-decl-regex\r
131   "^TUPLE: +\\([^ \n]+\\) +< +\\([^ \n]+\\)\\_>")\r
132 \r
133 (defconst fuel-syntax--constructor-regex "<[^ >]+>")\r
134 \r
135 (defconst fuel-syntax--getter-regex "\\(^\\|\\_<\\)[^ ]+?>>\\_>")\r
136 (defconst fuel-syntax--setter-regex "\\_<>>.+?\\_>")\r
137 \r
138 (defconst fuel-syntax--symbol-definition-regex\r
139   (fuel-syntax--second-word-regex '("&:" "SYMBOL:" "VAR:")))\r
140 \r
141 (defconst fuel-syntax--stack-effect-regex\r
142   "\\( ( [^\n]* )\\)\\|\\( (( [^\n]* ))\\)")\r
143 \r
144 (defconst fuel-syntax--using-lines-regex "^USING: +\\([^;]+\\);")\r
145 \r
146 (defconst fuel-syntax--use-line-regex "^USE: +\\(.*\\)$")\r
147 \r
148 (defconst fuel-syntax--current-vocab-regex "^IN: +\\([^ \r\n\f]+\\)")\r
149 \r
150 (defconst fuel-syntax--sub-vocab-regex "^<\\([^ \n]+\\) *$")\r
151 \r
152 (defconst fuel-syntax--alien-function-regex\r
153   "\\_<FUNCTION: \\(\\w+\\) \\(\\w+\\)")\r
154 \r
155 (defconst fuel-syntax--alien-callback-regex\r
156   "\\_<CALLBACK: \\(\\w+\\) \\(\\w+\\)")\r
157 \r
158 (defconst fuel-syntax--indent-def-starts '("" ":"\r
159                                            "C-ENUM" "C-STRUCT" "C-UNION"\r
160                                            "FROM" "FUNCTION:"\r
161                                            "INTERSECTION:"\r
162                                            "M" "M:" "MACRO" "MACRO:"\r
163                                            "MEMO" "MEMO:" "METHOD"\r
164                                            "SYNTAX"\r
165                                            "PREDICATE" "PRIMITIVE"\r
166                                            "STRUCT" "TAG" "TUPLE"\r
167                                            "TYPED" "TYPED:"\r
168                                            "UNIFORM-TUPLE"\r
169                                            "UNION-STRUCT" "UNION"\r
170                                            "VERTEX-FORMAT"))\r
171 \r
172 (defconst fuel-syntax--no-indent-def-starts '("ARTICLE"\r
173                                               "HELP"\r
174                                               "SINGLETONS"\r
175                                               "SPECIALIZED-ARRAYS"\r
176                                               "SYMBOLS"\r
177                                               "VARS"))\r
178 \r
179 (defconst fuel-syntax--indent-def-start-regex\r
180   (format "^\\(%s:\\)\\( \\|\n\\)" (regexp-opt fuel-syntax--indent-def-starts)))\r
181 \r
182 (defconst fuel-syntax--definition-start-regex\r
183   (format "^\\(%s:\\) " (regexp-opt (append fuel-syntax--no-indent-def-starts\r
184                                             fuel-syntax--indent-def-starts))))\r
185 \r
186 (defconst fuel-syntax--definition-end-regex\r
187   (format "\\(\\(^\\| +\\);\\( *%s\\)*\\($\\| +\\)\\)"\r
188           fuel-syntax--declaration-words-regex))\r
189 \r
190 (defconst fuel-syntax--single-liner-regex\r
191   (regexp-opt '("ABOUT:"\r
192                 "ALIAS:"\r
193                 "CONSTANT:" "C:" "C-TYPE:"\r
194                 "DEFER:"\r
195                 "FORGET:"\r
196                 "GAME:" "GENERIC:" "GENERIC#" "GLSL-PROGRAM:" \r
197                 "HEX:" "HOOK:"\r
198                 "IN:" "INSTANCE:"\r
199                 "LIBRARY:"\r
200                 "MAIN:" "MATH:" "MIXIN:"\r
201                 "OCT:"\r
202                 "POSTPONE:" "PRIVATE>" "<PRIVATE"\r
203                 "QUALIFIED-WITH:" "QUALIFIED:"\r
204                 "RENAME:"\r
205                 "SINGLETON:" "SLOT:" "SPECIALIZED-ARRAY:" "SYMBOL:"\r
206                 "TYPEDEF:"\r
207                 "USE:"\r
208                 "VAR:")))\r
209 \r
210 (defconst fuel-syntax--begin-of-def-regex\r
211   (format "^USING: \\|\\(%s\\)\\|\\(^%s .*\\)"\r
212           fuel-syntax--definition-start-regex\r
213           fuel-syntax--single-liner-regex))\r
214 \r
215 (defconst fuel-syntax--end-of-def-line-regex\r
216   (format "^.*%s" fuel-syntax--definition-end-regex))\r
217 \r
218 (defconst fuel-syntax--end-of-def-regex\r
219   (format "\\(%s\\)\\|\\(^%s .*\\)"\r
220           fuel-syntax--end-of-def-line-regex\r
221           fuel-syntax--single-liner-regex))\r
222 \r
223 (defconst fuel-syntax--word-signature-regex\r
224   (format ":[^ ]* \\([^ ]+\\)\\(%s\\)*" fuel-syntax--stack-effect-regex))\r
225 \r
226 (defconst fuel-syntax--defun-signature-regex\r
227   (format "\\(%s\\|%s\\)"\r
228           fuel-syntax--word-signature-regex\r
229           "M[^:]*: [^ ]+ [^ ]+"))\r
230 \r
231 (defconst fuel-syntax--constructor-decl-regex\r
232   "\\_<C: +\\(\\w+\\) +\\(\\w+\\)\\( .*\\)?$")\r
233 \r
234 (defconst fuel-syntax--typedef-regex\r
235   "\\_<TYPEDEF: +\\(\\w+\\) +\\(\\w+\\)\\( .*\\)?$")\r
236 \r
237 (defconst fuel-syntax--rename-regex\r
238   "\\_<RENAME: +\\(\\w+\\) +\\(\\w+\\) +=> +\\(\\w+\\)\\( .*\\)?$")\r
239 \r
240 \f\r
241 ;;; Factor syntax table\r
242 \r
243 (setq fuel-syntax--syntax-table\r
244   (let ((table (make-syntax-table)))\r
245     ;; Default is word constituent\r
246     (dotimes (i 256)\r
247       (modify-syntax-entry i "w" table))\r
248     ;; Whitespace (TAB is not whitespace)\r
249     (modify-syntax-entry ?\f " " table)\r
250     (modify-syntax-entry ?\r " " table)\r
251     (modify-syntax-entry ?\  " " table)\r
252     (modify-syntax-entry ?\n " " table)\r
253     table))\r
254 \r
255 (defconst fuel-syntax--syntactic-keywords\r
256   `(;; Strings and chars\r
257     ("\\_<<\\(\"\\)\\_>" (1 "<b"))\r
258     ("\\_<\\(\"\\)>\\_>" (1 ">b"))\r
259     ("\\( \\|^\\)\\(DLL\\|P\\|SBUF\\)?\\(\"\\)\\(\\([^\n\r\f\"\\]\\|\\\\.\\)*\\)\\(\"\\)"\r
260      (3 "\"") (6 "\""))\r
261     ("CHAR: \\(\"\\) [^\\\"]*?\\(\"\\)\\([^\\\"]\\|\\\\.\\)*?\\(\"\\)"\r
262      (1 "w") (2 "<b") (4 ">b"))\r
263     ("\\(CHAR:\\|\\\\\\) \\(\\w\\|!\\)\\( \\|$\\)" (2 "w"))\r
264     ;; Comments\r
265     ("\\_<\\(#?!\\) .*\\(\n\\|$\\)" (1 "<") (2 ">"))\r
266     ("\\_<\\(#?!\\)\\(\n\\|$\\)" (1 "<") (2 ">"))\r
267     ;; postpone\r
268     ("\\_<POSTPONE:\\( \\).*\\(\n\\)" (1 "<b") (2 ">b"))\r
269     ;; Multiline constructs\r
270     ("\\_<\\(E\\)BNF:\\( \\|\n\\)" (1 "<b"))\r
271     ("\\_<;EBN\\(F\\)\\_>" (1 ">b"))\r
272     ("\\_<\\(U\\)SING: \\(;\\)" (1 "<b") (2 ">b"))\r
273     ("\\_<USING:\\( \\)" (1 "<b"))\r
274     ("\\_<\\(C\\)-ENUM: \\(;\\)" (1 "<b") (2 ">b"))\r
275     ("\\_<C-ENUM:\\( \\|\n\\)" (1 "<b"))\r
276     ("\\_<TUPLE: +\\w+? +< +\\w+? *\\( \\|\n\\)\\([^;]\\|$\\)" (1 "<b"))\r
277     ("\\_<TUPLE: +\\w+? *\\( \\|\n\\)\\([^;<\n]\\|\\_>\\)" (1 "<b"))\r
278     ("\\_<\\(SYMBOLS\\|VARS\\|SPECIALIZED-ARRAYS\\|SINGLETONS\\): *?\\( \\|\n\\)\\([^;\n]\\|\\_>\\)"\r
279      (2 "<b"))\r
280     ("\\(\n\\| \\);\\_>" (1 ">b"))\r
281     ;; Let and lambda:\r
282     ("\\_<\\(!(\\) .* \\()\\)" (1 "<") (2 ">"))\r
283     ("\\(\\[\\)\\(let\\|let\\*\\)\\( \\|$\\)" (1 "(]"))\r
284     ("\\(\\[\\)\\(|\\) +[^|]* \\(|\\)" (1 "(]") (2 "(|") (3 ")|"))\r
285     (" \\(|\\) " (1 "(|"))\r
286     (" \\(|\\)$" (1 ")"))\r
287     ;; Opening brace words:\r
288     ("\\_<\\w*\\({\\)\\_>" (1 "(}"))\r
289     ("\\_<\\(}\\)\\_>" (1 "){"))\r
290     ;; Parenthesis:\r
291     ("\\_<\\((\\)\\_>" (1 "()"))\r
292     ("\\_<\\w*\\((\\)\\_>" (1 "()"))\r
293     ("\\_<\\()\\)\\_>" (1 ")("))\r
294     ("\\_<(\\((\\)\\_>" (1 "()"))\r
295     ("\\_<\\()\\))\\_>" (1 ")("))\r
296     ;; Quotations:\r
297     ("\\_<'\\(\\[\\)\\_>" (1 "(]"))      ; fried\r
298     ("\\_<$\\(\\[\\)\\_>" (1 "(]"))      ; parse-time\r
299     ("\\_<\\(\\[\\)\\_>" (1 "(]"))\r
300     ("\\_<\\(\\]\\)\\_>" (1 ")["))))\r
301 \r
302 \f\r
303 ;;; Source code analysis:\r
304 \r
305 (defsubst fuel-syntax--brackets-depth ()\r
306   (nth 0 (syntax-ppss)))\r
307 \r
308 (defsubst fuel-syntax--brackets-start ()\r
309   (nth 1 (syntax-ppss)))\r
310 \r
311 (defun fuel-syntax--brackets-end ()\r
312   (save-excursion\r
313     (goto-char (fuel-syntax--brackets-start))\r
314     (condition-case nil\r
315         (progn (forward-sexp)\r
316                (1- (point)))\r
317       (error -1))))\r
318 \r
319 (defsubst fuel-syntax--indentation-at (pos)\r
320   (save-excursion (goto-char pos) (current-indentation)))\r
321 \r
322 (defsubst fuel-syntax--increased-indentation (&optional i)\r
323   (+ (or i (current-indentation)) factor-indent-width))\r
324 (defsubst fuel-syntax--decreased-indentation (&optional i)\r
325   (- (or i (current-indentation)) factor-indent-width))\r
326 \r
327 (defsubst fuel-syntax--at-begin-of-def ()\r
328   (looking-at fuel-syntax--begin-of-def-regex))\r
329 \r
330 (defsubst fuel-syntax--at-begin-of-indent-def ()\r
331   (looking-at fuel-syntax--indent-def-start-regex))\r
332 \r
333 (defsubst fuel-syntax--at-end-of-def ()\r
334   (looking-at fuel-syntax--end-of-def-regex))\r
335 \r
336 (defsubst fuel-syntax--looking-at-emptiness ()\r
337   (looking-at "^[ ]*$\\|$"))\r
338 \r
339 (defsubst fuel-syntax--is-last-char (pos)\r
340   (save-excursion\r
341     (goto-char (1+ pos))\r
342     (looking-at-p "[ ]*$")))\r
343 \r
344 (defsubst fuel-syntax--line-offset (pos)\r
345   (- pos (save-excursion\r
346            (goto-char pos)\r
347            (beginning-of-line)\r
348            (point))))\r
349 \r
350 (defun fuel-syntax--previous-non-blank ()\r
351   (forward-line -1)\r
352   (while (and (not (bobp)) (fuel-syntax--looking-at-emptiness))\r
353     (forward-line -1)))\r
354 \r
355 (defun fuel-syntax--beginning-of-block-pos ()\r
356   (save-excursion\r
357     (if (> (fuel-syntax--brackets-depth) 0)\r
358         (fuel-syntax--brackets-start)\r
359       (fuel-syntax--beginning-of-defun)\r
360       (point))))\r
361 \r
362 (defun fuel-syntax--at-setter-line ()\r
363   (save-excursion\r
364     (beginning-of-line)\r
365     (when (re-search-forward fuel-syntax--setter-regex\r
366                              (line-end-position)\r
367                              t)\r
368       (let* ((to (match-beginning 0))\r
369              (from (fuel-syntax--beginning-of-block-pos)))\r
370         (goto-char from)\r
371         (let ((depth (fuel-syntax--brackets-depth)))\r
372           (and (or (re-search-forward fuel-syntax--constructor-regex to t)\r
373                    (re-search-forward fuel-syntax--setter-regex to t))\r
374                (= depth (fuel-syntax--brackets-depth))))))))\r
375 \r
376 (defun fuel-syntax--at-constructor-line ()\r
377   (save-excursion\r
378     (beginning-of-line)\r
379     (re-search-forward fuel-syntax--constructor-regex (line-end-position) t)))\r
380 \r
381 (defsubst fuel-syntax--at-using ()\r
382   (looking-at fuel-syntax--using-lines-regex))\r
383 \r
384 (defun fuel-syntax--in-using ()\r
385   (let ((p (point)))\r
386     (save-excursion\r
387       (and (re-search-backward "^USING: " nil t)\r
388            (re-search-forward " ;" nil t)\r
389            (< p (match-end 0))))))\r
390 \r
391 (defsubst fuel-syntax--beginning-of-defun (&optional times)\r
392   (re-search-backward fuel-syntax--begin-of-def-regex nil t times))\r
393 \r
394 (defsubst fuel-syntax--end-of-defun ()\r
395   (re-search-forward fuel-syntax--end-of-def-regex nil t))\r
396 \r
397 (defsubst fuel-syntax--end-of-defun-pos ()\r
398   (save-excursion\r
399     (re-search-forward fuel-syntax--end-of-def-regex nil t)\r
400     (point)))\r
401 \r
402 (defun fuel-syntax--beginning-of-body ()\r
403   (let ((p (point)))\r
404     (and (fuel-syntax--beginning-of-defun)\r
405          (re-search-forward fuel-syntax--defun-signature-regex p t)\r
406          (not (re-search-forward fuel-syntax--end-of-def-regex p t)))))\r
407 \r
408 (defun fuel-syntax--beginning-of-sexp ()\r
409   (if (> (fuel-syntax--brackets-depth) 0)\r
410       (goto-char (fuel-syntax--brackets-start))\r
411     (fuel-syntax--beginning-of-body)))\r
412 \r
413 (defsubst fuel-syntax--beginning-of-sexp-pos ()\r
414   (save-excursion (fuel-syntax--beginning-of-sexp) (point)))\r
415 \r
416 \f\r
417 ;;; USING/IN:\r
418 \r
419 (make-variable-buffer-local\r
420  (defvar fuel-syntax--current-vocab-function 'fuel-syntax--find-in))\r
421 \r
422 (defsubst fuel-syntax--current-vocab ()\r
423   (funcall fuel-syntax--current-vocab-function))\r
424 \r
425 (defun fuel-syntax--find-in ()\r
426   (save-excursion\r
427     (when (re-search-backward fuel-syntax--current-vocab-regex nil t)\r
428       (match-string-no-properties 1))))\r
429 \r
430 (make-variable-buffer-local\r
431  (defvar fuel-syntax--usings-function 'fuel-syntax--find-usings))\r
432 \r
433 (defsubst fuel-syntax--usings ()\r
434   (funcall fuel-syntax--usings-function))\r
435 \r
436 (defun fuel-syntax--file-has-private ()\r
437   (save-excursion\r
438     (goto-char (point-min))\r
439     (and (re-search-forward "\\_<<PRIVATE\\_>" nil t)\r
440          (re-search-forward "\\_<PRIVATE>\\_>" nil t))))\r
441 \r
442 (defun fuel-syntax--find-usings (&optional no-private)\r
443   (save-excursion\r
444     (let ((usings))\r
445       (goto-char (point-max))\r
446       (while (re-search-backward fuel-syntax--using-lines-regex nil t)\r
447         (dolist (u (split-string (match-string-no-properties 1) nil t))\r
448           (push u usings)))\r
449       (when (and (not no-private) (fuel-syntax--file-has-private))\r
450         (goto-char (point-max))\r
451         (push (concat (fuel-syntax--find-in) ".private") usings))\r
452       usings)))\r
453 \r
454 \f\r
455 (provide 'fuel-syntax)\r
456 ;;; fuel-syntax.el ends here\r