|
61 | 61 | :type 'integer |
62 | 62 | :group 'lsp-ui-peek) |
63 | 63 |
|
64 | | -(defcustom lsp-ui-peek-force-fontify t |
65 | | - "Force to fontify chunks of code (use semantics colors). |
66 | | -WARNING: This can heavily slow the processing when `lsp-ui-peek-expand-function' |
| 64 | +(defcustom lsp-ui-peek-fontify 'on-demand |
| 65 | + "Whether to fontify chunks of code (use semantics colors). |
| 66 | +WARNING: 'always can heavily slow the processing when `lsp-ui-peek-expand-function' |
67 | 67 | expands more than 1 file. It is recommended to keeps the default value of |
68 | | -`lsp-ui-peek-expand-function' when this variable is non-nil." |
69 | | - :type 'boolean |
| 68 | +`lsp-ui-peek-expand-function' when this variable is 'always." |
| 69 | + :type '(choice (const :tag "Never" never) |
| 70 | + (const :tag "On demand" on-demand) |
| 71 | + (const :tag "Always" always)) |
70 | 72 | :group 'lsp-ui-peek) |
71 | 73 |
|
72 | 74 | (defcustom lsp-ui-peek-always-show nil |
@@ -138,8 +140,8 @@ The function takes one parameter: a list of cons where the car is the |
138 | 140 | filename and the cdr is the number of references in that file. |
139 | 141 | It should returns a list of filenames to expand. |
140 | 142 | WARNING: If you change this variable and expand more than 1 file, it is |
141 | | -recommended to set `lsp-ui-peek-force-fontify' to nil, otherwise it will cause |
142 | | -performances issues.") |
| 143 | +recommended to set `lsp-ui-peek-fontify' to 'never or 'on-demand, otherwise it |
| 144 | +will cause performances issues.") |
143 | 145 |
|
144 | 146 | (defvar-local lsp-ui-peek--overlay nil) |
145 | 147 | (defvar-local lsp-ui-peek--list nil) |
@@ -320,13 +322,26 @@ XREFS is a list of references/definitions." |
320 | 322 | (append list (-repeat (- min-len len) "")) |
321 | 323 | list))) |
322 | 324 |
|
| 325 | +(defun lsp-ui-peek--render (major string) |
| 326 | + (with-temp-buffer |
| 327 | + (insert string) |
| 328 | + (delay-mode-hooks |
| 329 | + (let ((inhibit-message t)) |
| 330 | + (funcall major)) |
| 331 | + (ignore-errors |
| 332 | + (font-lock-ensure))) |
| 333 | + (buffer-string))) |
| 334 | + |
323 | 335 | (defun lsp-ui-peek--peek () |
324 | 336 | "Show reference's chunk of code." |
325 | 337 | (-let* ((xref (lsp-ui-peek--get-selection)) |
326 | 338 | ((&plist :file file :chunk chunk) (or xref lsp-ui-peek--last-xref)) |
327 | 339 | (header (concat " " (lsp-ui--workspace-path file) "\n")) |
328 | 340 | (header2 (format " %s %s" lsp-ui-peek--size-list (symbol-name lsp-ui-peek--kind))) |
329 | 341 | (ref-view (--> chunk |
| 342 | + (if (eq lsp-ui-peek-fontify 'on-demand) |
| 343 | + (lsp-ui-peek--render major-mode it) |
| 344 | + chunk) |
330 | 345 | (subst-char-in-string ?\t ?\s it) |
331 | 346 | (concat header it) |
332 | 347 | (split-string it "\n"))) |
@@ -636,7 +651,7 @@ LOCATION can be either a LSP Location or SymbolInformation." |
636 | 651 | :len (- end start)))) |
637 | 652 |
|
638 | 653 | (defun lsp-ui-peek--fontify-buffer (filename) |
639 | | - (when lsp-ui-peek-force-fontify |
| 654 | + (when (eq lsp-ui-peek-fontify 'always) |
640 | 655 | (unless buffer-file-name |
641 | 656 | (make-local-variable 'delay-mode-hooks) |
642 | 657 | (let ((buffer-file-name filename) |
|
0 commit comments