branch: master commit 2bfe1ad56add5c760be782cd3ba25cefea92813e Author: Daiki Ueno <u...@gnu.org> Commit: Daiki Ueno <u...@gnu.org>
snippet: Support guessing parent package/class --- gnome-c-snippet.el | 19 +++++++++++++++---- gnome-c-tests.el | 10 ++++++++-- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/gnome-c-snippet.el b/gnome-c-snippet.el index d720c76..b8999b4 100644 --- a/gnome-c-snippet.el +++ b/gnome-c-snippet.el @@ -83,7 +83,7 @@ (c-backward-syntactic-ws) (point)))) uppercased-package uppercased-class - capitalized-package capitalized-class) + capitalized-package capitalized-class capitalized-parent) (c-forward-syntactic-ws) (c-forward-token-2 3) (setq uppercased-package (split-string @@ -102,6 +102,14 @@ (c-backward-syntactic-ws) (point))) "_")) + (c-forward-syntactic-ws) + (c-forward-token-2) + (setq capitalized-parent (gnome-c-snippet--parse-name + (buffer-substring (point) + (progn + (c-forward-token-2) + (c-backward-syntactic-ws) + (point))))) (catch 'error (let ((index 0)) (dolist (uppercased uppercased-package) @@ -123,7 +131,8 @@ (push capitalized capitalized-class) (setq index (+ index length)))))) (list (nreverse capitalized-package) - (nreverse capitalized-class))))) + (nreverse capitalized-class) + capitalized-parent)))) (defun gnome-c-snippet--find-header-buffer () (pcase (file-name-extension buffer-file-name) @@ -145,7 +154,7 @@ (symbol-value (intern (format "gnome-c-snippet-%S" symbol))))))) (defun gnome-c-snippet--guess-name-from-declaration (symbol) - (when (memq symbol '(package class)) + (when (memq symbol '(package class parent-package parent-class)) (let ((header-buffer (gnome-c-snippet--find-header-buffer))) (when header-buffer (with-current-buffer header-buffer @@ -158,7 +167,9 @@ (when names (pcase symbol (`package (car names)) - (`class (nth 1 names))))))))))) + (`class (nth 1 names)) + (`parent-package (list (car (nth 2 names)))) + (`parent-class (cdr (nth 2 names)))))))))))) (defun gnome-c-snippet--guess-name-from-file-name (symbol) (when (memq symbol '(package class)) diff --git a/gnome-c-tests.el b/gnome-c-tests.el index fa13a73..75935ed 100644 --- a/gnome-c-tests.el +++ b/gnome-c-tests.el @@ -226,6 +226,12 @@ G_DECLARE_FINAL_TYPE (GGpgEngineInfo, g_gpg_engine_info, G_GPG, ENGINE_INFO, (c-mode) (setq buffer-file-name "gpgme-glib.h") (let ((package (gnome-c-snippet--guess-name-from-declaration 'package)) - (class (gnome-c-snippet--guess-name-from-declaration 'class))) + (class (gnome-c-snippet--guess-name-from-declaration 'class)) + (parent-package + (gnome-c-snippet--guess-name-from-declaration 'parent-package)) + (parent-class + (gnome-c-snippet--guess-name-from-declaration 'parent-class))) (should (equal package '("G" "Gpg"))) - (should (equal class '("Engine" "Info")))))) + (should (equal class '("Engine" "Info"))) + (should (equal parent-package '("G"))) + (should (equal parent-class '("Object"))))))