emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 4ad6c93: Add a full set of CC Mode language variables to js.el.


From: Alan Mackenzie
Subject: master 4ad6c93: Add a full set of CC Mode language variables to js.el.
Date: Wed, 6 Nov 2019 14:37:21 -0500 (EST)

branch: master
commit 4ad6c932a826c2928ac82e56e5ae541eff7e5ca7
Author: Alan Mackenzie <address@hidden>
Commit: Alan Mackenzie <address@hidden>

    Add a full set of CC Mode language variables to js.el.
    
    This will allow js.el to work after maintenance changes in CC Mode, e.g. the
    fix to bug #11165.
    
    * lisp/progmodes/js.el (top level): Create a CC Mode derived language called
    js-mode and based on Java Mode.
    (js-mode): call c-init-language-vars for js-mode.  Remove the direct 
settings
    of several CC Mode language variables which are now defined through the
    derived language mechanism.  Call c-set-style and set up the needed style
    variables c-block-comment-prefix and c-comment-prefix-regexp.
---
 lisp/progmodes/js.el | 29 +++++++++++++++++++++--------
 1 file changed, 21 insertions(+), 8 deletions(-)

diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index 599923d..5f09134 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -46,6 +46,9 @@
 ;;; Code:
 
 (require 'cc-mode)
+(eval-when-compile
+  (require 'cc-langs)
+  (require 'cc-fonts))
 (require 'newcomment)
 (require 'imenu)
 (require 'moz nil t)
@@ -4529,12 +4532,22 @@ This function is intended for use in 
`after-change-functions'."
         (when (js-jsx--detect-and-enable 'arbitrarily)
           (remove-hook 'after-change-functions #'js-jsx--detect-after-change 
t))))))
 
+;; Ensure all CC Mode "lang variables" are set to valid values.
+;; js-mode, however, currently uses only those needed for filling.
+(eval-and-compile
+  (c-add-language 'js-mode 'java-mode))
+
+(c-lang-defconst c-paragraph-start
+  js-mode "\\(@[[:alpha:]]+\\>\\|$\\)")
+
 ;;; Main Function
 
 ;;;###autoload
 (define-derived-mode js-mode prog-mode "JavaScript"
   "Major mode for editing JavaScript."
   :group 'js
+  ;; Ensure all CC Mode "lang variables" are set to valid values.
+  (c-init-language-vars js-mode)
   (setq-local indent-line-function #'js-indent-line)
   (setq-local beginning-of-defun-function #'js-beginning-of-defun)
   (setq-local end-of-defun-function #'js-end-of-defun)
@@ -4576,16 +4589,9 @@ This function is intended for use in 
`after-change-functions'."
   (setq imenu-create-index-function #'js--imenu-create-index)
 
   ;; for filling, pretend we're cc-mode
-  (setq c-comment-prefix-regexp "//+\\|\\**"
-        c-paragraph-start "\\(@[[:alpha:]]+\\>\\|$\\)"
-        c-paragraph-separate "$"
-        c-block-comment-prefix "* "
-        c-line-comment-starter "//"
-        c-comment-start-regexp "/[*/]\\|\\s!")
+  (c-init-language-vars js-mode)
   (setq-local comment-line-break-function #'c-indent-new-comment-line)
-  (setq-local c-block-comment-start-regexp "/\\*")
   (setq-local comment-multi-line t)
-
   (setq-local electric-indent-chars
              (append "{}():;," electric-indent-chars)) ;FIXME: js2-mode adds 
"[]*".
   (setq-local electric-layout-rules
@@ -4599,6 +4605,13 @@ This function is intended for use in 
`after-change-functions'."
     (make-local-variable 'paragraph-ignore-fill-prefix)
     (make-local-variable 'adaptive-fill-mode)
     (make-local-variable 'adaptive-fill-regexp)
+    ;; While the full CC Mode style system is not yet in use, set the
+    ;; pertinent style variables manually.
+    (c-initialize-builtin-style)
+    (let ((style (cc-choose-style-for-mode 'js-mode c-default-style)))
+      (c-set-style style))
+    (setq c-block-comment-prefix "* "
+          c-comment-prefix-regexp "//+\\|\\**")
     (c-setup-paragraph-variables))
 
   ;; Important to fontify the whole buffer syntactically! If we don't,



reply via email to

[Prev in Thread] Current Thread [Next in Thread]