From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Lars Ingebrigtsen Newsgroups: gmane.emacs.bugs Subject: bug#53203: Comment with lots of color codes crashes or hangs emacs in scss-mode Date: Sat, 14 May 2022 14:38:21 +0200 Message-ID: <87czggl26a.fsf@gnus.org> References: <83r19d5c1i.fsf@gnu.org> <87wnj486il.fsf@gnus.org> <87mtfks8r2.fsf@runbox.com> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="34018"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) Cc: Eli Zaretskii , 53203@debbugs.gnu.org, Colin To: Simen =?UTF-8?Q?Heggest=C3=B8yl?= Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sat May 14 14:39:14 2022 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1npr3C-0008hT-Eh for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 14 May 2022 14:39:14 +0200 Original-Received: from localhost ([::1]:32902 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1npr3A-0005d6-PP for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 14 May 2022 08:39:12 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:48350) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1npr31-0005ca-27 for bug-gnu-emacs@gnu.org; Sat, 14 May 2022 08:39:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:52061) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1npr30-0002Qg-PG for bug-gnu-emacs@gnu.org; Sat, 14 May 2022 08:39:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1npr30-0005Od-HC for bug-gnu-emacs@gnu.org; Sat, 14 May 2022 08:39:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Lars Ingebrigtsen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 14 May 2022 12:39:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 53203 X-GNU-PR-Package: emacs Original-Received: via spool by 53203-submit@debbugs.gnu.org id=B53203.165253191520695 (code B ref 53203); Sat, 14 May 2022 12:39:02 +0000 Original-Received: (at 53203) by debbugs.gnu.org; 14 May 2022 12:38:35 +0000 Original-Received: from localhost ([127.0.0.1]:45958 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1npr2Y-0005Nh-L7 for submit@debbugs.gnu.org; Sat, 14 May 2022 08:38:34 -0400 Original-Received: from quimby.gnus.org ([95.216.78.240]:48846) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1npr2W-0005NU-A0 for 53203@debbugs.gnu.org; Sat, 14 May 2022 08:38:33 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=4p8KimEFPZrjtWW/KekUOpbZQcYFfxlxKVMEyYcQKxA=; b=DSLsZ17wxid3dqVM3qTe4g962d ilHHmH/Wj7UCBLcpDSpfnvJEJ2v9ROMN4cuolzH1/NNyjRNge6G2VPTIyACKvnjWLrh8Ga9xLLvSf K2EXEbUlYDFy1RZeizkWeJGCGdTnb0f8E/JOmvMPNbTDBTEzHa/GPSLbG2hsieiJdocs=; Original-Received: from 77.18.168.214.tmi.telenormobil.no ([77.18.168.214] helo=xo) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1npr2M-00046f-UG; Sat, 14 May 2022 14:38:25 +0200 In-Reply-To: <87mtfks8r2.fsf@runbox.com> ("Simen =?UTF-8?Q?Heggest=C3=B8yl?="'s message of "Sat, 14 May 2022 12:34:25 +0200") X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:232233 Archived-At: OK, I think I understand most of the regexp now, but it's a strange mix of strictness and sloppiness. (,(concat "^[ \t]*\\(" (if (not sassy) ;; We don't allow / as first char, so as not to ;; take a comment as the beginning of a selector. "[^@/:{}() \t\n][^:{}()]*" ;; Same as for non-sassy except we do want to allow { and } ;; chars in selectors in the case of #{$foo} ;; variable interpolation! (concat "\\(?:" scss--hash-re "\\|[^@/:{}() \t\n#]\\)" "[^:{}()#]*\\(?:" scss--hash-re "[^:{}()#]*\\)*")) ;; Even though pseudo-elements should be prefixed by ::, a ;; single colon is accepted for backward compatibility. "\\(?:\\(:" (regexp-opt (append css-pseudo-class-ids css-pseudo-element-ids) t) "\\|::" (regexp-opt css-pseudo-element-ids t) "\\)" "\\(?:([^)]+)\\)?" First we work really hard to see whether we have something that looks like a selector, i.e. a line that starts with, p p::after p:active or in the scss case p#{foo}:active and then we allow any kind of junk for the rest of the line, like p.a *[line noise]* p.b { } with this bit: (if (not sassy) "[^:{}()\n]*" (concat "[^:{}()\n#]*\\(?:" scss--hash-re "[^:{}()\n#]*\\)*")) "\\)*" "\\)\\(?:\n[ \t]*\\)*{") (1 'css-selector keep)) Anyway, I still don't grok this bit: (concat "\\(?:" scss--hash-re "\\|[^@/:{}() \t\n#]\\)" "[^:{}()#]*\\(?:" scss--hash-re "[^:{}()#]*\\)*")) That is, we're matching an scss/css selector first, and then... possibly another one? Which we're doing later, anyway. So just getting rid of that bit seems to lead to the same highlighting (and gets rid of the original reported problem). But like I said, I don't understand quite what it's trying to do there. Can anybody come up with an scss example this breaks? diff --git a/lisp/textmodes/css-mode.el b/lisp/textmodes/css-mode.el index 1139fd1976..fd47a7b83b 100644 --- a/lisp/textmodes/css-mode.el +++ b/lisp/textmodes/css-mode.el @@ -953,14 +953,13 @@ css--font-lock-keywords ;; chars in selectors in the case of #{$foo} ;; variable interpolation! (concat "\\(?:" scss--hash-re - "\\|[^@/:{}() \t\n#]\\)" - "[^:{}()#]*\\(?:" scss--hash-re "[^:{}()#]*\\)*")) + "\\|[^@/:{}() \t\n][^:{}()]\\)*")) ;; Even though pseudo-elements should be prefixed by ::, a ;; single colon is accepted for backward compatibility. "\\(?:\\(:" (regexp-opt (append css-pseudo-class-ids css-pseudo-element-ids) t) - "\\|::" (regexp-opt css-pseudo-element-ids t) "\\)" + "\\|::" (regexp-opt css-pseudo-element-ids t) "\\)?" "\\(?:([^)]+)\\)?" (if (not sassy) "[^:{}()\n]*" -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no