Subject: bug#8933: 'js-mode' break single char comment highlighting from 'define-generic-mode'.

From: Lawrence Mitchell <[email-masked]>
Date: Mon, 27 Jun 2011 10:08:54 +0100

Oleksandr Gavenko wrote:

> I use Emacs 23.3.

Also reproducible in Emacs 24.0.50

>   $ emacs -Q

> Next eval:

> (define-generic-mode my-mode
>   '(?\; ?#)
>   nil nil nil nil)

> And open file with two or more lines:

> ; commented line (1)
> wrongly highlighted line (2)
> another wrongly highlighted line (3)

> After 'M-x my-mode RET' line (1) highlighted as comment line.
> Another line not.

> Then open any .js file so js-mode loaded and back to 'my-mode'
> file and revert it.

> Now all line highlighted as comment lines!

This is because js-mode stomps on the default value of
comment-start and comment-end (rather than using
make-local-variable).  This confuses generic-mode.

Cheers,
Lawrence

Here's a commit-message plus patch.

js-mode: Don't stomp on comment-start/end's default value

* progmodes/js.el (js-mode): Ensure comment-start and comment-end
are local variables (Bug#8933).

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 5bc756e..4b3a2ba 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2011-06-27  Lawrence Mitchell  <[email-masked]>
+
+	* progmodes/js.el (js-mode): Ensure comment-start and comment-end
+	are local variables (Bug#8933).
+
 2011-06-22  Lawrence Mitchell  <[email-masked]>
 
 	* net/browse-url.el (browse-url-xdg-open): Use 0, rather than nil
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index a0437cc..1bdcb4c 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -3306,8 +3306,8 @@ If one hasn't been set, or if it's stale, prompt for a new one."
        #'js--which-func-joiner)
 
   ;; Comments
-  (setq comment-start "// ")
-  (setq comment-end "")
+  (set (make-local-variable 'comment-start) "// ")
+  (set (make-local-variable 'comment-end) "")
   (set (make-local-variable 'fill-paragraph-function)
        'js-c-fill-paragraph)