Commit graph

5472 commits

Author SHA1 Message Date
Noam Postavsky
522e3c1585 Operate on frame list instead of printed backtrace
* lisp/emacs-lisp/debug.el (debugger-insert-backtrace): New function,
prints the given backtrace frames.
(debugger-setup-buffer): Use it instead of editing the backtrace
buffer text.
2017-06-29 19:29:10 -04:00
Paul Eggert
4314713764 Adjust lm-verify to accept current notices
Problem reported by Mike Kupfer in:
http://lists.gnu.org/archive/html/emacs-devel/2017-06/msg00512.html
* lisp/emacs-lisp/lisp-mnt.el (lm-crack-copyright):
Do not require later lines in a copyright notice to have more
indentation than earlier lines.
2017-06-24 17:57:56 -07:00
Noam Postavsky
c75eb1030f Don't change byte-compile-delete-errors at runtime (Bug#27340)
* lisp/emacs-lisp/eieio-core.el: Confine `cl-declaim' calls to compile
time.
2017-06-24 10:12:53 -04:00
Glenn Morris
65b323e14e Don't put deleted packages in the trash (bug#14967)
* lisp/emacs-lisp/package.el (package-delete):
Don't pay attention to delete-by-moving-to-trash.

; * etc/NEWS: Mention this.
2017-06-19 14:39:25 -04:00
Noam Postavsky
cc8aa484cd Fix wrong indentation after string literal (Bug#27306)
* lisp/emacs-lisp/lisp-mode.el (lisp-indent-state)
(lisp-indent-calc-next): Remove `depth' field, use (car ppss) instead.
* test/lisp/emacs-lisp/lisp-mode-tests.el
(lisp-indent-region-after-string-literal): New test.
2017-06-13 07:19:12 -04:00
Noam Postavsky
9b0f52a86e Buttonize #<bytecode> part of printed functions (Bug#25226)
* lisp/emacs-lisp/cl-print.el: Autoload `disassemble-1'.
(cl-print-compiled-button): New variable.
(help-byte-code): New button type, calls `disassemble' in its action.
(cl-print-object): Use it if `cl-print-compiled-button' is
non-nil.
2017-06-12 22:52:37 -04:00
Noam Postavsky
0648edf3e0 Split variable macro env from function env
* lisp/emacs-lisp/cl-macs.el (cl--sm-macroexpand): Remove.
(cl-symbol-macrolet): Instead of adding each binding directly into the
main environment with a special key format, put all symbol macro
bindings into a single entry in the main environment under
`:cl-symbol-macros'.
(cl--sm-macroexpand): Look up symbol bindings in the
`:cl-symbol-macros' entry of the environment.
2017-06-07 20:03:31 -04:00
Dmitry Gutov
3632633cab Enable ElDoc messages after the newline command
* lisp/emacs-lisp/eldoc.el:
Add "newline" to the eldoc-add-command-completions call (bug#27228).
2017-06-06 01:23:41 +03:00
Andy Moreton
f858c585a3 Fix check for package-unsigned-archives during retrieval
* lisp/emacs-lisp/package.el (package--download-one-archive):
Fix check for package-unsigned-archives.
2017-06-06 01:04:17 +03:00
Philipp Stephani
0dd1bbb0bb Implement field numbers in format strings
A field number explicitly specifies the argument to be formatted.
This is especially important for potential localization work, since
grammars of various languages dictate different word orders.

* src/editfns.c (Fformat): Update documentation.
(styled_format): Implement field numbers.

* doc/lispref/strings.texi (Formatting Strings): Document field numbers.

* lisp/emacs-lisp/bytecomp.el (byte-compile-format-warn): Adapt.

* test/src/editfns-tests.el (format-with-field): New unit test.
2017-06-02 00:22:13 +02:00
Noam Postavsky
a415c8bccb cl-print: handle circular objects when `print-circle' is nil (Bug#27117)
* lisp/emacs-lisp/cl-print.el (cl-print--currently-printing): New variable.
(cl-print-object): When `print-circle' is nil, bind it to a list of
objects that are currently printing to avoid printing the same object
endlessly.
* test/lisp/emacs-lisp/cl-print-tests.el (cl-print-circle): New test.
2017-05-31 07:45:43 -04:00
Dmitry Gutov
e3b51b080f Extract eldoc--supported-p
* lisp/emacs-lisp/eldoc.el (eldoc--supported-p): New function.
(turn-on-eldoc-mode, eldoc-mode): Use it.
(http://lists.gnu.org/archive/html/emacs-devel/2017-05/msg00865.html)
2017-05-31 01:29:43 +03:00
Dmitry Gutov
2349f1df1b Turn global-eldoc-mode into a globalized minor mode
* lisp/emacs-lisp/eldoc.el (global-eldoc-mode):
Turn into globalized mode (bug#19853).
(turn-on-eldoc-mode): Make it into a wrapper instead of alias.
(eldoc-mode): Only show the message when called interactively.
2017-05-30 02:55:28 +03:00
Svante Carl v. Erichsen
527a7cc942 Fix cl-indent for `loop' with :keywords (Bug#15543)
* lisp/emacs-lisp/cl-indent.el (lisp-extended-loop-p): Allow for
":keywords".

Copyright-paperwork-exempt: yes
2017-05-27 16:08:35 -04:00
Philipp Stephani
ebe0bdae9d Don't attempt to recover from undefined behavior in some cases
These functions can only be run in batch mode and exit Emacs on
return, so nothing can be recovered.  Disable unsafe recover
mechanisms so that we get real failures and good stack traces on
fatal signals.

* lisp/emacs-lisp/bytecomp.el (batch-byte-compile)
(batch-byte-recompile-directory):
* lisp/emacs-lisp/ert.el (ert-run-tests-batch-and-exit)
(ert-summarize-tests-batch-and-exit): Don't attempt to recover
from undefined behavior.
2017-05-27 15:30:19 +02:00
Noam Postavsky
6f63c7cb6a * lisp/emacs-lisp/eieio.el (defclass): Fix quote in warning message. 2017-05-26 23:31:31 -04:00
Wilfred Hughes
dc79aa10f1 Mark keywordp as a safe, error-free function
* lisp/emacs-lisp/byte-opt.el: Add keywordp to
  side-effect-and-error-free-fns.
2017-05-26 22:45:58 +01:00
Noam Postavsky
ef9f5c672a Protect *Backtrace* from being killed (Bug#26650)
* lisp/emacs-lisp/debug.el (debugger-mode): Call `top-level' in
`kill-buffer-hook'.
2017-05-23 20:11:23 -04:00
Noam Postavsky
d158629cb6 Give a name to lisp-mode's adaptive-fill-function (Bug#22730)
* lisp/emacs-lisp/lisp-mode.el (lisp-adaptive-fill): New function.
(lisp-mode-variables): Use it.
2017-05-23 20:01:41 -04:00
Stefan Monnier
9b0662d369 * lisp/emacs-lisp/cl-indent.el: Don't require CL. Use lexical-binding.
(common-lisp-indent-function-1): Remove unused var `last-point`.
(lisp-indent-error-function): Move defvar before first use.
2017-05-23 09:23:54 -04:00
Tino Calancha
08212929ba * lisp/emacs-lisp/package.el (package-delete): Delete readme file as well. 2017-05-21 22:20:19 +09:00
Andreas Politz
f151eb0141 Don't save unrelated buffers before recompiling directory (Bug#25964)
* lisp/emacs-lisp/bytecomp.el (byte-recompile-directory): Only save
buffers visiting lisp files under the directory being compiled.
2017-05-20 18:28:23 -04:00
Charles A. Roelli
021430f4b4 New commands: find-library-other-window, find-library-other-frame
* lisp/emacs-lisp/find-func.el (find-library-other-window)
(find-library-other-frame): New commands to complement the
existing 'find-library' command.  (Bug#26712)
(read-library-name): New function to read a library name.
* etc/NEWS: Mention 'find-library-other-window' and
'find-library-other-frame'.
2017-05-20 14:41:53 +03:00
Stefan Monnier
b372e565e4 * lisp/emacs-lisp/package.el: Quote `package-desc' in docstrings 2017-05-19 09:42:57 -04:00
Jean-Christophe Helary
c189986b24 Add an optional arguments to string-trim
* lisp/emacs-lisp/subr-x.el (string-trim-left, string-trim-right)
(string-trim): Add optional args that serve as defaults per the
original behavior.  (Bug#26908)
2017-05-19 14:27:10 +03:00
Glenn Morris
df4e105910 autoload-rubric no longer provides a feature by default
* lisp/emacs-lisp/autoload.el (autoload-rubric):
Stop providing a feature unless explicitly requested.
(autoload-find-generated-file): Update autoload-rubric call.
2017-05-17 12:43:23 -04:00
Noam Postavsky
750f0e2e79 Make sure indent-sexp stops at end of sexp (Bug#26878)
* lisp/emacs-lisp/lisp-mode.el (indent-sexp): Check endpos before
indenting.
* test/lisp/emacs-lisp/lisp-mode-tests.el (indent-sexp-stop): New
test.
2017-05-15 22:58:17 -04:00
Gemini Lasswell
e6f64df9c2 Make edebug-step-in work on generic methods (Bug#22294)
* lisp/emacs-lisp/edebug.el (edebug-match-cl-generic-method-args):
New function to implement the edebug-form-spec property of
the symbol cl-generic-method-args.
(edebug-instrument-function): If the function is a generic
function, find and instrument all of its methods. Return a list
instead of a single symbol.
(edebug-instrument-callee): Now returns a list. Update docstring.
(edebug-step-in): Handle the list returned by edebug-instrument-callee.
* lisp/emacs-lisp/cl-generic.el (cl-defmethod): Use name and
cl-generic-method-args in its Edebug spec.
* lisp/emacs-lisp/eieio-compat.el (defmethod): Use name and
cl-generic-method-args in its Edebug spec.
* lisp/subr.el (method-files): New function.
* test/lisp/subr-tests.el (subr-tests--method-files--finds-methods)
(subr-tests--method-files--nonexistent-methods): New tests.
2017-05-14 23:32:27 +03:00
Marcin Borkowski
9a5e864de7 Merge branch 'fix/bug-21072' 2017-05-14 07:09:54 +02:00
Mark Oteiza
4e08875567 ; Revert "Adjust the edebug spec of if-let*"
This reverts commit fd4b83ca7c.
2017-05-13 21:40:23 -04:00
Philipp
a1d4615921 Make `old-style-backquotes' variable internal
* src/lread.c (load_warn_old_style_backquotes, Fload, read1)
(syms_of_lread): Rename `old-style-backquotes' to
`lread--old-style-backquotes', and clarify that it's for internal
use only.
* lisp/emacs-lisp/bytecomp.el (byte-compile-from-buffer): Rename
variable.
* test/src/lread-tests.el (lread-tests--old-style-backquotes): Add
unit test.
* emacs-lisp/bytecomp-tests.el
(bytecomp-tests--old-style-backquotes): Add unit test.
2017-05-13 12:32:29 +02:00
Philipp Stephani
16004397f4 Improve unescaped character literal warnings
* src/lread.c (load_warn_unescaped_character_literals)
(syms_of_lread):
lisp/emacs-lisp/bytecomp.el (byte-compile-from-buffer): Improve
formatting of unescaped character literal warnings.

* test/src/lread-tests.el (lread-tests--unescaped-char-literals):
test/lisp/emacs-lisp/bytecomp-tests.el
(bytecomp-tests--unescaped-char-literals): Adapt unit tests.
2017-05-13 12:28:48 +02:00
Noam Postavsky
aa779b0f15 Modify `beginning-of-defun-comments'
* lisp/emacs-lisp/lisp.el (beginning-of-defun-comments): Try not to stop
in the middle of a multiline comment.
2017-05-12 11:40:57 +02:00
Noam Postavsky
0397f85c6f * lisp/emacs-lisp/lisp.el (mark-defun): Simplify moving the point. 2017-05-12 11:36:45 +02:00
Marcin Borkowski
22fc91704b Fix Bug#21072 and rework `mark-defun'
* test/lisp/progmodes/elisp-mode-tests.el (mark-defun-test-buffer):
  New variable
(mark-defun-no-arg-region-inactive)
(mark-defun-no-arg-region-active)
(mark-defun-arg-region-active)
(mark-defun-pos-arg-region-inactive)
(mark-defun-neg-arg-region-inactive, mark-defun-bob): Add tests for
the new `mark-defun'.

* lisp/emacs-lisp/lisp.el (beginning-of-defun--in-emptyish-line-p):
  New function.
(beginning-of-defun-comments): New function.
(mark-defun): Fix bug#21072, also rewrite large parts of `mark-defun'
to accept a numerical prefix argument.
2017-05-12 11:36:27 +02:00
Noam Postavsky
e7b6751c0a Fix lisp-indent-region and indent-sexp (Bug#26619)
The new lisp-indent-region introduced in 2017-04-22 "Add new
`lisp-indent-region' that doesn't reparse the code." is broken because
it doesn't save the calculated indent amounts for already seen sexp
depths.  Fix this by unifying the indent-sexp and lisp-indent-region
code.  Furthermore, only preserve position 2 of the running parse
when the depth doesn't change.
* lisp/emacs-lisp/lisp-mode.el (lisp-ppss): Use an OLDSTATE that
corresponds with the start point when calling parse-partial-sexp.
(lisp-indent-state): New struct.
(lisp-indent-calc-next): New function, extracted from indent-sexp.
(indent-sexp, lisp-indent-region): Use it.
(lisp-indent-line): Take indentation, instead of parse state.
* test/lisp/emacs-lisp/lisp-mode-tests.el
(lisp-mode-tests--correctly-indented-sexp): New constant.
(lisp-indent-region, lisp-indent-region-defun-with-docstring):
(lisp-indent-region-open-paren, lisp-indent-region-in-sexp): New
tests.
2017-05-09 20:50:19 -04:00
Glenn Morris
d6d5020c25 Don't duplicate autoload code in package.el
* lisp/emacs-lisp/autoload.el (autoload-rubric): Add a package option.
* lisp/emacs-lisp/package.el (autoload-rubric): Declare.
(package-autoload-ensure-default-file): Use autoload-rubric.
2017-05-09 13:03:04 -04:00
Glenn Morris
233cfb0ea9 Remove obsolete method of changing byte-compile-dest-file
* lisp/emacs-lisp/bytecomp.el (byte-compile-dest-file):
Define unconditionally.
2017-05-06 18:06:17 -07:00
Glenn Morris
7f3d63908c Write autoloads file atomically
* lisp/emacs-lisp/autoload.el (autoload--save-buffer):
New function, to save buffer atomically.
(autoload-save-buffers, update-directory-autoloads):
Use autoload--save-buffer.
* lisp/Makefile.in ($(lisp)/loaddefs.el):
No longer write to a temp file by hand.
2017-05-06 17:58:20 -07:00
Glenn Morris
03d941982f Write autoloads file once only
* lisp/emacs-lisp/autoload.el (autoload-find-generated-file):
Simplify.  Don't bother about ensuring the output file exists.
(autoload-generated-file): Add doc.
(autoload-ensure-writable): Update doc.
(autoload-ensure-file-writeable): Handle non-existing file.
(autoload-ensure-default-file): Remove function.
2017-05-06 17:07:10 -07:00
Glenn Morris
4af24317b4 Fontify the doc-string in some CL forms as such
* lisp/emacs-lisp/lisp-mode.el (defconstant, defparameter):
Add the doc-string-elt property.  (Bug#26778)
2017-05-04 23:15:53 -07:00
Glenn Morris
b8732c652a * lisp/emacs-lisp/cl-lib.el (cl-mapcar): Remove recent autoload cookie. 2017-05-04 22:26:17 -07:00
Dmitry Gutov
ee0dd3031c cl-defmethod: Make the edebug spec more technically correct
* lisp/emacs-lisp/cl-generic.el (cl-defmethod): Denote the
edebug spec part for qualifiers as [&rest atom], per
http://lists.gnu.org/archive/html/emacs-devel/2017-05/msg00053.html.
2017-05-05 03:43:44 +03:00
Tino Calancha
fed13bd8c8 Inherit incompatible/obsolete package faces from error
Don't use the same face for installed packages as for incompatible
or obsolete ones.
* lisp/emacs-lisp/package.el (package-status-incompat): Inherit from error.
2017-05-04 19:47:45 +09:00
Nicolas Petton
5c4dbbb745
* lisp/emacs-lisp/seq.el: Bump seq version. 2017-05-04 11:34:41 +02:00
Damien Cassou
88f96e69cf Add seq-set-equal-p to test for set equality
* lisp/emacs-lisp/seq.el (seq-set-equal-p): Add function to compare
  two lists as if they were sets.

* test/lisp/emacs-lisp/seq-tests.el (test-seq-set-equal-p): Add test
  for seq-set-equal-p.
2017-05-04 11:32:58 +02:00
Gemini Lasswell
d895f6c12f Fix Edebug specs for 'cl-defmethod' and 'defmethod'
* lisp/emacs-lisp/cl-generic.el (cl-defmethod): Change Edebug spec
to make Edebug generate a new symbol for each method (Bug#24753) and
to support a string following :extra (Bug#23995).
* lisp/emacs-lisp/eieio-compat.el (defmethod): Change Edebug spec to
make Edebug generate a new symbol for each method (Bug#24753).
2017-05-02 10:19:12 +03:00
Philipp Stephani
c2bbdc3316 Warn about missing backslashes during load
* src/lread.c (load_warn_unescaped_character_literals, Fload, read1)
(syms_of_lread): Warn if unescaped character literals are
found (Bug#20152).
* lisp/emacs-lisp/bytecomp.el (byte-compile-from-buffer): Check for
unescaped character literals during byte compilation.
* test/src/lread-tests.el (lread-tests--unescaped-char-literals): New
unit test.
(lread-tests--with-temp-file, lread-tests--last-message): Helper
functions for unit test.
* test/lisp/emacs-lisp/bytecomp-tests.el
(bytecomp-tests--unescaped-char-literals): New unit test.
* test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--with-temp-file):
Helper macro for unit test.
2017-05-01 20:39:10 +02:00
Noam Postavsky
b20d05c6d7 Don't require bytecomp for running ert tests
"Fix ert-tests when running compiled" 2016-12-06 accidentally
introduced a dependency on `bytecomp' into `ert'.  As mentioned in
"Avoid ert test failures" 2017-04-18, the accidental dependency of ert
on bytecomp was masked by loading other libraries until recently.

* lisp/emacs-lisp/ert.el (ert--expand-should-1): Only use
`byte-compile-macro-environment' if it's bound.
* test/src/eval-tests.el: Add defvar for dynamic variable
`byte-compile-debug'.
2017-04-22 23:17:59 -04:00
Noam Postavsky
4713dd425b Add new `lisp-indent-region' that doesn't reparse the code.
Both `lisp-indent-region' and `lisp-indent-line' now use `syntax-ppss'
to get initial state, so they will no longer indent string literal
contents.

* lisp/emacs-lisp/lisp-mode.el (lisp-ppss): New function, like
`syntax-ppss', but with a more dependable item 2.
(lisp-indent-region): New function, like `indent-region-line-by-line'
but additionally keep a running parse state to avoid reparsing the
code repeatedly.  Use `lisp-ppss' to get initial state.
(lisp-indent-line): Take optional PARSE-STATE argument, pass it to
`calculate-lisp-indent', use `lisp-ppss' if not given.
(lisp-mode-variables): Set `indent-region-function' to
`lisp-indent-region'.
2017-04-22 14:09:58 -04:00