Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/js-emacs/xref-js2
Jump to references/definitions using ag & js2-mode's AST in Emacs
https://github.com/js-emacs/xref-js2
Last synced: 2 months ago
JSON representation
Jump to references/definitions using ag & js2-mode's AST in Emacs
- Host: GitHub
- URL: https://github.com/js-emacs/xref-js2
- Owner: js-emacs
- License: gpl-3.0
- Created: 2016-04-19T21:17:03.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2024-05-04T14:49:34.000Z (9 months ago)
- Last Synced: 2024-08-02T01:26:16.920Z (6 months ago)
- Language: Emacs Lisp
- Homepage:
- Size: 505 KB
- Stars: 126
- Watchers: 6
- Forks: 15
- Open Issues: 5
-
Metadata Files:
- Readme: readme.md
- License: COPYING
Awesome Lists containing this project
README
# xref-js2
The GitHub repository is mirrored from [https://petton.fr/git/nico/xref-js2](https://petton.fr/git/nico/xref-js2).
`xref-js2` adds navigation to definitions or references to JavaScript projects
in Emacs.`xref-js2` adds an xref backend for JavaScript files.
Instead of using a tag system, it relies on `ag` to query the codebase of a
project. This might sound crazy at first, but it turns out that `ag` is so fast
that jumping using `xref-js2` is most of the time instantaneous, even on fairly
large JavaScript codebases (it has been tested on 50k lines of JS code).Because line by line regexp search has its limitations, `xref-js2` does a second
pass on result candidates and eliminates possible false positives using
`js2-mode`'s AST, thus giving very accurate results.## Requirements
- Emacs 25.1
- `ag` (the [silver searcher](http://geoff.greer.fm/ag/))
- or `rg` ([ripgrep](https://github.com/BurntSushi/ripgrep))
- js2-mode## Installation
If you use `js2-mode`, `M-.` will be bound by `js2`, you might want to unbind it:
```elisp
(define-key js2-mode-map (kbd "M-.") nil)
```Then you need to add the xref backend:
```elisp
(add-hook 'js2-mode-hook (lambda ()
(add-hook 'xref-backend-functions #'xref-js2-xref-backend nil t)))
```## Customisations
By default, `xref-js2` will use `ag` for search operations, to switch to using `rg` put the following into your config file and ensure the ripgrep executeable is visible from your **PATH** environment variable:```elisp
(setq xref-js2-search-program 'rg)
```If you have issues with `xref-js2` using `rg` not searching certain files, ensure the extension of those files is included in `xref-js2-js-extensions`.
You can further customize the execution of `ag` or `rg` by `xref-js2` by changing `xref-js2-ag-arguments` & `xref-js2-rg-arguments` respectively. Though take care when doing so, many of these are used to produce an output which `xref-js2` can understand.
## Keybindings
`xref-js2` uses the `xref`, so the same keybindings and UI as other xref backends is used:
- `M-.` Jump to definition
- `M-?` Jump to references
- `M-,` Pop back to where `M-.` was last invoked## Demo
### Jumping to definitions and back
![jump-to-definition.gif](screencasts/jump-to-definition.gif)### Finding references
![jump-to-references.gif](screencasts/jump-to-references.gif)