diff options
Diffstat (limited to '.emacs.d/lisp/my/my-hiedb.el')
| -rw-r--r-- | .emacs.d/lisp/my/my-hiedb.el | 73 | 
1 files changed, 0 insertions, 73 deletions
| diff --git a/.emacs.d/lisp/my/my-hiedb.el b/.emacs.d/lisp/my/my-hiedb.el deleted file mode 100644 index ef3a3c4..0000000 --- a/.emacs.d/lisp/my/my-hiedb.el +++ /dev/null @@ -1,73 +0,0 @@ -;;; my-hiedb.el -- Extensions for hiedb -*- lexical-binding: t -*- - -;; Copyright (C) 2023 Free Software Foundation. - -;; Author: Yuchen Pei <id@ypei.org> -;; Package-Requires: ((emacs "28.2")) - -;; This file is part of dotfiles. - -;; dotfiles is free software: you can redistribute it and/or modify it under -;; the terms of the GNU Affero General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; dotfiles is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General -;; Public License for more details. - -;; You should have received a copy of the GNU Affero General Public -;; License along with dotfiles.  If not, see <https://www.gnu.org/licenses/>. - -;;; Commentary: - -;; Extensions for hiedb. - -;;; Code: - -;;; to use, do for example: -;; (add-hook 'haskell-mode-hook -;;           (lambda () -;;             (add-hook 'xref-backend-functions -;;                       #'hiedb--xref-backend nil t))) - -(defun hiedb--xref-backend () 'hiedb) - -(cl-defmethod xref-backend-definitions -  ((_backend (eql hiedb)) _identifiers) -  (my-hiedb-call-point-defs buffer-file-name -                         (1+ (current-line)) (1+ (current-column))) -  (my-hiedb-parse-point-defs-output -   (file-name-directory buffer-file-name) -   (with-current-buffer "*hiedb*" -     (goto-char (point-min)) (kill-line) (kill-line) -     (buffer-string)) -   )) - -(defun my-hiedb-call-point-defs (file line col) -  (let ((dir (file-name-directory file)) -        (module-name (file-name-base file))) -    (with-current-buffer (get-buffer-create "*hiedb*") -      (erase-buffer)) -    (call-process "hiedb" nil "*hiedb*" nil -                  "-D" -                  (format "%sdefault.hiedb" dir) -                  "point-defs" module-name -                  (number-to-string line) -                  (number-to-string col)))) - -(defun my-hiedb-parse-point-defs-output (dir output) -  "module-name:line-begin:col-begin-line-end:col-end" -  (pcase-let ((`(,module-name ,line-beg ,col-beg, line-end, col-end) -               (split-string output "[:-]" (print output)))) -    (list -     (xref-make-match -      "" (xref-make-file-location -          (format "%s%s.hs" dir module-name) -          (string-to-number line-beg) -          (string-to-number col-beg)) -      (- (string-to-number col-end) (string-to-number col-beg)))))) - -(provide 'my-hiedb) -;;; my-hiedb.el ends here | 
