From: Alan Mackenzie <acm@muc.de>
To: Brian Leung <bkleung89@gmail.com>
Cc: 41649@debbugs.gnu.org
Subject: bug#41649: 27.0.91; beginning-of-defun doesn't work inside React markup in js-jsx-mode
Date: 2 Jun 2020 17:12:21 -0000 [thread overview]
Message-ID: <20200602171221.19097.qmail@mail.muc.de> (raw)
In-Reply-To: <mailman.928.1591034465.2541.bug-gnu-emacs@gnu.org>
Hello Brian.
In article <mailman.928.1591034465.2541.bug-gnu-emacs@gnu.org> you wrote:
> [-- text/plain, encoding 7bit, charset: UTF-8, 44 lines --]
> With a file App.js that looks like:
> import * as React from "react";
> import { render } from "react-dom";
> const App = () => {
> return (
> <div>
> <h1 id="abc">hello</h1>
> <SearchParams />
> </div>
> );
> };
> render(<App />, document.getElementById("root"));
> If you open the file in JS mode (Emacs 27), and move point inside of
> "abc", calling
> M-: (c-beginning-of-defun)
That looks like a strange thing to do. JS mode has its own
js-beginning-of-defun.
But wait - beginning-of-defun-function is set to c-beginning-of-defun,
which is probably why you reported the bug the way you did.
c-beginning-of-defun won't work, because a suitable member or derivative
of CC Mode hasn't been fully initialised.
> gives the following error:
> Debugger entered--Lisp error: (wrong-type-argument hash-table-p nil)
> copy-hash-table(nil)
> c-forward-<>-arglist(nil)
> c-backward-<>-arglist(nil nil)
> c-looking-at-decl-block(99 nil)
> c-most-enclosing-decl-block((117 99 88 (40 . 50)))
> c-widen-to-enclosing-decl-scope((117 99 88 (40 . 50)) 1 234)
> c-beginning-of-defun()
> eval((c-beginning-of-defun) t)
> eval-expression((c-beginning-of-defun) nil nil 127)
> funcall-interactively(eval-expression (c-beginning-of-defun) nil nil 127)
> call-interactively(eval-expression nil nil)
> command-execute(eval-expression)
> Manually invoking C-M-a inside the double quotes should end the same way.
It does.
The problem seems to stem from the top-level function #'js-mode. Early
on, it invokes
(c-init-language-vars js-mode)
, which initialises the CC Mode language variables to (mostly) their
Java Mode values. js-mode continues by overwriting the local value of
quite a few of these variables, including beginning-of-defun-function.
js-mode then invokes
(c-init-language-vars js-mode)
a second time, which initialises the language variables again, in
particular, those variables which just got a local value, including
beginning-of-defun-function.
Daniel, what is going on, here? Is this just a simple coding error,
where the second c-init-language-vars should have been removed at some
stage?
> In GNU Emacs 27.0.91 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.20)
> Windowing system distributor 'The X.Org Foundation', version 11.0.12008000
> System Description: NixOS 20.09 (Nightingale)
--
Alan Mackenzie (Nuremberg, Germany).
next prev parent reply other threads:[~2020-06-02 17:12 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-01 17:59 bug#41649: 27.0.91; beginning-of-defun doesn't work inside React markup in js-jsx-mode Brian Leung
[not found] ` <mailman.928.1591034465.2541.bug-gnu-emacs@gnu.org>
2020-06-02 17:12 ` Alan Mackenzie [this message]
2020-06-02 17:27 ` Brian Leung
2020-06-02 21:45 ` Dmitry Gutov
2020-06-02 21:43 ` Dmitry Gutov
2020-06-03 19:39 ` Alan Mackenzie
2020-06-03 20:08 ` Dmitry Gutov
2020-06-04 16:23 ` Alan Mackenzie
2020-06-04 16:26 ` Dmitry Gutov
2020-06-04 16:40 ` Brian Leung
2020-06-07 15:23 ` Alan Mackenzie
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200602171221.19097.qmail@mail.muc.de \
--to=acm@muc.de \
--cc=41649@debbugs.gnu.org \
--cc=bkleung89@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).