Commit 3d63ec24 authored by Rui Ueyama's avatar Rui Ueyama Committed by Alan Donovan

misc/emacs: ignore backquote in comment or string

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
parent 95ee7d64
...@@ -294,7 +294,7 @@ For mode=set, all covered lines will have this weight." ...@@ -294,7 +294,7 @@ For mode=set, all covered lines will have this weight."
(defconst go--font-lock-syntactic-keywords (defconst go--font-lock-syntactic-keywords
;; Override syntax property of raw string literal contents, so that ;; Override syntax property of raw string literal contents, so that
;; backslashes have no special meaning in ``. Used in Emacs 23 or older. ;; backslashes have no special meaning in ``. Used in Emacs 23 or older.
'(("\\(`\\)\\([^`]*\\)\\(`\\)" '((go--match-raw-string-literal
(1 (7 . ?`)) (1 (7 . ?`))
(2 (15 . nil)) ;; 15 = "generic string" (2 (15 . nil)) ;; 15 = "generic string"
(3 (7 . ?`))))) (3 (7 . ?`)))))
...@@ -367,6 +367,18 @@ STOP-AT-STRING is not true, over strings." ...@@ -367,6 +367,18 @@ STOP-AT-STRING is not true, over strings."
(- (point-max) (- (point-max)
(point-min)))) (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 () (defun go-previous-line-has-dangling-op-p ()
"Returns non-nil if the current line is a continuation line." "Returns non-nil if the current line is a continuation line."
(let* ((cur-line (line-number-at-pos)) (let* ((cur-line (line-number-at-pos))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment