           (lambda (text)
             (when text
               (setq text (ycmd--fontify-code text))
-              (when symbol
-                (setq ycmd-eldoc--cache (list symbol text)))
-              text)))))))
+              (ycmd-eldoc--cache-store symbol text))))))))
+
+(defun ycmd-eldoc--cache-store (symbol text)
+  "Store SYMBOL and TEXT to `ycmd-eldoc--cache'."
+  (aset ycmd-eldoc--cache 0 symbol)
+  ;; Store text only if we have a symbol for lookup
+  (aset ycmd-eldoc--cache 1 (and symbol text))
+  text)
 
 ;; Source: https://github.com/racer-rust/emacs-racer/blob/master/racer.el
 (defun ycmd-eldoc--goto-func-name ()

is only semantic after a semantic trigger."
  :type 'list)

(defvar-local ycmd-eldoc--cache nil)

(defvar-local ycmd-eldoc--get-type-supported-p t)


(defun ycmd-eldoc--info-at-point ()
  "Get function info at point."
  (let ((symbol (ycmd-eldoc--with-point-at-func-name (symbol-at-point))))
    (if (and symbol (eq symbol (aref ycmd-eldoc--cache 0)))
        (aref ycmd-eldoc--cache 1)
      (deferred:$
        (deferred:next
          (lambda ()
