From 788e507d494e684f6ded6e3979761aa95aea45f3 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Wed, 22 Feb 2023 00:44:38 -0500 Subject: [PATCH] fix(java): errors in company-yasnippet snippet previews Because company-yasnippet expands each snippet to produce a preview in a temporary (and fundamental-mode) buffer, java-current-class and java-current-package throws errors, so I've added a special case to return a placeholder if expanded in a temporary buffer. --- modules/lang/java/autoload/java.el | 37 ++++++++++++++++++------------ 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/modules/lang/java/autoload/java.el b/modules/lang/java/autoload/java.el index 87e7d1d35..ed0ebddcd 100644 --- a/modules/lang/java/autoload/java.el +++ b/modules/lang/java/autoload/java.el @@ -42,13 +42,18 @@ Is converted to: net.lissner.game It does this by ignoring everything before the nearest package root (see `+java-project-package-roots' to control what this function considers a package root)." - (unless (eq major-mode 'java-mode) - (user-error "Not in a java-mode buffer")) - (let* ((project-root (file-truename (doom-project-root))) - (file-path (file-name-sans-extension - (file-truename (or buffer-file-name - default-directory)))) - (src-root (cl-loop for root in +java-project-package-roots + (cond ((doom-special-buffer-p (current-buffer)) + "{PackageName}") + ((not (eq major-mode 'java-mode)) + (user-error "Not in java-mode")) + ((when-let (project-root (doom-project-root)) + (let* ((project-root (file-truename project-root)) + (file-path + (file-name-sans-extension + (file-truename (or buffer-file-name + default-directory)))) + (src-root + (cl-loop for root in +java-project-package-roots if (and (stringp root) (locate-dominating-file file-path root)) return (file-name-directory (file-relative-name file-path (expand-file-name root it))) @@ -59,18 +64,20 @@ root)." (when fixed-parts (string-join fixed-parts "/")))) return it))) - (when src-root - (string-remove-suffix "." (replace-regexp-in-string "/" "." src-root))))) + (when src-root + (string-remove-suffix "." (replace-regexp-in-string "/" "." src-root)))))) + ((user-error "Can't deduce package name")))) ;;;###autoload (defun +java-current-class () "Get the class name for the current file." - (unless (eq major-mode 'java-mode) - (user-error "Not in a java-mode buffer")) - (unless buffer-file-name - (user-error "This buffer has no filepath; cannot guess its class name")) - (or (file-name-sans-extension (file-name-base (buffer-file-name))) - "ClassName")) + (cond ((doom-special-buffer-p (current-buffer)) + "{ClassName}") + ((not (eq major-mode 'java-mode)) + (user-error "Not in java-mode")) + (buffer-file-name + (file-name-sans-extension (file-name-base (buffer-file-name)))) + ((user-error "Can't deduce the class name")))) ;;;###autoload (defun +java/open-groovy-repl ()