Lines Matching defs:gn
0 ;;; gn-mode.el - A major mode for editing gn files.
9 ;; Keywords: tools, gn, ninja, chromium
17 ;; manual: <https://gn.googlesource.com/gn/+/refs/heads/master/README.md>
29 (defgroup gn nil
31 :prefix "gn-"
34 (defcustom gn-indent-basic 2
36 :group 'gn
39 (defcustom gn-format-command "gn format --stdin"
40 "The command to run to format gn files in place."
41 :group 'gn
44 (defgroup gn-faces nil
46 :group 'gn
49 (defface gn-embedded-variable
52 :group 'gn-faces)
54 (defface gn-embedded-variable-boundary
56 :inherit gn-embedded-variable))
59 :group 'gn-faces)
61 (defvar gn-font-lock-reserved-keywords
64 (defvar gn-font-lock-target-declaration-keywords
70 (defvar gn-font-lock-buildfile-fun-keywords
78 (defvar gn-font-lock-predefined-var-keywords
84 (defvar gn-font-lock-var-keywords
99 (defconst gn-font-lock-keywords
100 `((,(regexp-opt gn-font-lock-reserved-keywords 'words) .
102 (,(regexp-opt gn-font-lock-target-declaration-keywords 'words) .
104 (,(regexp-opt gn-font-lock-buildfile-fun-keywords 'words) .
109 (,(regexp-opt gn-font-lock-predefined-var-keywords 'words) .
111 (,(regexp-opt gn-font-lock-var-keywords 'words) .
115 (1 'gn-embedded-variable-boundary t)
116 (2 'gn-embedded-variable t))
119 (1 'gn-embedded-variable-boundary t)
120 (2 'gn-embedded-variable t)
121 (3 'gn-embedded-variable-boundary t))
124 (1 'gn-embedded-variable-boundary t)
125 (2 'gn-embedded-variable t)
126 (3 'gn-embedded-variable-boundary t))))
128 (defun gn-smie-rules (kind token)
133 (`(:elem . basic) gn-indent-basic)
135 (`(:list-intro . "") gn-indent-basic)
142 (defun gn-fill-paragraph (&optional justify)
150 (defun gn-run-format ()
151 "Run 'gn format' on the buffer in place."
156 (shell-command-on-region (point-min) (point-max) gn-format-command nil t)
159 (defvar gn-mode-map
161 (define-key map "\C-c\C-f" 'gn-run-format)
165 (define-derived-mode gn-mode prog-mode "GN"
166 "Major mode for editing gn (Generate Ninja)."
167 :group 'gn
174 (setq-local fill-paragraph-function 'gn-fill-paragraph)
176 (setq-local font-lock-defaults '(gn-font-lock-keywords))
182 (smie-setup nil #'gn-smie-rules)
183 (setq-local smie-indent-basic gn-indent-basic)
186 (modify-syntax-entry ?# "< b" gn-mode-syntax-table)
187 (modify-syntax-entry ?\n "> b" gn-mode-syntax-table)
188 (modify-syntax-entry ?_ "w" gn-mode-syntax-table))
191 (add-to-list 'auto-mode-alist '("\\.gni?\\'" . gn-mode))
193 (provide 'gn-mode)