From a00aef5e213174f38f42e5accf276751b028ef9f Mon Sep 17 00:00:00 2001 From: ia0 Date: Sat, 25 Feb 2023 08:48:17 +0100 Subject: [PATCH 1/2] [Suggestion] Do not try to guess a root if lsp--suggest-project-root failed Currently, when `lsp-auto-guess-root` is set and `lsp--suggest-project-root` fails to find a project root, we fall back to `lsp-find-session-folder`. This PR makes `lsp--suggest-project-root` authoritative when `lsp-auto-guess-root` is set, thus giving full control to the user. --- lsp-mode.el | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lsp-mode.el b/lsp-mode.el index 3b27a86b413..aad39ab3bb0 100644 --- a/lsp-mode.el +++ b/lsp-mode.el @@ -8858,11 +8858,9 @@ Select action: " (prog1 t (lsp--info "File %s is in blacklisted directory %s" file-name it)))) not) - (or - (when lsp-auto-guess-root - (lsp--suggest-project-root)) - (lsp-find-session-folder session file-name) - (unless lsp-auto-guess-root + (if lsp-auto-guess-root (lsp--suggest-project-root) + (or + (lsp-find-session-folder session file-name) (when-let ((root-folder (lsp--find-root-interactively session))) (if (or (not (f-equal? root-folder (expand-file-name "~/"))) (yes-or-no-p From f6468013ae2e317957d01cd092922b09498e2a42 Mon Sep 17 00:00:00 2001 From: ia0 Date: Sat, 22 Apr 2023 17:42:04 +0200 Subject: [PATCH 2/2] Introduce lsp-guess-root-without-session --- lsp-mode.el | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/lsp-mode.el b/lsp-mode.el index 62a497c0b42..8d517c4af4e 100644 --- a/lsp-mode.el +++ b/lsp-mode.el @@ -245,6 +245,15 @@ following `projectile'/`project.el' conventions." :group 'lsp-mode :type 'boolean) +(defcustom lsp-guess-root-without-session nil + "Ignore the session file when calculating the project root. +You almost always want to set lsp-auto-guess-root too. +Do *not* use this setting unless you are familiar with `lsp-mode' +internals and you are sure that all of your projects are +following `projectile'/`project.el' conventions." + :group 'lsp-mode + :type 'boolean) + (defcustom lsp-restart 'interactive "Defines how server-exited events must be handled." :group 'lsp-mode @@ -8891,9 +8900,12 @@ Select action: " (prog1 t (lsp--info "File %s is in blacklisted directory %s" file-name it)))) not) - (if lsp-auto-guess-root (lsp--suggest-project-root) - (or - (lsp-find-session-folder session file-name) + (or + (when lsp-auto-guess-root + (lsp--suggest-project-root)) + (unless lsp-guess-root-without-session + (lsp-find-session-folder session file-name)) + (unless lsp-auto-guess-root (when-let ((root-folder (lsp--find-root-interactively session))) (if (or (not (f-equal? root-folder (expand-file-name "~/"))) (yes-or-no-p