Commit graph

6742 commits

Author SHA1 Message Date
Lars Ingebrigtsen
a4ececf004 Move string-trim functions to subr.el
* doc/lispref/strings.texi (Creating Strings): Document them.

* lisp/faces.el: Don't require subr-x, because that leads to build
errors.

* lisp/subr.el (string-trim, string-trim-right)
(string-trim-left): Move here from subr-x.el.

* lisp/emacs-lisp/shortdoc.el (string): Adjust.
2021-03-24 09:22:44 +01:00
Toby Cubitt
e33c2bfbf3 Fix cl-progv binding order
* lisp/emacs-lisp/cl-macs.el (cl-progv): Bind variables in the
correct order (bug#47272).
2021-03-20 10:01:19 +01:00
Stefan Monnier
bf210251ea * lisp/emacs-lisp/bytecomp.el: Remember location of unresolved calls
I've gotten tired of seeing the "function foo not known to be defined"
warning without any line number information.  So this patch adds as
line number the position of the first use of that function in the file
(well, approximately, as usual).

(byte-compile-unresolved-functions): Add POSITIONs in the alist.
(byte-compile-function-warn): Store the current position in
`byte-compile-unresolved-functions`.
(byte-compile-arglist-warn): Adjust accordingly.
(byte-compile-print-syms): Delete unused function.
(byte-compile-warn-about-unresolved-functions): Use the stored position
to give more precise warnings.
2021-03-19 18:33:46 -04:00
Stefan Monnier
937b6c18bd * lisp/emacs-lisp/pcase.el (pcase-compile-patterns): New function (bug#47261)
Extracted from `pcase--expand`.
(pcase--expand): Use it.
2021-03-19 17:42:22 -04:00
Stefan Monnier
b815445cea Fix copyright lines mistakenly treated as outline headers
* lisp/emacs-lisp/generator.el:
* test/lisp/cedet/semantic-utest.el:
* test/lisp/cedet/semantic/format-tests.el:
* test/lisp/cedet/semantic/fw-tests.el:
* test/lisp/cedet/semantic/bovine/gcc-tests.el:
* test/lisp/cedet/semantic/format-resources/test-fmt.el:
* test/manual/cedet/semantic-tests.el:
* lisp/obsolete/inversion.el: Use only 2 semi-colons before "Copyright".
2021-03-18 23:32:57 -04:00
Stefan Monnier
236aad4f8c * lisp/emacs-lisp/cl-macs.el (cl--self-tco): Optimize the "return nil" case 2021-03-18 17:54:43 -04:00
Mattias Engdegård
52270aa0dc Optimise tail calls in and and or forms in cl-labels functions
* lisp/emacs-lisp/cl-macs.el (cl--self-tco): Handle `and` and `or`.
* test/lisp/emacs-lisp/cl-macs-tests.el (cl-macs--labels):
Add test cases.
2021-03-18 13:35:55 +01:00
Lars Ingebrigtsen
4eb0303197 Compute chart-face-list dynamically
* lisp/emacs-lisp/chart.el (chart-face-list): Allow a function as
the value (bug#47133) so that we can compute the faces dynamically
on different displays.
(chart--face-list): New function.
(chart-draw-data): Use it.
2021-03-18 11:15:50 +01:00
Lars Ingebrigtsen
21e1a126b5 Make memory-report work with buffer-local unbound vars
* lisp/emacs-lisp/memory-report.el (memory-report--buffer-data):
Protect against buffer-local unbound variables (bug#47057).
2021-03-18 08:33:40 +01:00
Stefan Monnier
82c3bd1e4a * lisp/emacs-lisp/benchmark.el (benchmark-call): New function
(benchmark-run, benchmark-run-compiled, benchmark): Use it.
(benchmark--adaptive): New internal function.
2021-03-17 19:04:28 -04:00
Gabriel do Nascimento Ribeiro
2d12df3926 Init archive and add noconfirm to 'package-install-selected-packages'
* lisp/emacs-lisp/package.el (package-install-selected-packages):
Add call to 'package--archives-initialize' and add optional argument
NOCONFIRM to skip user confirmation when installing packages.  (Bug#47124)
2021-03-15 03:09:02 +01:00
Glenn Morris
1feddd35ab Merge from origin/emacs-27
02a5cfce47 (origin/emacs-27) * lisp/mouse.el: Fix mouse-1-clock-follo...
c881e990e3 * lisp/emacs-lisp/gv.el (edebug-after): Don't run the gett...
2021-03-12 08:47:41 -08:00
Mattias Engdegård
a0854f939c ; Fix typos in doc strings 2021-03-12 12:12:14 +01:00
Stefan Monnier
ba6ae500f1 * lisp/emacs-lisp/cconv.el (cconv--analyze-use): Simplify (doh!) 2021-03-11 22:31:39 -05:00
Stefan Monnier
009bc7c9d8 * lisp/emacs-lisp/cconv.el (cconv--analyze-use): Tune down the warning
Don't warn for always-nil bindings if the binding is made explicit.
Fixes bug#47080.
2021-03-11 22:27:41 -05:00
Stefan Monnier
7109307c1a * lisp/emacs-lisp/syntax.el (syntax-propertize-rules): Use macroexp-let2
This also silences the recently introduced compilation warning.
2021-03-11 21:47:10 -05:00
Lars Ingebrigtsen
d0125959d7 Make byte-compiled uses of `define-minor-mode' more compatible
* lisp/emacs-lisp/easy-mmode.el (define-minor-mode): Be more
defensive about accessing minor mode variables.
2021-03-12 00:41:54 +01:00
Stefan Monnier
b21f6193fe * lisp: Remove yet more always-nil variables
* lisp/align.el (align-region):
Remove always-nil variable `group-c`.
* lisp/ido.el (ido-make-prompt): Remove always-nil variable `prefix`.

* lisp/xdg.el (xdg-mime-collect-associations):
Remove always-nil variable `end`.

* lisp/calc/calc-yank.el (calc-edit):
Remove always-nil variable `flag`.

* lisp/calendar/todo-mode.el (todo-edit-item--header):
Remove always-nil variable `dayname`.
(todo-show-categories-table):
Remove always-nil variable `sortkey`.

* lisp/emacs-lisp/checkdoc.el (checkdoc-ispell-docstring-engine):
Remove always-nil variable `err`.

* lisp/emacs-lisp/tcover-ses.el: Remove always-nil variable `pause`.

* lisp/eshell/em-ls.el (eshell-ls-files):
Remove always-nil variable `ignore`.

* lisp/net/ange-ftp.el (ange-ftp-copy-file-internal): Remove always-nil
variable `temp2`.

* lisp/progmodes/cperl-mode.el (cperl-tags-hier-init): Remove
always-nil variables `l1`, `l2`, `l3`.
(cperl-tags-treeify): Remove always-nil variable `l1`.

* lisp/progmodes/ebrowse.el (ebrowse-tags-read-member+class-name):
Remove always-nil variable `class`.

* lisp/textmodes/artist.el (artist-draw-ellipse-with-0-height):
Remove always-nil variable `fill-info`.

* lisp/textmodes/flyspell.el (flyspell-emacs-popup):
Remove always-nil variable `show-affix-info`.

* lisp/textmodes/rst.el (rst-Ado):
Remove always-nil variable `char`.

* lisp/vc/vc.el (vc-diff-build-argument-list-internal):
Remove always-nil variable `rev2-default`.
2021-03-11 13:29:14 -05:00
Stefan Monnier
e13c30132a * lisp/emacs-lisp/cconv.el (cconv--analyze-use): Warn never-initialized vars
(byte-compile-not-lexical-var-p): Remove Emacs<24 compatibility.
2021-03-11 13:01:59 -05:00
Lars Ingebrigtsen
4b47eb32c6 Fix byte-compilation warning in benchmark-run
* lisp/emacs-lisp/benchmark.el (benchmark-run): Avoid a
byte-compilation warning about an empty let body (bug#46819).
2021-03-10 15:52:54 +01:00
Mattias Engdegård
7add330903 Mark string predicates side-effect-free
* lisp/emacs-lisp/byte-opt.el (side-effect-free-fns): Add string>,
string-greaterp, string-empty-p, string-prefix-p, string-suffix-p
and string-blank-p, all recently marked pure.
2021-03-10 14:08:41 +01:00
Stefan Kangas
4cb52200cb Fix duplicate ":" in ert-find-test-other-window prompt
* lisp/emacs-lisp/ert.el (ert-find-test-other-window): Don't insert
duplicate ":" in prompt.
2021-03-10 04:34:53 +01:00
Stefan Kangas
dc2688acb3 Do mode tagging in ert.el 2021-03-10 04:34:32 +01:00
Stefan Monnier
7561c01380 * lisp/emacs-lisp/cconv.el: Don't confuse a string for a docstring
(cconv--convert-funcbody): Check there's something after a docstring.

* test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-string-vs-docstring):
New corresponding test.
2021-03-09 11:04:03 -05:00
Philipp Stephani
f4452bb814 Fix structure of condition object in nested 'ert-fail'.
See the test 'ert-test-fail' for the expected structure.

* lisp/emacs-lisp/ert.el (ert--should-signal-hook): Condition list
should be (SYMBOL . DATA), not (SYMBOL DATA).
* test/lisp/emacs-lisp/ert-tests.el (ert-test-fail-inside-should): Fix
unit test.
2021-03-08 14:30:24 +01:00
Mauro Aranda
a01166562c Make checkdoc--next-docstring use the doc-string-elt property
This follows from a fix for Bug#46918 and a discussion to use
doc-string-elt:
https://lists.gnu.org/archive/html/emacs-devel/2021-03/msg00232.html

* lisp/emacs-lisp/checkdoc.el (checkdoc--next-docstring): Check for a
non-nil doc-string-elt property, instead of hard-coding the
supported symbols.  Use that property to position point at the
doc-string.
2021-03-08 08:12:23 -03:00
Stefan Kangas
0e4a2dca83 Normalize version specifiers for make-obsolete and friends
* lisp/auth-source.el (auth-source-forget-user-or-password)
(auth-source-user-or-password, auth-source-hide-passwords):
* lisp/calendar/icalendar.el (icalendar--datetime-to-noneuropean-date):
* lisp/cedet/semantic/db-el.el (semanticdb-elisp-sym-function-arglist):
* lisp/emacs-lisp/debug.el (debugger-insert-backtrace):
* lisp/obsolete/nnir.el (nnir-swish-e-index-file):
* lisp/obsolete/starttls.el (starttls-any-program-available):
Normalize version specifiers for make-obsolete and friends.
2021-03-08 05:09:27 +01:00
Stefan Monnier
251dea693a * lisp/emacs-lisp/bytecomp.el: Warn about unprefixed vars in boundp
(byte-compile--check-prefixed-var): New fun,
extracted from `byte-compile--declare-var`.
(byte-compile--declare-var): Use it.
(byte-compile-maybe-guarded): Use it as well.
2021-03-07 19:00:47 -05:00
Stefan Monnier
b24c21e82c * lisp/emacs-lisp/bindat.el (bindat-struct): Fix Edebug def 2021-03-06 13:19:46 -05:00
Basil L. Contovounesios
d925121b1e Various map.el improvements
* lisp/emacs-lisp/seq.el (seq-do-indexed): Return nil as per doc.

* lisp/emacs-lisp/map.el: Require Emacs >= 26 due to dependence on
5-arg alist-get.  Bump package to version 3.0.  Fix other
headers.  (Bug#46754)
(map--plist-p): Detect list starting with nil as plist, not alist.
(map-elt, map-filter, map-apply, map--make-pcase-bindings)
(map--make-pcase-patterns): Simplify.
(map-let, map-put, map-nested-elt, mapp): Update docstring for plist
support.
(map-delete): Fix OBOE on arrays.  Split into cl-defmethods.
(map-values, map-values-apply): Specialize for arrays.
(map-pairs, map-keys-apply, map-put!): Improve docstring.
(map-length): Clarify docstring w.r.t. duplicate keys.  Split into
cl-defmethods.  Optimize default implementation.
(map-copy): Use copy-alist on alists.  Split into cl-defmethods.
(map-contains-key): Add plist support.  Clarify docstring
w.r.t. optional argument.  Simplify default implementation.
(map-some, map-every-p, map-merge, map-merge-with, map--into-hash):
Don't use map-apply for side effects.
(map-into): Preserve plist ordering.  Improve docstrings.
(map-insert): Add hash-table and array support.
(map-inplace): Remove unused error symbol.
(map-do): Return nil as per doc.

* etc/NEWS: Announce new user-visible behavior.

* test/lisp/emacs-lisp/map-tests.el: Prefer should-not
over (should (not ...)) in general.
(with-maps-do): Fix docstring.
(with-empty-maps-do): New macro.
(test-map-elt-default, test-mapp, test-map-keys, test-map-values)
(test-map-pairs, test-map-length, test-map-copy, test-map-apply)
(test-map-do, test-map-keys-apply, test-map-values-apply)
(test-map-filter, test-map-remove, test-map-empty-p)
(test-map-contains-key, test-map-some, test-map-every-p):
Use it.

(test-map-plist-p, test-map-put!-new-keys, test-map-insert-empty)
(test-map-insert, test-map-delete-empty, test-map-copy-alist)
(test-map-contains-key-testfn, test-map-into-hash-test)
(test-map-into-empty, test-map-merge, test-map-merge-empty):
New tests.

(test-map-elt): Test array key that is within bounds but not fixnum.
(test-map-put!): Use map--plist-p.  Remove redundant tests.
(test-map-put-alist-new-key): Don't modify list literal.
(test-map-put-testfn-alist, test-map-put-return-value): Silence
obsoletion warnings.
(test-map-delete): Check for OBOE on arrays.
(test-map-delete-return-value): Remove test made redundant by
test-map-delete.
(test-map-nested-elt, test-map-into): Test plists too.
2021-03-06 16:00:52 +00:00
Stefan Kangas
4b5155673d ; Fix typo. 2021-03-06 04:10:45 +01:00
Stefan Monnier
533c659b6c Bindat: new macro-expansion based data layout language
Thorough redesign of the Bindat system, which makes it possible
to define new Bindat type forms, define recursive types, control
the values returned when unpacking, freely mix arbitrary computations
with type definitions, as well as support for arbitrary sized
integers.

This also reverts the recent addition of the `bindat-spec` macro and
the support for 64bit integers in the old Bindat language since that
is now considered obsolete anyway.

* doc/lispref/processes.texi (Bindat Types): Rename from `Bindat Spec`
and rewrite for the new sublanguage.
(Bindat Functions): Adjust to the new terminology.
(Bindat Computed Types): New node.

* lisp/emacs-lisp/bindat.el (bindat--type): New type.
(bindat--unpack-u64, bindat--unpack-u64r): Delete functions.
(bindat--unpack-item, bindat--pack-item, bindat--fixed-length-alist):
Revert addition of support for 64bit integers.
(bindat--unpack-group, bindat--length-group, bindat--pack-group):
Handle the new `bindat--type` values.
(bindat-spec): Revert addition of this macro.
(bindat--unpack-uint, bindat--unpack-uintr, bindat--pack-uint)
(bindat--pack-uintr): New functions.
(bindat-type, bindat-defmacro, bindat--pcase): New macros.
(bindat-type): New Edebug elem.
(bindat--type): New generic function.
(bindat--primitives): New constant.
(bindat--macroenv, bindat--op): New vars.
(bindat--make-docstring, bindat--fun, bindat--makefun, bindat--toplevel):
New functions.

* test/lisp/emacs-lisp/bindat-tests.el: Use `bindat-type`.
(ip): New Bindat type.
(header-bindat-spec, data-bindat-spec, packet-bindat-spec): Adjust to
new `bindat-type` macro.
(bindat-test-unpack): Simplify now that the order of fields is preserved.
(bindat-test--int-websocket-type, bindat-test--LEB128): New consts.
(bindat-test--pack-val, bindat-test--sint, bindat-test--recursive):
New tests.
2021-03-05 19:56:31 -05:00
Mattias Engdegård
1362a9fec4 Make lambda-lifting work again
* lisp/emacs-lisp/cconv.el (cconv--analyze-use): Fix typo.
* test/lisp/emacs-lisp/cconv-tests.el (cconv-convert-lambda-lifted):
Add test case.
2021-03-05 21:41:58 +01:00
Stefan Monnier
03ada27cb8 * lisp/emacs-lisp/bindat.el: Minor refactoring
(bindat--unpack-str, bindat--unpack-strz, bindat--unpack-bits):
New functions, extracted from `bindat--unpack-item`.
(bindat--unpack-item): Use them.
(bindat--align): New function.
(bindat--unpack-group, bindat--length-group, bindat--pack-group): Use it.
(bindat-get-field): Allow integers to index both lists (as returned by
`repeat`) and vectors (as returned by `vec`).
(bindat--pack-str, bindat--pack-bits): New functions, extracted from
`bindat--pack-item`.
(bindat--pack-item): Use them.

* test/lisp/emacs-lisp/bindat-tests.el (struct-bindat): Place the fields
in the order in which they appear in the structs.
2021-03-05 13:31:16 -05:00
Stefan Monnier
c881e990e3 * lisp/emacs-lisp/gv.el (edebug-after): Don't run the getter in the setter
This fixes bug#46573 which was introduced by commit
d79cf638f2.
The new code is a middle ground, which makes sure the instrumentation
point is used (so the coverage checker won't have ghost unreachable
instrumentation points) yet without artificially running the getter
when we only need to run the setter.
2021-03-05 12:39:27 -05:00
Lars Ingebrigtsen
1b30431c0e Improve the documentation of :extra in cl-defmethod
* doc/lispref/functions.texi (Generic Functions): Improve
documentation of :extra (bug#46917).

* lisp/emacs-lisp/cl-generic.el (cl-defmethod): Ditto.
2021-03-05 14:27:08 +01:00
Mauro Aranda
51e78e9146 Fix qualifiers order for loadhist-unload-element in elp.el
* lisp/emacs-lisp/elp.el (loadhist-unload-element): The :extra
qualifier is expected to come before the other qualifiers, so do
that (bug#46917).
2021-03-05 14:18:32 +01:00
Lars Ingebrigtsen
ef61a6b636 Actually fill the correct paragraph in `lisp-fill-paragraph'
* lisp/emacs-lisp/lisp-mode.el (lisp-fill-paragraph): Fix previous
change here by actually filling the correct paragraph (bug#28937).
2021-03-05 14:01:00 +01:00
Pip Cet
77ec25122c Don't ignore lexically-bound variables in a defvar (bug#46912)
* lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker): Walk
the value form of a defvar.
2021-03-05 09:14:59 +00:00
Stefan Monnier
27428d22c8 * lisp/emacs-lisp/cl-generic.el: Make doc-string prop work with qualifiers
(cl--defmethod-doc-pos): New function.
(cl-defmethod): Use it.
2021-03-04 18:20:56 -05:00
Lars Ingebrigtsen
0981712e57 Add a command in package mode for opening home pages directly
* doc/emacs/package.texi (Package Menu): Document it.
* lisp/emacs-lisp/package.el (package-browse-url): New command and
keystroke (bug#46927).
2021-03-04 21:39:49 +01:00
Mauro Aranda
fd9202304c Make checkdoc work with qualified methods
* lisp/emacs-lisp/checkdoc.el (checkdoc--next-docstring): Handle
cl-defmethod in a case of its own.  Check for the presence of
qualifiers, and skip them accordingly until the docstring.

* test/lisp/emacs-lisp/checkdoc-tests.el (checkdoc-cl-defmethod-qualified-ok)
(checkdoc-cl-defmethod-with-extra-qualifier-ok)
(checkdoc-cl-defmethod-with-extra-and-nil-args-ok): Add tests for the fix.
2021-03-04 08:34:58 -03:00
Basil L. Contovounesios
a2ae2d2860 Fix pcase dontcare pattern in cl--sm-macroexpand
For discussion, see the following thread:
https://lists.gnu.org/r/emacs-devel/2021-03/msg00119.html

* lisp/emacs-lisp/cl-macs.el (cl--sm-macroexpand): Fix recently
uncovered use of old name for pcase--dontcare.
2021-03-04 00:57:28 +00:00
Stefan Monnier
88ca2280ba * lisp/emacs-lisp/pcase.el (pcase-defmacro): Fix pcase-tests-macro
* lisp/emacs-lisp/radix-tree.el (radix-tree-leaf): Simplify accordingly.
2021-03-03 18:40:03 -05:00
Stefan Monnier
3ef6d04dcf * lisp/emacs-lisp/pcase.el (pcase--u1): Fix typo 2021-03-02 15:57:45 -05:00
Stefan Monnier
20596a5ca2 * lisp/emacs-lisp/trace.el (trace-values): Work outside of traced function 2021-03-02 09:13:57 -05:00
Pip Cet
2b069c67d7 Compile closures that modify their bound vars correctly (Bug#46834)
* lisp/emacs-lisp/bytecomp.el (byte-compile--reify-function): Don't
move let bindings into the lambda. Don't reverse list of
bindings. (byte-compile): Evaluate the return value if it was
previously reified.
* test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-reify-function):
Add tests.
2021-03-02 07:14:13 +00:00
Stefan Monnier
165353674e * lisp/emacs-lisp/pcase.el: Bind all the vars in or patterns
Improve the handling of `or` patterns where not all sub-patterns bind the
same set of variables.  This used to be "unsupported" and behaved in
somewhat unpredictable ways.

(pcase--expand): Rewrite.
(pcase-codegen): Delete.

* doc/lispref/control.texi (pcase Macro): Adjust accordingly.
Also remove the warning about "at least two" sub patterns.
These work fine, AFAICT, and if not we should fix it.

* test/lisp/emacs-lisp/pcase-tests.el (pcase-tests-or-vars): New test.
2021-03-01 23:57:56 -05:00
Lars Ingebrigtsen
e5392d38ac Make easymenu downcase the menu symbol for greater backwards compat
* lisp/cmuscheme.el (map): Revert previous fix.

* lisp/woman.el (woman-dired-define-keys): Ditto.

* lisp/emacs-lisp/easymenu.el (easy-menu-do-define): Downcase the
menu name for greater backwards compatibility.
2021-03-01 22:12:43 +01:00
Stefan Monnier
0d827c7f52 * lisp/emacs-lisp/pcase.el: Fix bug#46786
Revert commit a218c98615, but in order
to avoid the spurious warnings that this commit tried to squash,
keep track of the vars used during the match so as to add
corresponding annotations to explicitly silence the spurious warnings.

To do this, we change the VARS used in `pcase-u` (and throughout
the pcase code): they used to hold elements of the form (NAME . VAL)
and now they hold elements of the form (NAME VAL . USED).

(pcase--expand): Bind all vars instead of only those found via fgrep.
(pcase-codegen): Silence "unused var" warnings for those vars that have
already been referenced during the match itself.
(pcase--funcall, pcase--eval): Record the vars that are used.
(pcase--u1): Record the vars that are used via non-linear patterns.

* lisp/textmodes/mhtml-mode.el (mhtml-forward):
* lisp/vc/diff-mode.el (diff-goto-source): Silence newly
discovered warnings.

* test/lisp/emacs-lisp/pcase-tests.el (pcase-tests-bug46786): New test.
2021-03-01 15:35:51 -05:00