       (when (= "variable" (:type fst-destruct-variable))
         (let [adtParam (-> adtType :params first)
               adtCandidate (get-candidate-by-token (:value adtParam) module modules) ]
-          (if adtCandidate
-            [{:value (:value adtCandidate)
-              :candidate (:value fst-destruct-variable)
-              :location (:location adtCandidate)
-              :package (:package adtCandidate)
-              :file (:file adtCandidate)
-              :doc (:doc adtCandidate)
-              :module-name (:module-name adtCandidate)}]
-
-            [{:value (:value adtParam)
-              :candidate (:value fst-destruct-variable)}])))
+          (concat
+            (when adtCandidate
+              [{:value (:value adtCandidate)
+                :candidate (:value fst-destruct-variable)
+                :location (:location adtCandidate)
+                :package (:package adtCandidate)
+                :file (:file adtCandidate)
+                :doc (:doc adtCandidate)
+                :module-name (:module-name adtCandidate)}])
+
+            (when (= "typeRec" (:type adtParam))
+              (concat
+                [{:value (str (:value candidate) "." (:value adtType) ".<customrecord>")
+                 :candidate (:value fst-destruct-variable)
+                 :location (:location adtParam)
+                 :doc (print-rec adtParam)
+                 :package (:package candidate)
+                 :file (:file candidate)
+                 :module-name (:module-name candidate)}])
+              (map #(hash-map
+                      :value (str (:value candidate) "." (:value adtType) ".<customrecord>." (:name %))
+                      :candidate (str (:value fst-destruct-variable) "." (:name %))
+                      :location (:location %)
+                      :doc (:signatureRaw %)
+                      :package (:package candidate)
+                      :file (:file candidate)
+                      :module-name (:module-name candidate))
+                   (:fieldDefs adtParam))))))
+
 
       (when [(= "patternRec" (:type fst-destruct-variable))]
         (let [adtParam (-> adtType :params first)

    (if (and (= "nameDef" (:type decl))
             (-> decl :annotation :signature))
      (mapcat (fn [param {:keys [candidate] :as ann}]
                (cond
                  (and (= "variable" (:type param))
                       (= "typeRec" (:type ann)))

                       (not (in-range? pos (-> decl :annotation))))



                  (let [pattern-param (-> param :pattern :value :variables first)
                        adtType (-> candidate :adtDefs first)
                        adtPattern (:pattern param)
                        adtParam (-> adtType :params first)
                        adtCandidate (get-jump-to-by-token (:value adtParam))]

                    (concat
                      (when-let [aliaz (:alias adtPattern)]
                        [{:candidate aliaz
