Function: combobulate-query-mode

combobulate-query-mode is a natively compiled function defined in combobulate-query.el.

Signature

(combobulate-query-mode)

Documentation

Major mode for interactively constructing tree-sitter queries.

To use, call M-x combobulate-query-builder (combobulate-query-builder).

In addition to any hooks its parent mode prog-mode might have run, this mode runs the hook combobulate-query-mode-hook, as the final or penultimate step during initialization.

Source Code

;; Defined in /nix/store/b5fvrwzi3zvkabyzx0in6gw1cj963z46-emacs-packages-deps/share/emacs/site-lisp/combobulate-query.el
(define-derived-mode combobulate-query-mode prog-mode "Combobulate Query Builder"
  "Major mode for interactively constructing tree-sitter queries.

To use, call \\[combobulate-query-builder]."
  :syntax-table combobulate-query-syntax-table
  :interactive nil
  :group 'combobulate
  :abbrev-table scheme-mode-abbrev-table
  (let ((parser-lang-name (combobulate-parser-language combobulate-query-builder-parser)))
    (setq combobulate-query-builder-rules (combobulate-production-rules-get-rules parser-lang-name))
    (setq combobulate-query-builder-rule-names (combobulate-production-rules-get-types parser-lang-name))
    (setq combobulate-query-builder-field-names
          (mapcar #'combobulate-query-builder-prop-name-to-field-name
                  (seq-remove (lambda (prop) (equal prop :*unnamed*))
                              (seq-uniq (mapcan #'map-keys (mapcar #'cadr (combobulate-production-rules-get-rules parser-lang-name)))))))
    (setq-local comment-start ";"
                comment-end "")
    (setq-local completion-at-point-functions '(combobulate-query-builder-completion-at-point-function))
    (combobulate-query-builder-update-header "Ready")
    (setq-local combobulate-query-builder-font-lock-keywords
                ;; all the various supported rule names
                `((,(regexp-opt combobulate-query-builder-rule-names)
                   . 'combobulate-query-query-constant-face)
                  ;; `field:' names
                  (,(regexp-opt
                     combobulate-query-builder-field-names)
                   . 'combobulate-query-query-keyword-face)
                  ,@combobulate-query-match-face-alist
                  ;; @match capturing groups
                  ("#\\([a-zA-Z0-9-_?]+\\)" . 'combobulate-query-query-builtin-face)
                  ;; #predicates
                  ("#\\([a-zA-Z0-9-_?]+\\)" . 'combobulate-query-query-predicate-builtin-face)
                  ;; misc. quantifiers and operators
                  ("\\([?!+*]\\)" . 'combobulate-query-query-doc-markup-face)
                  ;; match `.' anchors
                  ("\\Sw<\\([.]\\)\\Sw" . 'combobulate-query-query-constant-face)
                  ;; strings
                  ("\"\\([^\"]*\\)\"" . 'combobulate-query-query-string-face)
                  ;; anonymous named and unnamed nodes
                  ("\\((_)\\)\\|\\(\s-+_\s-+\\)" . 'combobulate-query-query-anonymous-face)))
    (setq-local font-lock-defaults '(combobulate-query-builder-font-lock-keywords t))))