unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
blob e822e7a2ba307be3315eef68881ecbaefb6580a8 2639 bytes (raw)
name: lisp/cedet/semantic/symref/project.el 	 # note: path name is non-authoritative(*)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
 
;;; semantic/symref/project.el --- Symref implementation using project and xref  -*- lexical-binding: t; -*-

;; Copyright (C) 2008-2023 Free Software Foundation, Inc.

;; Author: Spencer Baugh <sbaugh@janestreet.com>

;; This file is part of GNU Emacs.

;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.

;; GNU Emacs 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 General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.

;;; Commentary:
;;
;; Implement the symref tool API using project-files and
;; xref-matches-in-files, which in turn use grep or more efficient
;; tools if available.
;;
;; This is basically a replacement for the symref GREP tool, as a new
;; lowest-common-denominator which works without indices or
;; project-specific configuration.  It has better performance than the
;; GREP tool because project-files provides a narrower set of files to
;; search, and xref-matches-in-files is highly efficient.

(require 'semantic/symref)
(require 'project)
(require 'xref)

;;; Code:

;;;###autoload
(defclass semantic-symref-tool-project (semantic-symref-tool-baseclass) ()
  "A symref tool implementation using project.el.
This uses `xref-matches-in-files' over `project-files'")

(cl-defmethod semantic-symref-perform-search ((tool semantic-symref-tool-project))
  (pcase-let
      (((eieio
         searchfor
         (searchtype (or 'symbol 'regexp))
         ;; for now, we only really support being called by
         ;; xref-backend-references, and this is what it passes.
         (resulttype 'line-and-text))
        tool))
    (mapcar
     (pcase-lambda
       ((cl-struct xref-match-item
                  summary (location
                           (cl-struct xref-file-location file line))))
       (list line file summary))
     (xref-matches-in-files searchfor (project-files (project-current))))))

(add-to-list 'semantic-symref-tool-alist
             '((lambda (rootdir) (project-current nil rootdir))
               . project))

(provide 'semantic/symref/project)

;; Local variables:
;; generated-autoload-file: "../loaddefs.el"
;; generated-autoload-load-name: "semantic/symref/project"
;; End:

;;; semantic/symref/project.el ends here

debug log:

solving e822e7a2ba3 ...
found e822e7a2ba3 in https://yhetil.org/emacs-bugs/ierwn2ecw54.fsf@janestreet.com/

applying [1/1] https://yhetil.org/emacs-bugs/ierwn2ecw54.fsf@janestreet.com/
diff --git a/lisp/cedet/semantic/symref/project.el b/lisp/cedet/semantic/symref/project.el
new file mode 100644
index 00000000000..e822e7a2ba3

Checking patch lisp/cedet/semantic/symref/project.el...
Applied patch lisp/cedet/semantic/symref/project.el cleanly.

index at:
100644 e822e7a2ba307be3315eef68881ecbaefb6580a8	lisp/cedet/semantic/symref/project.el

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).