[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 61f91e2: * externals-list: Convert json-mode to :external
From: |
Stefan Monnier |
Subject: |
[elpa] master 61f91e2: * externals-list: Convert json-mode to :external |
Date: |
Sat, 28 Nov 2020 23:28:31 -0500 (EST) |
branch: master
commit 61f91e2bf16b87d038c760ee919184d2762393f4
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>
* externals-list: Convert json-mode to :external
---
externals-list | 3 +-
packages/json-mode/json-mode.el | 233 ----------------------------------------
2 files changed, 2 insertions(+), 234 deletions(-)
diff --git a/externals-list b/externals-list
index e85324d..f11668f 100644
--- a/externals-list
+++ b/externals-list
@@ -106,6 +106,7 @@
("ivy-posframe" :external "https://github.com/tumashu/ivy-posframe")
("jgraph-mode" :external nil)
("js2-mode" :external "https://github.com/mooz/js2-mode.git")
+ ("json-mode" :external nil)
("jsonrpc" :core "lisp/jsonrpc.el")
("leaf" :external "https://github.com/conao3/leaf.el")
("let-alist" :core "lisp/emacs-lisp/let-alist.el")
@@ -114,7 +115,7 @@
("markchars" :external nil)
("math-symbol-lists" :external
"https://github.com/vspinu/math-symbol-lists.git")
("metar" :external nil)
- ("midi-kbd" :external nil)
+ ("midi-kbd" :external nil)
("mmm-mode" :external "https://github.com/purcell/mmm-mode.git")
("modus-operandi-theme":external
"https://gitlab.com/protesilaos/modus-themes")
("modus-vivendi-theme" :external
"https://gitlab.com/protesilaos/modus-themes")
diff --git a/packages/json-mode/json-mode.el b/packages/json-mode/json-mode.el
deleted file mode 100644
index 8cf750a..0000000
--- a/packages/json-mode/json-mode.el
+++ /dev/null
@@ -1,233 +0,0 @@
-;;; json-mode.el --- Major mode for editing JSON files -*- lexical-binding:
t; -*-
-
-;; Copyright (C) 2015-2020 Free Software Foundation, Inc.
-
-;; Author: Simen Heggestøyl <simenheg@gmail.com>
-;; Maintainer: Simen Heggestøyl <simenheg@gmail.com>
-;; Version: 0.2
-;; Package-Requires: ((emacs "25.1"))
-;; Keywords: data
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Major mode for editing JavaScript Object Notation (JSON) data files.
-;; Read more about JSON at http://json.org/.
-
-;; It provides support for indentation and syntax highlighting.
-
-;; Thanks to Josh Johnston for writing the original JSON mode!
-
-;;; Code:
-
-(require 'json)
-(require 'smie)
-
-(defgroup json-mode nil
- "JavaScript Object Notation (JSON) editing mode."
- :tag "JSON Mode"
- :group 'data)
-
-(defcustom json-mode-indent-level 2
- "Basic size of one indentation step."
- :type 'integer)
-
-(defface json-mode-object-name-face
- '((t :inherit font-lock-variable-name-face))
- "Face to use for JSON object names.")
-
-(defvar json-mode-map
- (let ((map (make-sparse-keymap "JSON")))
- (define-key map "\C-c\C-f" #'json-mode-pretty-print-dwim)
- (define-key map "\C-c\C-p" #'json-mode-show-path)
- (easy-menu-define json-menu map "JSON mode menu"
- `("JSON"
- :help "JSON-specific features"
- ["Pretty-print region" json-mode-pretty-print-dwim
- :visible (region-active-p)]
- ["Pretty-print buffer" json-mode-pretty-print-dwim
- :visible (not (region-active-p))]
- ["Show path" json-mode-show-path]))
- map)
- "Keymap used in JSON mode.")
-
-(defvar json-mode-syntax-table
- (let ((st (make-syntax-table)))
- ;; Objects
- (modify-syntax-entry ?\{ "(}" st)
- (modify-syntax-entry ?\} "){" st)
- ;; Arrays
- (modify-syntax-entry ?\[ "(]" st)
- (modify-syntax-entry ?\] ")[" st)
- ;; Strings
- (modify-syntax-entry ?\" "\"" st)
- ;; Comments
- (modify-syntax-entry ?/ ". 12" st)
- (modify-syntax-entry ?\n ">" st)
- st))
-
-(defconst json-mode--keywords '("true" "false" "null")
- "List of JSON keywords.")
-
-(defvar json-mode-font-lock-keywords
- `(;; Constants
- (,(concat "\\<" (regexp-opt json-mode--keywords) "\\>")
- (0 font-lock-constant-face))))
-
-(defun json-mode--string-is-object-name-p (startpos)
- "Return t if STARTPOS is at the beginning of an object name."
- (save-excursion
- (goto-char startpos)
- (and (eq (char-after) ?\")
- (condition-case nil
- (progn (forward-sexp 1) t)
- (scan-error nil))
- (looking-at "[[:blank:]]*:"))))
-
-(defun json-font-lock-syntactic-face-function (state)
- "Determine which face to use for strings and comments.
-Object names receive the face `json-mode-object-name-face' to
-distinguish them from other strings."
- (cond
- ((nth 4 state) font-lock-comment-face)
- ((and (nth 3 state)
- (json-mode--string-is-object-name-p (nth 8 state)))
- 'json-mode-object-name-face)
- (t font-lock-string-face)))
-
-(defconst json-mode--smie-grammar
- (smie-prec2->grammar
- (smie-precs->prec2 '((assoc ",") (left ":")))))
-
-(defun json-mode--smie-rules (method arg)
- "Provide indentation rules for METHOD given ARG.
-See the documentation of `smie-rules-function' for further
-information."
- (pcase (cons method arg)
- (`(:elem . basic) json-mode-indent-level)))
-
-(defun json-mode-pretty-print-dwim (&optional alphabetical)
- "Pretty print region if active, else pretty print the buffer.
-`json-mode-indent-level' will be used as indentation offset. If
-ALPHABETICAL is non-nil (interactively, with a prefix argument),
-JSON object members will be sorted alphabetically by their keys."
- (interactive "P")
- (let ((json-encoding-default-indentation
- (make-string json-mode-indent-level ?\s)))
- (if (use-region-p)
- (funcall
- (if alphabetical
- #'json-pretty-print-ordered
- #'json-pretty-print)
- (region-beginning) (region-end))
- (funcall
- (if alphabetical
- #'json-pretty-print-buffer-ordered
- #'json-pretty-print-buffer)))))
-
-(defun json-mode-show-path ()
- "Show the path to the JSON value under point.
-The value is also copied to the kill ring."
- (interactive)
- (let ((path (json-path-to-position (point))))
- (if path
- (let ((formatted-path
- (json-mode--format-path (plist-get path :path))))
- (when (fboundp 'pulse-momentary-highlight-region)
- (pulse-momentary-highlight-region
- (plist-get path :match-start)
- (plist-get path :match-end)))
- (message formatted-path)
- (kill-new formatted-path))
- (message "Not a JSON value"))))
-
-(defun json--which-func ()
- (let ((path (plist-get (json-path-to-position (point)) :path)))
- (when path
- ;; There's not much space in the modeline, so this needs
- ;; to be more compact than what `json-mode--format-path' produces.
- ;; FIXME: Even in this more compact form it can easily get too long
- ;; for comfort. Add some way to shorten it.
- (mapconcat (lambda (key) (format "%s" key)) path ";"))))
-
-(defun json-mode--format-path (path)
- "Return PATH formatted as a JSON data selector.
-PATH should be a list of keys, which can be either strings or
-integers."
- (mapconcat (lambda (key) (format "[%S]" key)) path ""))
-
-;;;###autoload
-(add-to-list 'auto-mode-alist '("\\.json\\'" . json-mode))
-
-;;;###autoload
-(define-derived-mode json-mode prog-mode "JSON"
- "Major mode for editing JavaScript Object Notation (JSON) data files."
- (setq-local
- font-lock-defaults
- '(json-mode-font-lock-keywords
- nil nil nil nil
- (font-lock-syntactic-face-function
- . json-font-lock-syntactic-face-function)))
- ;; JSON has no comment syntax, but we set this to keep SMIE happy.
- ;; Also, some JSON extensions allow comments.
- (add-hook 'which-func-functions #'json--which-func nil t)
- (setq-local comment-start "// ")
- (setq-local comment-end "")
- (smie-setup json-mode--smie-grammar #'json-mode--smie-rules))
-
-(defun json--jit-wrap (beg end)
- (save-excursion
- (remove-overlays beg end 'json-jit-wrap t)
- (goto-char beg)
- (let ((ppss (syntax-ppss beg))
- (last beg))
- (while (re-search-forward "[][{},]+" end t)
- (let* ((pos (match-beginning 0))
- (closer (memq (char-after pos) '(?\] ?\}))))
- (setq ppss (parse-partial-sexp last (point) nil nil ppss)
- last (point))
- (unless (nth 8 ppss)
- (let ((s (concat "\n" (make-string
- (* json-mode-indent-level (nth 0 ppss))
- ?\s)))
- (ol (make-overlay (1- (point)) (point))))
- (overlay-put ol 'json-jit-wrap t)
- (overlay-put ol 'after-string s)
- (when closer
- (let ((ol (make-overlay pos (1+ pos))))
- (overlay-put ol 'json-jit-wrap t)
- (overlay-put ol 'before-string s))))))))))
-
-;; FIXME: On a small json file, this seems to work OK, but
-;; line-based movement is already occasionally very slow.
-;; I haven't dared to try it on a largish json file.
-(define-minor-mode json-jit-wrap-mode
- "Add virtual newlines."
- :global nil
- (if json-jit-wrap-mode
- (progn
- ;; Note: this jitter works (almost) character-by-character
- ;; so doesn't need to round up to while lines (which is great!),
- ;; but of course, if font-lock is enabled, jit-lock will
- ;; still end up calling us one whole line at a time :-(
- (jit-lock-register #'json--jit-wrap)
- (add-hook 'change-major-mode-hook
- (lambda () (json-jit-wrap-mode -1)) nil t))
- (jit-lock-unregister #'json--jit-wrap)
- (remove-overlays (point-min) (point-max) 'json-jit-wrap t)))
-
-(provide 'json-mode)
-
-;;; json-mode.el ends here
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [elpa] master 61f91e2: * externals-list: Convert json-mode to :external,
Stefan Monnier <=