]> Cypherpunks repositories - gostls13.git/commitdiff
misc/emacs: ignore backquote in comment or string
authorRui Ueyama <ruiu@google.com>
Wed, 9 Apr 2014 16:28:27 +0000 (12:28 -0400)
committerAlan Donovan <adonovan@google.com>
Wed, 9 Apr 2014 16:28:27 +0000 (12:28 -0400)
go-mode on Emacs 23 wrongly recognizes a backquote in a comment or
a string as a start of a raw string literal. Below is an example
that go-mode does not work well. This patch is to fix that issue.

  // `
  var x = 1
  // `

LGTM=dominik.honnef
R=golang-codereviews, dominik.honnef, adonovan
CC=golang-codereviews
https://golang.org/cl/84900043

misc/emacs/go-mode.el

index 29b1fa4423ac2c47e9f953b5fbbcf47511837036..6333ff96617f67bb43120ea3e4a4b90f38080a7d 100644 (file)
@@ -294,7 +294,7 @@ For mode=set, all covered lines will have this weight."
 (defconst go--font-lock-syntactic-keywords
   ;; Override syntax property of raw string literal contents, so that
   ;; backslashes have no special meaning in ``. Used in Emacs 23 or older.
-  '(("\\(`\\)\\([^`]*\\)\\(`\\)"
+  '((go--match-raw-string-literal
      (1 (7 . ?`))
      (2 (15 . nil))  ;; 15 = "generic string"
      (3 (7 . ?`)))))
@@ -367,6 +367,18 @@ STOP-AT-STRING is not true, over strings."
       (- (point-max)
          (point-min))))
 
+(defun go--match-raw-string-literal (end)
+  "Search for a raw string literal. Set point to the end of the
+occurence found on success. Returns nil on failure."
+  (when (search-forward "`" end t)
+    (goto-char (match-beginning 0))
+    (if (go-in-string-or-comment-p)
+        (progn (goto-char (match-end 0))
+               (go--match-raw-string-literal end))
+      (when (looking-at "\\(`\\)\\([^`]*\\)\\(`\\)")
+        (goto-char (match-end 0))
+        t))))
+
 (defun go-previous-line-has-dangling-op-p ()
   "Returns non-nil if the current line is a continuation line."
   (let* ((cur-line (line-number-at-pos))