Re: Re: [RFC] token_get_all() TOKEN_AS_OBJECT mode

From: Date: Tue, 25 Feb 2020 21:13:54 +0000
Subject: Re: Re: [RFC] token_get_all() TOKEN_AS_OBJECT mode
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-108763@lists.php.net to get a copy of this message
On Tue, Feb 25, 2020 at 7:16 PM Theodore Brown <theodorejb@outlook.com> wrote: > On Tue, Feb 25, 2020 at 9:59 AM Nikita Popov <nikita.ppv@gmail.com> wrote: > > > On Thu, Feb 13, 2020 at 10:47 AM Nikita Popov <nikita.ppv@gmail.com> > wrote: > > > > > This has been discussed a while ago already, now as a proper proposal: > > > https://wiki.php.net/rfc/token_as_object > > > > > > An open question is whether (at least to start with) PhpToken should be > > > just a data container, or whether we want to add some helper methods > to it. > > > If this generates too much bikeshed, I'll drop methods from the > proposal. > > > > I think this proposal is in a pretty decent shape now, and I'd like to > move > > it to voting soon. The only remaining open question is whether we want to > > add any additional predefined methods. As the class can now be extended, > > every library can add their own methods, but there might still be value > in > > providing some things by default, primarily for performance reason. For > > example, the proposed is() method can be a good bit more efficient when > > implemented directly in extension code. > > > > Any feedback on this point? > > Hi Nikita, > > Thanks for this RFC. The proposed PhpToken class will > definitely make it > easier to work with parsed tokens (I struggled with this when working on > the migration script for deprecated alternate array/string offset syntax). > > In regards to the open question of additional methods, the > getTokenName() > method would be very welcome. isIgnorable() would also be > helpful > sometimes, though I don't care much one way or another if it's added. > > But I'm really skeptical about the value of the is($kind) > method. Code > working with tokens should know the type of value being checked (ID int, > text content, or array of one or the other), and a method that accepts > any of three types can make it harder to understand what's going on. > > For example, the proposed isIgnorable() method doesn't > need to use > is(), it could just check whether the > id property is in the array > of token constants. > To provide some context, a method like is() is primarily useful in the implementation of other methods accepting a token-descriptor to search for. Token stream implementation commonly have many helper methods along the lines of public function findRight($pos, $findTokenType) { $tokens = $this->tokens; for ($count = \count($tokens); $pos < $count; $pos++) { if ($tokens[$pos]->is($findTokenType)) { return $pos; } } return -1; } which search for tokens in different directions, skip tokens, check that tokens exist while skipping whitespace etc. Having a fast primitive to perform the token type check would be quite useful for that, I think. Regards, Nikita

« previous php.internals (#108763) next »