[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/go-mode 50e15c7 457/495: Add major mode for go.mod files:
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/go-mode 50e15c7 457/495: Add major mode for go.mod files: go-dot-mod-mode |
Date: |
Sat, 7 Aug 2021 09:06:08 -0400 (EDT) |
branch: elpa/go-mode
commit 50e15c7f20fb277555e2019e95ff28434bb6dd7a
Author: Peter Sanford <psanford@sanford.io>
Commit: Muir Manders <muir@mnd.rs>
Add major mode for go.mod files: go-dot-mod-mode
This is a simple major mode for go.mod files. It's named
go-dot-mod-mode instead of go-mod-mode to avoid tab completion
conflicts with go-mode* functions.
---
go-mode.el | 44 ++++++++++++++++++++++++++++++++++
test/go-indentation-test.el | 8 +++++++
test/testdata/indentation_tests/go.mod | 19 +++++++++++++++
3 files changed, 71 insertions(+)
diff --git a/go-mode.el b/go-mode.el
index 3cad755..c4be225 100644
--- a/go-mode.el
+++ b/go-mode.el
@@ -2620,6 +2620,50 @@ If BUFFER, return the number of characters in that
buffer instead."
(with-current-buffer (or buffer (current-buffer))
(1- (position-bytes (point-max)))))
+(defvar go-dot-mod-mode-map
+ (let ((map (make-sparse-keymap)))
+ map)
+ "Keymap for `go-dot-mod-mode'.")
+
+(defvar go-dot-mod-mode-syntax-table
+ (let ((st (make-syntax-table)))
+ ;; handle '//' comment syntax
+ (modify-syntax-entry ?/ ". 124b" st)
+ (modify-syntax-entry ?\n "> b" st)
+ st)
+ "Syntax table for `go-dot-mod-mode'.")
+
+(defconst go-dot-mod-mode-keywords
+ '("module" "go" "require" "replace" "exclude")
+ "All keywords in the Go language. Used for font locking.")
+
+(defvar go-dot-mod-font-lock-keywords
+ `(
+ (,(concat "\\_<" (regexp-opt go-dot-mod-mode-keywords t) "\\_>") .
font-lock-keyword-face))
+ "Keyword highlighting specification for `go-dot-mod-mode'.")
+
+;;;###autoload
+(define-derived-mode go-dot-mod-mode fundamental-mode "Go Mod"
+ "A major mode for editing go.mod files."
+ :syntax-table go-dot-mod-mode-syntax-table
+ (set (make-local-variable 'comment-start) "// ")
+ (set (make-local-variable 'comment-end) "")
+ (set (make-local-variable 'comment-use-syntax) t)
+ (set (make-local-variable 'comment-start-skip) "\\(//+\\)\\s *")
+
+ (set (make-local-variable 'font-lock-defaults)
+ '(go-dot-mod-font-lock-keywords))
+ (set (make-local-variable 'indent-line-function) 'go-mode-indent-line)
+
+ ;; Go style
+ (setq indent-tabs-mode t)
+
+ ;; we borrow the go-mode-indent function so we need this buffer cache
+ (set (make-local-variable 'go-dangling-cache) (make-hash-table :test 'eql))
+ (add-hook 'before-change-functions #'go--reset-dangling-cache-before-change
t t))
+
+;;;###autoload
+(add-to-list 'auto-mode-alist '("go\\.mod\\'" . go-dot-mod-mode))
;; Polyfills for functions added in Emacs 26. Remove these once we don’t
;; support Emacs 25 any more.
diff --git a/test/go-indentation-test.el b/test/go-indentation-test.el
index 03b0f9c..c5947f0 100644
--- a/test/go-indentation-test.el
+++ b/test/go-indentation-test.el
@@ -16,6 +16,14 @@
(indent-region (point-min) (point-max) nil)
(should (string= contents-before-indent (buffer-string)))))))
+(ert-deftest go-dot-mod--indent-line ()
+ (with-temp-buffer
+ (go-dot-mod-mode)
+ (insert-file-contents "testdata/indentation_tests/go.mod")
+ (let ((contents-before-indent (buffer-string)))
+ (indent-region (point-min) (point-max) nil)
+ (should (string= contents-before-indent (buffer-string))))))
+
(defun go--should-indent (input expected)
"Run `indent-region' against INPUT and make sure it matches EXPECTED."
(with-temp-buffer
diff --git a/test/testdata/indentation_tests/go.mod
b/test/testdata/indentation_tests/go.mod
new file mode 100644
index 0000000..1353039
--- /dev/null
+++ b/test/testdata/indentation_tests/go.mod
@@ -0,0 +1,19 @@
+module my/thing
+
+// comment
+go 1.12
+
+require other/thing v1.0.2
+require new/thing/v2 v2.3.4
+exclude old/thing v1.2.3
+replace bad/thing v1.4.5 => good/thing v1.4.5
+
+require (
+ // comment inside block
+ new/thing v2.3.4
+ old/thing v1.2.3
+)
+
+replace (
+ bad/thing v1.4.5 => good/thing v1.4.5
+)
- [nongnu] elpa/go-mode e79970d 224/495: fix beginning-of-defun for abs(count) > 1, (continued)
- [nongnu] elpa/go-mode e79970d 224/495: fix beginning-of-defun for abs(count) > 1, ELPA Syncer, 2021/08/07
- [nongnu] elpa/go-mode cec546c 306/495: Clarify some points in NEWS, ELPA Syncer, 2021/08/07
- [nongnu] elpa/go-mode 5c1c546 307/495: Don't fontify parenthesis of multi-line type declaration, ELPA Syncer, 2021/08/07
- [nongnu] elpa/go-mode 99b06da 408/495: Describe gofmt-args in the readme and the gofmt docstring (also gofmt-command), ELPA Syncer, 2021/08/07
- [nongnu] elpa/go-mode 7c50c80 410/495: Always move back to same column after applying rcs patch, ELPA Syncer, 2021/08/07
- [nongnu] elpa/go-mode e20a54a 426/495: Speed up go-previous-line-has-dangling-op-p, ELPA Syncer, 2021/08/07
- [nongnu] elpa/go-mode 1650ae5 434/495: Fix multiline case statement indent., ELPA Syncer, 2021/08/07
- [nongnu] elpa/go-mode 1fcf76d 435/495: Fix indentation regexes to be case insensitive, ELPA Syncer, 2021/08/07
- [nongnu] elpa/go-mode 8796ec6 446/495: indent: fix floating point literal with trailing point, ELPA Syncer, 2021/08/07
- [nongnu] elpa/go-mode 1bbe1d0 451/495: update default go-packages-function to use go list, ELPA Syncer, 2021/08/07
- [nongnu] elpa/go-mode 50e15c7 457/495: Add major mode for go.mod files: go-dot-mod-mode,
ELPA Syncer <=
- [nongnu] elpa/go-mode a414da8 465/495: Fontify "font-lock-negation-char-face", ELPA Syncer, 2021/08/07
- [nongnu] elpa/go-mode 1ef3e95 476/495: Fix fontification of single line composite literal., ELPA Syncer, 2021/08/07
- [nongnu] elpa/go-mode db8284d 485/495: Handle godef "no object" error, ELPA Syncer, 2021/08/07