Skip to content

Commit e8bd86f

Browse files
committed
WIP
1 parent 189e78e commit e8bd86f

File tree

1 file changed

+120
-0
lines changed

1 file changed

+120
-0
lines changed

library/src/scala/tasty/reflect/TreeOps.scala

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,82 +174,154 @@ trait TreeOps extends Core {
174174
val Term: TermModule
175175
abstract class TermModule extends TermCoreModule {
176176

177+
val Ident: IsIdentExtractor
178+
abstract class IsIdentExtractor {
179+
/** Matches any Ident and returns it */
180+
def unapply(tree: Tree)(implicit ctx: Context): Option[Ident]
181+
}
182+
177183
/** Scala term identifier */
178184
val Ident: IdentExtractor
179185
abstract class IdentExtractor {
180186
/** Matches a term identifier and returns its name */
181187
def unapply(tree: Tree)(implicit ctx: Context): Option[String]
182188
}
183189

190+
val Select: IsSelectExtractor
191+
abstract class IsSelectExtractor {
192+
/** Matches any Select and returns it */
193+
def unapply(tree: Tree)(implicit ctx: Context): Option[Select]
194+
}
195+
184196
/** Scala term selection */
185197
val Select: SelectExtractor
186198
abstract class SelectExtractor {
187199
/** Matches `<qual: Term>.<name: String>: <sig: Signature>` */
188200
def unapply(tree: Tree)(implicit ctx: Context): Option[(Term, String, Option[Signature])]
189201
}
190202

203+
val Literal: IsLiteralExtractor
204+
abstract class IsLiteralExtractor {
205+
/** Matches any Literal and returns it */
206+
def unapply(tree: Tree)(implicit ctx: Context): Option[Literal]
207+
}
208+
191209
/** Scala literal constant */
192210
val Literal: LiteralExtractor
193211
abstract class LiteralExtractor {
194212
def unapply(tree: Tree)(implicit ctx: Context): Option[Constant]
195213
}
196214

215+
val This: IsThisExtractor
216+
abstract class IsThisExtractor {
217+
/** Matches any This and returns it */
218+
def unapply(tree: Tree)(implicit ctx: Context): Option[This]
219+
}
220+
197221
/** Scala `this` or `this[id]` */
198222
val This: ThisExtractor
199223
abstract class ThisExtractor {
200224
/** Matches new `this[<id: Option[Id]>` */
201225
def unapply(tree: Tree)(implicit ctx: Context): Option[Option[Id]]
202226
}
203227

228+
val New: IsNewExtractor
229+
abstract class IsNewExtractor {
230+
/** Matches any New and returns it */
231+
def unapply(tree: Tree)(implicit ctx: Context): Option[New]
232+
}
233+
204234
/** Scala `new` */
205235
val New: NewExtractor
206236
abstract class NewExtractor {
207237
/** Matches new `new <tpt: TypeTree>` */
208238
def unapply(tree: Tree)(implicit ctx: Context): Option[TypeTree]
209239
}
210240

241+
val NamedArg: IsNamedArgExtractor
242+
abstract class IsNamedArgExtractor {
243+
/** Matches any NamedArg and returns it */
244+
def unapply(tree: Tree)(implicit ctx: Context): Option[NamedArg]
245+
}
246+
211247
/** Scala named argument `x = y` in argument position */
212248
val NamedArg: NamedArgExtractor
213249
abstract class NamedArgExtractor {
214250
/** Matches `<name: String> = <value: Term>` */
215251
def unapply(tree: Tree)(implicit ctx: Context): Option[(String, Term)]
216252
}
217253

254+
val Apply: IsApplyExtractor
255+
abstract class IsApplyExtractor {
256+
/** Matches any Apply and returns it */
257+
def unapply(tree: Tree)(implicit ctx: Context): Option[Apply]
258+
}
259+
218260
/** Scala parameter application */
219261
val Apply: ApplyExtractor
220262
abstract class ApplyExtractor {
221263
/** Matches function application `<fun: Term>(<args: List[Term]>)` */
222264
def unapply(tree: Tree)(implicit ctx: Context): Option[(Term, List[Term])]
223265
}
224266

267+
val TypeApply: IsTypeApplyExtractor
268+
abstract class IsTypeApplyExtractor {
269+
/** Matches any TypeApply and returns it */
270+
def unapply(tree: Tree)(implicit ctx: Context): Option[TypeApply]
271+
}
272+
225273
/** Scala type parameter application */
226274
val TypeApply: TypeApplyExtractor
227275
abstract class TypeApplyExtractor {
228276
/** Matches function type application `<fun: Term>[<args: List[TypeTree]>]` */
229277
def unapply(tree: Tree)(implicit ctx: Context): Option[(Term, List[TypeTree])]
230278
}
231279

280+
val Super: IsSuperExtractor
281+
abstract class IsSuperExtractor {
282+
/** Matches any Super and returns it */
283+
def unapply(tree: Tree)(implicit ctx: Context): Option[Super]
284+
}
285+
232286
/** Scala `x.super` or `x.super[id]` */
233287
val Super: SuperExtractor
234288
abstract class SuperExtractor {
235289
/** Matches new `<qualifier: Term>.super[<id: Option[Id]>` */
236290
def unapply(tree: Tree)(implicit ctx: Context): Option[(Term, Option[Id])]
237291
}
238292

293+
val Typed: IsTypedExtractor
294+
abstract class IsTypedExtractor {
295+
/** Matches any Typed and returns it */
296+
def unapply(tree: Tree)(implicit ctx: Context): Option[Typed]
297+
}
298+
239299
/** Scala ascription `x: T` */
240300
val Typed: TypedExtractor
241301
abstract class TypedExtractor {
242302
/** Matches `<x: Term>: <tpt: Term>` */
243303
def unapply(tree: Tree)(implicit ctx: Context): Option[(Term, TypeTree)]
244304
}
245305

306+
val Assign: IsAssignExtractor
307+
abstract class IsAssignExtractor {
308+
/** Matches any Assign and returns it */
309+
def unapply(tree: Tree)(implicit ctx: Context): Option[Assign]
310+
}
311+
246312
/** Scala assign `x = y` */
247313
val Assign: AssignExtractor
248314
abstract class AssignExtractor {
249315
/** Matches `<lhs: Term> = <rhs: Term>` */
250316
def unapply(tree: Tree)(implicit ctx: Context): Option[(Term, Term)]
251317
}
252318

319+
val Block: IsBlockExtractor
320+
abstract class IsBlockExtractor {
321+
/** Matches any Block and returns it */
322+
def unapply(tree: Tree)(implicit ctx: Context): Option[Block]
323+
}
324+
253325
/** Scala code block `{ stat0; ...; statN; expr }` term */
254326
val Block: BlockExtractor
255327
abstract class BlockExtractor {
@@ -262,49 +334,97 @@ trait TreeOps extends Core {
262334
def unapply(tree: Tree)(implicit ctx: Context): Option[(Term, Option[TypeTree])]
263335
}
264336

337+
val XYZ: IsXYZExtractor
338+
abstract class IsXYZExtractor {
339+
/** Matches any XYZ and returns it */
340+
def unapply(tree: Tree)(implicit ctx: Context): Option[XYZ]
341+
}
342+
265343
/** Scala `if`/`else` term */
266344
val If: IfExtractor
267345
abstract class IfExtractor {
268346
/** Matches `if (<cond: Term>) <thenp: Term> else <elsep: Term>` */
269347
def unapply(tree: Tree)(implicit ctx: Context): Option[(Term, Term, Term)]
270348
}
271349

350+
val XYZ: IsXYZExtractor
351+
abstract class IsXYZExtractor {
352+
/** Matches any XYZ and returns it */
353+
def unapply(tree: Tree)(implicit ctx: Context): Option[XYZ]
354+
}
355+
272356
/** Scala `match` term */
273357
val Match: MatchExtractor
274358
abstract class MatchExtractor {
275359
/** Matches `<scrutinee: Trem> match { <cases: List[CaseDef]> }` */
276360
def unapply(tree: Tree)(implicit ctx: Context): Option[(Term, List[CaseDef])]
277361
}
278362

363+
val XYZ: IsXYZExtractor
364+
abstract class IsXYZExtractor {
365+
/** Matches any XYZ and returns it */
366+
def unapply(tree: Tree)(implicit ctx: Context): Option[XYZ]
367+
}
368+
279369
/** Scala `try`/`catch`/`finally` term */
280370
val Try: TryExtractor
281371
abstract class TryExtractor {
282372
/** Matches `try <body: Term> catch { <cases: List[CaseDef]> } finally <finalizer: Option[Term]>` */
283373
def unapply(tree: Tree)(implicit ctx: Context): Option[(Term, List[CaseDef], Option[Term])]
284374
}
285375

376+
val XYZ: IsXYZExtractor
377+
abstract class IsXYZExtractor {
378+
/** Matches any XYZ and returns it */
379+
def unapply(tree: Tree)(implicit ctx: Context): Option[XYZ]
380+
}
381+
286382
/** Scala local `return` */
287383
val Return: ReturnExtractor
288384
abstract class ReturnExtractor {
289385
/** Matches `return <expr: Term>` */
290386
def unapply(tree: Tree)(implicit ctx: Context): Option[Term]
291387
}
292388

389+
val XYZ: IsXYZExtractor
390+
abstract class IsXYZExtractor {
391+
/** Matches any XYZ and returns it */
392+
def unapply(tree: Tree)(implicit ctx: Context): Option[XYZ]
393+
}
394+
293395
val Repeated: RepeatedExtractor
294396
abstract class RepeatedExtractor {
295397
def unapply(tree: Tree)(implicit ctx: Context): Option[List[Term]]
296398
}
297399

400+
val XYZ: IsXYZExtractor
401+
abstract class IsXYZExtractor {
402+
/** Matches any XYZ and returns it */
403+
def unapply(tree: Tree)(implicit ctx: Context): Option[XYZ]
404+
}
405+
298406
val Inlined: InlinedExtractor
299407
abstract class InlinedExtractor {
300408
def unapply(tree: Tree)(implicit ctx: Context): Option[(Option[TermOrTypeTree], List[Definition], Term)]
301409
}
302410

411+
val XYZ: IsXYZExtractor
412+
abstract class IsXYZExtractor {
413+
/** Matches any XYZ and returns it */
414+
def unapply(tree: Tree)(implicit ctx: Context): Option[XYZ]
415+
}
416+
303417
val SelectOuter: SelectOuterExtractor
304418
abstract class SelectOuterExtractor {
305419
def unapply(tree: Tree)(implicit ctx: Context): Option[(Term, Int, Type)]
306420
}
307421

422+
val XYZ: IsXYZExtractor
423+
abstract class IsXYZExtractor {
424+
/** Matches any XYZ and returns it */
425+
def unapply(tree: Tree)(implicit ctx: Context): Option[XYZ]
426+
}
427+
308428
val While: WhileExtractor
309429
abstract class WhileExtractor {
310430
/** Extractor for while loops. Matches `while (<cond>) <body>` and returns (<cond>, <body>) */

0 commit comments

Comments
 (0)