diff options
| author | Yuchen Pei <hi@ypei.me> | 2022-09-28 22:44:05 +1000 | 
|---|---|---|
| committer | Yuchen Pei <hi@ypei.me> | 2022-09-28 22:44:05 +1000 | 
| commit | a58ea9ffa8cf563bfd7b30db5f3c6b55cf89f632 (patch) | |
| tree | 14be69bba2e905b01f3529924d86a7072a99d56a | |
| parent | aafe7ffcaf1fa391f4f5573ece563d337c7fbb2a (diff) | |
initial version of integration with help mode.
| -rw-r--r-- | hcel-results.el | 118 | 
1 files changed, 74 insertions, 44 deletions
diff --git a/hcel-results.el b/hcel-results.el index be8e6cb..d3e2325 100644 --- a/hcel-results.el +++ b/hcel-results.el @@ -268,28 +268,40 @@ Start by choosing a package."                      hcel-results-max-page-number))      (mapc       (lambda (result) -       (let* ((location-info (alist-get 'locationInfo result)) -              (doc (hcel-render-html -                    (or (alist-get 'doc result) -                        (alist-get 'documentation -                                   (ignore-errors -                                     (hcel-definition-site-location-info -                                      location-info))))))) -         (insert "--\n") -         (insert (propertize -                  (format "%s :: %s\n" -                          (alist-get 'demangledOccName result) -                          (hcel-render-id-type (alist-get 'idType result))) -                  'location-info location-info -                  'match-line t)) -         (insert (format "Defined in %s %s\n" -                         (hcel-format-package-id -                          (alist-get 'packageId location-info) "-") -                         (alist-get 'modulePath location-info))) -         (when doc (insert doc)))) +       (insert "--\n") +       (insert (hcel-ids-render-result result)))       (alist-get 'json results))      (goto-char (point-min)))) +(defun hcel-ids-render-result (result) +  (let* ((location-info (alist-get 'locationInfo result)) +         (doc (hcel-render-html +               (or (alist-get 'doc result) +                   (alist-get 'documentation +                              (ignore-errors +                                (hcel-definition-site-location-info +                                 location-info))))))) +    ;; TODO: remove +    ;; (print (with-temp-buffer +    ;;          (insert (alist-get 'doc result)) +    ;;          (libxml-parse-html-region (point-min) (point-max)))) +    (concat +     (propertize +      (format "%s :: %s\n" +              (alist-get 'demangledOccName result) +              (hcel-render-id-type (alist-get 'idType result))) +      'location-info location-info +      'match-line t) +     (concat "Defined in " +             (button-buttonize +              (format "%s %s" +                      (hcel-format-package-id +                       (alist-get 'packageId location-info) "-") +                      (alist-get 'modulePath location-info)) +              (lambda (&rest _) (hcel-load-module-location-info location-info))) +             "\n") +     (when doc (concat "\n" doc))))) +  (defun hcel-ids-reload ()    (interactive)    (hcel-ids-update)) @@ -319,29 +331,35 @@ Start by choosing a package."  ;; Caching results to prevent to many hits  (defvar hcel-ids--minibuffer-saved-query nil)  (defvar hcel-ids--minibuffer-saved-results nil) +(defvar hcel-ids--minibuffer-selected nil)  (defun hcel-ids--affixation-internal (scope items) -  (mapcar -   (lambda (item) -     (let* ((location-info (get-text-property 0 'location-info item)) -           (suffix -            (propertize  -             (format -              " :: %s" -              (hcel-render-components (get-text-property 0 'components item))) -             'face 'completions-annotations)) -           (prefix -            (propertize -             (if (eq scope 'global) -                 (format "(%s %s) " -                         (alist-get 'moduleName location-info) -                         (hcel-format-package-id -                          (alist-get 'packageId location-info) "-")) -                 (format "(%s) " -                         (alist-get 'moduleName location-info))) -             'face 'completions-annotations))) -       (list (car (split-string item " ")) prefix suffix))) -   items)) +  (let ((results +         (mapcar +          (lambda (item) +            (let* ((info (get-text-property 0 'info item)) +                   (location-info (alist-get 'locationInfo info)) +                   (suffix +                    (propertize  +                     (format +                      " :: %s" +                      (hcel-render-components +                       (alist-get 'components (alist-get 'idType info)))) +                     'face 'completions-annotations)) +                   (prefix +                    (propertize +                     (if (eq scope 'global) +                         (format "(%s %s) " +                                 (alist-get 'moduleName location-info) +                                 (hcel-format-package-id +                                  (alist-get 'packageId location-info) "-")) +                       (format "(%s) " +                               (alist-get 'moduleName location-info))) +                     'face 'completions-annotations))) +              (list (car (split-string item " ")) prefix suffix))) +          items))) +    (setq hcel-ids--minibuffer-selected (car (car results))) +    results))  (defun hcel-ids--affixation-function (scope)    (lambda (items) @@ -364,6 +382,7 @@ Start by choosing a package."                    (format "%s %s"                            (alist-get 'demangledOccName result)                            (alist-get 'externalId result)) +                  'info result                    'location-info (alist-get 'locationInfo result)                    'components (alist-get 'components                                           (alist-get 'idType result)))) @@ -372,8 +391,6 @@ Start by choosing a package."                  (number-to-string hcel-ids-live-per-page))))          hcel-ids--minibuffer-saved-results)))) -(defvar hcel-ids-selected-ids-location-info nil) -  (defun hcel-global-ids-minibuffer-collection (query pred action)    (hcel-ids-minibuffer-collection 'global query action)) @@ -382,11 +399,12 @@ Start by choosing a package."      (hcel-ids-minibuffer-collection 'package query action package-id)))  (defun hcel-ids (scope query &optional package-id) +  ;; FIXME: hacky way to detecting completion.    (let ((splitted (split-string query " ")))      (if (length= splitted 2)          (hcel-load-module-location-info -         (alist-get 'location -                    (hcel-definition-site-external-id (cadr splitted)))) +         (alist-get 'locationInfo +                    (get-text-property 0 'info hcel-ids--minibuffer-selected)))        (let ((buffer-name (hcel-ids-buffer-name scope query)))          (with-current-buffer (get-buffer-create buffer-name)            (hcel-ids-mode) @@ -416,5 +434,17 @@ Start by choosing a package."    (hcel-ids 'package query hcel-package-id))  (define-key hcel-mode-map "i" #'hcel-package-ids) +(defun hcel-help (query) +  (interactive +   (list +    (let ((minibuffer-allow-text-properties t)) +      (completing-read "Find help for identifier: " +                       #'hcel-global-ids-minibuffer-collection)))) +  (when (length= (split-string query " ") 2) +    (with-help-window "*hcel-help*" +      (with-current-buffer standard-output +        (insert (hcel-ids-render-result +                (get-text-property 0 'info hcel-ids--minibuffer-selected))))))) +  (provide 'hcel-results)  ;;; hcel-results.el ends here.  | 
