Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1a6fjV-0001bo-En for pgsql-hackers@arkaria.postgresql.org; Wed, 09 Dec 2015 14:28:41 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1a6fjV-0007dw-11 for pgsql-hackers@arkaria.postgresql.org; Wed, 09 Dec 2015 14:28:41 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1a6fiC-0006BX-D7 for pgsql-hackers@postgresql.org; Wed, 09 Dec 2015 14:27:20 +0000 Received: from 173-164-140-181-sfba.hfc.comcastbusiness.net ([173.164.140.181] helo=fetter.org) by magus.postgresql.org with esmtp (Exim 4.84) (envelope-from ) id 1a6fi7-0004My-Ch for pgsql-hackers@postgresql.org; Wed, 09 Dec 2015 14:27:19 +0000 Received: by fetter.org (Postfix, from userid 500) id AD1C462EBA; Wed, 9 Dec 2015 06:27:09 -0800 (PST) Date: Wed, 9 Dec 2015 06:27:09 -0800 From: David Fetter To: Michael Paquier Cc: Thomas Munro , Alvaro Herrera , Jeff Janes , Tom Lane , Pg Hackers Subject: Re: Making tab-complete.c easier to maintain Message-ID: <20151209142709.GA7050@fetter.org> References: <20151116151923.GX614468@alvherre.pgsql> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.24 (2015-08-30) X-Pg-Spam-Score: -0.9 (/) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org On Wed, Dec 09, 2015 at 08:49:22PM +0900, Michael Paquier wrote: > On Wed, Dec 9, 2015 at 8:17 PM, Thomas Munro > wrote: > > On Mon, Dec 7, 2015 at 8:41 PM, Michael Paquier > > wrote: > >> On Tue, Nov 17, 2015 at 12:19 AM, Alvaro Herrera > >> wrote: > >>> Thomas Munro wrote: > >>>> New version attached, merging recent changes. > >>> > >>> I wonder about the TailMatches and Matches macros --- wouldn't it be > >>> better to have a single one, renaming TailMatches to Matches and > >>> replacing the current Matches() with an initial token that corresponds > >>> to anchoring to start of command? Just wondering, not terribly attached > >>> to the idea. > >> > >> + /* TODO:TM -- begin temporary, not part of the patch! */ > >> + Assert(!word_matches(NULL, "")); > >> + [...] > >> + Assert(!word_matches("foo", "")); > >> + /* TODO:TM -- end temporary */ > >> > >> Be sure to not forget to remove that later. > > > > Thanks for looking at this Michael. It's probably not much fun to > > review! Here is a new version with that bit removed. More responses > > inline below. > > I had a hard time not sleeping when reading it... That's very mechanical. > > > I agree that would probably be better but Alvaro suggested following > > the existing logic in the first pass, which was mostly based on tails, > > and then considering simpler head-based patterns in a future pass. > > Fine with me. > > So what do we do now? There is your patch, which is already quite big, > but as well a second patch based on regexps, which is far bigger. And > at the end they provide a similar result: > > Here is for example what the regexp patch does for some complex > checks, like ALTER TABLE RENAME: > /* ALTER TABLE xxx RENAME yyy */ > - else if (pg_strcasecmp(prev4_wd, "TABLE") == 0 && > - pg_strcasecmp(prev2_wd, "RENAME") == 0 && > - pg_strcasecmp(prev_wd, "CONSTRAINT") != 0 && > - pg_strcasecmp(prev_wd, "TO") != 0) > + else if (MATCH("TABLE #id RENAME !CONSTRAINT|TO")) > > And what Thomas's patch does: > + else if (TailMatches5("ALTER", "TABLE", MatchAny, "RENAME", MatchAny) && > + !TailMatches1("CONSTRAINT|TO")) > > The regexp patch makes the negative checks somewhat easier to read > (there are 19 positions in tab-complete.c doing that), still inventing > a new langage and having a heavy refactoring just tab completion of > psql seems a bit too much IMO, so my heart balances in favor of > Thomas' stuff. Thoughts from others? Agreed that the "whole new language" aspect seems like way too big a hammer, given what it actually does. Cheers, David. -- David Fetter http://fetter.org/ Phone: +1 415 235 3778 AIM: dfetter666 Yahoo!: dfetter Skype: davidfetter XMPP: david.fetter@gmail.com Remember to vote! Consider donating to Postgres: http://www.postgresql.org/about/donate -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers