@@ -621,7 +621,7 @@ disappearing, unset all the variables related to it."
621621 (if (process-live-p proc)
622622 (kill-process (lsp--workspace-proc lsp--cur-workspace)))
623623 (setq lsp--cur-workspace nil )
624- (lsp--unset-variables )
624+ (lsp--managed-mode -1 )
625625 (kill-local-variable 'lsp--cur-workspace ))
626626 (remhash root lsp--workspaces)))
627627
@@ -1060,6 +1060,52 @@ remove."
10601060 (run-hooks 'lsp-after-initialize-hook )
10611061 (lsp--text-document-did-open)))
10621062
1063+ (define-minor-mode lsp--managed-mode
1064+ " Mode for source buffers managed by lsp-mode."
1065+ nil nil nil
1066+ (cond
1067+ (lsp--managed-mode
1068+ (when (and lsp-enable-indentation
1069+ (lsp--capability " documentRangeFormattingProvider" ))
1070+ (setq-local indent-region-function #'lsp-format-region ))
1071+
1072+ (when lsp-enable-eldoc
1073+ ; ; XXX: The documentation for `eldoc-documentation-function' suggests
1074+ ; ; using `add-function' for modifying its value, use that instead?
1075+ (setq-local eldoc-documentation-function #'lsp--on-hover )
1076+ (eldoc-mode 1 ))
1077+
1078+ (add-hook 'after-change-functions #'lsp-on-change nil t )
1079+ (add-hook 'after-revert-hook #'lsp-on-revert nil t )
1080+ (add-hook 'after-save-hook #'lsp-on-save nil t )
1081+ (add-hook 'auto-save-hook #'lsp--on-auto-save nil t )
1082+ (add-hook 'before-change-functions #'lsp-before-change nil t )
1083+ (add-hook 'before-save-hook #'lsp--before-save nil t )
1084+ (when (and lsp-enable-completion-at-point (lsp--capability " completionProvider" ))
1085+ (setq-local completion-at-point-functions nil )
1086+ (add-hook 'completion-at-point-functions #'lsp-completion-at-point nil t ))
1087+ (add-hook 'kill-buffer-hook #'lsp--text-document-did-close nil t )
1088+ (add-hook 'post-self-insert-hook #'lsp--on-self-insert nil t )
1089+ (when lsp-enable-xref
1090+ (add-hook 'xref-backend-functions #'lsp--xref-backend nil t ))
1091+ )
1092+ (t
1093+ (setq-local indent-region-function nil )
1094+ (remove-function (local 'eldoc-documentation-function ) #'lsp-eldoc-function )
1095+
1096+ (remove-hook 'after-change-functions #'lsp-on-change t )
1097+ (remove-hook 'after-revert-hook #'lsp-on-revert t )
1098+ (remove-hook 'after-save-hook #'lsp-on-save t )
1099+ (remove-hook 'auto-save-hook #'lsp--on-auto-save t )
1100+ (remove-hook 'before-change-functions #'lsp-before-change t )
1101+ (remove-hook 'before-save-hook #'lsp--before-save t )
1102+ (remove-hook 'completion-at-point-functions #'lsp-completion-at-point t )
1103+ (remove-hook 'kill-buffer-hook #'lsp--text-document-did-close t )
1104+ (remove-hook 'post-self-insert-hook #'lsp--on-self-insert t )
1105+ (remove-hook 'xref-backend-functions #'lsp--xref-backend t )
1106+ ))
1107+ )
1108+
10631109(defun lsp--text-document-did-open ()
10641110 (run-hooks 'lsp-before-open-hook )
10651111 (puthash (current-buffer ) 0 (lsp--workspace-file-versions lsp--cur-workspace))
@@ -1068,35 +1114,8 @@ remove."
10681114 " textDocument/didOpen"
10691115 `(:textDocument ,(lsp--make-text-document-item))))
10701116
1071- (add-hook 'after-save-hook #'lsp-on-save nil t )
1072- (add-hook 'kill-buffer-hook #'lsp--text-document-did-close nil t )
1073-
1074- (when lsp-enable-eldoc
1075- ; ; XXX: The documentation for `eldoc-documentation-function' suggests
1076- ; ; using `add-function' for modifying its value, use that instead?
1077- (setq-local eldoc-documentation-function #'lsp--on-hover )
1078- (eldoc-mode 1 ))
1079-
1080- (when (and lsp-enable-indentation
1081- (lsp--capability " documentRangeFormattingProvider" ))
1082- (setq-local indent-region-function #'lsp-format-region ))
1083-
1084- (when (and lsp-enable-xref
1085- (lsp--capability " referencesProvider" )
1086- (lsp--capability " definitionProvider" ))
1087- (setq-local xref-backend-functions (list #'lsp--xref-backend )))
1088-
1089- (when (and lsp-enable-completion-at-point (lsp--capability " completionProvider" ))
1090- (setq-local completion-at-point-functions nil )
1091- (add-hook 'completion-at-point-functions #'lsp-completion-at-point nil t ))
1092-
1093- ; ; Make sure the hook is local (last param) otherwise we see all changes for all buffers
1094- (add-hook 'before-change-functions #'lsp-before-change nil t )
1095- (add-hook 'after-change-functions #'lsp-on-change nil t )
1096- (add-hook 'post-self-insert-hook #'lsp--on-self-insert nil t )
1097- (add-hook 'after-revert-hook #'lsp-on-revert nil t )
1098- (add-hook 'before-save-hook #'lsp--before-save nil t )
1099- (add-hook 'auto-save-hook #'lsp--on-auto-save nil t )
1117+ (lsp--managed-mode 1 )
1118+
11001119 (lsp--set-sync-method)
11011120 (run-hooks 'lsp-after-open-hook ))
11021121
@@ -2375,18 +2394,6 @@ command COMMAND and optionsl ARGS"
23752394; ; (defalias 'lsp-on-change #'lsp--text-document-did-change)
23762395(defalias 'lsp-completion-at-point #'lsp--get-completions )
23772396
2378- (defun lsp--unset-variables ()
2379- (when lsp-enable-eldoc
2380- (setq-local eldoc-documentation-function 'ignore ))
2381- (when lsp-enable-xref
2382- (setq-local xref-backend-functions nil ))
2383- (when lsp-enable-completion-at-point
2384- (remove-hook 'completion-at-point-functions #'lsp-completion-at-point t ))
2385- (remove-hook 'after-change-functions #'lsp-on-change t )
2386- (remove-hook 'post-self-insert-hook #'lsp--on-self-insert t )
2387- (remove-hook 'after-revert-hook #'lsp-on-revert t )
2388- (remove-hook 'before-change-functions #'lsp-before-change t ))
2389-
23902397(defun lsp--set-configuration (settings )
23912398 " Set the configuration for the lsp server."
23922399 (lsp--send-notification (lsp--make-notification
0 commit comments