[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master d2080e4183: Add separate tiny major mode for JSON
From: |
Dmitry Gutov |
Subject: |
master d2080e4183: Add separate tiny major mode for JSON |
Date: |
Mon, 8 Aug 2022 21:44:20 -0400 (EDT) |
branch: master
commit d2080e4183e462331bdb90476395d1ad003de7bb
Author: Dmitry Gutov <dgutov@yandex.ru>
Commit: Dmitry Gutov <dgutov@yandex.ru>
Add separate tiny major mode for JSON
* lisp/progmodes/js.el (js-json-mode): New major mode.
* lisp/files.el (auto-mode-alist): Use it for JSON (bug#56682).
* lisp/progmodes/js.el (js--class-decl-matcher):
Skip work if there are no frameworks enabled.
---
lisp/files.el | 2 +-
lisp/progmodes/js.el | 39 +++++++++++++++++++++++----------------
2 files changed, 24 insertions(+), 17 deletions(-)
diff --git a/lisp/files.el b/lisp/files.el
index e258bf7bbe..05a924a363 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -2950,7 +2950,7 @@
ARC\\|ZIP\\|LZH\\|LHA\\|ZOO\\|[JEW]AR\\|XPI\\|RAR\\|CBR\\|7Z\\|SQUASHFS\\)\\'" .
("\\.js[mx]?\\'" . javascript-mode)
;; https://en.wikipedia.org/wiki/.har
("\\.har\\'" . javascript-mode)
- ("\\.json\\'" . javascript-mode)
+ ("\\.json\\'" . js-json-mode)
("\\.[ds]?va?h?\\'" . verilog-mode)
("\\.by\\'" . bovine-grammar-mode)
("\\.wy\\'" . wisent-grammar-mode)
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index eb2a1e4fcc..2eefcf44dc 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -1830,22 +1830,23 @@ context."
(defun js--class-decl-matcher (limit)
"Font lock function used by `js-mode'.
This performs fontification according to `js--class-styles'."
- (cl-loop initially (js--ensure-cache limit)
- while (re-search-forward js--quick-match-re limit t)
- for orig-end = (match-end 0)
- do (goto-char (match-beginning 0))
- if (cl-loop for style in js--class-styles
- for decl-re = (plist-get style :class-decl)
- if (and (memq (plist-get style :framework)
- js-enabled-frameworks)
- (memq (js-syntactic-context)
- (plist-get style :contexts))
- decl-re
- (looking-at decl-re))
- do (goto-char (match-end 0))
- and return t)
- return t
- else do (goto-char orig-end)))
+ (when js-enabled-frameworks
+ (cl-loop initially (js--ensure-cache limit)
+ while (re-search-forward js--quick-match-re limit t)
+ for orig-end = (match-end 0)
+ do (goto-char (match-beginning 0))
+ if (cl-loop for style in js--class-styles
+ for decl-re = (plist-get style :class-decl)
+ if (and (memq (plist-get style :framework)
+ js-enabled-frameworks)
+ (memq (js-syntactic-context)
+ (plist-get style :contexts))
+ decl-re
+ (looking-at decl-re))
+ do (goto-char (match-end 0))
+ and return t)
+ return t
+ else do (goto-char orig-end))))
(defconst js--font-lock-keywords
'(js--font-lock-keywords-3 js--font-lock-keywords-1
@@ -3490,6 +3491,12 @@ This function is intended for use in
`after-change-functions'."
;;(syntax-propertize (point-max))
)
+;;;###autoload
+(define-derived-mode js-json-mode js-mode "JSON"
+ ;; JSON files can be big. Speed up syntax-ppss.
+ (setq-local syntax-propertize-function nil)
+ (setq-local js-enabled-frameworks nil))
+
;; Since we made JSX support available and automatically-enabled in
;; the base `js-mode' (for ease of use), now `js-jsx-mode' simply
;; serves as one other interface to unconditionally enable JSX in
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master d2080e4183: Add separate tiny major mode for JSON,
Dmitry Gutov <=