[cfe-dev] clang-tidy: Tool for removing "this->" from source code?

Manuel Klimek klimek at google.com
Wed Jun 10 00:51:52 PDT 2015


On Wed, Jun 10, 2015 at 9:50 AM Manuel Klimek <klimek at google.com> wrote:

> On Wed, Jun 10, 2015 at 3:57 AM Richard Smith <richard at metafoo.co.uk>
> wrote:
>
>> On Tue, Jun 9, 2015 at 3:01 PM, Kevin Funk <kfunk at kde.org> wrote:
>>
>>> On Tuesday 09 June 2015 13:31:40 Richard Smith wrote:
>>> > On Tue, Jun 9, 2015 at 3:52 AM, Manuel Klimek <klimek at google.com>
>>> wrote:
>>> > > Yea, this is really hard currently in clang's design: the only place
>>> at
>>> > > which the lookup information is available is during semantic
>>> analysis on
>>> > > clang's stack :(
>>> > >
>>> > > This has been one of the most requested features though, so perhaps
>>> we can
>>> > > find a way to allow re-querying some flows of sema (or being able to
>>> > > optionally store some info) for this.
>>> > >
>>> > > cc'ing Richard for ideas.
>>> >
>>> > It seems relatively straightforward to walk the AST and rebuild the
>>> Scope
>>> > information that Sema would need to perform an unqualified name lookup
>>> from
>>> > a specified context. A starting point of a clang::Expr is not
>>> sufficient,
>>> > however, because that doesn't identify a unique place in the AST; we'd
>>> need
>>> > to know the path taken to get there. (I'd imagine your AST visitor
>>> could
>>> > easily accumulate this information when it's looking for places to
>>> > transform.)
>>>
>>> That means I cannot use AST matchers but have to walk the AST myself and
>>> accumulate information from contexts while walking it? This doesn't sound
>>> straight forward.
>>>
>>
>> It's probably reasonable to use the parents map to reconstruct the path
>> in this case; if you're planning on making a code transformation, you want
>> to check (for instance) all template instantiations that used that Expr
>> anyway.
>>
>>
>>> Could you point me to code which implements something like this? Or some
>>> code
>>> snippet doing so?
>>>
>>
>> I don't know of any existing code that does anything like this, sorry. As
>> Manuel says this is something we've had requests for but never actually
>> provided before.
>>
>
> Note that when Richard says "straight forward" it usually still means "> 1
> week to implement for a mortal being". It's not trivial.
>

Unless you absolutely don't care about things like ADL, in which case you
can basically walk up the DeclContexts looking for a symbol with the name -
i'm not sure whether you'd need special casing for parameters (Richard?)


>
>
>>
>>
>>> Thanks a lot,
>>> Greets
>>>
>>> > > On Tue, Jun 9, 2015 at 10:05 AM Kevin Funk <kfunk at kde.org> wrote:
>>> > >> On Tuesday 09 June 2015 06:27:02 Wilhelm wrote:
>>> > >> > (snip)
>>> > >> >
>>> > >> > Am 08.06.2015 um 13:54 schrieb Kevin Funk:
>>> > >> > (snip)
>>> > >> >
>>> > >> > > Now the part I'm struggling with is how to make sure the "member
>>> > >> > > name"
>>> > >> > > is a non-ambiguous identifier from the current context so I can
>>> just
>>> > >> > > strip "this->". How can I find out the accessible declarations
>>> (or
>>> > >>
>>> > >> just
>>> > >>
>>> > >> > > the ids) from the context of the expression referencing `this`?
>>> I'm
>>> > >> > > missing API to get the clang::DeclContext, plus looking up
>>> > >>
>>> > >> declarations
>>> > >>
>>> > >> > > accessible from within this context.
>>> > >>
>>> > >> I didn't get a lot of replies to my actual question, so let's maybe
>>> > >> simplify
>>> > >> it a bit.
>>> > >>
>>> > >> My root problem:
>>> > >> Given an instance of clang::Expr: how can I deduce the context of
>>> this
>>> > >> expression and get a list of declarations which are accessible from
>>> this
>>> > >> context. What API can I use for this?
>>> > >>
>>> > >> This sounds trivial, but I didn't figure it out yet. Apparently I'm
>>> > >> missing
>>> > >> something obvious here.
>>> > >>
>>> > >> Thanks.
>>> > >>
>>> > >> --
>>> > >> Kevin Funk | kfunk at kde.org | http://kfunk.org
>>> > >> _______________________________________________
>>> > >> cfe-dev mailing list
>>> > >> cfe-dev at cs.uiuc.edu
>>> > >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>>>
>>> --
>>> Kevin Funk | kfunk at kde.org | http://kfunk.org
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20150610/d157640c/attachment.html>


More information about the cfe-dev mailing list