1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-17 03:10:58 -08:00
Commit graph

79 commits

Author SHA1 Message Date
Dmitry Gutov
a4c6f55b9a Unify the absolutely equal xref-backend-references implementations
* lisp/progmodes/elisp-mode.el (xref-backend-references):
Remove.

* lisp/progmodes/etags.el (xref-backend-references):
Remove.

* lisp/progmodes/xref.el (xref-backend-references):
Define the default implementation.
2015-11-15 07:00:45 +02:00
Dmitry Gutov
1a3c4541c3 Update project-find-regexp for the new xref API
* lisp/progmodes/project.el (project--read-regexp):
Update to use the new xref API methods.

* lisp/progmodes/xref.el (xref-find-backend): Autoload.
2015-11-15 06:32:13 +02:00
Dmitry Gutov
bc2cec6b20 Fix replacing a match with a shorter string
In effect, partially reverting fe973fc.

* lisp/progmodes/xref.el (xref-query-replace): Store the end
of each match as a marker again, instead of length.
(xref--query-replace-1): Update accordingly.
2015-11-15 06:32:13 +02:00
Artur Malabarba
d24e7833e5 * lisp/progmodes/xref.el (xref-pop-marker-stack): Downgrade errors
Signal user-errors instead.
2015-11-14 21:13:33 +00:00
Dmitry Gutov
7126e9a40b ; Update xref-etags-mode for the latest change 2015-11-14 02:41:38 +02:00
Dmitry Gutov
246d6605f7 Use generic dispatch for xref backends
* lisp/progmodes/xref.el (xref-backend-functions):
New variable.
(xref-find-function): Remove.
(xref-find-backend)
(xref--etags-backend): New functions.
(xref-identifier-at-point-function)
(xref-identifier-completion-table-function): Remove.
(xref-backend-definitions, xref-backend-references)
(xref-backend-apropos, xref-backend-identifier-at-point)
(xref-backend-identifier-completion-table):
New generic functions.

* lisp/progmodes/elisp-mode.el (emacs-lisp-mode): Add
`elisp--xref-backend' to the beginning of
`xref-backend-functions', locally.  Delete references to
removed functions and vars.
(elisp-xref-find): Remove.
(elisp--xref-backend): New function.
(elisp--xref-find-references, elisp--xref-find-apropos)
(elisp--xref-identifier-completion-table):
Turn into appropriately named generic methods.

* lisp/progmodes/etags.el (etags-xref-find): Remove.
(xref-backend-identifier-completion-table)
(xref-backend-references, xref-backend-definitions)
(xref-backend-apropos): New generic methods.
2015-11-14 02:41:38 +02:00
Dmitry Gutov
f103a2771b Handle multiple matches on the same line; add highlighting
* lisp/progmodes/xref.el (xref-location-marker): Interpret the
column value in characters.
(xref--collect-matches): Rename from `xref--collect-match'.
Search for all matches in the hit line.  Add `highlight' face to
the matched region in the summary.  Update both callers.
2015-11-14 01:11:52 +02:00
Dmitry Gutov
fe973fc270 Replace xref-match-bounds with xref-match-length
Relying on xref-location-marker to point to the beginning of the match

* lisp/progmodes/xref.el (xref-match-bounds): Remove.
(xref-match-length): Add.
(xref-make-match): Change the arguments.
(xref--match-buffer-bounds): Remove.
(xref-match-item): Store length, instead of end-column.
(xref-pulse-momentarily)
(xref--collect-match)
(xref--query-replace-1): Update accordingly.
(xref-query-replace): Ditto.  And check that the search results
are up-to-date.
2015-11-14 01:01:58 +02:00
Dmitry Gutov
3a37d99e97 Move and rename xref-find-regexp to the project package
* lisp/progmodes/project.el (project-find-regexp)
(project--read-regexp)
(project--find-regexp-in): New functions.

* lisp/progmodes/xref.el (xref--find-xrefs): Extract from
xref--show-xrefs.  Use in existing callers in place of that
function.
(xref--show-xrefs): Only do the "show" part.
(xref-find-regexp): Rename, more or less, to
project-or-libraries-find-regexp.
2015-11-08 03:07:09 +02:00
Dmitry Gutov
55ad7fce86 Abolish temporary buffer management for xref
* lisp/progmodes/xref.el (xref--temporary-buffers)
(xref--current)
(xref--inhibit-mark-current)
(xref--mark-selected): Remove.  Remove all references.
(xref--show-xrefs): Do not construct the
list of the temporary buffers, nor pass it along.
2015-11-06 15:37:28 +02:00
Dmitry Gutov
977697203f Rename "search path" to "library roots"
* lisp/emacs-lisp/cl-seq.el (cl-set-difference): Retain the order
of the elements from CL-LIST1.

* test/automated/cl-lib-tests.el (cl-lib-test-set-functions):
Update WRT to the above change.

* lisp/progmodes/project.el (project-search-path-function): Rename
to project-library-roots-function, update the documentation and
references.
(project-search-path): Likewise, to project-library-roots.
(project-roots): Clarify documentation.
(project-vc-search-path): Likewise, to project-vc-library-roots.
(project-library-roots): In addition to the renames, thread the
results through file-name-as-directory.
(project-prune-directories): Accept a variable number of
arguments.  Rename to project-combine-directories.
(project-subtract-directories): New function.

* lisp/progmodes/elisp-mode.el (elisp--xref-find-references):
Append project-roots and project-library-roots together.

* lisp/progmodes/etags.el (etags--xref-find-references): Ditto.
2015-11-06 15:37:24 +02:00
Stephen Leake
267e0e80e1 * lisp/progmodes/xref.el: require semantic/symref during compilation. 2015-11-06 05:15:56 +02:00
Juanma Barranquero
587b232837 * lisp/progmodes/xref.el: Doc fixes
(xref-make-file-location, xref-make-buffer-location, xref-make)
(xref-make-bogus-location, xref-make-match): Add cross-references.
(xref--insert-xrefs): Fix typo in docstring.
2015-11-04 10:07:25 +01:00
Paul Eggert
26bd978d87 Fix some more docstring etc. quoting problems
Mostly these fixes prevent the transliteration of apostrophes
that should stay apostrophes.  Also, prefer curved quotes in
Bahá’í proper names, as that’s the preferred Bahá’í style and
these names are chock-full of non-ASCII characters anyway.
* lisp/emacs-lisp/eieio-core.el (eieio-defclass-autoload)
(eieio-defclass-internal):
* lisp/emacs-lisp/eieio.el (defclass):
* lisp/hi-lock.el (hi-lock-mode):
Don’t transliterate Lisp apostrophes when generating a
doc string or diagnostic.
* lisp/international/mule-diag.el (list-coding-systems-1):
* lisp/international/ogonek.el (ogonek-jak, ogonek-how):
* lisp/mail/sendmail.el (sendmail-query-user-about-smtp):
* lisp/vc/ediff-mult.el (ediff-redraw-registry-buffer):
* lisp/vc/ediff-ptch.el (ediff-fixup-patch-map):
Substitute quotes before putting them in the help buffer.
2015-09-03 15:32:54 -07:00
Stephen Leake
85f7e5115f elisp--xref-find-definitions handle cl-defstuct default constructor
* lisp/progmodes/elisp-mode.el (elisp-xref-find): Add FIXME.
(elisp--xref-format-extra): Rename from elisp--xref-format-cl-defmethod.
(elisp--xref-find-definitions): Handle cl-defstuct default constructor.

* test/automated/elisp-mode-tests.el (xref-elisp-test-run): Split out
from xref-elisp-test for ease of debugging.
(xref-elisp-deftest): Rename from xref-elisp-test.
(find-defs-constructor): New test.
(find-defs-defgeneric-el): Match batch test config.
(compile): Required for find-defs compilation-minor-mode test.
(find-defs-defvar-el): Match code change.
(find-defs-face-el): Match code change.

* lisp/progmodes/xref.el (xref-find-function, xref-find-definitions):
Improve doc string.
2015-08-11 14:29:34 -05:00
Dmitry Gutov
d39f33cf37 ; Fix xref--show-location, after regression in ee50e62 2015-08-10 04:30:33 +03:00
Dmitry Gutov
6f9b233448 Add project-vc-search-path and project-vc-ignores
* lisp/progmodes/project.el (project-vc): New group.
(project-vc-search-path, project-vc-ignores): New variables.
(project--value-in-dir): Utility function.
(project-search-path, project-ignores): Use them.

* lisp/progmodes/xref.el (xref--rgrep-command): Only replace `./'
at bos.  Don't add extra `/'.  Don't prepend with `*' if replaced.
2015-08-10 04:05:24 +03:00
Dmitry Gutov
ee50e62a44 Preserve window point in xref-find-definitions-other-window
Fix the problem reported by Ingo Logmar in
http://lists.gnu.org/archive/html/emacs-devel/2015-08/msg00152.html
* lisp/progmodes/xref.el (xref--goto-char): Extract from
xref--goto-location.
(xref--pop-to-location): Use it. Replace xref--goto-location with
a direct xref-location-marker call.
(xref--show-location): Likewise.
(xref--display-position): Use xref--goto-char.
2015-08-05 15:19:04 +03:00
Dmitry Gutov
543bb9bc20 Add a second argument to project-ignores
* lisp/progmodes/project.el (project-ignores): Add a second
argument DIR.

* lisp/progmodes/project.el (project-ignores): Only include the VC
ignores if DIR is the VC root.

* lisp/progmodes/xref.el (xref-find-regexp): Update accordingly.
2015-08-02 01:30:36 +03:00
Dmitry Gutov
6a79a169e7 Rename project-directories to project-roots
* lisp/progmodes/project.el (project-search-path-function)
(project-search-path): Update the docstring.
(project-directories): Rename to `project-roots', update all
callers and implementations accordingly.
(project-root): Remove.

* lisp/progmodes/xref.el (xref-find-regexp): Use * instead of *.*
as the default file mask.
2015-07-31 05:53:14 +03:00
Dmitry Gutov
a0b8421e3b ; xref-find-regexp: (require 'grep), for grep-read-files 2015-07-22 23:08:50 +03:00
Dmitry Gutov
b6ac30ab43 Add new xref-query-replace command
* lisp/progmodes/xref.el (xref--match-buffer-bounds): New
function, extracted from xref-pulse-momentarily.
(xref-query-replace): New command.
(xref--query-replace-1): New helper function.
(xref--xref-buffer-mode-map): Add `r' binding.
2015-07-21 03:25:24 +03:00
Dmitry Gutov
4051fb202e ; Fix a typo 2015-07-21 00:44:41 +03:00
Dmitry Gutov
5330a45ebf Add xref-match-item, and use it
* lisp/progmodes/xref.el (xref-match-bounds): New generic function.
(xref-file-location): Add reader for the column slot.
(xref-match-item): New class.
(xref-match-bounds): A method implementation for it.
(xref-make-match): New constructor function.
(xref--current-item): New private variable.
(xref-pulse-momentarily): Use it.
(xref--pop-to-location): Change the first argument to an xref
item, instead of location, bind xref--current-item.
Update all callers.
(xref-next-line, xref-prev-line, xref--next-error-function)
(xref--mouse-2): Look for the property `xref-item',
instead of `xref-location'.
(xref--item-at-point): Likewise.  This function replaces
`xref-location-at-point'.  Update all callers.
(xref--insert-xrefs): Add the `xref-item' text property, instead
of `xref-location'.
(xref--collect-match): Use xref-make-match.
2015-07-20 04:32:58 +03:00
Dmitry Gutov
10ac9dbdcf Rename xref--xref to xref-item
* lisp/progmodes/xref.el (xref-item): Rename from `xref--xref'.
Update all references.
2015-07-20 03:26:01 +03:00
Dmitry Gutov
e29206e84a Rename xref description slot to summary
* lisp/progmodes/xref.el (xref--xref): Rename the `description'
slot to `summary'.
2015-07-20 03:12:32 +03:00
Dmitry Gutov
50ad176d28 Add xref-after-jump-hook and xref-after-return-hook
* lisp/progmodes/xref.el (xref-after-jump-hook)
(xref-after-return-hook): New hooks.
(xref-pulse-on-jump): Remove, in favor of the above.
(xref-pulse-momentarily): Rename from xref--maybe-pulse.
(xref--pop-to-location, xref--display-position)
(xref-pop-marker-stack): Use the new hooks, as requested in
http://lists.gnu.org/archive/html/emacs-devel/2015-07/msg00213.html
2015-07-19 20:51:28 +03:00
Dmitry Gutov
35ad161d9a Show the default value in the prompt
* lisp/progmodes/xref.el: Add `M-?' binding for
xref-find-references.  Declare functions `grep-read-files' and
`grep-expand-template'.
(xref--read-identifier): Show the default value in the prompt.
2015-07-13 04:27:32 +03:00
Dmitry Gutov
5153d30c16 When called with prefix argument, ask for file patterns to search as well
* lisp/progmodes/xref.el (xref-find-regexp): When called with
prefix argument, ask for file patterns to search as well.  When
prompting for the directory, require an existing one.
(xref-collect-matches): Add a new argument, FILES.  Use it in the
above function.
2015-07-12 18:35:08 +03:00
Dmitry Gutov
62d5d46551 Add `project-ignores'
* lisp/progmodes/project.el (project-ignores): New generic
function, and an implementation for the	VC project type.

* lisp/progmodes/xref.el (xref--rgrep-command): Split, as a
variant of rgrep-default-command that handles a generic list of
ignores.
(xref-collect-matches): Use it, and pass through to it the value
of the newly added argument.
(xref-find-regexp): Handle ignored paths within the project.
Remove outdated comment.

* lisp/vc/vc.el (vc-default-ignore-completion-table):
Skip the comments and the empty lines.
2015-07-12 17:19:08 +03:00
Dmitry Gutov
d6c2b34e9e Bind grep-highlight-matches to nil
* lisp/progmodes/xref.el (xref-collect-matches):
Bind grep-highlight-matches to nil (bug#20728).
2015-07-11 18:56:42 +03:00
Dmitry Gutov
53cf3cfec1 Don't check the exit status, it can be misleading
* lisp/progmodes/xref.el (xref-collect-matches): Don't check the
exit status, it can be misleading.
2015-07-10 04:40:09 +03:00
Dmitry Gutov
f8c720b55b Introduce a Project API
* lisp/progmodes/project.el: New file.

* lisp/cedet/ede.el: (project-try-ede): New function.
(project-root): New implementation.

* lisp/progmodes/elisp-mode.el (emacs-lisp-mode):
Set project-search-path-function.
(elisp--xref-find-references): Delegate some logic to
project-search-path.
(elisp-search-path): New function.
(elisp-xref-find): Don't implement `matches' anymore.

* lisp/progmodes/etags.el: Don't implement `matches'.
Delegate some logic to project-search-path.
(etags-search-path): New function.

* lisp/progmodes/xref.el (xref-find-function):
Remove `matches' from the API.
(xref-find-regexp): Move whatever common logic was in elisp and
etags implementations, and search the directories returned by
project-directories and project-search-path.
2015-07-10 04:40:09 +03:00
Dmitry Gutov
c7e9792565 Syntax-propertize until the end of the line first
* lisp/progmodes/xref.el (xref--collect-match): Syntax-propertize
until the end of the line first.
2015-07-09 15:30:33 +03:00
Dmitry Gutov
15fafa34d0 * lisp/progmodes/xref.el (xref-collect-matches): Use `nreverse' in the end. 2015-07-09 05:15:50 +03:00
Dmitry Gutov
9b4b4a8355 Add --color Grep option to the command dynamically
* lisp/progmodes/grep.el (grep-template, grep-find-template):
Update the description for <C>.  (Bug#20728)
(grep-compute-defaults): Don't add the --color option to
grep-options.  Only add it to grep-command.
(grep-expand-keywords): Expand the env value opts into <C>.
(grep-expand-template): Replace cf in the env with the opts list,
that can include -i and --color.

* lisp/progmodes/xref.el (xref-collect-matches): Do not remove
"--color=always" from the template, because we don't have to.
2015-06-27 23:57:28 +03:00
Stefan Monnier
4fba36ce11 * lisp/progmodes/xref.el: Avoid init-args in oref.
* lisp/progmodes/xref.el (xref-location-group, xref-location-marker)
(xref--insert-xrefs, xref-collect-references): Avoid init-args in oref.
2015-06-24 16:32:09 -04:00
Dmitry Gutov
6d020ecd89 Override 'grep --color=always'
* lisp/progmodes/xref.el (xref-collect-matches):
Override --color=always in grep-find-template.
2015-06-04 02:46:43 +03:00
Dmitry Gutov
c6ee95ddee Restore <D> instead of '.' in grep-find-template
* lisp/cedet/semantic/symref/grep.el
(semantic-symref-grep-use-template): Update a comment.

* lisp/progmodes/grep.el (grep-compute-defaults): Restore <D>
instead of '.' in grep-find-template (bug#20719).
(rgrep): Pass nil as the directory to rgrep-default-command.

* lisp/progmodes/grep.el (grep-expand-keywords): Use '.' as the
default value for DIR.

* lisp/progmodes/xref.el (xref-collect-matches): Drop the
workaround.
2015-06-03 05:45:15 +03:00
Dmitry Gutov
7f01832e13 Reuse rgrep mechanics in xref-find-regexp
* lisp/progmodes/grep.el (rgrep-default-command):
Extract from `rgrep'.

* lisp/progmodes/xref.el (xref-collect-references): Split from
`xref-collect-matches'.  Only handle the case of symbol search.
(xref-collect-matches): Instead of Semantic Symref, use
`rgrep-default-command', to take advantage of its directory and
file ignore settings.
(xref--collect-match): Remove the last argument, leaving the
regexp construction up to the caller.

* lisp/progmodes/elisp-mode.el (elisp--xref-find-matches):
Change to take the xref-collect- function to use as an argument.
(elisp-xref-find): Update accordingly.

* lisp/progmodes/etags.el (etags--xref-find-matches)
(etags-xref-find): Same.
2015-06-02 18:47:43 +03:00
Dmitry Gutov
64f2d346b7 Move xref-elisp-location to elisp-mode.el
* lisp/progmodes/xref.el (xref-elisp-location)
(xref-make-elisp-location, xref-location-marker): Remove here.
(xref--xref): Don't limit the type of the location slot.

* lisp/progmodes/elisp-mode.el (xref-elisp-location):
Define as a cl-struct here.
(xref-location-marker): Move here.
2015-06-02 18:47:42 +03:00
Dmitry Gutov
d86ef9fc4a xref-prompt-for-identifier: Use a list value
* lisp/progmodes/xref.el (xref-prompt-for-identifier): Allow list
value, to be interpreted as a list of commands.
(xref--prompt-p): New function.
(xref--read-identifier): Use it.
2015-05-26 19:28:38 +03:00
Stefan Monnier
8994590317 * lisp/progmodes/xref.el (xref-find-apropos): Use read-string. 2015-05-23 12:05:47 -04:00
Dmitry Gutov
089632800a Add xref-find-regexp
* lisp/progmodes/xref.el (xref-find-function): Describe the
`matches' action.
(xref-find-regexp): New command, using it.
(xref-collect-references): Rename to xref-collect-matches.
(xref--collect-reference): Rename to xref--collect-match.
(xref-collect-matches, xref--collect-match): Accept new argument,
KIND.  Update accordingly.
(xref--regexp-to-extended): New function.

* lisp/progmodes/elisp-mode.el (elisp-xref-find): Support the
`matches' action.
(elisp--xref-find-matches): Accept new argument.  Resolve a FIXME.

* lisp/progmodes/etags.el (etags-xref-find):
Support the `matches' action.
(etags--xref-find-matches): New function.
2015-05-11 02:07:27 +03:00
Dmitry Gutov
f96313f110 Don't require match
* lisp/progmodes/xref.el (xref--read-identifier): Don't require
match. That doesn't work for every command, and some identifier
completion tables are bound to be imperfect anyway.
2015-05-06 05:58:23 +03:00
Dmitry Gutov
6337f2434e ; Update a comment 2015-05-05 05:17:35 +03:00
Dmitry Gutov
ca717aa0fd Buttonize the whole line, including the number at the beginning
* lisp/progmodes/xref.el (xref--location-at-point): Revert the
previous change.
(xref--insert-xrefs): Buttonize the whole line, including the
number at the beginning.
2015-05-05 05:14:01 +03:00
Dmitry Gutov
9fa69f6b14 Insert, highlight and align line numbers in xref output
* lisp/progmodes/etags.el (xref-location-line): Specialize for
xref-etags-location.

* lisp/progmodes/xref.el (xref-location-line): New generic method.
(xref-file-location): Add reader for the line slot.
(xref--location-at-point): Skip to the `xref-location' property.
(xref--collect-reference): Drop the line number from description.
(xref--insert-xrefs): Insert, highlight and align line numbers.
2015-05-05 02:59:34 +03:00
Dmitry Gutov
943c45f68b Don't pulse the indentation, or the newline
* lisp/cedet/pulse.el (pulse-lighten-highlight)
(pulse-reset-face): Fall back to the inherited background
attribute in FACE.
(pulse-momentary-highlight-region): Add autoload cookie.

* lisp/progmodes/xref.el (xref--maybe-pulse): Don't highlight the
indentation, or the newline, if the line's non-empty
(http://lists.gnu.org/archive/html/emacs-devel/2015-05/msg00118.html).
2015-05-04 23:24:36 +03:00
Dmitry Gutov
14c1d2106c Add xref-pulse-on-jump
* lisp/cedet/pulse.el (pulse-momentary-highlight-one-line):
Add autoload cookie.

* lisp/progmodes/xref.el (xref-pulse-on-jump): New option.
(xref--maybe-pulse): New function.
(xref-pop-marker-stack, xref--pop-to-location)
(xref--display-position): Use it.
(xref--location-at-point): Use back-to-indentation.
2015-05-04 18:51:48 +03:00