@@ -103,6 +103,7 @@ private module Cached {
103103 TEndBlock ( Generated:: EndBlock g ) or
104104 TEnsure ( Generated:: Ensure g ) or
105105 TEqExpr ( Generated:: Binary g ) { g instanceof @binary_equalequal } or
106+ TExplicitSelf ( Generated:: Self g ) or
106107 TExponentExpr ( Generated:: Binary g ) { g instanceof @binary_starstar } or
107108 TFalseLiteral ( Generated:: False g ) or
108109 TFloatLiteral ( Generated:: Float g ) { not any ( Generated:: Rational r ) .getChild ( ) = g } or
@@ -118,9 +119,16 @@ private module Cached {
118119 THashSplatArgument ( Generated:: HashSplatArgument g ) or
119120 THashSplatParameter ( Generated:: HashSplatParameter g ) or
120121 THereDoc ( Generated:: HeredocBeginning g ) or
121- TIdentifierMethodCall ( Generated:: Identifier g ) { vcall ( g ) and not access ( g , _ ) } or
122+ TIdentifierMethodCall ( Generated:: Identifier g ) { isIdentifierMethodCall ( g ) } or
122123 TIf ( Generated:: If g ) or
123124 TIfModifierExpr ( Generated:: IfModifier g ) or
125+ TImplicitSelf ( Generated:: AstNode g ) {
126+ isIdentifierMethodCall ( g )
127+ or
128+ isRegularMethodCall ( g ) and
129+ not exists ( g .( Generated:: Call ) .getReceiver ( ) ) and
130+ not exists ( g .( Generated:: Call ) .getMethod ( ) .( Generated:: ScopeResolution ) .getScope ( ) )
131+ } or
124132 TInstanceVariableAccess ( Generated:: InstanceVariable g , AST:: InstanceVariable v ) {
125133 InstanceVariableAccess:: range ( g , v )
126134 } or
@@ -157,7 +165,7 @@ private module Cached {
157165 TRegexLiteral ( Generated:: Regex g ) or
158166 TRegexMatchExpr ( Generated:: Binary g ) { g instanceof @binary_equaltilde } or
159167 TRegularArrayLiteral ( Generated:: Array g ) or
160- TRegularMethodCall ( Generated:: Call g ) { not g . getMethod ( ) instanceof Generated :: Super } or
168+ TRegularMethodCall ( Generated:: Call g ) { isRegularMethodCall ( g ) } or
161169 TRegularStringLiteral ( Generated:: String g ) or
162170 TRegularSuperCall ( Generated:: Call g ) { g .getMethod ( ) instanceof Generated:: Super } or
163171 TRescueClause ( Generated:: Rescue g ) or
@@ -179,7 +187,6 @@ private module Cached {
179187 i = g .getName ( ) and
180188 not exists ( Generated:: Call c | c .getMethod ( ) = g )
181189 } or
182- TSelf ( Generated:: Self g ) or
183190 TSimpleParameter ( Generated:: Identifier g ) { g instanceof Parameter:: Range } or
184191 TSimpleSymbolLiteral ( Generated:: SimpleSymbol g ) or
185192 TSingletonClass ( Generated:: SingletonClass g ) or
@@ -223,7 +230,19 @@ private module Cached {
223230 TWhileModifierExpr ( Generated:: WhileModifier g ) or
224231 TYieldCall ( Generated:: Yield g )
225232
226- /** Gets the underlying TreeSitter entity for a given AST node. */
233+ private predicate isIdentifierMethodCall ( Generated:: Identifier g ) {
234+ vcall ( g ) and not access ( g , _)
235+ }
236+
237+ private predicate isRegularMethodCall ( Generated:: Call g ) {
238+ not g .getMethod ( ) instanceof Generated:: Super
239+ }
240+
241+ /**
242+ * Gets the underlying TreeSitter entity for a given AST node. This does not
243+ * include synthesized AST nodes, because they are not the primary AST node
244+ * for any given generated node.
245+ */
227246 cached
228247 Generated:: AstNode toGenerated ( AST:: AstNode n ) {
229248 n = TAddExpr ( result ) or
@@ -274,6 +293,7 @@ private module Cached {
274293 n = TEndBlock ( result ) or
275294 n = TEnsure ( result ) or
276295 n = TEqExpr ( result ) or
296+ n = TExplicitSelf ( result ) or
277297 n = TExponentExpr ( result ) or
278298 n = TFalseLiteral ( result ) or
279299 n = TFloatLiteral ( result ) or
@@ -329,7 +349,6 @@ private module Cached {
329349 n = TReturnStmt ( result ) or
330350 n = TScopeResolutionConstantAccess ( result , _) or
331351 n = TScopeResolutionMethodCall ( result , _) or
332- n = TSelf ( result ) or
333352 n = TSimpleParameter ( result ) or
334353 n = TSimpleSymbolLiteral ( result ) or
335354 n = TSingletonClass ( result ) or
@@ -365,6 +384,16 @@ private module Cached {
365384 n = TWhileModifierExpr ( result ) or
366385 n = TYieldCall ( result )
367386 }
387+
388+ /**
389+ * Like `toGenerated`, but also returns generated nodes for synthesized AST
390+ * nodes.
391+ */
392+ cached
393+ Generated:: AstNode toGeneratedInclSynth ( AST:: AstNode n ) {
394+ result = toGenerated ( n ) or
395+ n = TImplicitSelf ( result )
396+ }
368397}
369398
370399import Cached
@@ -392,6 +421,8 @@ class TConditionalLoop = TWhileExpr or TUntilExpr or TWhileModifierExpr or TUnti
392421
393422class TLoop = TConditionalLoop or TForExpr ;
394423
424+ class TSelf = TExplicitSelf or TImplicitSelf ;
425+
395426class TExpr =
396427 TSelf or TArgumentList or TRescueClause or TRescueModifierExpr or TPair or TStringConcatenation or
397428 TCall or TBlockArgument or TSplatArgument or THashSplatArgument or TConstantAccess or
0 commit comments