Skip to content

Commit 6896244

Browse files
authored
Merge pull request #453 from MaskRay/managed
Extract initialize/uninitialize logic to lsp--managed-mode
2 parents aa20075 + 45311a6 commit 6896244

File tree

1 file changed

+49
-42
lines changed

1 file changed

+49
-42
lines changed

lsp-methods.el

Lines changed: 49 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)