X-Loop: help-debbugs@HIDDEN Subject: bug#21875: 24.5; Invalid tokens in smie indentation rules Resent-From: mail@HIDDEN Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Wed, 11 Nov 2015 02:04:02 +0000 Resent-Message-ID: <handler.21875.B.144720738529094 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: report 21875 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: 21875 <at> debbugs.gnu.org X-Debbugs-Original-To: bug-gnu-emacs@HIDDEN Received: via spool by submit <at> debbugs.gnu.org id=B.144720738529094 (code B ref -1); Wed, 11 Nov 2015 02:04:02 +0000 Received: (at submit) by debbugs.gnu.org; 11 Nov 2015 02:03:05 +0000 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 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-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))
Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.503 (Entity 5.503) Content-Type: text/plain; charset=utf-8 X-Loop: help-debbugs@HIDDEN From: help-debbugs@HIDDEN (GNU bug Tracking System) To: mail@HIDDEN Subject: bug#21875: Acknowledgement (24.5; Invalid tokens in smie indentation rules) Message-ID: <handler.21875.B.144720738529094.ack <at> debbugs.gnu.org> References: <87si4dxsel.fsf@HIDDEN> X-Gnu-PR-Message: ack 21875 X-Gnu-PR-Package: emacs Reply-To: 21875 <at> debbugs.gnu.org Date: Wed, 11 Nov 2015 02:04:02 +0000 Thank you for filing a new bug report with debbugs.gnu.org. This is an automatically generated reply to let you know your message has been received. Your message is being forwarded to the package maintainers and other interested parties for their attention; they will reply in due course. Your message has been sent to the package maintainer(s): bug-gnu-emacs@HIDDEN If you wish to submit further information on this problem, please send it to 21875 <at> debbugs.gnu.org. Please do not send mail to help-debbugs@HIDDEN unless you wish to report a problem with the Bug-tracking system. --=20 21875: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D21875 GNU Bug Tracking System Contact help-debbugs@HIDDEN with problems
X-Loop: help-debbugs@HIDDEN Subject: bug#21875: 24.5; Invalid tokens in smie indentation rules Resent-From: Glenn Morris <rgm@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Wed, 11 Nov 2015 19:04:02 +0000 Resent-Message-ID: <handler.21875.B21875.144726858618138 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: followup 21875 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier <monnier@HIDDEN> Cc: 21875 <at> debbugs.gnu.org, mail@HIDDEN Received: via spool by 21875-submit <at> debbugs.gnu.org id=B21875.144726858618138 (code B ref 21875); Wed, 11 Nov 2015 19:04:02 +0000 Received: (at 21875) by debbugs.gnu.org; 11 Nov 2015 19:03:06 +0000 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> 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-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.
X-Loop: help-debbugs@HIDDEN Subject: bug#21875: 24.5; Invalid tokens in smie indentation rules Resent-From: Stefan Monnier <monnier@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Wed, 11 Nov 2015 20:52:01 +0000 Resent-Message-ID: <handler.21875.B21875.14472750977717 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: followup 21875 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: 21875 <at> debbugs.gnu.org Received: via spool by 21875-submit <at> debbugs.gnu.org id=B21875.14472750977717 (code B ref 21875); Wed, 11 Nov 2015 20:52:01 +0000 Received: (at 21875) by debbugs.gnu.org; 11 Nov 2015 20:51:37 +0000 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> 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-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
X-Loop: help-debbugs@HIDDEN Subject: bug#21875: 24.5; Invalid tokens in smie indentation rules Resent-From: Glenn Morris <rgm@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Wed, 11 Nov 2015 21:58:02 +0000 Resent-Message-ID: <handler.21875.B21875.144727907413667 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: followup 21875 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: mail@HIDDEN Cc: 21875 <at> debbugs.gnu.org, Stefan Monnier <monnier@HIDDEN> Received: via spool by 21875-submit <at> debbugs.gnu.org id=B21875.144727907413667 (code B ref 21875); Wed, 11 Nov 2015 21:58:02 +0000 Received: (at 21875) by debbugs.gnu.org; 11 Nov 2015 21:57:54 +0000 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> 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-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-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.
X-Loop: help-debbugs@HIDDEN Subject: bug#21875: 24.5; Invalid tokens in smie indentation rules Resent-From: Arthur Evstifeev <mail@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Fri, 13 Nov 2015 02:27:01 +0000 Resent-Message-ID: <handler.21875.B21875.144738158230966 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: followup 21875 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Glenn Morris <rgm@HIDDEN> Cc: 21875 <at> debbugs.gnu.org, Stefan Monnier <monnier@HIDDEN> Received: via spool by 21875-submit <at> debbugs.gnu.org id=B21875.144738158230966 (code B ref 21875); Fri, 13 Nov 2015 02:27:01 +0000 Received: (at 21875) by debbugs.gnu.org; 13 Nov 2015 02:26:22 +0000 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> 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-Mailman-Approved-At: Thu, 12 Nov 2015 21:26:20 -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: -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 --=-=-=--
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.