Received: (at 21875) by debbugs.gnu.org; 13 Nov 2015 02:26:22 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Nov 12 21:26:22 2015
Received: from localhost ([127.0.0.1]:35310 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.80)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1Zx44D-00083N-Tz
for submit <at> debbugs.gnu.org; Thu, 12 Nov 2015 21:26:22 -0500
Received: from ap4y.me ([45.79.156.233]:47360)
by debbugs.gnu.org with esmtp (Exim 4.80)
(envelope-from <mail@HIDDEN>) id 1Zx3fF-0007U7-Lp
for 21875 <at> debbugs.gnu.org; Thu, 12 Nov 2015 21:00:52 -0500
Received: from [127.0.0.1] (localhost [127.0.0.1])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by ap4y.me (Postfix) with ESMTPSA id CB9DD58E;
Fri, 13 Nov 2015 02:00:22 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ap4y.me; s=default;
t=1447380024; bh=GhsspgwiGemIZh2l73ktFIhARgfUNfobTQuY8QswpAY=;
h=References:From:To:Cc:Subject:In-reply-to:Date:From;
b=RpGm4m7SwpRjLCkuvR0ai5YuTZ9EYlFRUP24EqIw/6FNvrEkeoy8m376P2Kfok1wK
bu/ys6n/NKKDgARU1EGuVuliw9BRmEgFAnYkZBCJgsx9piFmUJus8rM+zmc9vLuiAt
2qD7U3ve53C601g0K31LpHWv1tjFrLy1QV03+cC0=
References: <87si4dxsel.fsf@HIDDEN>
<awoaf05pgd.fsf@HIDDEN>
<jwvmvukntwg.fsf-monnier+emacsbugs@HIDDEN> <2mvukb3nd.fsf@HIDDEN>
From: Arthur Evstifeev <mail@HIDDEN>
To: Glenn Morris <rgm@HIDDEN>
Subject: Re: bug#21875: 24.5; Invalid tokens in smie indentation rules
In-reply-to: <2mvukb3nd.fsf@HIDDEN>
Date: Fri, 13 Nov 2015 15:00:26 +1300
Message-ID: <87r3juwtdx.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Spam-Score: -0.4 (/)
X-Debbugs-Envelope-To: 21875
X-Mailman-Approved-At: Thu, 12 Nov 2015 21:26:20 -0500
Cc: 21875 <at> debbugs.gnu.org, Stefan Monnier <monnier@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.4 (/)
--=-=-=
Content-Type: text/plain
Sorry for the delay. I have attached full code of the swift-mode with
minimal smie implementation. I didn't clean other pieces of the mode
like syntax table and highlighting code, hope this won't be too
inconvenient to work with.
--=-=-=
Content-Type: application/emacs-lisp
Content-Disposition: attachment; filename=swift-mode.el
Content-Transfer-Encoding: quoted-printable
;;; swift-mode.el --- Major-mode for Apple's Swift programming language. -*=
- lexical-binding: t -*-
;; Copyright (C) 2014 Chris Barrett, Bozhidar Batsov, Arthur Evstifeev
;; Authors: Chris Barrett <chris.d.barrett@HIDDEN>
;; Bozhidar Batsov <bozhidar@HIDDEN>
;; Arthur Evstifeev <lod@HIDDEN>
;; Version: 0.4.0-cvs
;; Package-Requires: ((emacs "24.4"))
;; Keywords: languages swift
;; This file is not part of GNU Emacs.
;; 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 Apple's Swift programming language.
;;; Code:
(require 'rx)
(require 'comint)
(require 'cl-lib)
(defgroup swift nil
"Configuration for swift-mode."
:group 'languages
:prefix "swift-")
(defcustom swift-indent-offset 4
"Defines the indentation offset for Swift code."
:group 'swift
:type 'integer)
(defcustom swift-indent-switch-case-offset 0
"Defines the indentation offset for cases in a switch statement."
:group 'swift
:type 'integer)
(defcustom swift-indent-multiline-statement-offset 2
"Defines the indentation offset for multiline statements."
:group 'swift
:type 'integer
:package-version '(swift-mode "0.3.0"))
(defcustom swift-indent-hanging-comma-offset nil
"Defines the indentation offset for hanging comma."
:group 'swift
:type '(choice (const :tag "Use default relative formatting" nil)
(integer :tag "Custom offset"))
:package-version '(swift-mode "0.4.0"))
(defcustom swift-repl-executable
"xcrun swift"
"Path to the Swift CLI."
:group 'swift)
;;; Indentation
(require 'smie)
(defconst swift-smie-grammar
(smie-prec2->grammar
(smie-merge-prec2s
(smie-bnf->prec2
'((id)
(inst ("if" exp "begin" insts "end")
(exp))
(insts (insts ";" insts) (inst))
(exp (exp "." id)
(id ":" exp)
(exp "=3D" exp))
(exps (exps "," exps) (exp)))
;; Conflicts
'((assoc ";"))
'((assoc ","))
'((right "=3D") (assoc ".") (assoc ":") (assoc ",")))
(smie-precs->prec2
'(
(right "*=3D" "/=3D" "%=3D" "+=3D" "-=3D" "<<=3D" ">>=3D" "&=3D"
"^=3D" "|=3D" "&&=3D" "||=3D" "=3D") ;;=
Assignment (Right associative, precedence level 90)
(right "?" ":") ;; Ternary C=
onditional (Right associative, precedence level 100)
(left "||") ;; Disjuncti=
ve (Left associative, precedence level 110)
(left "&&") ;; Conjuncti=
ve (Left associative, precedence level 120)
(right "??") ;; Nil Coale=
scing (Right associativity, precedence level 120)
(nonassoc "<" "<=3D" ">" ">=3D" "=3D=3D" "!=3D" "=3D=3D=3D" "!=3D=3D=
" "~=3D") ;; Comparative (No associativity, precedence level 130)
(nonassoc "is" "as" "as!" "as?") ;; Cast (No =
associativity, precedence level 132)
(nonassoc "..<" "...") ;; Range (No=
associativity, precedence level 135)
(left "+" "-" "&+" "&-" "|" "^") ;; Additive =
(Left associative, precedence level 140)
(left "*" "/" "%" "&*" "&/" "&%" "&") ;; Multiplic=
ative (Left associative, precedence level 150)
(nonassoc "<<" ">>") ;; Exponenti=
ative (No associativity, precedence level 160)
))
)))
(defun verbose-swift-smie-rules (kind token)
(let ((value (swift-smie-rules kind token)))
(message "%s '%s'; sibling-p:%s parent:%s hanging:%s =3D=3D %s" kind to=
ken
(ignore-errors (smie-rule-sibling-p))
(ignore-errors smie--parent)
(ignore-errors (smie-rule-hanging-p))
value)
value))
(defvar swift-smie--operators
'("*=3D" "/=3D" "%=3D" "+=3D" "-=3D" "<<=3D" ">>=3D" "&=3D" "^=3D" "|=3D"=
"&&=3D" "||=3D"
"<" "<=3D" ">" ">=3D" "=3D=3D" "!=3D" "=3D=3D=3D" "!=3D=3D" "~=3D" "||" =
"&&"
"is" "as" "as!" "as?" "..<" "..."
"+" "-" "&+" "&-" "|" "^"
"*" "/" "%" "&*" "&/" "&%" "&"
"<<" ">>" "??"))
(defvar swift-smie--operators-regexp
(regexp-opt swift-smie--operators))
(defun swift-smie--implicit-semi-p ()
(save-excursion
(skip-chars-backward " \t")
(not (or (bolp)
(memq (char-before) '(?\{ ?\[ ?, ?. ?: ?=3D ?\())
;; Checking for operators form for "?" and "!",
;; they can be a part of the type.
;; Special case: is? and as? are operators.
(looking-back "[[:space:]][?!]" (- (point) 2) t)
;; ??, is? and as? are operators
(looking-back "[?][?]\\|as[?]\\|is[?]" (- (point) 3) t)
;; "in" operator in closure
(looking-back "\\bin" (- (point) 3) t)
;; Characters placed on the second line in multi-line expressi=
on
(save-excursion
(forward-comment (buffer-size))
(looking-at "[.?:()]"))
;; Operators placed on the second line in multi-line expression
;; Should respect here possible comments strict before the lin=
ebreak
(save-excursion
(forward-comment (buffer-size))
(looking-at swift-smie--operators-regexp))
(and (looking-back swift-smie--operators-regexp (- (point) 3) =
t)
;; Not a generic type
(not (looking-back "[[:upper:]]>" (- (point) 2) t)))
))))
(defun swift-smie--forward-token-debug ()
(let ((op (point))
(token (swift-smie--forward-token)))
(message "forward: %s -> %s =3D %s" op (point) token)
token
))
(defun swift-smie--backward-token-debug ()
(let ((op (point))
(token (swift-smie--backward-token)))
(message "backward: %s -> %s =3D %s" op (point) token)
token
))
(defvar swift-smie--case-exp-regexp
"\\(case.*?[^{}:=3D]+\\|default[[:space:]]*\\):")
(defun swift-smie--case-signature-p ()
(save-excursion
(up-list 1) (backward-list 1)
(not (looking-back "enum.*" (line-beginning-position -1)))))
(defun swift-smie--closure-signature-p ()
(let ((tok (smie-default-forward-token)))
(or (equal tok "in")
(and (equal tok "->")
(equal (smie-default-forward-token) "in")))))
(defun swift-smie--forward-token ()
(skip-chars-forward " \t")
(cond
((and (looking-at "\n\\|\/\/")
(swift-smie--implicit-semi-p))
(if (eolp) (forward-char 1) (forward-comment 1))
(skip-chars-forward " \t")
(if (looking-at swift-smie--case-exp-regexp)
"case-;" ";"))
(t
(forward-comment (point-max))
(cond
((looking-at "{") (forward-char 1) "begin")
((looking-at "}") (forward-char 1) "end")
(t (smie-default-forward-token))
))))
(defun swift-smie--backward-token ()
(let ((pos (point)))
(forward-comment (- (point)))
(cond
((and (> pos (line-end-position))
(swift-smie--implicit-semi-p))
(if (save-excursion
(forward-comment 1)
(looking-at swift-smie--case-exp-regexp))
"case-;" ";"))
((eq (char-before) ?\{) (backward-char 1) "begin")
((eq (char-before) ?\}) (backward-char 1) "end")
(t (smie-default-backward-token))
)))
(defun swift-smie-rules (kind token)
(pcase (cons kind token)
(`(:elem . basic) swift-indent-offset)))
;;; Font lock
(defvar swift-mode--type-decl-keywords
'("class" "enum" "protocol" "struct" "typealias"))
(defvar swift-mode--val-decl-keywords
'("let" "var"))
(defvar swift-mode--context-variables-keywords
'("self" "super"))
(defvar swift-mode--fn-decl-keywords
'("deinit" "func" "init"))
(defvar swift-mode--misc-keywords
'("import" "static" "subscript" "extension"))
(defvar swift-mode--statement-keywords
'("break" "case" "continue" "default" "do" "else" "fallthrough"
"if" "in" "for" "return" "switch" "where" "repeat" "while" "guard"))
(defvar swift-mode--contextual-keywords
'("associativity" "didSet" "get" "infix" "inout" "left" "mutating" "none"
"nonmutating" "operator" "override" "postfix" "precedence" "prefix" "ri=
ght"
"set" "unowned" "unowned(safe)" "unowned(unsafe)" "weak" "willSet" "con=
venience"
"required" "dynamic" "final" "lazy" "optional" "private" "public" "inte=
rnal"))
(defvar swift-mode--attribute-keywords
'("class_protocol" "exported" "noreturn"
"NSCopying" "NSManaged" "objc" "autoclosure"
"available" "noescape" "nonobjc" "NSApplicationMain" "testable" "UIAppl=
icationMain" "warn_unused_result" "convention"
"IBAction" "IBDesignable" "IBInspectable" "IBOutlet"))
(defvar swift-mode--keywords
(append swift-mode--type-decl-keywords
swift-mode--val-decl-keywords
swift-mode--context-variables-keywords
swift-mode--fn-decl-keywords
swift-mode--misc-keywords
swift-mode--statement-keywords
swift-mode--contextual-keywords)
"Keywords used in the Swift language.")
(defvar swift-mode--constants
'("true" "false" "nil"))
(defvar swift-font-lock-keywords
`(
;; Keywords
;;
;; Swift allows reserved words to be used as identifiers when enclosed
;; with backticks, in which case they should be highlighted as
;; identifiers, not keywords.
(,(rx-to-string
`(and (or bol (not (any "`"))) bow
(group (or ,@swift-mode--keywords))
eow)
t)
1 font-lock-keyword-face)
;; Attributes
;;
;; Highlight attributes with keyword face
(,(rx-to-string
`(and "@" bow (or ,@swift-mode--attribute-keywords) eow)
t)
0 font-lock-keyword-face)
;; Types
;;
;; Any token beginning with an uppercase character is highlighted as a
;; type.
(,(rx bow upper (* word) eow)
0 font-lock-type-face)
;; Function names
;;
;; Any token beginning after `func' is highlighted as a function name.
(,(rx bow "func" eow (+ space) (group bow (+ word) eow))
1 font-lock-function-name-face)
;; Value bindings
;;
;; Any token beginning after `let' or `var' is highlighted as an
;; identifier.
(,(rx-to-string `(and bow
(or ,@swift-mode--val-decl-keywords)
eow
(+ space)
(? "(")
(group (+ (or (+ (? ?`) word (? ?`)) ?, space)))
(? ")"))
t)
1 font-lock-variable-name-face)
;; Use high-visibility face for pattern match wildcards.
(,(rx (not (any word digit)) (group "_") (or eol (not (any word digit))=
))
1 font-lock-negation-char-face)
;; Constants
;;
;; Highlight nil and boolean literals.
(,(rx-to-string `(and bow (or ,@swift-mode--constants) eow))
0 font-lock-constant-face)
;; Attributes
;;
;; Use string face for attribute name.
(,(rx (or bol space)(group "@" (+ word)) eow)
1 font-lock-string-face)
;; Imported modules
;;
;; Highlight the names of imported modules. Use `font-lock-string-face'=
for
;; consistency with C modes.
(,(rx bow "import" eow (+ space) (group (+ word)))
1 font-lock-string-face)
;; String interpolation
;;
;; Highlight interpolation expression as identifier.
(swift-match-interpolation 0 font-lock-variable-name-face t)
))
(defun swift-syntax-propertize-function (start end)
"Syntactic keywords for Swift mode."
(let (case-fold-search)
(goto-char start)
(remove-text-properties start end '(swift-interpolation-match-data))
(funcall
(syntax-propertize-rules
((rx (group "\\(" (* (any alnum " ()+-._/*[]!?<>&~!:|^%")) ")"))
(0 (ignore (swift-syntax-propertize-interpolation)))))
start end)))
(defun swift-syntax-propertize-interpolation ()
(let* ((beg (match-beginning 0))
(context (save-excursion (save-match-data (syntax-ppss beg)))))
(put-text-property beg (1+ beg) 'swift-interpolation-match-data
(cons (nth 3 context) (match-data)))))
(defun swift-match-interpolation (limit)
(let ((pos (next-single-char-property-change (point) 'swift-interpolation=
-match-data
nil limit)))
(when (and pos (> pos (point)))
(goto-char pos)
(let ((value (get-text-property pos 'swift-interpolation-match-data)))
(if (eq (car value) ?\")
(progn
(set-match-data (cdr value))
t)
(swift-match-interpolation limit))))))
;;; Imenu
(defun swift-mode--mk-regex-for-def (keyword)
"Make a regex matching the identifier introduced by KEYWORD."
(let ((ident (rx (any word nonascii "_") (* (any word nonascii digit "_")=
))))
(rx-to-string `(and bow ,keyword eow (+ space) (group (regexp ,ident)))
t)))
(defvar swift-mode--imenu-generic-expression
(list
(list "Functions" (swift-mode--mk-regex-for-def "func") 1)
(list "Classes" (swift-mode--mk-regex-for-def "class") 1)
(list "Enums" (swift-mode--mk-regex-for-def "enum") 1)
(list "Protocols" (swift-mode--mk-regex-for-def "protocol") 1)
(list "Structs" (swift-mode--mk-regex-for-def "struct") 1)
(list "Constants" (swift-mode--mk-regex-for-def "let") 1)
(list "Variables" (swift-mode--mk-regex-for-def "var") 1))
"Value for `imenu-generic-expression' in swift-mode.")
;;; Flycheck
(with-eval-after-load 'flycheck
(flycheck-def-option-var flycheck-swift-sdk-path nil swift
"A path to the targeted SDK"
:type '(choice (const :tag "Don't link against sdk" nil)
(string :tag "Targeted SDK path"))
:safe #'stringp)
(flycheck-def-option-var flycheck-swift-linked-sources nil swift
"Source files path to link against. Can be glob, i.e. *.swift"
:type '(choice (const :tag "Don't use linked sources" nil)
(string :tag "Linked Sources"))
:safe #'stringp)
(flycheck-def-option-var flycheck-swift-framework-search-paths nil swift
"A list of framework search paths"
:type '(repeat (directory :tag "Include directory"))
:safe #'flycheck-string-list-p)
(flycheck-def-option-var flycheck-swift-cc-include-search-paths nil swift
"A list of include file search paths to pass to the Objective C compil=
er"
:type '(repeat (directory :tag "Include directory"))
:safe #'flycheck-string-list-p)
(flycheck-def-option-var flycheck-swift-target "i386-apple-ios8.1" swift
"Target used by swift compiler"
:type '(choice (const :tag "Don't specify target" nil)
(string :tag "Build target"))
:safe #'stringp)
(flycheck-def-option-var flycheck-swift-import-objc-header nil swift
"Objective C header file to import, if any"
:type '(choice (const :tag "Don't specify objective C bridging header"=
nil)
(string :tag "Objective C bridging header path"))
:safe #'stringp)
(flycheck-define-checker swift
"Flycheck plugin for for Apple's Swift programming language."
:command ("swift"
"-frontend" "-parse"
(option "-sdk" flycheck-swift-sdk-path)
(option-list "-F" flycheck-swift-framework-search-paths)
;; Swift compiler will complain about redeclaration
;; if we will include original file along with
;; temporary source file created by flycheck.
;; We also don't want a hidden emacs interlock files.
(eval
(let (source file)
(when flycheck-swift-linked-sources
(setq source (car (flycheck-substitute-argument 'source=
'swift)))
(setq file (file-name-nondirectory source))
(cl-remove-if-not
#'(lambda (path)
(and
(eq (string-match ".#" path) nil)
(eq (string-match file path) nil)))
(file-expand-wildcards flycheck-swift-linked-sources))=
)))
(option "-target" flycheck-swift-target)
(option "-import-objc-header" flycheck-swift-import-objc-hea=
der)
(eval
(cl-mapcan
#'(lambda (path) (list "-Xcc" (concat "-I" path)))
flycheck-swift-cc-include-search-paths))
"-primary-file" source)
:error-patterns
((error line-start (file-name) ":" line ":" column ": "
"error: " (message) line-end)
(warning line-start (file-name) ":" line ":" column ": "
"warning: " (message) line-end))
:modes swift-mode))
;;; REPL
(defvar swift-repl-buffer nil
"Stores the name of the current swift REPL buffer, or nil.")
;;;###autoload
(defun swift-mode-run-repl (cmd &optional dont-switch-p)
"Run a REPL process, input and output via buffer `*swift-repl*'.
If there is a process already running in `*swift-repl*', switch to that buf=
fer.
With argument CMD allows you to edit the command line (default is value
of `swift-repl-executable').
With DONT-SWITCH-P cursor will stay in current buffer.
Runs the hook `swift-repl-mode-hook' \(after the `comint-mode-hook'
is run).
\(Type \\[describe-mode] in the process buffer for a list of commands.)"
(interactive (list (if current-prefix-arg
(read-string "Run swift REPL: " swift-repl-executa=
ble)
swift-repl-executable)))
(unless (comint-check-proc "*swift-repl*")
(save-excursion (let ((cmdlist (split-string cmd)))
(set-buffer (apply 'make-comint "swift-repl" (car cmd=
list)
nil (cdr cmdlist)))
(swift-repl-mode))))
(setq swift-repl-executable cmd)
(setq swift-repl-buffer "*swift-repl*")
(unless dont-switch-p
(pop-to-buffer "*swift-repl*")))
(defun swift-mode-send-region (start end)
"Send the current region to the inferior swift process.
START and END define region within current buffer"
(interactive "r")
(swift-mode-run-repl swift-repl-executable t)
(comint-send-region swift-repl-buffer start end)
(comint-send-string swift-repl-buffer "\n"))
(defun swift-mode-send-buffer ()
"Send the buffer to the Swift REPL process."
(interactive)
(swift-mode-send-region (point-min) (point-max)))
(define-derived-mode swift-repl-mode comint-mode "Swift REPL"
"Major mode for interacting with Swift REPL.
A REPL can be fired up with M-x swift-mode-run-repl.
Customization: Entry to this mode runs the hooks on comint-mode-hook and
swift-repl-mode-hook (in that order).
You can send text to the REPL process from other buffers containing source.
swift-mode-send-region sends the current region to the REPL process,
swift-mode-send-buffer sends the current buffer to the REPL process.
")
;;; Mode definition
(defvar swift-mode-syntax-table
(let ((table (make-syntax-table)))
;; Operators
(dolist (i '(?+ ?- ?* ?/ ?& ?| ?^ ?< ?> ?~))
(modify-syntax-entry i "." table))
;; Strings
(modify-syntax-entry ?\" "\"" table)
(modify-syntax-entry ?\\ "\\" table)
;; Additional symbols
(modify-syntax-entry ?_ "w" table)
(modify-syntax-entry ?? "_" table)
(modify-syntax-entry ?! "_" table)
(modify-syntax-entry ?: "." table)
;; Comments
(modify-syntax-entry ?/ ". 124b" table)
(modify-syntax-entry ?* ". 23n" table)
(modify-syntax-entry ?\n "> b" table)
;; Parenthesis, braces and brackets
(modify-syntax-entry ?\( "()" table)
(modify-syntax-entry ?\) ")(" table)
(modify-syntax-entry ?\[ "(]" table)
(modify-syntax-entry ?\] ")[" table)
(modify-syntax-entry ?\{ "(}" table)
(modify-syntax-entry ?\} "){" table)
table))
(defvar swift-mode-map
(let ((map (make-sparse-keymap)))
(define-key map (kbd "C-c C-z") 'swift-mode-run-repl)
(define-key map (kbd "C-c C-f") 'swift-mode-send-buffer)
(define-key map (kbd "C-c C-r") 'swift-mode-send-region)
(easy-menu-define swift-menu map "Swift Mode menu"
`("Swift"
:help "Swift-specific Features"
["Run REPL" swift-mode-run-repl
:help "Run Swift REPL"]
["Send buffer to REPL" swift-mode-send-buffer
:help "Send the current buffer's contents to the REPL"]
["Send region to REPL" swift-mode-send-region
:help "Send currently selected region to the REPL"]))
map)
"Key map for swift mode.")
;;;###autoload
(define-derived-mode swift-mode prog-mode "Swift"
"Major mode for Apple's Swift programming language.
\\<swift-mode-map>"
:group 'swift
:syntax-table swift-mode-syntax-table
(setq font-lock-defaults '((swift-font-lock-keywords) nil nil))
(setq-local syntax-propertize-function #'swift-syntax-propertize-function)
(setq-local imenu-generic-expression swift-mode--imenu-generic-expression)
(setq-local comment-start "// ")
(setq-local comment-end "")
(setq-local indent-tabs-mode nil)
(setq-local electric-indent-chars
(append '(?. ?, ?: ?\) ?\] ?\}) electric-indent-chars))
(smie-setup swift-smie-grammar 'verbose-swift-smie-rules ;; 'verbose-swif=
t-smie-rules
:forward-token 'swift-smie--forward-token-debug
:backward-token 'swift-smie--backward-token-debug))
;;;###autoload
(add-to-list 'auto-mode-alist '("\\.swift\\'" . swift-mode))
(provide 'swift-mode)
;;; swift-mode.el ends here
--=-=-=
Content-Type: text/plain
Glenn Morris writes:
> [resending including the OP in the list of recipients]
>
> Stefan Monnier wrote:
>
>>>> And lexer rule that overrides braces with begin/end tokens, for example
>>>> like this:
>>>>
>>>> ((looking-at "{") (forward-char 1) "begin")
>>>> ((looking-at "}") (forward-char 1) "end")
>>
>> This is not enough info: we need the complete code so we can run it on
>> our side and single-step through it to see what's going on.
--
Sent with my mu4e
--=-=-=--
bug-gnu-emacs@HIDDEN:bug#21875; Package emacs.
Full text available.
Received: (at 21875) by debbugs.gnu.org; 11 Nov 2015 21:57:54 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 11 16:57:54 2015
Received: from localhost ([127.0.0.1]:33667 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.80)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1ZwdOr-0003YM-Pu
for submit <at> debbugs.gnu.org; Wed, 11 Nov 2015 16:57:54 -0500
Received: from eggs.gnu.org ([208.118.235.92]:41718)
by debbugs.gnu.org with esmtp (Exim 4.80)
(envelope-from <rgm@HIDDEN>) id 1ZwdOX-0003Xt-VD
for 21875 <at> debbugs.gnu.org; Wed, 11 Nov 2015 16:57:52 -0500
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
(envelope-from <rgm@HIDDEN>) id 1ZwdOV-0007hY-L0
for 21875 <at> debbugs.gnu.org; Wed, 11 Nov 2015 16:57:33 -0500
X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org
X-Spam-Level:
X-Spam-Status: No, score=-0.8 required=5.0 tests=BAYES_05,RP_MATCHES_RCVD
autolearn=disabled version=3.3.2
Received: from fencepost.gnu.org ([2001:4830:134:3::e]:33789)
by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <rgm@HIDDEN>)
id 1ZwdOR-0007ge-Tz; Wed, 11 Nov 2015 16:57:27 -0500
Received: from rgm by fencepost.gnu.org with local (Exim 4.82)
(envelope-from <rgm@HIDDEN>)
id 1ZwdOR-0004Go-4t; Wed, 11 Nov 2015 16:57:27 -0500
From: Glenn Morris <rgm@HIDDEN>
To: mail@HIDDEN
Subject: Re: bug#21875: 24.5; Invalid tokens in smie indentation rules
References: <87si4dxsel.fsf@HIDDEN>
<awoaf05pgd.fsf@HIDDEN>
<jwvmvukntwg.fsf-monnier+emacsbugs@HIDDEN>
X-Spook: Power lines WHO Spammer Beltran-Leyva Nationalist Cohiba
X-Ran: <{]CQt=,QMb`"[<>-$K'gp4de6(2cFqG_h6?yZ284E.beIs/o8fmwp6.)sp7;!"]1CG>u@
X-Hue: green
X-Debbugs-No-Ack: yes
X-Attribution: GM
Date: Wed, 11 Nov 2015 16:57:26 -0500
In-Reply-To: <jwvmvukntwg.fsf-monnier+emacsbugs@HIDDEN> (Stefan Monnier's
message of "Wed, 11 Nov 2015 15:51:32 -0500")
Message-ID: <2mvukb3nd.fsf@HIDDEN>
User-Agent: Gnus (www.gnus.org), GNU Emacs (www.gnu.org/software/emacs/)
MIME-Version: 1.0
Content-Type: text/plain
X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address
(bad octet value).
X-Received-From: 2001:4830:134:3::e
X-Spam-Score: -5.3 (-----)
X-Debbugs-Envelope-To: 21875
Cc: 21875 <at> debbugs.gnu.org, Stefan Monnier <monnier@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -5.3 (-----)
[resending including the OP in the list of recipients]
Stefan Monnier wrote:
>>> And lexer rule that overrides braces with begin/end tokens, for example
>>> like this:
>>>
>>> ((looking-at "{") (forward-char 1) "begin")
>>> ((looking-at "}") (forward-char 1) "end")
>
> This is not enough info: we need the complete code so we can run it on
> our side and single-step through it to see what's going on.
bug-gnu-emacs@HIDDEN:bug#21875; Package emacs.
Full text available.
Received: (at 21875) by debbugs.gnu.org; 11 Nov 2015 20:51:37 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 11 15:51:37 2015
Received: from localhost ([127.0.0.1]:33616 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.80)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1ZwcMj-00020O-AQ
for submit <at> debbugs.gnu.org; Wed, 11 Nov 2015 15:51:37 -0500
Received: from ironport2-out.teksavvy.com ([206.248.154.181]:1822)
by debbugs.gnu.org with esmtp (Exim 4.80)
(envelope-from <monnier@HIDDEN>) id 1ZwcMf-00020E-O6
for 21875 <at> debbugs.gnu.org; Wed, 11 Nov 2015 15:51:34 -0500
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: A0A1FgA731xV/8uQWxdcgxCEAoVVwwsEAgKBPDwRAQEBAQEBAYEKQQWDXQEBAwFWMws0EhQYDYhbCM8jAQEIAiCLOoUMFoQXBYwwqFQjhBYggngBAQE
X-IPAS-Result: A0A1FgA731xV/8uQWxdcgxCEAoVVwwsEAgKBPDwRAQEBAQEBAYEKQQWDXQEBAwFWMws0EhQYDYhbCM8jAQEIAiCLOoUMFoQXBYwwqFQjhBYggngBAQE
X-IronPort-AV: E=Sophos;i="5.13,465,1427774400"; d="scan'208";a="177820227"
Received: from 23-91-144-203.cpe.pppoe.ca (HELO pastel.home) ([23.91.144.203])
by ironport2-out.teksavvy.com with ESMTP; 11 Nov 2015 15:51:32 -0500
Received: by pastel.home (Postfix, from userid 20848)
id 92126601DD; Wed, 11 Nov 2015 15:51:32 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
To: 21875 <at> debbugs.gnu.org
Subject: Re: bug#21875: 24.5; Invalid tokens in smie indentation rules
Message-ID: <jwvmvukntwg.fsf-monnier+emacsbugs@HIDDEN>
References: <87si4dxsel.fsf@HIDDEN>
<awoaf05pgd.fsf@HIDDEN>
Date: Wed, 11 Nov 2015 15:51:32 -0500
In-Reply-To: <awoaf05pgd.fsf@HIDDEN> (Glenn Morris's message of
"Wed, 11 Nov 2015 14:02:58 -0500")
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: 0.3 (/)
X-Debbugs-Envelope-To: 21875
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: 0.3 (/)
>> And lexer rule that overrides braces with begin/end tokens, for example
>> like this:
>>
>> ((looking-at "{") (forward-char 1) "begin")
>> ((looking-at "}") (forward-char 1) "end")
This is not enough info: we need the complete code so we can run it on
our side and single-step through it to see what's going on.
Stefan
bug-gnu-emacs@HIDDEN:bug#21875; Package emacs.
Full text available.
Received: (at 21875) by debbugs.gnu.org; 11 Nov 2015 19:03:06 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 11 14:03:06 2015
Received: from localhost ([127.0.0.1]:33559 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.80)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1Zwafh-0004iT-Ni
for submit <at> debbugs.gnu.org; Wed, 11 Nov 2015 14:03:06 -0500
Received: from eggs.gnu.org ([208.118.235.92]:49803)
by debbugs.gnu.org with esmtp (Exim 4.80)
(envelope-from <rgm@HIDDEN>) id 1Zwaff-0004iI-FA
for 21875 <at> debbugs.gnu.org; Wed, 11 Nov 2015 14:03:03 -0500
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
(envelope-from <rgm@HIDDEN>) id 1Zwafe-0004EC-Be
for 21875 <at> debbugs.gnu.org; Wed, 11 Nov 2015 14:03:03 -0500
X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org
X-Spam-Level:
X-Spam-Status: No, score=-2.2 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD
autolearn=disabled version=3.3.2
Received: from fencepost.gnu.org ([2001:4830:134:3::e]:59093)
by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <rgm@HIDDEN>)
id 1Zwafc-0004Dh-1V; Wed, 11 Nov 2015 14:03:00 -0500
Received: from rgm by fencepost.gnu.org with local (Exim 4.82)
(envelope-from <rgm@HIDDEN>)
id 1Zwafb-0004Bx-2d; Wed, 11 Nov 2015 14:02:59 -0500
From: Glenn Morris <rgm@HIDDEN>
To: Stefan Monnier <monnier@HIDDEN>
Subject: Re: bug#21875: 24.5; Invalid tokens in smie indentation rules
References: <87si4dxsel.fsf@HIDDEN>
X-Spook: Disaster management Bridge AVN INSCOM Border Patrol
X-Ran: )n,@dX7bFydav5<x5[Vc'Kc(3;h@P]kHLyKN26+!fi@M2`WWpWBizzIh|I{`]it*U?_ct3
X-Hue: blue
X-Attribution: GM
Date: Wed, 11 Nov 2015 14:02:58 -0500
In-Reply-To: <87si4dxsel.fsf@HIDDEN>
(mail@HIDDEN's message of "Wed, 11 Nov 2015 13:59:30 +1300")
Message-ID: <awoaf05pgd.fsf@HIDDEN>
User-Agent: Gnus (www.gnus.org), GNU Emacs (www.gnu.org/software/emacs/)
MIME-Version: 1.0
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable
X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address
(bad octet value).
X-Received-From: 2001:4830:134:3::e
X-Spam-Score: -5.3 (-----)
X-Debbugs-Envelope-To: 21875
Cc: 21875 <at> debbugs.gnu.org, mail@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -5.3 (-----)
Stefan, FYI:
mail@HIDDEN wrote:
> For the simple grammar like this:
>
> (id)
> (inst ("if" exp "begin" insts "end")
> (exp))
> (insts (insts ";" insts) (inst))
> (exp (exp "." id)
> (id ":" exp)
> (exp "=3D" exp))
> (exps (exps "," exps) (exp))
>
> And lexer rule that overrides braces with begin/end tokens, for example
> like this:
>
> ((looking-at "{") (forward-char 1) "begin")
> ((looking-at "}") (forward-char 1) "end")
>
> When trying to indent such construction:
>
> if true {
> bar
> |}
>
> I'm recieveing indentation request for :close-all '}', but no such
> token was returned by lexer, full log:
>
> forward: 19 -> 20 =3D end
> backward: 20 -> 19 =3D end
> backward: 19 -> 18 =3D ;
> backward: 18 -> 15 =3D bar
> backward: 15 -> 9 =3D begin
> backward: 9 -> 4 =3D true
> backward: 4 -> 1 =3D if
> :close-all '}'; sibling-p:t parent:(nil 1 if) hanging:nil =3D=3D nil
> backward: 20 -> 19 =3D end
> backward: 19 -> 18 =3D ;
> backward: 18 -> 15 =3D bar
> backward: 15 -> 9 =3D begin
> backward: 9 -> 4 =3D true
> backward: 4 -> 1 =3D if
>
>
>
> In GNU Emacs 24.5.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.16.6)
> of 2015-09-10 on foutrelis
> Windowing system distributor `The X.Org Foundation', version 11.0.11702000
> System Description: Arch Linux
>
> Configured using:
> `configure --prefix=3D/usr --sysconfdir=3D/etc --libexecdir=3D/usr/lib
> --localstatedir=3D/var --with-x-toolkit=3Dgtk3 --with-xft
> 'CFLAGS=3D-march=3Dx86-64 -mtune=3Dgeneric -O2 -pipe -fstack-protector-s=
trong
> --param=3Dssp-buffer-size=3D4' CPPFLAGS=3D-D_FORTIFY_SOURCE=3D2
> LDFLAGS=3D-Wl,-O1,--sort-common,--as-needed,-z,relro'
>
> Important settings:
> value of $EMACSLOADPATH: /home/ap4y/github/swift-mode/.cask/24.5.1/elpa=
/flycheck-cask-20150920.453:/home/ap4y/github/swift-mode/.cask/24.5.1/elpa/=
flycheck-20151027.755:/home/ap4y/github/swift-mode/.cask/24.5.1/elpa/dash-2=
0151021.113:/home/ap4y/github/swift-mode/.cask/24.5.1/elpa/pkg-info-2015051=
7.443:/home/ap4y/github/swift-mode/.cask/24.5.1/elpa/epl-20150517.433:/home=
/ap4y/github/swift-mode/.cask/24.5.1/elpa/let-alist-1.0.4:/home/ap4y/github=
/swift-mode/.cask/24.5.1/elpa/s-20150924.406:/usr/share/emacs/24.5/lisp:/us=
r/share/emacs/24.5/lisp/vc:/usr/share/emacs/24.5/lisp/url:/usr/share/emacs/=
24.5/lisp/textmodes:/usr/share/emacs/24.5/lisp/progmodes:/usr/share/emacs/2=
4.5/lisp/play:/usr/share/emacs/24.5/lisp/org:/usr/share/emacs/24.5/lisp/nxm=
l:/usr/share/emacs/24.5/lisp/net:/usr/share/emacs/24.5/lisp/mh-e:/usr/share=
/emacs/24.5/lisp/mail:/usr/share/emacs/24.5/lisp/leim:/usr/share/emacs/24.5=
/lisp/language:/usr/share/emacs/24.5/lisp/international:/usr/share/emacs/24=
.5/lisp/gnus:/usr/share/emacs/24.5/lisp/eshell:/usr/share/emacs/24.5/lisp/e=
rc:/usr/share/emacs/24.5/lisp/emulation:/usr/share/emacs/24.5/lisp/emacs-pa=
rallel:/usr/share/emacs/24.5/lisp/emacs-lisp:/usr/share/emacs/24.5/lisp/ced=
et:/usr/share/emacs/24.5/lisp/calendar:/usr/share/emacs/24.5/lisp/calc:/usr=
/share/emacs/24.5/lisp/obsolete
> value of $LANG: en_US.UTF-8
> locale-coding-system: utf-8-unix
>
> Major mode: Swift
>
> Minor modes in effect:
> tooltip-mode: t
> electric-indent-mode: t
> mouse-wheel-mode: t
> tool-bar-mode: t
> menu-bar-mode: t
> file-name-shadow-mode: t
> global-font-lock-mode: t
> font-lock-mode: t
> blink-cursor-mode: t
> auto-composition-mode: t
> auto-encryption-mode: t
> auto-compression-mode: t
> line-number-mode: t
> transient-mark-mode: t
>
> Recent messages:
> For information about GNU Emacs and the GNU system, type C-h C-a.
> File mode specification error: (wrong-type-argument stringp func-args)
>
> Load-path shadows:
> None found.
bug-gnu-emacs@HIDDEN:bug#21875; Package emacs.
Full text available.
Received: (at submit) by debbugs.gnu.org; 11 Nov 2015 02:03:05 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Nov 10 21:03:05 2015
Received: from localhost ([127.0.0.1]:60794 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.80)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1ZwKkI-0007Yb-HC
for submit <at> debbugs.gnu.org; Tue, 10 Nov 2015 21:03:05 -0500
Received: from eggs.gnu.org ([208.118.235.92]:37633)
by debbugs.gnu.org with esmtp (Exim 4.80)
(envelope-from <mail@HIDDEN>) id 1ZwJlZ-00068J-PI
for submit <at> debbugs.gnu.org; Tue, 10 Nov 2015 20:00:05 -0500
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
(envelope-from <mail@HIDDEN>) id 1ZwJlX-0003pB-Vm
for submit <at> debbugs.gnu.org; Tue, 10 Nov 2015 20:00:01 -0500
X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org
X-Spam-Level:
X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,T_DKIM_INVALID
autolearn=disabled version=3.3.2
Received: from lists.gnu.org ([2001:4830:134:3::11]:60762)
by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <mail@HIDDEN>)
id 1ZwJlX-0003p7-Sv
for submit <at> debbugs.gnu.org; Tue, 10 Nov 2015 19:59:59 -0500
Received: from eggs.gnu.org ([2001:4830:134:3::10]:47631)
by lists.gnu.org with esmtp (Exim 4.71)
(envelope-from <mail@HIDDEN>) id 1ZwJlW-0006s7-Rc
for bug-gnu-emacs@HIDDEN; Tue, 10 Nov 2015 19:59:59 -0500
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
(envelope-from <mail@HIDDEN>) id 1ZwJlS-0003oY-Oj
for bug-gnu-emacs@HIDDEN; Tue, 10 Nov 2015 19:59:58 -0500
Received: from ap4y.me ([45.79.156.233]:59247)
by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <mail@HIDDEN>)
id 1ZwJlS-0003oA-KL
for bug-gnu-emacs@HIDDEN; Tue, 10 Nov 2015 19:59:54 -0500
Received: from [127.0.0.1] (localhost [127.0.0.1])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by ap4y.me (Postfix) with ESMTPSA id 3C4FD58F
for <bug-gnu-emacs@HIDDEN>; Wed, 11 Nov 2015 00:59:37 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ap4y.me; s=default;
t=1447203578; bh=FbPgjMDw7gzb4zbbjz1F6EM0IZHOu1tfjc2c/raLU8k=;
h=From:To:Subject:Date:From;
b=qvF9TXFpa2B7/iLiGVVziuia+Qv/wq4x6F4GCotNZg1VgbQrmyNkIywreqBWSyR+m
vv0jVHLf2HpuY93aT+bD1uFqq29ZSv9jeUa0WVrn4UNe+lcmlhBKsccwnfiBVmqX9n
FTiwK/oHKhd8BzG/AT3F4fCCV91B2vk0wtHBVeto=
From: mail@HIDDEN
To: bug-gnu-emacs@HIDDEN
Subject: 24.5; Invalid tokens in smie indentation rules
Date: Wed, 11 Nov 2015 13:59:30 +1300
Message-ID: <87si4dxsel.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]
X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address
(bad octet value).
X-Received-From: 2001:4830:134:3::11
X-Spam-Score: -4.1 (----)
X-Debbugs-Envelope-To: submit
X-Mailman-Approved-At: Tue, 10 Nov 2015 21:02:44 -0500
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -4.1 (----)
For the simple grammar like this:
(id)
(inst ("if" exp "begin" insts "end")
(exp))
(insts (insts ";" insts) (inst))
(exp (exp "." id)
(id ":" exp)
(exp "=3D" exp))
(exps (exps "," exps) (exp))
And lexer rule that overrides braces with begin/end tokens, for example
like this:
((looking-at "{") (forward-char 1) "begin")
((looking-at "}") (forward-char 1) "end")
When trying to indent such construction:
if true {
bar
|}
I'm recieveing indentation request for :close-all '}', but no such
token was returned by lexer, full log:
forward: 19 -> 20 =3D end
backward: 20 -> 19 =3D end
backward: 19 -> 18 =3D ;
backward: 18 -> 15 =3D bar
backward: 15 -> 9 =3D begin
backward: 9 -> 4 =3D true
backward: 4 -> 1 =3D if
:close-all '}'; sibling-p:t parent:(nil 1 if) hanging:nil =3D=3D nil
backward: 20 -> 19 =3D end
backward: 19 -> 18 =3D ;
backward: 18 -> 15 =3D bar
backward: 15 -> 9 =3D begin
backward: 9 -> 4 =3D true
backward: 4 -> 1 =3D if
In GNU Emacs 24.5.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.16.6)
of 2015-09-10 on foutrelis
Windowing system distributor `The X.Org Foundation', version 11.0.11702000
System Description: Arch Linux
Configured using:
`configure --prefix=3D/usr --sysconfdir=3D/etc --libexecdir=3D/usr/lib
--localstatedir=3D/var --with-x-toolkit=3Dgtk3 --with-xft
'CFLAGS=3D-march=3Dx86-64 -mtune=3Dgeneric -O2 -pipe -fstack-protector-str=
ong
--param=3Dssp-buffer-size=3D4' CPPFLAGS=3D-D_FORTIFY_SOURCE=3D2
LDFLAGS=3D-Wl,-O1,--sort-common,--as-needed,-z,relro'
Important settings:
value of $EMACSLOADPATH: /home/ap4y/github/swift-mode/.cask/24.5.1/elpa/f=
lycheck-cask-20150920.453:/home/ap4y/github/swift-mode/.cask/24.5.1/elpa/fl=
ycheck-20151027.755:/home/ap4y/github/swift-mode/.cask/24.5.1/elpa/dash-201=
51021.113:/home/ap4y/github/swift-mode/.cask/24.5.1/elpa/pkg-info-20150517.=
443:/home/ap4y/github/swift-mode/.cask/24.5.1/elpa/epl-20150517.433:/home/a=
p4y/github/swift-mode/.cask/24.5.1/elpa/let-alist-1.0.4:/home/ap4y/github/s=
wift-mode/.cask/24.5.1/elpa/s-20150924.406:/usr/share/emacs/24.5/lisp:/usr/=
share/emacs/24.5/lisp/vc:/usr/share/emacs/24.5/lisp/url:/usr/share/emacs/24=
.5/lisp/textmodes:/usr/share/emacs/24.5/lisp/progmodes:/usr/share/emacs/24.=
5/lisp/play:/usr/share/emacs/24.5/lisp/org:/usr/share/emacs/24.5/lisp/nxml:=
/usr/share/emacs/24.5/lisp/net:/usr/share/emacs/24.5/lisp/mh-e:/usr/share/e=
macs/24.5/lisp/mail:/usr/share/emacs/24.5/lisp/leim:/usr/share/emacs/24.5/l=
isp/language:/usr/share/emacs/24.5/lisp/international:/usr/share/emacs/24.5=
/lisp/gnus:/usr/share/emacs/24.5/lisp/eshell:/usr/share/emacs/24.5/lisp/erc=
:/usr/share/emacs/24.5/lisp/emulation:/usr/share/emacs/24.5/lisp/emacs-para=
llel:/usr/share/emacs/24.5/lisp/emacs-lisp:/usr/share/emacs/24.5/lisp/cedet=
:/usr/share/emacs/24.5/lisp/calendar:/usr/share/emacs/24.5/lisp/calc:/usr/s=
hare/emacs/24.5/lisp/obsolete
value of $LANG: en_US.UTF-8
locale-coding-system: utf-8-unix
Major mode: Swift
Minor modes in effect:
tooltip-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
tool-bar-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
blink-cursor-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
line-number-mode: t
transient-mark-mode: t
Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.
File mode specification error: (wrong-type-argument stringp func-args)
Load-path shadows:
None found.
Features:
(shadow sort gnus-util mail-extr emacsbug message format-spec rfc822 mml
mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev
gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util
help-fns mail-prsvr mail-utils vc-git swift-mode edmacro kmacro easymenu
derived pcase smie cl-loaddefs cl-lib comint ansi-color ring rx
time-date tooltip electric uniquify ediff-hook vc-hooks lisp-float-type
mwheel x-win x-dnd tool-bar dnd fontset image regexp-opt fringe
tabulated-list newcomment lisp-mode prog-mode register page menu-bar
rfn-eshadow timer select scroll-bar mouse jit-lock font-lock syntax
facemenu font-core frame cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese hebrew greek romanian slovak
czech european ethiopic indian cyrillic chinese case-table epa-hook
jka-cmpr-hook help simple abbrev minibuffer nadvice loaddefs button
faces cus-face macroexp files text-properties overlay sha1 md5 base64
format env code-pages mule custom widget hashtable-print-readable
backquote make-network-process dbusbind gfilenotify dynamic-setting
system-font-setting font-render-setting move-toolbar gtk x-toolkit x
multi-tty emacs)
Memory information:
((conses 16 81358 6097)
(symbols 48 18856 0)
(miscs 40 38 135)
(strings 32 13410 4787)
(string-bytes 1 381215)
(vectors 16 10445)
(vector-slots 8 396568 6410)
(floats 8 66 65)
(intervals 56 205 0)
(buffers 960 12)
(heap 1024 36497 1152))
mail@HIDDEN:bug-gnu-emacs@HIDDEN.
Full text available.bug-gnu-emacs@HIDDEN:bug#21875; Package emacs.
Full text available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.