* bug#41649: 27.0.91; beginning-of-defun doesn't work inside React markup in js-jsx-mode @ 2020-06-01 17:59 Brian Leung [not found] ` <mailman.928.1591034465.2541.bug-gnu-emacs@gnu.org> 0 siblings, 1 reply; 11+ messages in thread From: Brian Leung @ 2020-06-01 17:59 UTC (permalink / raw) To: 41649 [-- Attachment #1: Type: text/plain, Size: 1256 bytes --] 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) 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. 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) [-- Attachment #2: Type: text/html, Size: 1549 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
[parent not found: <mailman.928.1591034465.2541.bug-gnu-emacs@gnu.org>]
* bug#41649: 27.0.91; beginning-of-defun doesn't work inside React markup in js-jsx-mode [not found] ` <mailman.928.1591034465.2541.bug-gnu-emacs@gnu.org> @ 2020-06-02 17:12 ` Alan Mackenzie 2020-06-02 17:27 ` Brian Leung 2020-06-02 21:43 ` Dmitry Gutov 0 siblings, 2 replies; 11+ messages in thread From: Alan Mackenzie @ 2020-06-02 17:12 UTC (permalink / raw) To: Brian Leung; +Cc: 41649 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). ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#41649: 27.0.91; beginning-of-defun doesn't work inside React markup in js-jsx-mode 2020-06-02 17:12 ` Alan Mackenzie @ 2020-06-02 17:27 ` Brian Leung 2020-06-02 21:45 ` Dmitry Gutov 2020-06-02 21:43 ` Dmitry Gutov 1 sibling, 1 reply; 11+ messages in thread From: Brian Leung @ 2020-06-02 17:27 UTC (permalink / raw) To: Alan Mackenzie; +Cc: 41649 [-- Attachment #1: Type: text/plain, Size: 3334 bytes --] > 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? I wasn't sure if js-beginning-of-defun was preferred here since it does not seem to detect ES2015 arrow functions like what is used here, whereas c-beginning-of-defun handles them fine outside of ReactJS cases: if you try M-: js-beginning-of-defun on my React example, point moves straight from the class declaration to the imports, which is not desirable. Should I file a separate ticket for that? On Tue, Jun 2, 2020 at 10:12 AM Alan Mackenzie <acm@muc.de> wrote: > 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). > > [-- Attachment #2: Type: text/html, Size: 4301 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#41649: 27.0.91; beginning-of-defun doesn't work inside React markup in js-jsx-mode 2020-06-02 17:27 ` Brian Leung @ 2020-06-02 21:45 ` Dmitry Gutov 0 siblings, 0 replies; 11+ messages in thread From: Dmitry Gutov @ 2020-06-02 21:45 UTC (permalink / raw) To: Brian Leung, Alan Mackenzie; +Cc: 41649 On 02.06.2020 20:27, Brian Leung wrote: > I wasn't sure if js-beginning-of-defun was preferred here since it does > not seem to detect ES2015 arrow functions like what is used here, > whereas c-beginning-of-defun handles them fine outside of ReactJS cases: > if you try M-: js-beginning-of-defun on my React example, point moves > straight from the class declaration to the imports, which is not > desirable. Should I file a separate ticket for that? A separate ticked is probably better. The fix shouldn't be too hard, but there are a lot of "\\_<function" regexps to change or augment in there. ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#41649: 27.0.91; beginning-of-defun doesn't work inside React markup in js-jsx-mode 2020-06-02 17:12 ` Alan Mackenzie 2020-06-02 17:27 ` Brian Leung @ 2020-06-02 21:43 ` Dmitry Gutov 2020-06-03 19:39 ` Alan Mackenzie 1 sibling, 1 reply; 11+ messages in thread From: Dmitry Gutov @ 2020-06-02 21:43 UTC (permalink / raw) To: Alan Mackenzie, Brian Leung; +Cc: 41649 Hi Alan, On 02.06.2020 20:12, Alan Mackenzie wrote: > 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? I agree that the second call should be removed. You might be amused to look at the commit 4ad6c932a82, though, and see who the author is. :-) ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#41649: 27.0.91; beginning-of-defun doesn't work inside React markup in js-jsx-mode 2020-06-02 21:43 ` Dmitry Gutov @ 2020-06-03 19:39 ` Alan Mackenzie 2020-06-03 20:08 ` Dmitry Gutov 0 siblings, 1 reply; 11+ messages in thread From: Alan Mackenzie @ 2020-06-03 19:39 UTC (permalink / raw) To: Dmitry Gutov; +Cc: Brian Leung, 41649 Hello, Dmitry. On Wed, Jun 03, 2020 at 00:43:32 +0300, Dmitry Gutov wrote: > Hi Alan, > On 02.06.2020 20:12, Alan Mackenzie wrote: > > 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? > I agree that the second call should be removed. Thanks. > You might be amused to look at the commit 4ad6c932a82, though, and see > who the author is. :-) Indeed I am. ;-) It was me. Funny thing is, I had absolutely no recollection of ever modifying js.el, that is until I checked over my notes from last November. So, yes, It was just a simple coding error. Apologies to Daniel for the nuisance. I'll get a patch onto the list as soon as I've got the time and energy to check it over carefully. -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#41649: 27.0.91; beginning-of-defun doesn't work inside React markup in js-jsx-mode 2020-06-03 19:39 ` Alan Mackenzie @ 2020-06-03 20:08 ` Dmitry Gutov 2020-06-04 16:23 ` Alan Mackenzie 0 siblings, 1 reply; 11+ messages in thread From: Dmitry Gutov @ 2020-06-03 20:08 UTC (permalink / raw) To: Alan Mackenzie; +Cc: Brian Leung, 41649 On 03.06.2020 22:39, Alan Mackenzie wrote: > I'll get a patch onto the list as soon as I've got the time and energy to > check it over carefully. Thanks! ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#41649: 27.0.91; beginning-of-defun doesn't work inside React markup in js-jsx-mode 2020-06-03 20:08 ` Dmitry Gutov @ 2020-06-04 16:23 ` Alan Mackenzie 2020-06-04 16:26 ` Dmitry Gutov 0 siblings, 1 reply; 11+ messages in thread From: Alan Mackenzie @ 2020-06-04 16:23 UTC (permalink / raw) To: Dmitry Gutov, Brian Leung; +Cc: 41649 Hello, Dmitry and Brian. On Wed, Jun 03, 2020 at 23:08:09 +0300, Dmitry Gutov wrote: > On 03.06.2020 22:39, Alan Mackenzie wrote: > > I'll get a patch onto the list as soon as I've got the time and energy to > > check it over carefully. > Thanks! Would you please try out the following patch, which ought to fix the problem the patch should fix. Seeing as how it corrects the value of a number of configuration variables (around fifteen), there might be further incidental benefits. diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index 5ec3e94275..04b449ecd2 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -4591,7 +4591,6 @@ js-mode (setq imenu-create-index-function #'js--imenu-create-index) ;; for filling, pretend we're cc-mode - (c-init-language-vars js-mode) (setq-local comment-line-break-function #'c-indent-new-comment-line) (setq-local comment-multi-line t) (setq-local electric-indent-chars It might well be too late to include this patch in the Emacs 27 release. If you're reading this, Eli, what do you say? -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply related [flat|nested] 11+ messages in thread
* bug#41649: 27.0.91; beginning-of-defun doesn't work inside React markup in js-jsx-mode 2020-06-04 16:23 ` Alan Mackenzie @ 2020-06-04 16:26 ` Dmitry Gutov 2020-06-04 16:40 ` Brian Leung 0 siblings, 1 reply; 11+ messages in thread From: Dmitry Gutov @ 2020-06-04 16:26 UTC (permalink / raw) To: Alan Mackenzie, Brian Leung; +Cc: 41649 On 04.06.2020 19:23, Alan Mackenzie wrote: > Would you please try out the following patch, which ought to fix the > problem the patch should fix. I tried it a few days ago, and it indeed seemed to fix the reported scenario. ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#41649: 27.0.91; beginning-of-defun doesn't work inside React markup in js-jsx-mode 2020-06-04 16:26 ` Dmitry Gutov @ 2020-06-04 16:40 ` Brian Leung 2020-06-07 15:23 ` Alan Mackenzie 0 siblings, 1 reply; 11+ messages in thread From: Brian Leung @ 2020-06-04 16:40 UTC (permalink / raw) To: Dmitry Gutov; +Cc: Alan Mackenzie, 41649 [-- Attachment #1: Type: text/plain, Size: 340 bytes --] It works for me also. Thanks. On Thu, Jun 4, 2020 at 9:26 AM Dmitry Gutov <dgutov@yandex.ru> wrote: > On 04.06.2020 19:23, Alan Mackenzie wrote: > > Would you please try out the following patch, which ought to fix the > > problem the patch should fix. > > I tried it a few days ago, and it indeed seemed to fix the reported > scenario. > [-- Attachment #2: Type: text/html, Size: 644 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#41649: 27.0.91; beginning-of-defun doesn't work inside React markup in js-jsx-mode 2020-06-04 16:40 ` Brian Leung @ 2020-06-07 15:23 ` Alan Mackenzie 0 siblings, 0 replies; 11+ messages in thread From: Alan Mackenzie @ 2020-06-07 15:23 UTC (permalink / raw) To: Brian Leung; +Cc: 41649-done, Dmitry Gutov Hello, Brian and Dmitry. On Thu, Jun 04, 2020 at 09:40:34 -0700, Brian Leung wrote: > It works for me also. Thanks. > On Thu, Jun 4, 2020 at 9:26 AM Dmitry Gutov <dgutov@yandex.ru> wrote: > > On 04.06.2020 19:23, Alan Mackenzie wrote: > > > Would you please try out the following patch, which ought to fix the > > > problem the patch should fix. > > I tried it a few days ago, and it indeed seemed to fix the reported > > scenario. OK, that's good, thanks. Thinking about it, and considering how many js-mode settings get amended by this patch, it is fairly complicated. So, it really is too late for the emacs-27 branch. So I've committed the patch to master. I'm closing the bug with this post. -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2020-06-07 15:23 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 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 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
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).