1. 10 Apr, 2019 4 commits
  2. 09 Apr, 2019 36 commits
    • Paul Eggert's avatar
      Remove the need for temacs.in · d8260374
      Paul Eggert authored
      Instead of building a file temacs.in used only to compute a
      fingerprint, compute the fingerprint directly from the .o and
      .a files that go into temacs.in.  This speeds up the build by
      avoiding the need to link temacs twice, once with a dummy
      fingerprint.
      * lib-src/make-fingerprint.c (main): No need to generate
      a fingerprint file that includes config.h, now that fingerprint.c
      depends on all the .o files.
      * src/Makefile.in ($(libsrc)/make-fingerprint$(EXEEXT)):
      Use the same rule as $(libsrc)/make-docfile$(EXEEXT).
      * src/fingerprint-dummy.c: Remove.
      * src/Makefile.in (${charsets}, $(libsrc)/make-docfile$(EXEEXT))
      ($(LIBEGNU_ARCHIVE), $(lwlibdir)/liblw.a, $(oldXMenudir)/libXMenu11.a)
      (../config.status, ${ETAGS}, ../lisp/TAGS, $(lwlibdir)/TAGS)
      ($(lispsource)/loaddefs.el):
      Prefer ‘$(MAKE) -C $(dir $@)’ to ‘${MAKE} -C SOMESTRING’ when
      either will do, as the former is more regular and lets us
      coalesce rules better.
      (EMACS_DEPS_PRE, EMACS_DEPS_POST, BUILD_EMACS_PRE)
      (BUILD_EMACS_POST, temacs.in$(EXEEXT)): Remove.
      (FINGERPRINTED): New macro.
      (fingerprint.c): Use it instead of temacs.in$(EXEEXT), to
      avoid the need to build temacs.in at all.
      (temacs$(EXEEXT)): No need to depend on other .o files now;
      fingerprint.o is enough, since it depends on the rest.
      Spell out what used to be in BUILD_EMACS_PRE and BUILD_EMACS_POST.
      (mostlyclean): No need to remove temacs.in.
      d8260374
    • Paul Eggert's avatar
      Remove assumption of uint64_t etc. in portable code · e44ff2de
      Paul Eggert authored
      C11 doesn’t guarantee the existence of types like uint64_t,
      so avoid these types in portable code, as it’s easy to do so.
      There’s no need to avoid the types in w32-specific code,
      since w32 is guaranteed to have them.
      * lib-src/make-fingerprint.c (main):
      * src/fingerprint-dummy.c:
      * src/fingerprint.h:
      * src/pdumper.c (dump_fingerprint, struct dump_header):
      Prefer unsigned char to uint8_t in portable code, as either will do.
      Put an "#include <config.h>" in fingerprint.c files, so
      that the corresponding .o file is rebuilt after ./configure is run.
      * lib-src/make-fingerprint.c (main):
      Simplify loop.
      * src/Makefile.in (fingerprint.c): Update atomically.
      * src/pdumper.c: Omit unnecessary check that off_t is the same
      size as int32_t or int64_t, as the code does not rely on this
      assumption.
      (dump_off): Use int_least32_t, not int32_t.
      (struct dump_reloc): Use unsigned int, not uint32_t.
      (dump_anonymous_allocate_w32, dump_anonymous_allocate_posix)
      (dump_anonymous_allocate, dump_map_file_w32, dump_map_file_posix)
      (dump_map_file:
      Do the sanity checks at compile time, not at run-time, to avoid
      usage of uint64_t etc. on non-w32 platforms.
      e44ff2de
    • Paul Eggert's avatar
      Remove dmpstruct.h · 44a39e3e
      Paul Eggert authored
      The hassles of updating the dmpstruct.h-using code bit me again.
      These updates are more trouble than they’re worth.  See:
      https://lists.gnu.org/r/emacs-devel/2019-03/msg00122.html
      As I’m the main person who’s made changes in this area since
      dmpstruct.h was introduced, I’m the most motivated to clean up
      the situation.
      * make-dist (possibly_non_vc_files): Remove src/dmpstruct.h.
      * src/Makefile.in (dmpstruct_headers, dmpstruct.h): Remove.
      (pdumper.o): Do not depend on dmpstruct.h.
      (mostlyclean): Do not remove dmpstruct.h.
      * src/dmpstruct.awk: Remove.
      * src/pdumper.c: Do not include dmpstruct.h.
      (CHECK_STRUCTS): Remove.  All uses removed.
      44a39e3e
    • Stefan Monnier's avatar
      diff-font-lock-syntax: clarify distinction between t and hunk-also · 85fbdf02
      Stefan Monnier authored
      * lisp/vc/diff-mode.el (diff-font-lock-syntax): Rework docstring.
      (diff-syntax-fontify-hunk): Never use the hunk method when
      diff-font-lock-syntax is just t.
      85fbdf02
    • Alex Branham's avatar
      Use lexical-binding in bug-reference.el · d96b672f
      Alex Branham authored
      * .dir-locals.el: Set bug-reference-url-format in all modes, not just
      changelog mode. Use (eval . (bug-reference-mode)) as described
      in (info "(emacs) Specifying File Variables")
      * lisp/progmodes/bug-reference.el: Use lexical binding.
      (bug-reference-unfontify):
      (bug-reference-fontify): Mention args in docstring.
      
      Bug#35123
      d96b672f
    • Basil L. Contovounesios's avatar
      Fix Gnus duplicate suppression guards (bug#34987) · 6cb49922
      Basil L. Contovounesios authored
      * lisp/gnus/gnus-dup.el (gnus-dup-enter-articles)
      (gnus-dup-suppress-articles): Use gnus-dup-hashtb as an indicator of
      initialization instead of gnus-dup-list, which may happen to be nil.
      (gnus-dup-unsuppress-article): Do nothing if gnus-dup-hashtb is
      uninitialized.
      6cb49922
    • Stefan Monnier's avatar
      * lisp/printing.el: Use lexical-binding · 4f19bbb1
      Stefan Monnier authored
      Require easy-menu instead of adding declarations.
      Remove backward compatiblity.  Remove redundant ':group' args.
      (pr-region-active-p): Use use-region-p.
      (pr-set-keymap-name): Delete function and callers.
      (pr-set-keymap-parents): Delete function; use set-keymap-parent instead.
      (pr-read-string): Delete function; use read-string instead.
      (pr-menu-char-height): Delete function; use frame-char-height instead.
      (pr-menu-char-width): Delete function; use frame-char-width instead.
      (pr-menu-position): Merge the two definitions.
      (pr-get-symbol): Delete function; use easy-menu-intern instead.
      (pr-update-mode-line): Delete function; use force-mode-line-update instead.
      (pr-do-update-menus): Turn local save-var into dynbound pr--save-var.
      (pr-menu-alist): Use setf.  Simplify since we don't keep key-bindings
      in the menus any more.
      (pr-dosify-file-name): Remove interactive spec.
      (pr-filename-style): Rename from pr-path-style.
      (pr-unixify-file-name): Delete function.
      (pr-standard-file-name): Don't turn \ into / under POSIX.
      (pr-temp-dir): Don't dosify.  Use temporary-file-directory unconditionally.
      (pr-save-file-modes): Delete macro.
      (pr-ps-directory-using-ghostscript, pr-ps-directory-print)
      (pr-ps-directory-ps-print, pr-ps-mode-using-ghostscript, pr-ps-print)
      (pr-ps-mode-preview, pr-ps-mode-print, pr-printify-directory)
      (pr-txt-directory, pr-ps-file-up-preview, pr-ps-directory-preview)
      (pr-ps-file-up-ps-print, pr-ps-preview, pr-ps-using-ghostscript):
      Use properly prefixed, declared, and
      explicitly let-bound dynamically bound variables around calls to
      pr-ps-utility-args and pr-set-dir-args.
      (pr-ps-file-using-ghostscript): Only dosify when passing to suprocess.
      (pr-expand-file-name): Delete function; use expand-file-name instead.
      (pr-ps-file-print): Properly dosify.
      (pr-menu-create): Use backquotes.
      (pr-eval-alist, pr-eval-local-alist): Use dolist.
      (pr-ps-utility-args): Don't dosify here.
      (pr-ps-utility-process): Dosify here instead.
      (pr-ps-file, pr-command): Don't dosify here either.
      (pr-interface-map): Move initialization into declaration.
      (pr-insert-section-1): Use 'push'.
      (pr-insert-toggle): Use closure instead of backquoted lambda.
      (pr-insert-menu): Use apply i.s.o eval.
      (pr-insert-radio-button): Avoid 'eval'.
      4f19bbb1
    • Stefan Monnier's avatar
      quail.el: Use delete-and-extract-region · 8a5ecdaa
      Stefan Monnier authored
      * lisp/international/quail.el (quail-overlay-region-events):
      Use delete-and-extract-region.
      (quail-activate): Use setq-local.
      8a5ecdaa
    • Stefan Monnier's avatar
      python.el: don't syntax-propertize single/double quoted strings · 4b39b741
      Stefan Monnier authored
      * lisp/progmodes/python.el (python-syntax-propertize-function):
      Only mark triple-quoted strings, let the normal syntax-table handle
      the rest.
      (python-syntax-stringify): Adjust accordingly.
      4b39b741
    • Stefan Monnier's avatar
    • Stefan Monnier's avatar
      Fix up Eshell 'require's after previous dependency reshuffle. · a017927c
      Stefan Monnier authored
      * lisp/eshell/em-unix.el:
      * lisp/eshell/em-script.el:
      * lisp/eshell/em-pred.el:
      * lisp/eshell/em-dirs.el:
      * lisp/eshell/em-alias.el:
      Fix up 'require's to silence byte-compiler.
      
      * lisp/eshell/esh-util.el (eshell-read-hosts-file): Don't limit number
      of entries per line.  Preserve the structure.
      (eshell-read-hosts): Adjust accordingly.
      a017927c
    • Stefan Monnier's avatar
      * lisp/gnus/mm-view.el (mm-display-inline-fontify): Simplify. · 1055eee6
      Stefan Monnier authored
      Remove hacks that were needed before font-lock-ensure.
      Don't use switch-to-buffer.  Don't assume point-min == 1.
      1055eee6
    • Basil L. Contovounesios's avatar
      ; Warn of while/dolist pitfall in gnus-sum.el · e1a457e6
      Basil L. Contovounesios authored
      Suggested by Andy Moreton in the following thread:
      https://lists.gnu.org/archive/html/emacs-devel/2019-04/msg00294.html
      * lisp/gnus/gnus-sum.el (gnus-summary-move-article): Add comment
      warning of common while/dolist pitfall. (bug#33653#134)
      e1a457e6
    • Stefan Monnier's avatar
      * lisp/vc/diff-mode.el: Cosmetic changes in diff-syntax-fontify-hunk · 90c7e363
      Stefan Monnier authored
      (diff-default-directory): Use defvar-local.
      (diff-syntax-fontify-hunk): Use 'setq' less.  Fit within 80 columns.
      Simplify some looking-at tests.
      (diff-syntax-fontify-props): Don't check the buffer-local part of
      find-file-hook.
      90c7e363
    • Mattias Engdegård's avatar
      Clarify the TESTFN argument to `alist-get' · c8146558
      Mattias Engdegård authored
      * lisp/subr.el (alist-get):
      Rephrase the initial text to clarify the meaning of the TESTFN argument.
      It's an equality predicate, not a look-up function (Bug#35206).
      c8146558
    • Eli Zaretskii's avatar
      ; * etc/NEWS: Fix recently added entries. · 44b306d3
      Eli Zaretskii authored
      44b306d3
    • Eli Zaretskii's avatar
      Fix "M-x eshell" · 1e58dc9e
      Eli Zaretskii authored
      * lisp/eshell/em-dirs.el (eshell-variable-aliases-list)
      (eshell-directory-name, eshell-mode): Defvar them.
      (eshell-dirs-initialize): Require esh-var.  (Bug#35203)
      (eshell-apply-indices): Declare.
      1e58dc9e
    • Jackson Ray Hamilton's avatar
    • Jackson Ray Hamilton's avatar
      Explain reasonings for JSX syntax support design decisions · cf416d96
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el: Throughout the code, provide explanations for
      why JSX support was implemented in the way that it was; in particular,
      address the overlap between syntax-propertize-function, font-lock, and
      indentation (as requested by Stefan).
      cf416d96
    • Jackson Ray Hamilton's avatar
      Move curly functions closer to where they’re used · 7c3ffdaf
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el (js-jsx--enclosing-curly-pos)
      (js-jsx--goto-outermost-enclosing-curly): As the code evolved, these
      functions’ definitions ended up being far away from the only places
      where they were used.  Move them there.
      7c3ffdaf
    • Jackson Ray Hamilton's avatar
      Add open/close parenthesis syntax to “<” and “>” in JSX · 95455195
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el (js-jsx--syntax-propertize-tag): Like in
      sgml-mode, treat “<” and “>” like open/close parenthesis, making the
      text more navigable via forward-sexp, etc.
      95455195
    • Jackson Ray Hamilton's avatar
      Permit non-ASCII identifiers in JS · 18bbfc4c
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el (js--name-start-re): Generally allow
      identifiers to begin with non-ASCII letters.  This is of particular
      importance to JSX parsing.
      
      * test/manual/indent/jsx-unclosed-2.jsx: Add test to ensure non-ASCII
      characters are parsed properly.
      18bbfc4c
    • Jackson Ray Hamilton's avatar
      Identify JSX strings (for js2-mode) · 3eadf1ef
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el (js-jsx--syntax-propertize-tag): Derived modes
      like js2-mode may use font-lock-syntactic-face-function to apply faces
      to JSX strings (and only JSX strings).  Apply the js-jsx-string text
      property to such strings so they can be distinctly identified.
      (js-jsx--text-properties): Ensure the js-jsx-string text property gets
      cleaned up, too.
      3eadf1ef
    • Jackson Ray Hamilton's avatar
      Properly set a dynamic, syntactic mode name · e48306f8
      Jackson Ray Hamilton authored
      Use mode-line-format constructs to properly set mode-name, rather than
      use the very hacky solution that was filling-in for my lack of
      knowledge of this feature.
      
      * lisp/progmodes/js.el (js--update-mode-name)
      (js--idly-update-mode-name): Remove.
      
      (js--syntactic-mode-name-part): New helper function for mode-name.
      (js-use-syntactic-mode-name): Helper to set up the dynamic mode-name.
      
      (js-jsx-enable): Don’t need to call any extra functions now.
      (js-mode): Use the new setup function rather than the old ones.
      
      (js-jsx-mode): Use the same initial mode name as js-mode so the final
      one is identical for both modes.
      e48306f8
    • Jackson Ray Hamilton's avatar
      Improve whitespace and unary keyword parsing · 7a9dac5c
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el (js--name-start-chars): Remove, adding these
      chars back to js--name-start-re.
      (js--name-start-re): Add chars back from js--name-start-chars.
      
      (js-jsx--tag-start-re): Improve regexp to capture the tag name (so it
      can be disambiguated from a unary keyword), to match newlines (which
      are common in this spot), and to require at least one whitespace
      character before the attribute name.
      
      (js-jsx--matched-tag-type): Ensure the “tag name” isn’t possibly a
      unary keyword.
      
      (js-jsx--self-closing-re, js-jsx--matching-close-tag-pos): Allow
      whitespace around “<” and “>”.
      
      * test/manual/indent/jsx-unclosed-2.jsx: Add tests for unary keyword
      and whitespace parsing.
      7a9dac5c
    • Jackson Ray Hamilton's avatar
      Optimize js-jsx--enclosing-tag-pos · 98e36a3e
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el (js-jsx--enclosing-tag-pos): Update docstring
      to be more precise.  Also, remember close tag positions after they’ve
      been calculated once to avoid many redundant calls to
      js-jsx--matching-close-tag-pos.
      (js-jsx--text-properties): Ensure js-jsx-close-tag-pos text properties
      get cleaned up, too.
      98e36a3e
    • Jackson Ray Hamilton's avatar
      Optimize js-jsx--matching-close-tag-pos · 7b2e3c60
      Jackson Ray Hamilton authored
      This function’s performance was having a noticeable impact when
      editing large JSX structures.  Improve its performance
      slightly (elapsed time will be cut in half according to ELP).
      
      * lisp/progmodes/js.el (js-jsx--tag-re): Remove.
      (js-jsx--matched-tag-type): Simplify implementation with respect to
      the new implementation of js-jsx--matching-close-tag-pos.
      (js-jsx--self-closing-re): Simplify regexp slightly in sync with a
      generally simpler matching algorithm.
      (js-jsx--matching-close-tag-pos): Optimize matching algorithm by using
      multiple simple regexp searches, rather than one big complex search.
      
      * test/manual/indent/jsx-unclosed-2.jsx: Use the term “inequality” and
      add a test for a possible parsing foible.
      7b2e3c60
    • Jackson Ray Hamilton's avatar
      Add tests for miscellaneous JSX parsing feats · 462baabe
      Jackson Ray Hamilton authored
      * test/manual/indent/jsx.jsx: Add tests for JSXMemberExpression names
      and JSXOpeningFragment/JSXClosingFragment support (already supported).
      462baabe
    • Jackson Ray Hamilton's avatar
      Split JSX indentation calculation into several functions · afec4511
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el (js-jsx--contextual-indentation)
      (js-jsx--expr-attribute-pos, js-jsx--expr-indentation): Extract logic
      from js-jsx--indentation, and improve the logic’s documentation.
      (js-jsx--indentation): Simplify by splitting into several
      functions (see above) and improve the logic’s documentation.
      afec4511
    • Jackson Ray Hamilton's avatar
      Indent expressions in JSXAttributes relative to the attribute’s name · 55c80d43
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el (js-jsx--syntax-propertize-tag): Refer to the
      beginning of a JSXExpressionContainer’s associated JSXAttribute (so
      line numbers can be calculated later).
      (js-jsx--text-properties): Also clear the new text property
      js-jsx-expr-attribute.
      
      (js-jsx--indenting): Remove.
      (js-jsx--indent-col, js-jsx--indent-attribute-line): New variables.
      (js-jsx--indentation): Instead of alternating between two separate
      column calculations, neither necessarily correct, bind the JSX column
      such that the second call to js--proper-indentation can use it as a
      base column.
      (js--proper-indentation): Use JSX as the base column for some indents
      while indenting JSX.
      
      * test/manual/indent/jsx.jsx: Add more tests for expression indents.
      55c80d43
    • Jackson Ray Hamilton's avatar
      Fix counting of nested self-closing JSXOpeningElements · 16669d7c
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el (js-jsx--matching-close-tag-pos): Fix bug where
      self-closing JSXOpeningElements might be missed if one was nested
      within another.
      
      * test/manual/indent/jsx-self-closing.jsx: Add test for bug concerning
      self-closing JSXOpeningElement counting.
      16669d7c
    • Jackson Ray Hamilton's avatar
      Indent broken arrow function bodies as an N+1th arg · 84b1cfbc
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el (js--line-terminating-arrow-re): Revise regexp
      for use with re-search-backward.
      (js--looking-at-broken-arrow-function-p): Remove.
      (js--broken-arrow-terminates-line-p): Replacement for
      js--looking-at-broken-arrow-function-p.  Don’t consider whether an
      arrow appears at point (in an arglist); instead, just look for an
      arrow that terminates the line.
      (js--proper-indentation): Use js--broken-arrow-terminates-line-p.
      
      * test/manual/indent/js.js: Add test for a broken arrow as an N+1th
      arg.
      84b1cfbc
    • Jackson Ray Hamilton's avatar
      Rename tests to use the “.jsx” file extension · d9d1bb2b
      Jackson Ray Hamilton authored
      * test/manual/indent/js-jsx-quote.js: Renamed to “jsx-quote.jsx”.
      * test/manual/indent/js-jsx-unclosed-1.js: Renamed to
      “jsx-unclosed-1.jsx”.
      * test/manual/indent/js-jsx-unclosed-2.js: Renamed to
      “jsx-unclosed-2.jsx”.
      * test/manual/indent/js-jsx.js: Renamed to “jsx.jsx”.
      
      * test/manual/indent/jsx-quote.jsx: Renamed from “js-jsx-quote.js”.
      * test/manual/indent/jsx-unclosed-1.jsx: Renamed from
      “js-jsx-unclosed-1.js”.
      * test/manual/indent/jsx-unclosed-2.jsx: Renamed from
      “js-jsx-unclosed-2.js”.
      * test/manual/indent/jsx.jsx: Renamed from “js-jsx.js”.
      d9d1bb2b
    • Jackson Ray Hamilton's avatar
      Improve JSX syntax propertization · 8b92719b
      Jackson Ray Hamilton authored
      * lisp/progmodes/js.el (js-jsx--attribute-name-re): New variable.
      (js-jsx--syntax-propertize-tag): Allow “-” in JSXAttribute names.  Fix
      “out of range” error when typing at the end of a buffer.  Fix/improve
      future propertization of unfinished JSXBoundaryElements.
      
      * test/manual/indent/js-jsx-unclosed-2.js: Add tests for allowed
      characters in JSX.
      8b92719b
    • Jackson Ray Hamilton's avatar
      Automatically detect JSX in JavaScript files · bf37078d
      Jackson Ray Hamilton authored
      * lisp/files.el (auto-mode-alist): Simply enable
      javascript-mode (js-mode) when opening “.jsx” files, since the “.jsx”
      file extension will be used as an indicator of JSX syntax by js-mode,
      and more code is likely to work in js-mode than js-jsx-mode, and we
      probably want to guide users to use js-mode (with js-jsx-syntax)
      instead.  Code that used to work exclusively in js-jsx-mode (if anyone
      ever wrote any) ought to be updated to work in js-mode too when
      js-jsx-syntax is set to t.
      
      * lisp/progmodes/js.el (js-jsx-detect-syntax, js-jsx-regexps)
      (js-jsx--detect-and-enable, js-jsx--detect-after-change): New
      variables and functions for detecting and enabling JSX.
      
      (js-jsx-syntax): Update docstring with respect to the widened scope of
      the effects and use of this variable.
      
      (js-syntactic-mode-name, js--update-mode-name)
      (js--idly-update-mode-name, js-jsx-enable): New variable and functions
      for indicating when JSX is enabled.
      
      (js-mode): Detect and enable JSX.  Print all enabled syntaxes after
      the mode name whenever Emacs goes idle; this ensures lately-enabled
      syntaxes are evident.
      
      (js-jsx-mode): Update mode name for consistency with the state in
      which JSX is enabled in js-mode.  Update docstring to suggest
      alternative means of using JSX without this mode.  Going forward, it
      may be best to gently guide users away from js-jsx-mode, since a “one
      mode per syntax extension” model would not scale well if more syntax
      extensions were to be simultaneously supported (e.g. Facebook’s
      “Flow”).
      bf37078d
    • Jackson Ray Hamilton's avatar
      Finish replacing SGML-based JSX detection with js-mode’s parsing · 339be7c0
      Jackson Ray Hamilton authored
      This removes the last dependency on sgml-mode for JSX-related logic.
      
      * lisp/progmodes/js.el (js-jsx--start-tag-re)
      (js-jsx--end-tag-re): Remove.
      (js-jsx--looking-at-start-tag-p)
      (js-jsx--looking-back-at-end-tag-p): Reimplement using text
      properties, using syntax information which ought to be slightly more
      accurate than regexps since it was found by complete parsing.
      339be7c0