| ;; fidl-mode.el --- Emacs support for editing FIDL -*- lexical-binding: t; -*- |
| |
| ;; Copyright 2019 The Fuchsia Authors. All rights reserved. |
| ;; Use of this source code is governed by a BSD-style license that can be |
| ;; found in the LICENSE file. |
| |
| (defvar fidl-mode-syntax-table nil "Syntax table for 'fidl-mode'.") |
| (setq fidl-mode-syntax-table |
| (let ((syn-table (make-syntax-table))) |
| (modify-syntax-entry ?\/ ". 124b" syn-table) |
| (modify-syntax-entry ?* ". 23" syn-table) |
| (modify-syntax-entry ?\n "> b" syn-table) |
| syn-table)) |
| |
| (setq fidl-font-lock-keywords |
| (let* ( |
| (x-keywords '("as" "bits" "compose" "const" "enum" "library" |
| "protocol" "struct" "table" "union" "using" "xunion" )) |
| (x-types '("struct" "protocol" "library" "bool" "int8" "int16" "int32" |
| "int64" "uint8" "uint16" "uint32" "uint64" "float32" "float64" )) |
| (x-constants '("true" "false")) |
| (x-events '()) |
| (x-functions '()) |
| |
| (x-keywords-regexp (regexp-opt x-keywords 'words)) |
| (x-types-regexp (regexp-opt x-types 'words)) |
| (x-constants-regexp (regexp-opt x-constants 'words)) |
| (x-events-regexp (regexp-opt x-events 'words)) |
| (x-functions-regexp (regexp-opt x-functions 'words)) |
| ) |
| |
| `( |
| (,x-keywords-regexp . font-lock-keyword-face) |
| (,x-constants-regexp . font-lock-constant-face) |
| (,x-types-regexp . font-lock-type-face) |
| (,x-events-regexp . font-lock-builtin-face) |
| (,x-functions-regexp . font-lock-function-name-face) |
| ;; note: order above matters, because once colored, that part won't change. |
| ;; in general, put longer words first |
| ))) |
| |
| (defvar fidl-mode-hook nil) |
| |
| ;;;###autoload |
| (add-to-list 'auto-mode-alist '("\\.fidl\\'" . fidl-mode)) |
| |
| ;;;###autoload |
| |
| (define-derived-mode fidl-mode prog-mode "fidl" |
| "Major mode for editing FIDL (Fuchsia Interface Definition Language)." |
| (interactive) |
| |
| ;; Formatting |
| (setq-local indent-tabs-mode nil) |
| (setq-local tab-width 4) |
| (setq-local comment-start "//") |
| (setq-local comment-end "") |
| |
| ;; Syntax Highlighting |
| (setq-local font-lock-defaults '(fidl-font-lock-keywords)) |
| (set-syntax-table fidl-mode-syntax-table) |
| |
| ;; UI |
| (setq major-mode 'fidl-mode) |
| (setq mode-name "fidl") |
| |
| ;; Hooks |
| (run-hooks 'fidl-mode-hook) |
| ) |
| |
| (provide 'fidl-mode) |