Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs
This commit is contained in:
commit
41ec1d7960
11 changed files with 100 additions and 34 deletions
|
@ -36,6 +36,7 @@ cat > $1 <<EOF
|
|||
#define EXPORT __attribute__ ((visibility ("default")))
|
||||
#endif /* HAVE_ANDROID */
|
||||
|
||||
extern int emacs_shortlisp_counter;
|
||||
#ifdef EXPORT
|
||||
EXPORT
|
||||
#endif /* EXPORT */
|
||||
|
|
5
etc/NEWS
5
etc/NEWS
|
@ -1708,6 +1708,11 @@ options of GNU 'ls'.
|
|||
If non-nil, moving point forward or backward between widgets by typing
|
||||
'TAB' or 'S-TAB' skips over inactive widgets. The default value is nil.
|
||||
|
||||
** Ruby mode
|
||||
New user option 'ruby-rubocop-use-bundler'. By default it retains the
|
||||
previous behavior: read the contens of Gemfile and act accordingly. But
|
||||
you can also set it to t or nil to skip the check.
|
||||
|
||||
** Miscellaneous
|
||||
|
||||
---
|
||||
|
|
|
@ -347,7 +347,8 @@ to find the list of ignores for each directory."
|
|||
(defun project--files-in-directory (dir ignores &optional files)
|
||||
(require 'find-dired)
|
||||
(require 'xref)
|
||||
(let* ((default-directory dir)
|
||||
(let* ((dir (file-name-as-directory dir))
|
||||
(default-directory dir)
|
||||
;; Make sure ~/ etc. in local directory name is
|
||||
;; expanded and not left for the shell command
|
||||
;; to interpret.
|
||||
|
@ -989,8 +990,9 @@ requires quoting, e.g. `\\[quoted-insert]<space>'."
|
|||
(files
|
||||
(if (not current-prefix-arg)
|
||||
(project-files pr)
|
||||
(let ((dir (read-directory-name "Base directory: "
|
||||
caller-dir nil t)))
|
||||
(let* ((dir (read-directory-name "Base directory: "
|
||||
caller-dir nil t)))
|
||||
(setq default-directory dir)
|
||||
(project--files-in-directory dir
|
||||
nil
|
||||
(grep-read-files regexp))))))
|
||||
|
|
|
@ -2553,6 +2553,16 @@ If there is no Rubocop config file, Rubocop will be passed a flag
|
|||
:type 'string
|
||||
:safe 'stringp)
|
||||
|
||||
(defcustom ruby-rubocop-use-bundler 'check
|
||||
"Non-nil with allow `ruby-flymake-rubocop' to use `bundle exec'.
|
||||
When the value is `check', it will first see whether Gemfile exists in
|
||||
the same directory as the configuration file, and whether it mentions
|
||||
the gem \"rubocop\". When t, it's used unconditionally. "
|
||||
:type '(choice (const :tag "Always" t)
|
||||
(const :tag "No" nil)
|
||||
(const :tag "If rubocop is in Gemfile" check))
|
||||
:safe 'booleanp)
|
||||
|
||||
(defun ruby-flymake-rubocop (report-fn &rest _args)
|
||||
"RuboCop backend for Flymake."
|
||||
(unless (executable-find "rubocop")
|
||||
|
@ -2614,11 +2624,17 @@ If there is no Rubocop config file, Rubocop will be passed a flag
|
|||
finally (funcall report-fn diags)))))))
|
||||
|
||||
(defun ruby-flymake-rubocop--use-bundler-p (dir)
|
||||
(let ((file (expand-file-name "Gemfile" dir)))
|
||||
(and (file-exists-p file)
|
||||
(with-temp-buffer
|
||||
(insert-file-contents file)
|
||||
(re-search-forward "^ *gem ['\"]rubocop['\"]" nil t)))))
|
||||
(cond
|
||||
((eq t ruby-rubocop-use-bundler)
|
||||
t)
|
||||
((null ruby-rubocop-use-bundler)
|
||||
nil)
|
||||
(t
|
||||
(let ((file (expand-file-name "Gemfile" dir)))
|
||||
(and (file-exists-p file)
|
||||
(with-temp-buffer
|
||||
(insert-file-contents file)
|
||||
(re-search-forward "^ *gem ['\"]rubocop['\"]" nil t)))))))
|
||||
|
||||
(defun ruby-flymake-auto (report-fn &rest args)
|
||||
(apply
|
||||
|
|
|
@ -1048,11 +1048,15 @@ beginning of the line."
|
|||
(defun xref--add-log-current-defun ()
|
||||
"Return the string used to group a set of locations.
|
||||
This function is used as a value for `add-log-current-defun-function'."
|
||||
(xref--group-name-for-display
|
||||
(if-let (item (xref--item-at-point))
|
||||
(xref-location-group (xref-match-item-location item))
|
||||
(xref--imenu-extract-index-name))
|
||||
(xref--project-root (project-current))))
|
||||
(let ((project-root (xref--project-root (project-current))))
|
||||
(xref--group-name-for-display
|
||||
(if-let (item (xref--item-at-point))
|
||||
(xref-location-group (xref-match-item-location item))
|
||||
(xref--imenu-extract-index-name))
|
||||
project-root
|
||||
(and
|
||||
(string-prefix-p project-root default-directory)
|
||||
(substring default-directory (length project-root))))))
|
||||
|
||||
(defun xref--next-error-function (n reset?)
|
||||
(when reset?
|
||||
|
@ -1184,12 +1188,15 @@ GROUP is a string for decoration purposes and XREF is an
|
|||
(xref--apply-truncation)))
|
||||
(run-hooks 'xref-after-update-hook))
|
||||
|
||||
(defun xref--group-name-for-display (group project-root)
|
||||
(defun xref--group-name-for-display (group project-root dd-suffix)
|
||||
"Return GROUP formatted in the preferred style.
|
||||
|
||||
The style is determined by the value of `xref-file-name-display'.
|
||||
If GROUP looks like a file name, its value is formatted according
|
||||
to that style. Otherwise it is returned unchanged."
|
||||
to that style. Otherwise it is returned unchanged.
|
||||
|
||||
PROJECT-ROOT is the root of the current project, if any. DD-SUFFIX is
|
||||
the relative name of `default-directory' relative to the project root."
|
||||
;; XXX: The way we verify that it's indeed a file name and not some
|
||||
;; other kind of string, e.g. Java package name or TITLE from
|
||||
;; `tags-apropos-additional-actions', is pretty lax. But we don't
|
||||
|
@ -1199,16 +1206,19 @@ to that style. Otherwise it is returned unchanged."
|
|||
;; values themselves (e.g. by piping through some public function),
|
||||
;; or adding a new accessor to locations, like GROUP-TYPE.
|
||||
(cl-ecase xref-file-name-display
|
||||
(abs group)
|
||||
(abs (if (file-name-absolute-p group) group (expand-file-name group)))
|
||||
(nondirectory
|
||||
(if (file-name-absolute-p group)
|
||||
(file-name-nondirectory group)
|
||||
group))
|
||||
(file-name-nondirectory group))
|
||||
(project-relative
|
||||
(if (and project-root
|
||||
(string-prefix-p project-root group))
|
||||
(substring group (length project-root))
|
||||
group))))
|
||||
(cond
|
||||
((not (file-name-absolute-p group))
|
||||
(concat dd-suffix group))
|
||||
((and project-root
|
||||
(string-prefix-p project-root group))
|
||||
(substring group (length project-root)))
|
||||
;; Default to absolute when there's not project around.
|
||||
(t
|
||||
(expand-file-name group))))))
|
||||
|
||||
(defun xref--analyze (xrefs)
|
||||
"Find common groups in XREFS and format group names.
|
||||
|
@ -1221,10 +1231,13 @@ Return an alist of the form ((GROUP . (XREF ...)) ...)."
|
|||
(eq xref-file-name-display 'project-relative)
|
||||
(project-current)))
|
||||
(project-root (and project
|
||||
(expand-file-name (xref--project-root project)))))
|
||||
(expand-file-name (xref--project-root project))))
|
||||
(dd-suffix (and project-root
|
||||
(string-prefix-p project-root default-directory)
|
||||
(substring default-directory (length project-root)))))
|
||||
(mapcar
|
||||
(lambda (pair)
|
||||
(cons (xref--group-name-for-display (car pair) project-root)
|
||||
(cons (xref--group-name-for-display (car pair) project-root dd-suffix)
|
||||
(cdr pair)))
|
||||
alist)))
|
||||
|
||||
|
|
|
@ -153,7 +153,7 @@ char *android_cache_dir;
|
|||
|
||||
/* The list of archive files within which the Java virtual macine
|
||||
looks for class files. */
|
||||
char *android_class_path;
|
||||
static char *android_class_path;
|
||||
|
||||
/* The display's pixel densities. */
|
||||
double android_pixel_density_x, android_pixel_density_y;
|
||||
|
|
|
@ -136,26 +136,26 @@ struct androidfont_entity
|
|||
/* Method and class identifiers associated with the EmacsFontDriver
|
||||
class. */
|
||||
|
||||
struct android_emacs_font_driver font_driver_class;
|
||||
static struct android_emacs_font_driver font_driver_class;
|
||||
|
||||
/* Field and class identifiers associated with the
|
||||
EmacsFontDriver$FontSpec class. */
|
||||
|
||||
struct android_emacs_font_spec font_spec_class;
|
||||
static struct android_emacs_font_spec font_spec_class;
|
||||
|
||||
/* Method and class identifiers associated with the Integer class. */
|
||||
|
||||
struct android_integer integer_class;
|
||||
static struct android_integer integer_class;
|
||||
|
||||
/* Field and class identifiers associated with the
|
||||
EmacsFontDriver$FontMetrics class. */
|
||||
|
||||
struct android_emacs_font_metrics font_metrics_class;
|
||||
static struct android_emacs_font_metrics font_metrics_class;
|
||||
|
||||
/* Field and class identifiers associated with the
|
||||
EmacsFontDriver$FontObject class. */
|
||||
|
||||
struct android_emacs_font_object font_object_class;
|
||||
static struct android_emacs_font_object font_object_class;
|
||||
|
||||
/* The font cache. */
|
||||
|
||||
|
|
|
@ -6479,8 +6479,6 @@ static struct textconv_interface text_conversion_interface =
|
|||
|
||||
|
||||
|
||||
extern frame_parm_handler android_frame_parm_handlers[];
|
||||
|
||||
#endif /* !ANDROID_STUBIFY */
|
||||
|
||||
static struct redisplay_interface android_redisplay_interface =
|
||||
|
|
|
@ -392,6 +392,7 @@ extern struct android_display_info *x_display_list;
|
|||
|
||||
/* From androidfns.c. */
|
||||
|
||||
extern frame_parm_handler android_frame_parm_handlers[];
|
||||
extern void android_free_gcs (struct frame *);
|
||||
extern void android_default_font_parameter (struct frame *, Lisp_Object);
|
||||
extern void android_set_preeditarea (struct window *, int, int);
|
||||
|
|
|
@ -94,10 +94,11 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
|
|||
# define PATH_DATA "/assets/etc/"
|
||||
# define PATH_DOC "/assets/etc/"
|
||||
# define PATH_INFO "/assets/info/"
|
||||
# define PATH_GAME ""
|
||||
# define PATH_GAME (android_game_path)
|
||||
# define PATH_BITMAPS "/assets/bitmaps/"
|
||||
|
||||
extern char *android_site_load_path;
|
||||
extern char *android_lib_dir;
|
||||
extern char *android_game_path;
|
||||
|
||||
#endif
|
||||
|
|
|
@ -188,4 +188,33 @@ When `project-ignores' includes a name matching project dir."
|
|||
(should (equal (sort (mapcar #'xref-item-summary matches) #'string<)
|
||||
'("((nil . ((project-vc-ignores . (\"etc\")))))" "etc"))))))
|
||||
|
||||
(ert-deftest project-find-regexp-with-prefix ()
|
||||
"Check the happy path."
|
||||
(skip-unless (executable-find find-program))
|
||||
(skip-unless (executable-find "xargs"))
|
||||
(skip-unless (executable-find "grep"))
|
||||
(let* ((directory (ert-resource-directory))
|
||||
(project-find-functions nil)
|
||||
(project-list-file (expand-file-name "emacs-projects" temporary-file-directory))
|
||||
(project (cons 'transient (expand-file-name "../elisp-mode-resources/" directory))))
|
||||
(add-hook 'project-find-functions (lambda (_dir) project))
|
||||
(should (eq (project-current) project))
|
||||
(let* ((matches nil)
|
||||
(xref-search-program 'grep)
|
||||
(xref-show-xrefs-function
|
||||
(lambda (fetcher _display)
|
||||
(setq matches (funcall fetcher))))
|
||||
(current-prefix-arg t))
|
||||
(cl-letf (((symbol-function 'read-directory-name)
|
||||
(lambda (_prompt _default _dirname _mm) directory))
|
||||
((symbol-function 'grep-read-files) (lambda (_re) "*")))
|
||||
(project-find-regexp "etc"))
|
||||
(should (equal (mapcar (lambda (item)
|
||||
(file-name-base
|
||||
(xref-location-group (xref-item-location item))))
|
||||
matches)
|
||||
'(".dir-locals" "etc")))
|
||||
(should (equal (sort (mapcar #'xref-item-summary matches) #'string<)
|
||||
'("((nil . ((project-vc-ignores . (\"etc\")))))" "etc"))))))
|
||||
|
||||
;;; project-tests.el ends here
|
||||
|
|
Loading…
Add table
Reference in a new issue