From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16117 invoked by alias); 29 Jun 2017 10:56:48 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 16103 invoked by uid 89); 29 Jun 2017 10:56:47 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.9 required=5.0 tests=BAYES_00,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=no version=3.3.2 spammy= X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 29 Jun 2017 10:56:46 +0000 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id BC0A3C0E640D; Thu, 29 Jun 2017 10:56:44 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com BC0A3C0E640D Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=palves@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com BC0A3C0E640D Received: from [127.0.0.1] (ovpn04.gateway.prod.ext.ams2.redhat.com [10.39.146.4]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2083974AB9; Thu, 29 Jun 2017 10:56:43 +0000 (UTC) Subject: Re: [PATCH 06/40] Expression completer should not match explicit location options To: Yao Qi References: <1496406158-12663-1-git-send-email-palves@redhat.com> <1496406158-12663-7-git-send-email-palves@redhat.com> <86h8yzdwng.fsf@gmail.com> Cc: gdb-patches@sourceware.org From: Pedro Alves Message-ID: Date: Thu, 29 Jun 2017 10:56:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: <86h8yzdwng.fsf@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-SW-Source: 2017-06/txt/msg00784.txt.bz2 On 06/29/2017 09:29 AM, Yao Qi wrote: > Pedro Alves writes: > >> Currently, the expression completer matches explicit location options, >> which would only make sense for commands that work with linespecs, not >> expressions. >> >> I.e., currently, this: >> "p -functi" >> >> Completes to: >> "p -function " > > I don't know much about completer, expression and explicit location, so > I don't know what do you fix here, anything wrong in the completion? > This is fixing a mismatch between what the completer thinks the print command understands, and what the command really understands. "-function" is an explicit location option that is understood by commands that take (linespecs and) explicit locations as argument. I.e, breakpoint commands, and "list". For example: (gdb) b -source file.c -function my_func So for those commands, it makes sense that the completer completes "b -sour[TAB]" -> "b -source " "b -functi[TAB]" -> "b -function " etc. ( A bit orthogonal, but for clarity: currently, the explicit locations completer doesn't help much with discovering the supported options, because "b -[TAB]" doesn't show you the list of options. It shows the _whole_ list of symbols in the program, which is useless... After the series, specifically after the "A smarter linespec completer" patch, it will, though: (gdb) b -[TAB] -function -label -line -probe -probe-dtrace -probe-stap -qualified -source ) However, commands that take expressions (not linespecs/locations) as arguments, such as the "print" command, do _not_ understand the "-source", "-function" etc. switches. Instead, "-foo" is understood as an expression applying unary minus on a symbol named "foo" (think "print -1"). So it does not make sense for the associated completer to complete on those options: (gdb) p -func[TAB] (gdb) p -function [RET] No symbol "function" in current context. The patch fixes this by having the expression_completer function bypass the function that completes explicit locations: /* Not ideal but it is what we used to do before... */ - return location_completer (ignore, p, word); + return linespec_location_completer (ignore, text, word); (Note how location_completer calls into linespec_location_completer.) >> This patch fixes that, and adds regression tests. Thanks, Pedro Alves