1erl_syntax(3) Erlang Module Definition erl_syntax(3)
2
3
4
6 erl_syntax - Abstract Erlang syntax trees.
7
9 Abstract Erlang syntax trees.
10
11 This module defines an abstract data type for representing Erlang
12 source code as syntax trees, in a way that is backwards compatible with
13 the data structures created by the Erlang standard library parser mod‐
14 ule erl_parse (often referred to as "parse trees", which is a bit of a
15 misnomer). This means that all erl_parse trees are valid abstract syn‐
16 tax trees, but the reverse is not true: abstract syntax trees can in
17 general not be used as input to functions expecting an erl_parse tree.
18 However, as long as an abstract syntax tree represents a correct Erlang
19 program, the function revert/1 should be able to transform it to the
20 corresponding erl_parse representation.
21
22 A recommended starting point for the first-time user is the documenta‐
23 tion of the syntaxTree() data type, and the function type/1.
24
25 NOTES:
26
27 This module deals with the composition and decomposition of syntactic
28 entities (as opposed to semantic ones); its purpose is to hide all di‐
29 rect references to the data structures used to represent these enti‐
30 ties. With few exceptions, the functions in this module perform no se‐
31 mantic interpretation of their inputs, and in general, the user is as‐
32 sumed to pass type-correct arguments - if this is not done, the effects
33 are not defined.
34
35 With the exception of the erl_parse() data structures, the internal
36 representations of abstract syntax trees are subject to change without
37 notice, and should not be documented outside this module. Furthermore,
38 we do not give any guarantees on how an abstract syntax tree may or may
39 not be represented, with the following exceptions: no syntax tree is
40 represented by a single atom, such as none, by a list constructor [X |
41 Y], or by the empty list []. This can be relied on when writing func‐
42 tions that operate on syntax trees.
43
45 annotation_or_location() = erl_anno:anno() | erl_anno:location():
46
47
48 encoding() = utf8 | unicode | latin1:
49
50
51 erl_parse() = erl_parse:abstract_clause() | erl_parse:abstract_expr()
52 | erl_parse:abstract_form() | erl_parse:abstract_type() |
53 erl_parse:form_info() | erl_parse:af_binelement(term()) |
54 erl_parse:af_generator() | erl_parse:af_remote_function():
55
56
57 forms() = syntaxTree() | [syntaxTree()]:
58
59
60 guard() = none | syntaxTree() | [syntaxTree()] | [[syntaxTree()]]:
61
62
63 padding() = none | integer():
64
65
66 syntaxTree() = tree() | wrapper() | erl_parse():
67
68
69 syntaxTreeAttributes() = #attr{pos=term(), ann=[term()], com=none |
70 #com{pre=[syntaxTree()], post=[syntaxTree()]}}:
71
72
73 tree() = #tree{type=atom(), attr=#attr{pos=term(), ann=[term()],
74 com=none | #com{pre=[syntaxTree()], post=[syntaxTree()]}},
75 data=term()}:
76
77
78 wrapper() = #wrapper{type=atom(), attr=#attr{pos=term(),
79 ann=[term()], com=none | #com{pre=[syntaxTree()], post=[syntax‐
80 Tree()]}}, tree=erl_parse()}:
81
82
84 abstract(T::term()) -> syntaxTree()
85
86 Returns the syntax tree corresponding to an Erlang term. Term
87 must be a literal term, i.e., one that can be represented as a
88 source code literal. Thus, it may not contain a process identi‐
89 fier, port, reference or function value as a subterm. The func‐
90 tion recognises printable strings, in order to get a compact and
91 readable representation. Evaluation fails with reason badarg if
92 Term is not a literal term.
93
94 See also: concrete/1, is_literal/1.
95
96 add_ann(A::term(), Node::syntaxTree()) -> syntaxTree()
97
98 Appends the term Annotation to the list of user annotations of
99 Node.
100
101 Note: this is equivalent to set_ann(Node, [Annotation |
102 get_ann(Node)]), but potentially more efficient.
103
104 See also: get_ann/1, set_ann/2.
105
106 add_postcomments(Cs::[syntaxTree()], Node::syntaxTree()) -> syntax‐
107 Tree()
108
109 Appends Comments to the post-comments of Node.
110
111 Note: This is equivalent to set_postcomments(Node, get_postcom‐
112 ments(Node) ++ Comments), but potentially more efficient.
113
114 See also: add_precomments/2, comment/2, get_postcomments/1,
115 join_comments/2, set_postcomments/2.
116
117 add_precomments(Cs::[syntaxTree()], Node::syntaxTree()) -> syntaxTree()
118
119 Appends Comments to the pre-comments of Node.
120
121 Note: This is equivalent to set_precomments(Node, get_precom‐
122 ments(Node) ++ Comments), but potentially more efficient.
123
124 See also: add_postcomments/2, comment/2, get_precomments/1,
125 join_comments/2, set_precomments/2.
126
127 annotated_type(Name::syntaxTree(), Type::syntaxTree()) -> syntaxTree()
128
129 Creates an abstract annotated type expression. The result repre‐
130 sents "Name :: Type".
131
132 See also: annotated_type_body/1, annotated_type_name/1.
133
134 annotated_type_body(Node::syntaxTree()) -> syntaxTree()
135
136 Returns the type subtrees of an annotated_type node.
137
138 See also: annotated_type/2.
139
140 annotated_type_name(Node::syntaxTree()) -> syntaxTree()
141
142 Returns the name subtree of an annotated_type node.
143
144 See also: annotated_type/2.
145
146 application(Operator::syntaxTree(), Arguments::[syntaxTree()]) -> syn‐
147 taxTree()
148
149 Creates an abstract function application expression. If Argu‐
150 ments is [A1, ..., An], the result represents "Operator(A1, ...,
151 An)".
152
153 See also: application/3, application_arguments/1, applica‐
154 tion_operator/1.
155
156 application(Module::none | syntaxTree(), Name::syntaxTree(), Argu‐
157 ments::[syntaxTree()]) -> syntaxTree()
158
159 Creates an abstract function application expression. If Module
160 is none, this is call is equivalent to application(Function, Ar‐
161 guments), otherwise it is equivalent to application(module_qual‐
162 ifier(Module, Function), Arguments).
163
164 (This is a utility function.)
165
166 See also: application/2, module_qualifier/2.
167
168 application_arguments(Node::syntaxTree()) -> [syntaxTree()]
169
170 Returns the list of argument subtrees of an application node.
171
172 See also: application/2.
173
174 application_operator(Node::syntaxTree()) -> syntaxTree()
175
176 Returns the operator subtree of an application node.
177
178 Note: if Node represents "M:F(...)", then the result is the sub‐
179 tree representing "M:F".
180
181 See also: application/2, module_qualifier/2.
182
183 arity_qualifier(Body::syntaxTree(), Arity::syntaxTree()) -> syntax‐
184 Tree()
185
186 Creates an abstract arity qualifier. The result represents
187 "Body/Arity".
188
189 See also: arity_qualifier_argument/1, arity_qualifier_body/1.
190
191 arity_qualifier_argument(Node::syntaxTree()) -> syntaxTree()
192
193 Returns the argument (the arity) subtree of an arity_qualifier
194 node.
195
196 See also: arity_qualifier/2.
197
198 arity_qualifier_body(Node::syntaxTree()) -> syntaxTree()
199
200 Returns the body subtree of an arity_qualifier node.
201
202 See also: arity_qualifier/2.
203
204 atom(Name::atom() | string()) -> syntaxTree()
205
206 Creates an abstract atom literal. The print name of the atom is
207 the character sequence represented by Name.
208
209 See also: atom_literal/1, atom_literal/2, atom_name/1,
210 atom_value/1, is_atom/2.
211
212 atom_literal(Node::syntaxTree()) -> string()
213
214 Returns the literal string represented by an atom node. This in‐
215 cludes surrounding single-quote characters if necessary. Charac‐
216 ters beyond 255 will be escaped.
217
218 Note that e.g. the result of atom("x\ny") represents any and all
219 of `x\ny'', `x\12y'', `x\012y'' and `x\^Jy\''; see string/1.
220
221 See also: atom/1, string/1.
222
223 atom_literal(Node, X2) -> term()
224
225 Returns the literal string represented by an atom node. This in‐
226 cludes surrounding single-quote characters if necessary. Depend‐
227 ing on the encoding a character beyond 255 will be escaped
228 (latin1) or copied as is (utf8).
229
230 See also: atom/1, atom_literal/1, string/1.
231
232 atom_name(Node::syntaxTree()) -> string()
233
234 Returns the printname of an atom node.
235
236 See also: atom/1.
237
238 atom_value(Node::syntaxTree()) -> atom()
239
240 Returns the value represented by an atom node.
241
242 See also: atom/1.
243
244 attribute(Name::syntaxTree()) -> syntaxTree()
245
246 Equivalent to attribute(Name, none).
247
248 attribute(Name::syntaxTree(), Args::none | [syntaxTree()]) -> syntax‐
249 Tree()
250
251 Creates an abstract program attribute. If Arguments is [A1, ...,
252 An], the result represents "-Name(A1, ..., An).". Otherwise, if
253 Arguments is none, the result represents "-Name.". The latter
254 form makes it possible to represent preprocessor directives such
255 as "-endif.". Attributes are source code forms.
256
257 Note: The preprocessor macro definition directive "-define(Name,
258 Body)." has relatively few requirements on the syntactical form
259 of Body (viewed as a sequence of tokens). The text node type can
260 be used for a Body that is not a normal Erlang construct.
261
262 See also: attribute/1, attribute_arguments/1, attribute_name/1,
263 is_form/1, text/1.
264
265 attribute_arguments(Node::syntaxTree()) -> none | [syntaxTree()]
266
267 Returns the list of argument subtrees of an attribute node, if
268 any. If Node represents "-Name.", the result is none. Otherwise,
269 if Node represents "-Name(E1, ..., En).", [E1, ..., E1] is re‐
270 turned.
271
272 See also: attribute/1.
273
274 attribute_name(Node::syntaxTree()) -> syntaxTree()
275
276 Returns the name subtree of an attribute node.
277
278 See also: attribute/1.
279
280 binary(List::[syntaxTree()]) -> syntaxTree()
281
282 Creates an abstract binary-object template. If Fields is [F1,
283 ..., Fn], the result represents "<<F1, ..., Fn>>".
284
285 See also: binary_field/2, binary_fields/1.
286
287 binary_comp(Template::syntaxTree(), Body::[syntaxTree()]) -> syntax‐
288 Tree()
289
290 Creates an abstract binary comprehension. If Body is [E1, ...,
291 En], the result represents "<<Template || E1, ..., En>>".
292
293 See also: binary_comp_body/1, binary_comp_template/1, genera‐
294 tor/2.
295
296 binary_comp_body(Node::syntaxTree()) -> [syntaxTree()]
297
298 Returns the list of body subtrees of a binary_comp node.
299
300 See also: binary_comp/2.
301
302 binary_comp_template(Node::syntaxTree()) -> syntaxTree()
303
304 Returns the template subtree of a binary_comp node.
305
306 See also: binary_comp/2.
307
308 binary_field(Body::syntaxTree()) -> syntaxTree()
309
310 Equivalent to binary_field(Body, []).
311
312 binary_field(Body::syntaxTree(), Types::[syntaxTree()]) -> syntaxTree()
313
314 Creates an abstract binary template field. If Types is the empty
315 list, the result simply represents "Body", otherwise, if Types
316 is [T1, ..., Tn], the result represents "Body/T1-...-Tn".
317
318 See also: binary/1, binary_field/1, binary_field/3, bi‐
319 nary_field_body/1, binary_field_size/1, binary_field_types/1.
320
321 binary_field(Body::syntaxTree(), Size::none | syntaxTree(),
322 Types::[syntaxTree()]) -> syntaxTree()
323
324 Creates an abstract binary template field. If Size is none, this
325 is equivalent to "binary_field(Body, Types)", otherwise it is
326 equivalent to "binary_field(size_qualifier(Body, Size), Types)".
327
328 (This is a utility function.)
329
330 See also: binary/1, binary_field/2, size_qualifier/2.
331
332 binary_field_body(Node::syntaxTree()) -> syntaxTree()
333
334 Returns the body subtree of a binary_field.
335
336 See also: binary_field/2.
337
338 binary_field_size(Node::syntaxTree()) -> none | syntaxTree()
339
340 Returns the size specifier subtree of a binary_field node, if
341 any. If Node represents "Body:Size" or "Body:Size/T1, ..., Tn",
342 the result is Size, otherwise none is returned.
343
344 (This is a utility function.)
345
346 See also: binary_field/2, binary_field/3.
347
348 binary_field_types(Node::syntaxTree()) -> [syntaxTree()]
349
350 Returns the list of type-specifier subtrees of a binary_field
351 node. If Node represents ".../T1, ..., Tn", the result is [T1,
352 ..., Tn], otherwise the result is the empty list.
353
354 See also: binary_field/2.
355
356 binary_fields(Node::syntaxTree()) -> [syntaxTree()]
357
358 Returns the list of field subtrees of a binary node.
359
360 See also: binary/1, binary_field/2.
361
362 binary_generator(Pattern::syntaxTree(), Body::syntaxTree()) -> syntax‐
363 Tree()
364
365 Creates an abstract binary_generator. The result represents
366 "Pattern <- Body".
367
368 See also: binary_comp/2, binary_generator_body/1, binary_genera‐
369 tor_pattern/1, list_comp/2.
370
371 binary_generator_body(Node::syntaxTree()) -> syntaxTree()
372
373 Returns the body subtree of a generator node.
374
375 See also: binary_generator/2.
376
377 binary_generator_pattern(Node::syntaxTree()) -> syntaxTree()
378
379 Returns the pattern subtree of a generator node.
380
381 See also: binary_generator/2.
382
383 bitstring_type(M::syntaxTree(), N::syntaxTree()) -> syntaxTree()
384
385 Creates an abstract bitstring type. The result represents
386 "<<_:M, _:_*N>>".
387
388 See also: bitstring_type_m/1, bitstring_type_n/1.
389
390 bitstring_type_m(Node::syntaxTree()) -> syntaxTree()
391
392 Returns the number of start bits, M, of a bitstring_type node.
393
394 See also: bitstring_type/2.
395
396 bitstring_type_n(Node::syntaxTree()) -> syntaxTree()
397
398 Returns the segment size, N, of a bitstring_type node.
399
400 See also: bitstring_type/2.
401
402 block_expr(Body::[syntaxTree()]) -> syntaxTree()
403
404 Creates an abstract block expression. If Body is [B1, ..., Bn],
405 the result represents "begin B1, ..., Bn end".
406
407 See also: block_expr_body/1.
408
409 block_expr_body(Node::syntaxTree()) -> [syntaxTree()]
410
411 Returns the list of body subtrees of a block_expr node.
412
413 See also: block_expr/1.
414
415 case_expr(Argument::syntaxTree(), Clauses::[syntaxTree()]) -> syntax‐
416 Tree()
417
418 Creates an abstract case-expression. If Clauses is [C1, ...,
419 Cn], the result represents "case Argument of C1; ...; Cn end".
420 More exactly, if each Ci represents "(Pi) Gi -> Bi", then the
421 result represents "case Argument of P1 G1 -> B1; ...; Pn Gn ->
422 Bn end".
423
424 See also: case_expr_argument/1, case_expr_clauses/1, clause/3,
425 if_expr/1.
426
427 case_expr_argument(Node::syntaxTree()) -> syntaxTree()
428
429 Returns the argument subtree of a case_expr node.
430
431 See also: case_expr/2.
432
433 case_expr_clauses(Node::syntaxTree()) -> [syntaxTree()]
434
435 Returns the list of clause subtrees of a case_expr node.
436
437 See also: case_expr/2.
438
439 catch_expr(Expr::syntaxTree()) -> syntaxTree()
440
441 Creates an abstract catch-expression. The result represents
442 "catch Expr".
443
444 See also: catch_expr_body/1.
445
446 catch_expr_body(Node::syntaxTree()) -> syntaxTree()
447
448 Returns the body subtree of a catch_expr node.
449
450 See also: catch_expr/1.
451
452 char(Char::char()) -> syntaxTree()
453
454 Creates an abstract character literal. The result represents
455 "$Name", where Name corresponds to Value.
456
457 Note: the literal corresponding to a particular character value
458 is not uniquely defined. E.g., the character "a" can be written
459 both as "$a" and "$\141", and a Tab character can be written as
460 "$\11", "$\011" or "$\t".
461
462 See also: char_literal/1, char_literal/2, char_value/1,
463 is_char/2.
464
465 char_literal(Node::syntaxTree()) -> nonempty_string()
466
467 Returns the literal string represented by a char node. This in‐
468 cludes the leading "$" character. Characters beyond 255 will be
469 escaped.
470
471 See also: char/1.
472
473 char_literal(Node::syntaxTree(), X2::encoding()) -> nonempty_string()
474
475 Returns the literal string represented by a char node. This in‐
476 cludes the leading "$" character. Depending on the encoding a
477 character beyond 255 will be escaped (latin1) or copied as is
478 (utf8).
479
480 See also: char/1.
481
482 char_value(Node::syntaxTree()) -> char()
483
484 Returns the value represented by a char node.
485
486 See also: char/1.
487
488 class_qualifier(Class::syntaxTree(), Body::syntaxTree()) -> syntax‐
489 Tree()
490
491 Creates an abstract class qualifier. The result represents
492 "Class:Body".
493
494 See also: class_qualifier_argument/1, class_qualifier_body/1,
495 class_qualifier_stacktrace/1, try_expr/4.
496
497 class_qualifier(Class::syntaxTree(), Body::syntaxTree(), Stack‐
498 trace::syntaxTree()) -> syntaxTree()
499
500 Creates an abstract class qualifier. The result represents
501 "Class:Body:Stacktrace".
502
503 See also: class_qualifier_argument/1, class_qualifier_body/1,
504 try_expr/4.
505
506 class_qualifier_argument(Node::syntaxTree()) -> syntaxTree()
507
508 Returns the argument (the class) subtree of a class_qualifier
509 node.
510
511 See also: class_qualifier/2.
512
513 class_qualifier_body(Node::syntaxTree()) -> syntaxTree()
514
515 Returns the body subtree of a class_qualifier node.
516
517 See also: class_qualifier/2.
518
519 class_qualifier_stacktrace(Node::syntaxTree()) -> syntaxTree()
520
521 Returns the stacktrace subtree of a class_qualifier node.
522
523 See also: class_qualifier/2.
524
525 clause(Guard::guard(), Body::[syntaxTree()]) -> syntaxTree()
526
527 Equivalent to clause([], Guard, Body).
528
529 clause(Patterns::[syntaxTree()], Guard::guard(), Body::[syntaxTree()])
530 -> syntaxTree()
531
532 Creates an abstract clause. If Patterns is [P1, ..., Pn] and
533 Body is [B1, ..., Bm], then if Guard is none, the result repre‐
534 sents "(P1, ..., Pn) -> B1, ..., Bm", otherwise, unless Guard is
535 a list, the result represents "(P1, ..., Pn) when Guard -> B1,
536 ..., Bm".
537
538 For simplicity, the Guard argument may also be any of the fol‐
539 lowing:
540
541 * An empty list []. This is equivalent to passing none.
542
543 * A nonempty list [E1, ..., Ej] of syntax trees. This is
544 equivalent to passing conjunction([E1, ..., Ej]).
545
546 * A nonempty list of lists of syntax trees [[E1_1, ...,
547 E1_k1], ..., [Ej_1, ..., Ej_kj]], which is equivalent to
548 passing disjunction([conjunction([E1_1, ..., E1_k1]), ...,
549 conjunction([Ej_1, ..., Ej_kj])]).
550
551 See also: clause/2, clause_body/1, clause_guard/1, clause_pat‐
552 terns/1.
553
554 clause_body(Node::syntaxTree()) -> [syntaxTree()]
555
556 Return the list of body subtrees of a clause node.
557
558 See also: clause/3.
559
560 clause_guard(Node::syntaxTree()) -> none | syntaxTree()
561
562 Returns the guard subtree of a clause node, if any. If Node rep‐
563 resents "(P1, ..., Pn) when Guard -> B1, ..., Bm", Guard is re‐
564 turned. Otherwise, the result is none.
565
566 See also: clause/3.
567
568 clause_patterns(Node::syntaxTree()) -> [syntaxTree()]
569
570 Returns the list of pattern subtrees of a clause node.
571
572 See also: clause/3.
573
574 comment(Strings::[string()]) -> syntaxTree()
575
576 Equivalent to comment(none, Strings).
577
578 comment(Pad::padding(), Strings::[string()]) -> syntaxTree()
579
580 Creates an abstract comment with the given padding and text. If
581 Strings is a (possibly empty) list ["Txt1", ..., "TxtN"], the
582 result represents the source code text
583
584 %Txt1
585 ...
586 %TxtN
587
588 Padding states the number of empty character positions to the
589 left of the comment separating it horizontally from source code
590 on the same line (if any). If Padding is none, a default posi‐
591 tive number is used. If Padding is an integer less than 1, there
592 should be no separating space. Comments are in themselves re‐
593 garded as source program forms.
594
595 See also: comment/1, is_form/1.
596
597 comment_padding(Node::syntaxTree()) -> padding()
598
599 Returns the amount of padding before the comment, or none. The
600 latter means that a default padding may be used.
601
602 See also: comment/2.
603
604 comment_text(Node::syntaxTree()) -> [string()]
605
606 Returns the lines of text of the abstract comment.
607
608 See also: comment/2.
609
610 compact_list(Node::syntaxTree()) -> syntaxTree()
611
612 Yields the most compact form for an abstract list skeleton. The
613 result either represents "[E1, ..., En | Tail]", where Tail is
614 not a list skeleton, or otherwise simply "[E1, ..., En]". Anno‐
615 tations on subtrees of Node that represent list skeletons may be
616 lost, but comments will be propagated to the result. Returns
617 Node itself if Node does not represent a list skeleton.
618
619 See also: list/2, normalize_list/1.
620
621 concrete(Node::syntaxTree()) -> term()
622
623 Returns the Erlang term represented by a syntax tree. Evaluation
624 fails with reason badarg if Node does not represent a literal
625 term.
626
627 Note: Currently, the set of syntax trees which have a concrete
628 representation is larger than the set of trees which can be
629 built using the function abstract/1. An abstract character will
630 be concretised as an integer, while abstract/1 does not at
631 present yield an abstract character for any input. (Use the
632 char/1 function to explicitly create an abstract character.)
633
634 Note: arity_qualifier nodes are recognized. This is to follow
635 The Erlang Parser when it comes to wild attributes: both {F, A}
636 and F/A are recognized, which makes it possible to turn wild at‐
637 tributes into recognized attributes without at the same time
638 making it impossible to compile files using the new syntax with
639 the old version of the Erlang Compiler.
640
641 See also: abstract/1, char/1, is_literal/1.
642
643 conjunction(Tests::[syntaxTree()]) -> syntaxTree()
644
645 Creates an abstract conjunction. If List is [E1, ..., En], the
646 result represents "E1, ..., En".
647
648 See also: conjunction_body/1, disjunction/1.
649
650 conjunction_body(Node::syntaxTree()) -> [syntaxTree()]
651
652 Returns the list of body subtrees of a conjunction node.
653
654 See also: conjunction/1.
655
656 cons(Head::syntaxTree(), Tail::syntaxTree()) -> syntaxTree()
657
658 "Optimising" list skeleton cons operation. Creates an abstract
659 list skeleton whose first element is Head and whose tail corre‐
660 sponds to Tail. This is similar to list([Head], Tail), except
661 that Tail may not be none, and that the result does not neces‐
662 sarily represent exactly "[Head | Tail]", but may depend on the
663 Tail subtree. E.g., if Tail represents [X, Y], the result may
664 represent "[Head, X, Y]", rather than "[Head | [X, Y]]". Annota‐
665 tions on Tail itself may be lost if Tail represents a list
666 skeleton, but comments on Tail are propagated to the result.
667
668 See also: list/2, list_head/1, list_tail/1.
669
670 constrained_function_type(FunctionType::syntaxTree(), FunctionCon‐
671 straint::[syntaxTree()]) -> syntaxTree()
672
673 Creates an abstract constrained function type. If FunctionCon‐
674 straint is [C1, ..., Cn], the result represents "FunctionType
675 when C1, ...Cn".
676
677 See also: constrained_function_type_argument/1, con‐
678 strained_function_type_body/1.
679
680 constrained_function_type_argument(Node::syntaxTree()) -> syntaxTree()
681
682 Returns the function constraint subtree of a constrained_func‐
683 tion_type node.
684
685 See also: constrained_function_type/2.
686
687 constrained_function_type_body(Node::syntaxTree()) -> syntaxTree()
688
689 Returns the function type subtree of a constrained_function_type
690 node.
691
692 See also: constrained_function_type/2.
693
694 constraint(Name::syntaxTree(), Types::[syntaxTree()]) -> syntaxTree()
695
696 Creates an abstract (subtype) constraint. The result represents
697 "Name :: Type".
698
699 See also: constraint_argument/1, constraint_body/1.
700
701 constraint_argument(Node::syntaxTree()) -> syntaxTree()
702
703 Returns the name subtree of a constraint node.
704
705 See also: constraint/2.
706
707 constraint_body(Node::syntaxTree()) -> [syntaxTree()]
708
709 Returns the type subtree of a constraint node.
710
711 See also: constraint/2.
712
713 copy_ann(Source::syntaxTree(), Target::syntaxTree()) -> syntaxTree()
714
715 Copies the list of user annotations from Source to Target.
716
717 Note: this is equivalent to set_ann(Target, get_ann(Source)),
718 but potentially more efficient.
719
720 See also: get_ann/1, set_ann/2.
721
722 copy_attrs(S::syntaxTree(), T::syntaxTree()) -> syntaxTree()
723
724 Copies the attributes from Source to Target.
725
726 Note: this is equivalent to set_attrs(Target, get_at‐
727 trs(Source)), but potentially more efficient.
728
729 See also: get_attrs/1, set_attrs/2.
730
731 copy_comments(Source::syntaxTree(), Target::syntaxTree()) -> syntax‐
732 Tree()
733
734 Copies the pre- and postcomments from Source to Target.
735
736 Note: This is equivalent to set_postcomments(set_precom‐
737 ments(Target, get_precomments(Source)), get_postcom‐
738 ments(Source)), but potentially more efficient.
739
740 See also: comment/2, get_postcomments/1, get_precomments/1,
741 set_postcomments/2, set_precomments/2.
742
743 copy_pos(Source::syntaxTree(), Target::syntaxTree()) -> syntaxTree()
744
745 Copies the annotation from Source to Target.
746
747 This is equivalent to set_pos(Target, get_pos(Source)), but po‐
748 tentially more efficient.
749
750 See also: get_pos/1, set_pos/2.
751
752 data(Tree::syntaxTree()) -> term()
753
754 For special purposes only. Returns the associated data of a syn‐
755 tax tree node. Evaluation fails with reason badarg if
756 is_tree(Node) does not yield true.
757
758 See also: tree/2.
759
760 disjunction(Tests::[syntaxTree()]) -> syntaxTree()
761
762 Creates an abstract disjunction. If List is [E1, ..., En], the
763 result represents "E1; ...; En".
764
765 See also: conjunction/1, disjunction_body/1.
766
767 disjunction_body(Node::syntaxTree()) -> [syntaxTree()]
768
769 Returns the list of body subtrees of a disjunction node.
770
771 See also: disjunction/1.
772
773 else_expr(Clauses) -> term()
774
775 Creates an abstract else-expression. If Clauses is [C1, ...,
776 Cn], the result represents "else C1; ...; Cn end". More exactly,
777 if each Ci represents "(Pi) Gi -> Bi", then the result repre‐
778 sents "else G1 -> B1; ...; Pn Gn -> Bn end".
779
780 See also: clause/3, else_expr_clauses/1, maybe_expr/2.
781
782 else_expr_clauses(Node::syntaxTree()) -> [syntaxTree()]
783
784 Returns the list of clause subtrees of an else_expr node.
785
786 See also: else_expr/1.
787
788 eof_marker() -> syntaxTree()
789
790 Creates an abstract end-of-file marker. This represents the end
791 of input when reading a sequence of source code forms. An end-
792 of-file marker is itself regarded as a source code form (namely,
793 the last in any sequence in which it occurs). It has no defined
794 lexical form.
795
796 Note: this is retained only for backwards compatibility with ex‐
797 isting parsers and tools.
798
799 See also: error_marker/1, is_form/1, warning_marker/1.
800
801 error_marker(Error::term()) -> syntaxTree()
802
803 Creates an abstract error marker. The result represents an oc‐
804 currence of an error in the source code, with an associated Er‐
805 lang I/O ErrorInfo structure given by Error (see module io(3)
806 for details). Error markers are regarded as source code forms,
807 but have no defined lexical form.
808
809 Note: this is supported only for backwards compatibility with
810 existing parsers and tools.
811
812 See also: eof_marker/0, error_marker_info/1, is_form/1, warn‐
813 ing_marker/1.
814
815 error_marker_info(Node::syntaxTree()) -> term()
816
817 Returns the ErrorInfo structure of an error_marker node.
818
819 See also: error_marker/1.
820
821 flatten_form_list(Node::syntaxTree()) -> syntaxTree()
822
823 Flattens sublists of a form_list node. Returns Node with all
824 subtrees of type form_list recursively expanded, yielding a sin‐
825 gle "flat" abstract form sequence.
826
827 See also: form_list/1.
828
829 float(Value::float()) -> syntaxTree()
830
831 Creates an abstract floating-point literal. The lexical repre‐
832 sentation is the decimal floating-point numeral of Value.
833
834 See also: float_literal/1, float_value/1.
835
836 float_literal(Node::syntaxTree()) -> string()
837
838 Returns the numeral string represented by a float node.
839
840 See also: float/1.
841
842 float_value(Node::syntaxTree()) -> float()
843
844 Returns the value represented by a float node. Note that float‐
845 ing-point values should usually not be compared for equality.
846
847 See also: float/1.
848
849 form_list(Forms::[syntaxTree()]) -> syntaxTree()
850
851 Creates an abstract sequence of "source code forms". If Forms is
852 [F1, ..., Fn], where each Fi is a form (see is_form/1, the re‐
853 sult represents
854
855 F1
856 ...
857 Fn
858
859 where the Fi are separated by one or more line breaks. A node of
860 type form_list is itself regarded as a source code form; see
861 flatten_form_list/1.
862
863 Note: this is simply a way of grouping source code forms as a
864 single syntax tree, usually in order to form an Erlang module
865 definition.
866
867 See also: flatten_form_list/1, form_list_elements/1, is_form/1.
868
869 form_list_elements(Node::syntaxTree()) -> [syntaxTree()]
870
871 Returns the list of subnodes of a form_list node.
872
873 See also: form_list/1.
874
875 fun_expr(Clauses::[syntaxTree()]) -> syntaxTree()
876
877 Creates an abstract fun-expression. If Clauses is [C1, ..., Cn],
878 the result represents "fun C1; ...; Cn end". More exactly, if
879 each Ci represents "(Pi1, ..., Pim) Gi -> Bi", then the result
880 represents "fun (P11, ..., P1m) G1 -> B1; ...; (Pn1, ..., Pnm)
881 Gn -> Bn end".
882
883 See also: fun_expr_arity/1, fun_expr_clauses/1.
884
885 fun_expr_arity(Node::syntaxTree()) -> arity()
886
887 Returns the arity of a fun_expr node. The result is the number
888 of parameter patterns in the first clause of the fun-expression;
889 subsequent clauses are ignored.
890
891 An exception is thrown if fun_expr_clauses(Node) returns an
892 empty list, or if the first element of that list is not a syntax
893 tree C of type clause such that clause_patterns(C) is a nonempty
894 list.
895
896 See also: clause/3, clause_patterns/1, fun_expr/1,
897 fun_expr_clauses/1.
898
899 fun_expr_clauses(Node::syntaxTree()) -> [syntaxTree()]
900
901 Returns the list of clause subtrees of a fun_expr node.
902
903 See also: fun_expr/1.
904
905 fun_type() -> syntaxTree()
906
907 Creates an abstract fun of any type. The result represents
908 "fun()".
909
910 function(Name::syntaxTree(), Clauses::[syntaxTree()]) -> syntaxTree()
911
912 Creates an abstract function definition. If Clauses is [C1, ...,
913 Cn], the result represents "Name C1; ...; Name Cn.". More ex‐
914 actly, if each Ci represents "(Pi1, ..., Pim) Gi -> Bi", then
915 the result represents "Name(P11, ..., P1m) G1 -> B1; ...;
916 Name(Pn1, ..., Pnm) Gn -> Bn.". Function definitions are source
917 code forms.
918
919 See also: function_arity/1, function_clauses/1, function_name/1,
920 is_form/1.
921
922 function_arity(Node::syntaxTree()) -> arity()
923
924 Returns the arity of a function node. The result is the number
925 of parameter patterns in the first clause of the function; sub‐
926 sequent clauses are ignored.
927
928 An exception is thrown if function_clauses(Node) returns an
929 empty list, or if the first element of that list is not a syntax
930 tree C of type clause such that clause_patterns(C) is a nonempty
931 list.
932
933 See also: clause/3, clause_patterns/1, function/2, func‐
934 tion_clauses/1.
935
936 function_clauses(Node::syntaxTree()) -> [syntaxTree()]
937
938 Returns the list of clause subtrees of a function node.
939
940 See also: function/2.
941
942 function_name(Node::syntaxTree()) -> syntaxTree()
943
944 Returns the name subtree of a function node.
945
946 See also: function/2.
947
948 function_type(Type) -> term()
949
950 Equivalent to function_type(any_arity, Type).
951
952 function_type(Arguments::any_arity | [syntaxTree()], Return::syntax‐
953 Tree()) -> syntaxTree()
954
955 Creates an abstract function type. If Arguments is [T1, ...,
956 Tn], then if it occurs within a function specification, the re‐
957 sult represents "(T1, ...Tn) -> Return"; otherwise it represents
958 "fun((T1, ...Tn) -> Return)". If Arguments is any_arity, it rep‐
959 resents "fun((...) -> Return)".
960
961 Note that the erl_parse representation is identical for "Func‐
962 tionType" and "fun(FunctionType)".
963
964 See also: function_type_arguments/1, function_type_return/1.
965
966 function_type_arguments(Node::syntaxTree()) -> any_arity | [syntax‐
967 Tree()]
968
969 Returns the argument types subtrees of a function_type node. If
970 Node represents "fun((...) -> Return)", any_arity is returned;
971 otherwise, if Node represents "(T1, ...Tn) -> Return" or
972 "fun((T1, ...Tn) -> Return)", [T1, ..., Tn] is returned.
973
974 See also: function_type/1, function_type/2.
975
976 function_type_return(Node::syntaxTree()) -> syntaxTree()
977
978 Returns the return type subtrees of a function_type node.
979
980 See also: function_type/1, function_type/2.
981
982 generator(Pattern::syntaxTree(), Body::syntaxTree()) -> syntaxTree()
983
984 Creates an abstract generator. The result represents "Pattern <-
985 Body".
986
987 See also: binary_comp/2, generator_body/1, generator_pattern/1,
988 list_comp/2.
989
990 generator_body(Node::syntaxTree()) -> syntaxTree()
991
992 Returns the body subtree of a generator node.
993
994 See also: generator/2.
995
996 generator_pattern(Node::syntaxTree()) -> syntaxTree()
997
998 Returns the pattern subtree of a generator node.
999
1000 See also: generator/2.
1001
1002 get_ann(Tree::syntaxTree()) -> [term()]
1003
1004 Returns the list of user annotations associated with a syntax
1005 tree node. For a newly created node, this is the empty list. The
1006 annotations may be any terms.
1007
1008 See also: get_attrs/1, set_ann/2.
1009
1010 get_attrs(Tree::syntaxTree()) -> syntaxTreeAttributes()
1011
1012 Returns a representation of the attributes associated with a
1013 syntax tree node. The attributes are all the extra information
1014 that can be attached to a node. Currently, this includes posi‐
1015 tion information, source code comments, and user annotations.
1016 The result of this function cannot be inspected directly; only
1017 attached to another node (see set_attrs/2).
1018
1019 For accessing individual attributes, see get_pos/1, get_ann/1,
1020 get_precomments/1 and get_postcomments/1.
1021
1022 See also: get_ann/1, get_pos/1, get_postcomments/1, get_precom‐
1023 ments/1, set_attrs/2.
1024
1025 get_pos(Tree::syntaxTree()) -> annotation_or_location()
1026
1027 Returns the annotation (see erl_anno(3)) associated with Node.
1028 By default, all new tree nodes have their associated position
1029 information set to the integer zero. Use erl_anno:location/1 or
1030 erl_anno:line/1 to get the position information.
1031
1032 See also: get_attrs/1, set_pos/2.
1033
1034 get_postcomments(Tree::syntaxTree()) -> [syntaxTree()]
1035
1036 Returns the associated post-comments of a node. This is a possi‐
1037 bly empty list of abstract comments, in top-down textual order.
1038 When the code is formatted, post-comments are typically dis‐
1039 played to the right of and/or below the node. For example:
1040
1041 {foo, X, Y} % Post-comment of tuple
1042
1043 If possible, the comment should be moved past any following sep‐
1044 arator characters on the same line, rather than placing the sep‐
1045 arators on the following line. E.g.:
1046
1047 foo([X | Xs], Y) ->
1048 foo(Xs, bar(X)); % Post-comment of 'bar(X)' node
1049 ...
1050
1051 (where the comment is moved past the rightmost ")" and the ";").
1052
1053 See also: comment/2, get_attrs/1, get_precomments/1, set_post‐
1054 comments/2.
1055
1056 get_precomments(Tree::syntaxTree()) -> [syntaxTree()]
1057
1058 Returns the associated pre-comments of a node. This is a possi‐
1059 bly empty list of abstract comments, in top-down textual order.
1060 When the code is formatted, pre-comments are typically displayed
1061 directly above the node. For example:
1062
1063 % Pre-comment of function
1064 foo(X) -> {bar, X}.
1065
1066 If possible, the comment should be moved before any preceding
1067 separator characters on the same line. E.g.:
1068
1069 foo([X | Xs]) ->
1070 % Pre-comment of 'bar(X)' node
1071 [bar(X) | foo(Xs)];
1072 ...
1073
1074 (where the comment is moved before the "[").
1075
1076 See also: comment/2, get_attrs/1, get_postcomments/1, set_pre‐
1077 comments/2.
1078
1079 has_comments(Tree::syntaxTree()) -> boolean()
1080
1081 Yields false if the node has no associated comments, and true
1082 otherwise.
1083
1084 Note: This is equivalent to (get_precomments(Node) == []) and
1085 (get_postcomments(Node) == []), but potentially more efficient.
1086
1087 See also: get_postcomments/1, get_precomments/1, remove_com‐
1088 ments/1.
1089
1090 if_expr(Clauses::[syntaxTree()]) -> syntaxTree()
1091
1092 Creates an abstract if-expression. If Clauses is [C1, ..., Cn],
1093 the result represents "if C1; ...; Cn end". More exactly, if
1094 each Ci represents "() Gi -> Bi", then the result represents "if
1095 G1 -> B1; ...; Gn -> Bn end".
1096
1097 See also: case_expr/2, clause/3, if_expr_clauses/1.
1098
1099 if_expr_clauses(Node::syntaxTree()) -> [syntaxTree()]
1100
1101 Returns the list of clause subtrees of an if_expr node.
1102
1103 See also: if_expr/1.
1104
1105 implicit_fun(Name::syntaxTree()) -> syntaxTree()
1106
1107 Creates an abstract "implicit fun" expression. The result repre‐
1108 sents "fun Name". Name should represent either F/A or M:F/A
1109
1110 See also: arity_qualifier/2, implicit_fun/2, implicit_fun/3, im‐
1111 plicit_fun_name/1, module_qualifier/2.
1112
1113 implicit_fun(Name::syntaxTree(), Arity::none | syntaxTree()) -> syntax‐
1114 Tree()
1115
1116 Creates an abstract "implicit fun" expression. If Arity is none,
1117 this is equivalent to implicit_fun(Name), otherwise it is equiv‐
1118 alent to implicit_fun(arity_qualifier(Name, Arity)).
1119
1120 (This is a utility function.)
1121
1122 See also: implicit_fun/1, implicit_fun/3.
1123
1124 implicit_fun(Module::none | syntaxTree(), Name::syntaxTree(), Ar‐
1125 ity::syntaxTree()) -> syntaxTree()
1126
1127 Creates an abstract module-qualified "implicit fun" expression.
1128 If Module is none, this is equivalent to implicit_fun(Name, Ar‐
1129 ity), otherwise it is equivalent to implicit_fun(module_quali‐
1130 fier(Module, arity_qualifier(Name, Arity)).
1131
1132 (This is a utility function.)
1133
1134 See also: implicit_fun/1, implicit_fun/2.
1135
1136 implicit_fun_name(Node::syntaxTree()) -> syntaxTree()
1137
1138 Returns the name subtree of an implicit_fun node.
1139
1140 Note: if Node represents "fun N/A" or "fun M:N/A", then the re‐
1141 sult is the subtree representing "N/A" or "M:N/A", respectively.
1142
1143 See also: arity_qualifier/2, implicit_fun/1, module_qualifier/2.
1144
1145 infix_expr(Left::syntaxTree(), Operator::syntaxTree(), Right::syntax‐
1146 Tree()) -> syntaxTree()
1147
1148 Creates an abstract infix operator expression. The result repre‐
1149 sents "Left Operator Right".
1150
1151 See also: infix_expr_left/1, infix_expr_operator/1, in‐
1152 fix_expr_right/1, prefix_expr/2.
1153
1154 infix_expr_left(Node::syntaxTree()) -> syntaxTree()
1155
1156 Returns the left argument subtree of an infix_expr node.
1157
1158 See also: infix_expr/3.
1159
1160 infix_expr_operator(Node::syntaxTree()) -> syntaxTree()
1161
1162 Returns the operator subtree of an infix_expr node.
1163
1164 See also: infix_expr/3.
1165
1166 infix_expr_right(Node::syntaxTree()) -> syntaxTree()
1167
1168 Returns the right argument subtree of an infix_expr node.
1169
1170 See also: infix_expr/3.
1171
1172 integer(Value::integer()) -> syntaxTree()
1173
1174 Creates an abstract integer literal. The lexical representation
1175 is the canonical decimal numeral of Value.
1176
1177 See also: integer_literal/1, integer_value/1, is_integer/2.
1178
1179 integer_literal(Node::syntaxTree()) -> string()
1180
1181 Returns the numeral string represented by an integer node.
1182
1183 See also: integer/1.
1184
1185 integer_range_type(Low::syntaxTree(), High::syntaxTree()) -> syntax‐
1186 Tree()
1187
1188 Creates an abstract range type. The result represents "Low ..
1189 High".
1190
1191 See also: integer_range_type_high/1, integer_range_type_low/1.
1192
1193 integer_range_type_high(Node::syntaxTree()) -> syntaxTree()
1194
1195 Returns the high limit of an integer_range_type node.
1196
1197 See also: integer_range_type/2.
1198
1199 integer_range_type_low(Node::syntaxTree()) -> syntaxTree()
1200
1201 Returns the low limit of an integer_range_type node.
1202
1203 See also: integer_range_type/2.
1204
1205 integer_value(Node::syntaxTree()) -> integer()
1206
1207 Returns the value represented by an integer node.
1208
1209 See also: integer/1.
1210
1211 is_atom(Node::syntaxTree(), Value::atom()) -> boolean()
1212
1213 Returns true if Node has type atom and represents Value, other‐
1214 wise false.
1215
1216 See also: atom/1.
1217
1218 is_char(Node::syntaxTree(), Value::char()) -> boolean()
1219
1220 Returns true if Node has type char and represents Value, other‐
1221 wise false.
1222
1223 See also: char/1.
1224
1225 is_form(Node::syntaxTree()) -> boolean()
1226
1227 Returns true if Node is a syntax tree representing a so-called
1228 "source code form", otherwise false. Forms are the Erlang source
1229 code units which, placed in sequence, constitute an Erlang pro‐
1230 gram. Current form types are:
1231
1232 attribute comment error_marker eof_marker
1233 form_list function warning_marker text
1234
1235
1236 See also: attribute/2, comment/2, eof_marker/0, error_marker/1,
1237 form_list/1, function/2, type/1, warning_marker/1.
1238
1239 is_integer(Node::syntaxTree(), Value::integer()) -> boolean()
1240
1241 Returns true if Node has type integer and represents Value, oth‐
1242 erwise false.
1243
1244 See also: integer/1.
1245
1246 is_leaf(Node::syntaxTree()) -> boolean()
1247
1248 Returns true if Node is a leaf node, otherwise false. The cur‐
1249 rently recognised leaf node types are:
1250
1251 atom char comment eof_marker error_marker
1252 float fun_type integer nil operator string
1253 text underscore variable warning_marker
1254
1255
1256 A node of type map_expr is a leaf node if and only if it has no
1257 argument and no fields. A node of type map_type is a leaf node
1258 if and only if it has no fields (any_size). A node of type tuple
1259 is a leaf node if and only if its arity is zero. A node of type
1260 tuple_type is a leaf node if and only if it has no elements
1261 (any_size).
1262
1263 Note: not all literals are leaf nodes, and vice versa. E.g., tu‐
1264 ples with nonzero arity and nonempty lists may be literals, but
1265 are not leaf nodes. Variables, on the other hand, are leaf nodes
1266 but not literals.
1267
1268 See also: is_literal/1, type/1.
1269
1270 is_list_skeleton(Node::syntaxTree()) -> boolean()
1271
1272 Returns true if Node has type list or nil, otherwise false.
1273
1274 See also: list/2, nil/0.
1275
1276 is_literal(T::syntaxTree()) -> boolean()
1277
1278 Returns true if Node represents a literal term, otherwise false.
1279 This function returns true if and only if the value of con‐
1280 crete(Node) is defined.
1281
1282 See also: abstract/1, concrete/1.
1283
1284 is_proper_list(Node::syntaxTree()) -> boolean()
1285
1286 Returns true if Node represents a proper list, and false other‐
1287 wise. A proper list is a list skeleton either on the form "[]"
1288 or "[E1, ..., En]", or "[... | Tail]" where recursively Tail
1289 also represents a proper list.
1290
1291 Note: Since Node is a syntax tree, the actual run-time values
1292 corresponding to its subtrees may often be partially or com‐
1293 pletely unknown. Thus, if Node represents e.g. "[... | Ns]"
1294 (where Ns is a variable), then the function will return false,
1295 because it is not known whether Ns will be bound to a list at
1296 run-time. If Node instead represents e.g. "[1, 2, 3]" or "[A |
1297 []]", then the function will return true.
1298
1299 See also: list/2.
1300
1301 is_string(Node::syntaxTree(), Value::string()) -> boolean()
1302
1303 Returns true if Node has type string and represents Value, oth‐
1304 erwise false.
1305
1306 See also: string/1.
1307
1308 is_tree(Tree::syntaxTree()) -> boolean()
1309
1310 For special purposes only. Returns true if Tree is an abstract
1311 syntax tree and false otherwise.
1312
1313 Note: this function yields false for all "old-style" erl_parse-
1314 compatible "parse trees".
1315
1316 See also: tree/2.
1317
1318 join_comments(Source::syntaxTree(), Target::syntaxTree()) -> syntax‐
1319 Tree()
1320
1321 Appends the comments of Source to the current comments of Tar‐
1322 get.
1323
1324 Note: This is equivalent to add_postcomments(get_postcom‐
1325 ments(Source), add_precomments(get_precomments(Source), Tar‐
1326 get)), but potentially more efficient.
1327
1328 See also: add_postcomments/2, add_precomments/2, comment/2,
1329 get_postcomments/1, get_precomments/1.
1330
1331 list(List::[syntaxTree()]) -> syntaxTree()
1332
1333 Equivalent to list(List, none).
1334
1335 list(Elements::[syntaxTree()], Tail::none | syntaxTree()) -> syntax‐
1336 Tree()
1337
1338 Constructs an abstract list skeleton. The result has type list
1339 or nil. If List is a nonempty list [E1, ..., En], the result has
1340 type list and represents either "[E1, ..., En]", if Tail is
1341 none, or otherwise "[E1, ..., En | Tail]". If List is the empty
1342 list, Tail must be none, and in that case the result has type
1343 nil and represents "[]" (see nil/0).
1344
1345 The difference between lists as semantic objects (built up of
1346 individual "cons" and "nil" terms) and the various syntactic
1347 forms for denoting lists may be bewildering at first. This mod‐
1348 ule provides functions both for exact control of the syntactic
1349 representation as well as for the simple composition and decon‐
1350 struction in terms of cons and head/tail operations.
1351
1352 Note: in list(Elements, none), the "nil" list terminator is im‐
1353 plicit and has no associated information (see get_attrs/1),
1354 while in the seemingly equivalent list(Elements, Tail) when Tail
1355 has type nil, the list terminator subtree Tail may have attached
1356 attributes such as position, comments, and annotations, which
1357 will be preserved in the result.
1358
1359 See also: compact_list/1, cons/2, get_attrs/1, is_list_skele‐
1360 ton/1, is_proper_list/1, list/1, list_elements/1, list_head/1,
1361 list_length/1, list_prefix/1, list_suffix/1, list_tail/1, nil/0,
1362 normalize_list/1.
1363
1364 list_comp(Template::syntaxTree(), Body::[syntaxTree()]) -> syntaxTree()
1365
1366 Creates an abstract list comprehension. If Body is [E1, ...,
1367 En], the result represents "[Template || E1, ..., En]".
1368
1369 See also: generator/2, list_comp_body/1, list_comp_template/1.
1370
1371 list_comp_body(Node::syntaxTree()) -> [syntaxTree()]
1372
1373 Returns the list of body subtrees of a list_comp node.
1374
1375 See also: list_comp/2.
1376
1377 list_comp_template(Node::syntaxTree()) -> syntaxTree()
1378
1379 Returns the template subtree of a list_comp node.
1380
1381 See also: list_comp/2.
1382
1383 list_elements(Node::syntaxTree()) -> [syntaxTree()]
1384
1385 Returns the list of element subtrees of a list skeleton. Node
1386 must represent a proper list. E.g., if Node represents "[X1, X2
1387 | [X3, X4 | []]", then list_elements(Node) yields the list [X1,
1388 X2, X3, X4].
1389
1390 See also: is_proper_list/1, list/2.
1391
1392 list_head(Node::syntaxTree()) -> syntaxTree()
1393
1394 Returns the head element subtree of a list node. If Node repre‐
1395 sents "[Head ...]", the result will represent "Head".
1396
1397 See also: cons/2, list/2, list_tail/1.
1398
1399 list_length(Node::syntaxTree()) -> non_neg_integer()
1400
1401 Returns the number of element subtrees of a list skeleton. Node
1402 must represent a proper list. E.g., if Node represents "[X1 |
1403 [X2, X3 | [X4, X5, X6]]]", then list_length(Node) returns the
1404 integer 6.
1405
1406 Note: this is equivalent to length(list_elements(Node)), but po‐
1407 tentially more efficient.
1408
1409 See also: is_proper_list/1, list/2, list_elements/1.
1410
1411 list_prefix(Node::syntaxTree()) -> [syntaxTree()]
1412
1413 Returns the prefix element subtrees of a list node. If Node rep‐
1414 resents "[E1, ..., En]" or "[E1, ..., En | Tail]", the returned
1415 value is [E1, ..., En].
1416
1417 See also: list/2.
1418
1419 list_suffix(Node::syntaxTree()) -> none | syntaxTree()
1420
1421 Returns the suffix subtree of a list node, if one exists. If
1422 Node represents "[E1, ..., En | Tail]", the returned value is
1423 Tail, otherwise, i.e., if Node represents "[E1, ..., En]", none
1424 is returned.
1425
1426 Note that even if this function returns some Tail that is not
1427 none, the type of Tail can be nil, if the tail has been given
1428 explicitly, and the list skeleton has not been compacted (see
1429 compact_list/1).
1430
1431 See also: compact_list/1, list/2, nil/0.
1432
1433 list_tail(Node::syntaxTree()) -> syntaxTree()
1434
1435 Returns the tail of a list node. If Node represents a single-el‐
1436 ement list "[E]", then the result has type nil, representing
1437 "[]". If Node represents "[E1, E2 ...]", the result will repre‐
1438 sent "[E2 ...]", and if Node represents "[Head | Tail]", the re‐
1439 sult will represent "Tail".
1440
1441 See also: cons/2, list/2, list_head/1.
1442
1443 macro(Name::syntaxTree()) -> syntaxTree()
1444
1445 Equivalent to macro(Name, none).
1446
1447 macro(Name::syntaxTree(), Arguments::none | [syntaxTree()]) -> syntax‐
1448 Tree()
1449
1450 Creates an abstract macro application. If Arguments is none, the
1451 result represents "?Name", otherwise, if Arguments is [A1, ...,
1452 An], the result represents "?Name(A1, ..., An)".
1453
1454 Notes: if Arguments is the empty list, the result will thus rep‐
1455 resent "?Name()", including a pair of matching parentheses.
1456
1457 The only syntactical limitation imposed by the preprocessor on
1458 the arguments to a macro application (viewed as sequences of to‐
1459 kens) is that they must be balanced with respect to parentheses,
1460 brackets, begin ... end, case ... end, etc. The text node type
1461 can be used to represent arguments which are not regular Erlang
1462 constructs.
1463
1464 See also: macro/1, macro_arguments/1, macro_name/1, text/1.
1465
1466 macro_arguments(Node::syntaxTree()) -> none | [syntaxTree()]
1467
1468 Returns the list of argument subtrees of a macro node, if any.
1469 If Node represents "?Name", none is returned. Otherwise, if Node
1470 represents "?Name(A1, ..., An)", [A1, ..., An] is returned.
1471
1472 See also: macro/2.
1473
1474 macro_name(Node::syntaxTree()) -> syntaxTree()
1475
1476 Returns the name subtree of a macro node.
1477
1478 See also: macro/2.
1479
1480 make_tree(X1::atom(), X2::[[syntaxTree()]]) -> syntaxTree()
1481
1482 Creates a syntax tree with the given type and subtrees. Type
1483 must be a node type name (see type/1) that does not denote a
1484 leaf node type (see is_leaf/1). Groups must be a nonempty list
1485 of groups of syntax trees, representing the subtrees of a node
1486 of the given type, in left-to-right order as they would occur in
1487 the printed program text, grouped by category as done by sub‐
1488 trees/1.
1489
1490 The result of copy_attrs(Node, make_tree(type(Node), sub‐
1491 trees(Node))) (see update_tree/2) represents the same source
1492 code text as the original Node, assuming that subtrees(Node)
1493 yields a nonempty list. However, it does not necessarily have
1494 the same data representation as Node.
1495
1496 See also: copy_attrs/2, is_leaf/1, subtrees/1, type/1, up‐
1497 date_tree/2.
1498
1499 map_expr(Fields::[syntaxTree()]) -> syntaxTree()
1500
1501 Equivalent to map_expr(none, Fields).
1502
1503 map_expr(Argument::none | syntaxTree(), Fields::[syntaxTree()]) -> syn‐
1504 taxTree()
1505
1506 Creates an abstract map expression. If Fields is [F1, ..., Fn],
1507 then if Argument is none, the result represents "#{F1, ...,
1508 Fn}", otherwise it represents "Argument#{F1, ..., Fn}".
1509
1510 See also: map_expr/1, map_expr_argument/1, map_expr_fields/1,
1511 map_field_assoc/2, map_field_exact/2.
1512
1513 map_expr_argument(Node::syntaxTree()) -> none | syntaxTree()
1514
1515 Returns the argument subtree of a map_expr node, if any. If Node
1516 represents "#{...}", none is returned. Otherwise, if Node repre‐
1517 sents "Argument#{...}", Argument is returned.
1518
1519 See also: map_expr/2.
1520
1521 map_expr_fields(Node::syntaxTree()) -> [syntaxTree()]
1522
1523 Returns the list of field subtrees of a map_expr node.
1524
1525 See also: map_expr/2.
1526
1527 map_field_assoc(Name::syntaxTree(), Value::syntaxTree()) -> syntax‐
1528 Tree()
1529
1530 Creates an abstract map assoc field. The result represents "Name
1531 => Value".
1532
1533 See also: map_expr/2, map_field_assoc_name/1, map_field_as‐
1534 soc_value/1.
1535
1536 map_field_assoc_name(Node::syntaxTree()) -> syntaxTree()
1537
1538 Returns the name subtree of a map_field_assoc node.
1539
1540 See also: map_field_assoc/2.
1541
1542 map_field_assoc_value(Node::syntaxTree()) -> syntaxTree()
1543
1544 Returns the value subtree of a map_field_assoc node.
1545
1546 See also: map_field_assoc/2.
1547
1548 map_field_exact(Name::syntaxTree(), Value::syntaxTree()) -> syntax‐
1549 Tree()
1550
1551 Creates an abstract map exact field. The result represents "Name
1552 := Value".
1553
1554 See also: map_expr/2, map_field_exact_name/1, map_field_ex‐
1555 act_value/1.
1556
1557 map_field_exact_name(Node::syntaxTree()) -> syntaxTree()
1558
1559 Returns the name subtree of a map_field_exact node.
1560
1561 See also: map_field_exact/2.
1562
1563 map_field_exact_value(Node::syntaxTree()) -> syntaxTree()
1564
1565 Returns the value subtree of a map_field_exact node.
1566
1567 See also: map_field_exact/2.
1568
1569 map_type() -> term()
1570
1571 Equivalent to map_type(any_size).
1572
1573 map_type(Fields::any_size | [syntaxTree()]) -> syntaxTree()
1574
1575 Creates an abstract type map. If Fields is [F1, ..., Fn], the
1576 result represents "#{F1, ..., Fn}"; otherwise, if Fields is
1577 any_size, it represents "map()".
1578
1579 See also: map_type_fields/1.
1580
1581 map_type_assoc(Name::syntaxTree(), Value::syntaxTree()) -> syntaxTree()
1582
1583 Creates an abstract map type assoc field. The result represents
1584 "Name => Value".
1585
1586 See also: map_type/1, map_type_assoc_name/1, map_type_as‐
1587 soc_value/1.
1588
1589 map_type_assoc_name(Node::syntaxTree()) -> syntaxTree()
1590
1591 Returns the name subtree of a map_type_assoc node.
1592
1593 See also: map_type_assoc/2.
1594
1595 map_type_assoc_value(Node::syntaxTree()) -> syntaxTree()
1596
1597 Returns the value subtree of a map_type_assoc node.
1598
1599 See also: map_type_assoc/2.
1600
1601 map_type_exact(Name::syntaxTree(), Value::syntaxTree()) -> syntaxTree()
1602
1603 Creates an abstract map type exact field. The result represents
1604 "Name := Value".
1605
1606 See also: map_type/1, map_type_exact_name/1, map_type_ex‐
1607 act_value/1.
1608
1609 map_type_exact_name(Node::syntaxTree()) -> syntaxTree()
1610
1611 Returns the name subtree of a map_type_exact node.
1612
1613 See also: map_type_exact/2.
1614
1615 map_type_exact_value(Node::syntaxTree()) -> syntaxTree()
1616
1617 Returns the value subtree of a map_type_exact node.
1618
1619 See also: map_type_exact/2.
1620
1621 map_type_fields(Node::syntaxTree()) -> any_size | [syntaxTree()]
1622
1623 Returns the list of field subtrees of a map_type node. If Node
1624 represents "map()", any_size is returned; otherwise, if Node
1625 represents "#{F1, ..., Fn}", [F1, ..., Fn] is returned.
1626
1627 See also: map_type/0, map_type/1.
1628
1629 match_expr(Pattern::syntaxTree(), Body::syntaxTree()) -> syntaxTree()
1630
1631 Creates an abstract match-expression. The result represents
1632 "Pattern = Body".
1633
1634 See also: match_expr_body/1, match_expr_pattern/1.
1635
1636 match_expr_body(Node::syntaxTree()) -> syntaxTree()
1637
1638 Returns the body subtree of a match_expr node.
1639
1640 See also: match_expr/2.
1641
1642 match_expr_pattern(Node::syntaxTree()) -> syntaxTree()
1643
1644 Returns the pattern subtree of a match_expr node.
1645
1646 See also: match_expr/2.
1647
1648 maybe_expr(Body::[syntaxTree()]) -> syntaxTree()
1649
1650 Equivalent to maybe_expr(Body, none).
1651
1652 maybe_expr(Body::[syntaxTree()], OptionalElse::none | syntaxTree()) ->
1653 syntaxTree()
1654
1655 Creates an abstract maybe-expression. If Body is [B1, ..., Bn],
1656 and OptionalElse is none, the result represents "maybe B1, ...,
1657 Bn end". If Body is [B1, ..., Bn], and OptionalElse reprsents an
1658 else_expr node with clauses [C1, ..., Cn], the result represents
1659 "maybe B1, ..., Bn else C1; ..., Cn end".
1660
1661 See clause for documentation on erl_parse clauses.
1662
1663 See also: maybe_expr_body/1, maybe_expr_else/1.
1664
1665 maybe_expr_body(Node::syntaxTree()) -> [syntaxTree()]
1666
1667 Returns the list of body subtrees of a maybe_expr node.
1668
1669 See also: maybe_expr/2.
1670
1671 maybe_expr_else(Node::syntaxTree()) -> none | syntaxTree()
1672
1673 Returns the else subtree of a maybe_expr node.
1674
1675 See also: maybe_expr/2.
1676
1677 maybe_match_expr(Pattern::syntaxTree(), Body::syntaxTree()) -> syntax‐
1678 Tree()
1679
1680 Creates an abstract maybe-expression, as used in maybe blocks.
1681 The result represents "Pattern ?= Body".
1682
1683 See also: maybe_expr/2, maybe_match_expr_body/1,
1684 maybe_match_expr_pattern/1.
1685
1686 maybe_match_expr_body(Node::syntaxTree()) -> syntaxTree()
1687
1688 Returns the body subtree of a maybe_expr node.
1689
1690 See also: maybe_match_expr/2.
1691
1692 maybe_match_expr_pattern(Node::syntaxTree()) -> syntaxTree()
1693
1694 Returns the pattern subtree of a maybe_expr node.
1695
1696 See also: maybe_match_expr/2.
1697
1698 meta(T::syntaxTree()) -> syntaxTree()
1699
1700 Creates a meta-representation of a syntax tree. The result rep‐
1701 resents an Erlang expression "MetaTree" which, if evaluated,
1702 will yield a new syntax tree representing the same source code
1703 text as Tree (although the actual data representation may be
1704 different). The expression represented by MetaTree is implemen‐
1705 tation independent with regard to the data structures used by
1706 the abstract syntax tree implementation. Comments attached to
1707 nodes of Tree will be preserved, but other attributes are lost.
1708
1709 Any node in Tree whose node type is variable (see type/1), and
1710 whose list of annotations (see get_ann/1) contains the atom
1711 meta_var, will remain unchanged in the resulting tree, except
1712 that exactly one occurrence of meta_var is removed from its an‐
1713 notation list.
1714
1715 The main use of the function meta/1 is to transform a data
1716 structure Tree, which represents a piece of program code, into a
1717 form that is representation independent when printed. E.g., sup‐
1718 pose Tree represents a variable named "V". Then (assuming a
1719 function print/1 for printing syntax trees), evaluating
1720 print(abstract(Tree)) - simply using abstract/1 to map the ac‐
1721 tual data structure onto a syntax tree representation - would
1722 output a string that might look something like "{tree, variable,
1723 ..., "V", ...}", which is obviously dependent on the implementa‐
1724 tion of the abstract syntax trees. This could e.g. be useful for
1725 caching a syntax tree in a file. However, in some situations
1726 like in a program generator generator (with two "generator"), it
1727 may be unacceptable. Using print(meta(Tree)) instead would out‐
1728 put a representation independent syntax tree generating expres‐
1729 sion; in the above case, something like "erl_syntax:vari‐
1730 able("V")".
1731
1732 See also: abstract/1, get_ann/1, type/1.
1733
1734 module_qualifier(Module::syntaxTree(), Body::syntaxTree()) -> syntax‐
1735 Tree()
1736
1737 Creates an abstract module qualifier. The result represents
1738 "Module:Body".
1739
1740 See also: module_qualifier_argument/1, module_qualifier_body/1.
1741
1742 module_qualifier_argument(Node::syntaxTree()) -> syntaxTree()
1743
1744 Returns the argument (the module) subtree of a module_qualifier
1745 node.
1746
1747 See also: module_qualifier/2.
1748
1749 module_qualifier_body(Node::syntaxTree()) -> syntaxTree()
1750
1751 Returns the body subtree of a module_qualifier node.
1752
1753 See also: module_qualifier/2.
1754
1755 named_fun_expr(Name::syntaxTree(), Clauses::[syntaxTree()]) -> syntax‐
1756 Tree()
1757
1758 Creates an abstract named fun-expression. If Clauses is [C1,
1759 ..., Cn], the result represents "fun Name C1; ...; Name Cn end".
1760 More exactly, if each Ci represents "(Pi1, ..., Pim) Gi -> Bi",
1761 then the result represents "fun Name(P11, ..., P1m) G1 -> B1;
1762 ...; Name(Pn1, ..., Pnm) Gn -> Bn end".
1763
1764 See also: named_fun_expr_arity/1, named_fun_expr_clauses/1,
1765 named_fun_expr_name/1.
1766
1767 named_fun_expr_arity(Node::syntaxTree()) -> arity()
1768
1769 Returns the arity of a named_fun_expr node. The result is the
1770 number of parameter patterns in the first clause of the named
1771 fun-expression; subsequent clauses are ignored.
1772
1773 An exception is thrown if named_fun_expr_clauses(Node) returns
1774 an empty list, or if the first element of that list is not a
1775 syntax tree C of type clause such that clause_patterns(C) is a
1776 nonempty list.
1777
1778 See also: clause/3, clause_patterns/1, named_fun_expr/2,
1779 named_fun_expr_clauses/1.
1780
1781 named_fun_expr_clauses(Node::syntaxTree()) -> [syntaxTree()]
1782
1783 Returns the list of clause subtrees of a named_fun_expr node.
1784
1785 See also: named_fun_expr/2.
1786
1787 named_fun_expr_name(Node::syntaxTree()) -> syntaxTree()
1788
1789 Returns the name subtree of a named_fun_expr node.
1790
1791 See also: named_fun_expr/2.
1792
1793 nil() -> syntaxTree()
1794
1795 Creates an abstract empty list. The result represents "[]". The
1796 empty list is traditionally called "nil".
1797
1798 See also: is_list_skeleton/1, list/2.
1799
1800 normalize_list(Node::syntaxTree()) -> syntaxTree()
1801
1802 Expands an abstract list skeleton to its most explicit form. If
1803 Node represents "[E1, ..., En | Tail]", the result represents
1804 "[E1 | ... [En | Tail1] ... ]", where Tail1 is the result of
1805 normalize_list(Tail). If Node represents "[E1, ..., En]", the
1806 result simply represents "[E1 | ... [En | []] ... ]". If Node
1807 does not represent a list skeleton, Node itself is returned.
1808
1809 See also: compact_list/1, list/2.
1810
1811 operator(Name::atom() | string()) -> syntaxTree()
1812
1813 Creates an abstract operator. The name of the operator is the
1814 character sequence represented by Name. This is analogous to the
1815 print name of an atom, but an operator is never written within
1816 single-quotes; e.g., the result of operator('++') represents
1817 "++" rather than "'++'".
1818
1819 See also: atom/1, operator_literal/1, operator_name/1.
1820
1821 operator_literal(Node::syntaxTree()) -> string()
1822
1823 Returns the literal string represented by an operator node. This
1824 is simply the operator name as a string.
1825
1826 See also: operator/1.
1827
1828 operator_name(Node::syntaxTree()) -> atom()
1829
1830 Returns the name of an operator node. Note that the name is re‐
1831 turned as an atom.
1832
1833 See also: operator/1.
1834
1835 parentheses(Expr::syntaxTree()) -> syntaxTree()
1836
1837 Creates an abstract parenthesised expression. The result repre‐
1838 sents "(Body)", independently of the context.
1839
1840 See also: parentheses_body/1.
1841
1842 parentheses_body(Node::syntaxTree()) -> syntaxTree()
1843
1844 Returns the body subtree of a parentheses node.
1845
1846 See also: parentheses/1.
1847
1848 prefix_expr(Operator::syntaxTree(), Argument::syntaxTree()) -> syntax‐
1849 Tree()
1850
1851 Creates an abstract prefix operator expression. The result rep‐
1852 resents "Operator Argument".
1853
1854 See also: infix_expr/3, prefix_expr_argument/1, prefix_expr_op‐
1855 erator/1.
1856
1857 prefix_expr_argument(Node::syntaxTree()) -> syntaxTree()
1858
1859 Returns the argument subtree of a prefix_expr node.
1860
1861 See also: prefix_expr/2.
1862
1863 prefix_expr_operator(Node::syntaxTree()) -> syntaxTree()
1864
1865 Returns the operator subtree of a prefix_expr node.
1866
1867 See also: prefix_expr/2.
1868
1869 receive_expr(Clauses::[syntaxTree()]) -> syntaxTree()
1870
1871 Equivalent to receive_expr(Clauses, none, []).
1872
1873 receive_expr(Clauses::[syntaxTree()], Timeout::none | syntaxTree(), Ac‐
1874 tion::[syntaxTree()]) -> syntaxTree()
1875
1876 Creates an abstract receive-expression. If Timeout is none, the
1877 result represents "receive C1; ...; Cn end" (the Action argument
1878 is ignored). Otherwise, if Clauses is [C1, ..., Cn] and Action
1879 is [A1, ..., Am], the result represents "receive C1; ...; Cn af‐
1880 ter Timeout -> A1, ..., Am end". More exactly, if each Ci repre‐
1881 sents "(Pi) Gi -> Bi", then the result represents "receive P1 G1
1882 -> B1; ...; Pn Gn -> Bn ... end".
1883
1884 Note that in Erlang, a receive-expression must have at least one
1885 clause if no timeout part is specified.
1886
1887 See also: case_expr/2, clause/3, receive_expr/1, re‐
1888 ceive_expr_action/1, receive_expr_clauses/1, receive_expr_time‐
1889 out/1.
1890
1891 receive_expr_action(Node::syntaxTree()) -> [syntaxTree()]
1892
1893 Returns the list of action body subtrees of a receive_expr node.
1894 If Node represents "receive C1; ...; Cn end", this is the empty
1895 list.
1896
1897 See also: receive_expr/3.
1898
1899 receive_expr_clauses(Node::syntaxTree()) -> [syntaxTree()]
1900
1901 Returns the list of clause subtrees of a receive_expr node.
1902
1903 See also: receive_expr/3.
1904
1905 receive_expr_timeout(Node::syntaxTree()) -> none | syntaxTree()
1906
1907 Returns the timeout subtree of a receive_expr node, if any. If
1908 Node represents "receive C1; ...; Cn end", none is returned.
1909 Otherwise, if Node represents "receive C1; ...; Cn after Timeout
1910 -> ... end", Timeout is returned.
1911
1912 See also: receive_expr/3.
1913
1914 record_access(Argument::syntaxTree(), Type::syntaxTree(), Field::syn‐
1915 taxTree()) -> syntaxTree()
1916
1917 Creates an abstract record field access expression. The result
1918 represents "Argument#Type.Field".
1919
1920 See also: record_access_argument/1, record_access_field/1,
1921 record_access_type/1, record_expr/3.
1922
1923 record_access_argument(Node::syntaxTree()) -> syntaxTree()
1924
1925 Returns the argument subtree of a record_access node.
1926
1927 See also: record_access/3.
1928
1929 record_access_field(Node::syntaxTree()) -> syntaxTree()
1930
1931 Returns the field subtree of a record_access node.
1932
1933 See also: record_access/3.
1934
1935 record_access_type(Node::syntaxTree()) -> syntaxTree()
1936
1937 Returns the type subtree of a record_access node.
1938
1939 See also: record_access/3.
1940
1941 record_expr(Type::syntaxTree(), Fields::[syntaxTree()]) -> syntaxTree()
1942
1943 Equivalent to record_expr(none, Type, Fields).
1944
1945 record_expr(Argument::none | syntaxTree(), Type::syntaxTree(),
1946 Fields::[syntaxTree()]) -> syntaxTree()
1947
1948 Creates an abstract record expression. If Fields is [F1, ...,
1949 Fn], then if Argument is none, the result represents "#Type{F1,
1950 ..., Fn}", otherwise it represents "Argument#Type{F1, ..., Fn}".
1951
1952 See also: record_access/3, record_expr/2, record_expr_argu‐
1953 ment/1, record_expr_fields/1, record_expr_type/1,
1954 record_field/2, record_index_expr/2.
1955
1956 record_expr_argument(Node::syntaxTree()) -> none | syntaxTree()
1957
1958 Returns the argument subtree of a record_expr node, if any. If
1959 Node represents "#Type{...}", none is returned. Otherwise, if
1960 Node represents "Argument#Type{...}", Argument is returned.
1961
1962 See also: record_expr/3.
1963
1964 record_expr_fields(Node::syntaxTree()) -> [syntaxTree()]
1965
1966 Returns the list of field subtrees of a record_expr node.
1967
1968 See also: record_expr/3.
1969
1970 record_expr_type(Node::syntaxTree()) -> syntaxTree()
1971
1972 Returns the type subtree of a record_expr node.
1973
1974 See also: record_expr/3.
1975
1976 record_field(Name::syntaxTree()) -> syntaxTree()
1977
1978 Equivalent to record_field(Name, none).
1979
1980 record_field(Name::syntaxTree(), Value::none | syntaxTree()) -> syntax‐
1981 Tree()
1982
1983 Creates an abstract record field specification. If Value is
1984 none, the result represents simply "Name", otherwise it repre‐
1985 sents "Name = Value".
1986
1987 See also: record_expr/3, record_field_name/1,
1988 record_field_value/1.
1989
1990 record_field_name(Node::syntaxTree()) -> syntaxTree()
1991
1992 Returns the name subtree of a record_field node.
1993
1994 See also: record_field/2.
1995
1996 record_field_value(Node::syntaxTree()) -> none | syntaxTree()
1997
1998 Returns the value subtree of a record_field node, if any. If
1999 Node represents "Name", none is returned. Otherwise, if Node
2000 represents "Name = Value", Value is returned.
2001
2002 See also: record_field/2.
2003
2004 record_index_expr(Type::syntaxTree(), Field::syntaxTree()) -> syntax‐
2005 Tree()
2006
2007 Creates an abstract record field index expression. The result
2008 represents "#Type.Field".
2009
2010 (Note: the function name record_index/2 is reserved by the Er‐
2011 lang compiler, which is why that name could not be used for this
2012 constructor.)
2013
2014 See also: record_expr/3, record_index_expr_field/1, record_in‐
2015 dex_expr_type/1.
2016
2017 record_index_expr_field(Node::syntaxTree()) -> syntaxTree()
2018
2019 Returns the field subtree of a record_index_expr node.
2020
2021 See also: record_index_expr/2.
2022
2023 record_index_expr_type(Node::syntaxTree()) -> syntaxTree()
2024
2025 Returns the type subtree of a record_index_expr node.
2026
2027 See also: record_index_expr/2.
2028
2029 record_type(Name::syntaxTree(), Fields::[syntaxTree()]) -> syntaxTree()
2030
2031 Creates an abstract record type. If Fields is [F1, ..., Fn], the
2032 result represents "#Name{F1, ..., Fn}".
2033
2034 See also: record_type_fields/1, record_type_name/1.
2035
2036 record_type_field(Name::syntaxTree(), Type::syntaxTree()) -> syntax‐
2037 Tree()
2038
2039 Creates an abstract record type field. The result represents
2040 "Name :: Type".
2041
2042 See also: record_type_field_name/1, record_type_field_type/1.
2043
2044 record_type_field_name(Node::syntaxTree()) -> syntaxTree()
2045
2046 Returns the name subtree of a record_type_field node.
2047
2048 See also: record_type_field/2.
2049
2050 record_type_field_type(Node::syntaxTree()) -> syntaxTree()
2051
2052 Returns the type subtree of a record_type_field node.
2053
2054 See also: record_type_field/2.
2055
2056 record_type_fields(Node::syntaxTree()) -> [syntaxTree()]
2057
2058 Returns the fields subtree of a record_type node.
2059
2060 See also: record_type/2.
2061
2062 record_type_name(Node::syntaxTree()) -> syntaxTree()
2063
2064 Returns the name subtree of a record_type node.
2065
2066 See also: record_type/2.
2067
2068 remove_comments(Node::syntaxTree()) -> syntaxTree()
2069
2070 Clears the associated comments of Node.
2071
2072 Note: This is equivalent to set_precomments(set_postcom‐
2073 ments(Node, []), []), but potentially more efficient.
2074
2075 See also: set_postcomments/2, set_precomments/2.
2076
2077 revert(Node::syntaxTree()) -> syntaxTree()
2078
2079 Returns an erl_parse-compatible representation of a syntax tree,
2080 if possible. If Tree represents a well-formed Erlang program or
2081 expression, the conversion should work without problems. Typi‐
2082 cally, is_tree/1 yields true if conversion failed (i.e., the re‐
2083 sult is still an abstract syntax tree), and false otherwise.
2084
2085 The is_tree/1 test is not completely foolproof. For a few spe‐
2086 cial node types (e.g. arity_qualifier), if such a node occurs in
2087 a context where it is not expected, it will be left unchanged as
2088 a non-reverted subtree of the result. This can only happen if
2089 Tree does not actually represent legal Erlang code.
2090
2091 See also: erl_parse(3), revert_forms/1.
2092
2093 revert_forms(Forms::forms()) -> [erl_parse()]
2094
2095 Reverts a sequence of Erlang source code forms. The sequence can
2096 be given either as a form_list syntax tree (possibly nested), or
2097 as a list of "program form" syntax trees. If successful, the
2098 corresponding flat list of erl_parse-compatible syntax trees is
2099 returned (see revert/1). If some program form could not be re‐
2100 verted, {error, Form} is thrown. Standalone comments in the form
2101 sequence are discarded.
2102
2103 See also: form_list/1, is_form/1, revert/1.
2104
2105 set_ann(Node::syntaxTree(), As::[term()]) -> syntaxTree()
2106
2107 Sets the list of user annotations of Node to Annotations.
2108
2109 See also: add_ann/2, copy_ann/2, get_ann/1.
2110
2111 set_attrs(Node::syntaxTree(), Attr::syntaxTreeAttributes()) -> syntax‐
2112 Tree()
2113
2114 Sets the attributes of Node to Attributes.
2115
2116 See also: copy_attrs/2, get_attrs/1.
2117
2118 set_pos(Node::syntaxTree(), Pos::annotation_or_location()) -> syntax‐
2119 Tree()
2120
2121 Sets the position information of Node to Pos.
2122
2123 See also: copy_pos/2, get_pos/1.
2124
2125 set_postcomments(Node::syntaxTree(), Cs::[syntaxTree()]) -> syntax‐
2126 Tree()
2127
2128 Sets the post-comments of Node to Comments. Comments should be a
2129 possibly empty list of abstract comments, in top-down textual
2130 order
2131
2132 See also: add_postcomments/2, comment/2, copy_comments/2,
2133 get_postcomments/1, join_comments/2, remove_comments/1, set_pre‐
2134 comments/2.
2135
2136 set_precomments(Node::syntaxTree(), Cs::[syntaxTree()]) -> syntaxTree()
2137
2138 Sets the pre-comments of Node to Comments. Comments should be a
2139 possibly empty list of abstract comments, in top-down textual
2140 order.
2141
2142 See also: add_precomments/2, comment/2, copy_comments/2,
2143 get_precomments/1, join_comments/2, remove_comments/1, set_post‐
2144 comments/2.
2145
2146 size_qualifier(Body::syntaxTree(), Size::syntaxTree()) -> syntaxTree()
2147
2148 Creates an abstract size qualifier. The result represents
2149 "Body:Size".
2150
2151 See also: size_qualifier_argument/1, size_qualifier_body/1.
2152
2153 size_qualifier_argument(Node::syntaxTree()) -> syntaxTree()
2154
2155 Returns the argument subtree (the size) of a size_qualifier
2156 node.
2157
2158 See also: size_qualifier/2.
2159
2160 size_qualifier_body(Node::syntaxTree()) -> syntaxTree()
2161
2162 Returns the body subtree of a size_qualifier node.
2163
2164 See also: size_qualifier/2.
2165
2166 string(String::string()) -> syntaxTree()
2167
2168 Creates an abstract string literal. The result represents "Text"
2169 (including the surrounding double-quotes), where Text corre‐
2170 sponds to the sequence of characters in Value, but not repre‐
2171 senting a specific string literal.
2172
2173 For example, the result of string("x\ny") represents any and all
2174 of "x\ny", "x\12y", "x\012y" and "x\^Jy"; see char/1.
2175
2176 See also: char/1, is_string/2, string_literal/1, string_lit‐
2177 eral/2, string_value/1.
2178
2179 string_literal(Node::syntaxTree()) -> nonempty_string()
2180
2181 Returns the literal string represented by a string node. This
2182 includes surrounding double-quote characters. Characters beyond
2183 255 will be escaped.
2184
2185 See also: string/1.
2186
2187 string_literal(Node::syntaxTree(), X2::encoding()) -> nonempty_string()
2188
2189 Returns the literal string represented by a string node. This
2190 includes surrounding double-quote characters. Depending on the
2191 encoding characters beyond 255 will be escaped (latin1) or
2192 copied as is (utf8).
2193
2194 See also: string/1.
2195
2196 string_value(Node::syntaxTree()) -> string()
2197
2198 Returns the value represented by a string node.
2199
2200 See also: string/1.
2201
2202 subtrees(T::syntaxTree()) -> [[syntaxTree()]]
2203
2204 Returns the grouped list of all subtrees of a syntax tree. If
2205 Node is a leaf node (see is_leaf/1), this is the empty list,
2206 otherwise the result is always a nonempty list, containing the
2207 lists of subtrees of Node, in left-to-right order as they occur
2208 in the printed program text, and grouped by category. Often,
2209 each group contains only a single subtree.
2210
2211 Depending on the type of Node, the size of some groups may be
2212 variable (e.g., the group consisting of all the elements of a
2213 tuple), while others always contain the same number of elements
2214 - usually exactly one (e.g., the group containing the argument
2215 expression of a case-expression). Note, however, that the exact
2216 structure of the returned list (for a given node type) should in
2217 general not be depended upon, since it might be subject to
2218 change without notice.
2219
2220 The function subtrees/1 and the constructor functions
2221 make_tree/2 and update_tree/2 can be a great help if one wants
2222 to traverse a syntax tree, visiting all its subtrees, but treat
2223 nodes of the tree in a uniform way in most or all cases. Using
2224 these functions makes this simple, and also assures that your
2225 code is not overly sensitive to extensions of the syntax tree
2226 data type, because any node types not explicitly handled by your
2227 code can be left to a default case.
2228
2229 For example:
2230
2231 postorder(F, Tree) ->
2232 F(case subtrees(Tree) of
2233 [] -> Tree;
2234 List -> update_tree(Tree,
2235 [[postorder(F, Subtree)
2236 || Subtree <- Group]
2237 || Group <- List])
2238 end).
2239
2240 maps the function F on Tree and all its subtrees, doing a post-
2241 order traversal of the syntax tree. (Note the use of up‐
2242 date_tree/2 to preserve node attributes.) For a simple function
2243 like:
2244
2245 f(Node) ->
2246 case type(Node) of
2247 atom -> atom("a_" ++ atom_name(Node));
2248 _ -> Node
2249 end.
2250
2251 the call postorder(fun f/1, Tree) will yield a new representa‐
2252 tion of Tree in which all atom names have been extended with the
2253 prefix "a_", but nothing else (including comments, annotations
2254 and line numbers) has been changed.
2255
2256 See also: copy_attrs/2, is_leaf/1, make_tree/2, type/1.
2257
2258 text(String::string()) -> syntaxTree()
2259
2260 Creates an abstract piece of source code text. The result repre‐
2261 sents exactly the sequence of characters in String. This is use‐
2262 ful in cases when one wants full control of the resulting out‐
2263 put, e.g., for the appearance of floating-point numbers or macro
2264 definitions.
2265
2266 See also: text_string/1.
2267
2268 text_string(Node::syntaxTree()) -> string()
2269
2270 Returns the character sequence represented by a text node.
2271
2272 See also: text/1.
2273
2274 tree(Type::atom()) -> tree()
2275
2276 Equivalent to tree(Type, []).
2277
2278 tree(Type::atom(), Data::term()) -> tree()
2279
2280 For special purposes only. Creates an abstract syntax tree node
2281 with type tag Type and associated data Data.
2282
2283 This function and the related is_tree/1 and data/1 provide a
2284 uniform way to extend the set of erl_parse node types. The asso‐
2285 ciated data is any term, whose format may depend on the type
2286 tag.
2287
2288 Notes:
2289
2290 * Any nodes created outside of this module must have type tags
2291 distinct from those currently defined by this module; see
2292 type/1 for a complete list.
2293
2294 * The type tag of a syntax tree node may also be used as a
2295 primary tag by the erl_parse representation; in that case,
2296 the selector functions for that node type must handle both
2297 the abstract syntax tree and the erl_parse form. The func‐
2298 tion type(T) should return the correct type tag regardless
2299 of the representation of T, so that the user sees no differ‐
2300 ence between erl_syntax and erl_parse nodes.
2301
2302 See also: data/1, is_tree/1, type/1.
2303
2304 try_after_expr(Body::[syntaxTree()], After::[syntaxTree()]) -> syntax‐
2305 Tree()
2306
2307 Equivalent to try_expr(Body, [], [], After).
2308
2309 try_expr(Body::[syntaxTree()], Handlers::[syntaxTree()]) -> syntax‐
2310 Tree()
2311
2312 Equivalent to try_expr(Body, [], Handlers).
2313
2314 try_expr(Body::[syntaxTree()], Clauses::[syntaxTree()], Handlers::[syn‐
2315 taxTree()]) -> syntaxTree()
2316
2317 Equivalent to try_expr(Body, Clauses, Handlers, []).
2318
2319 try_expr(Body::[syntaxTree()], Clauses::[syntaxTree()], Handlers::[syn‐
2320 taxTree()], After::[syntaxTree()]) -> syntaxTree()
2321
2322 Creates an abstract try-expression. If Body is [B1, ..., Bn],
2323 Clauses is [C1, ..., Cj], Handlers is [H1, ..., Hk], and After
2324 is [A1, ..., Am], the result represents "try B1, ..., Bn of C1;
2325 ...; Cj catch H1; ...; Hk after A1, ..., Am end". More exactly,
2326 if each Ci represents "(CPi) CGi -> CBi", and each Hi represents
2327 "(HPi) HGi -> HBi", then the result represents "try B1, ..., Bn
2328 of CP1 CG1 -> CB1; ...; CPj CGj -> CBj catch HP1 HG1 -> HB1;
2329 ...; HPk HGk -> HBk after A1, ..., Am end"; see case_expr/2. If
2330 Clauses is the empty list, the of ... section is left out. If
2331 After is the empty list, the after ... section is left out. If
2332 Handlers is the empty list, and After is nonempty, the catch ...
2333 section is left out.
2334
2335 See also: case_expr/2, class_qualifier/2, clause/3, try_af‐
2336 ter_expr/2, try_expr/2, try_expr/3, try_expr_after/1,
2337 try_expr_body/1, try_expr_clauses/1, try_expr_handlers/1.
2338
2339 try_expr_after(Node::syntaxTree()) -> [syntaxTree()]
2340
2341 Returns the list of "after" subtrees of a try_expr node.
2342
2343 See also: try_expr/4.
2344
2345 try_expr_body(Node::syntaxTree()) -> [syntaxTree()]
2346
2347 Returns the list of body subtrees of a try_expr node.
2348
2349 See also: try_expr/4.
2350
2351 try_expr_clauses(Node::syntaxTree()) -> [syntaxTree()]
2352
2353 Returns the list of case-clause subtrees of a try_expr node. If
2354 Node represents "try Body catch H1; ...; Hn end", the result is
2355 the empty list.
2356
2357 See also: try_expr/4.
2358
2359 try_expr_handlers(Node::syntaxTree()) -> [syntaxTree()]
2360
2361 Returns the list of handler-clause subtrees of a try_expr node.
2362
2363 See also: try_expr/4.
2364
2365 tuple(List::[syntaxTree()]) -> syntaxTree()
2366
2367 Creates an abstract tuple. If Elements is [X1, ..., Xn], the re‐
2368 sult represents "{X1, ..., Xn}".
2369
2370 Note: The Erlang language has distinct 1-tuples, i.e., {X} is
2371 always distinct from X itself.
2372
2373 See also: tuple_elements/1, tuple_size/1.
2374
2375 tuple_elements(Node::syntaxTree()) -> [syntaxTree()]
2376
2377 Returns the list of element subtrees of a tuple node.
2378
2379 See also: tuple/1.
2380
2381 tuple_size(Node::syntaxTree()) -> non_neg_integer()
2382
2383 Returns the number of elements of a tuple node.
2384
2385 Note: this is equivalent to length(tuple_elements(Node)), but
2386 potentially more efficient.
2387
2388 See also: tuple/1, tuple_elements/1.
2389
2390 tuple_type() -> term()
2391
2392 Equivalent to tuple_type(any_size).
2393
2394 tuple_type(Elements::any_size | [syntaxTree()]) -> syntaxTree()
2395
2396 Creates an abstract type tuple. If Elements is [T1, ..., Tn],
2397 the result represents "{T1, ..., Tn}"; otherwise, if Elements is
2398 any_size, it represents "tuple()".
2399
2400 See also: tuple_type_elements/1.
2401
2402 tuple_type_elements(Node::syntaxTree()) -> any_size | [syntaxTree()]
2403
2404 Returns the list of type element subtrees of a tuple_type node.
2405 If Node represents "tuple()", any_size is returned; otherwise,
2406 if Node represents "{T1, ..., Tn}", [T1, ..., Tn] is returned.
2407
2408 See also: tuple_type/0, tuple_type/1.
2409
2410 type(Tree::syntaxTree()) -> atom()
2411
2412 Returns the type tag of Node. If Node does not represent a syn‐
2413 tax tree, evaluation fails with reason badarg. Node types cur‐
2414 rently defined by this module are:
2415
2416 application annotated_type arity_qualifier atom
2417 attribute binary binary_field bitstring_type
2418 block_expr case_expr catch_expr char
2419 class_qualifier clause comment conjunction
2420 constrained_function_type constraint disjunction
2421 else_expr eof_marker error_marker
2422 float form_list fun_expr fun_type function function_type genera‐
2423 tor
2424 if_expr implicit_fun infix_expr integer
2425 integer_range_type list list_comp macro
2426 map_expr map_field_assoc map_field_exact map_type
2427 map_type_assoc map_type_exact match_expr
2428 maybe_expr maybe_match_expr module_qualifier
2429 named_fun_expr nil operator parentheses
2430 prefix_expr receive_expr record_access record_expr
2431 record_field record_index_expr record_type record_type_field
2432 size_qualifier string text try_expr
2433 tuple tuple_type typed_record_field type_application
2434 type_union underscore user_type_application variable
2435 warning_marker
2436
2437
2438 The user may (for special purposes) create additional nodes with
2439 other type tags, using the tree/2 function.
2440
2441 Note: The primary constructor functions for a node type should
2442 always have the same name as the node type itself.
2443
2444 See also: annotated_type/2, application/3, arity_qualifier/2,
2445 atom/1, attribute/2, binary/1, binary_field/2, bitstring_type/2,
2446 block_expr/1, case_expr/2, catch_expr/1, char/1, class_quali‐
2447 fier/2, clause/3, comment/2, conjunction/1, constrained_func‐
2448 tion_type/2, constraint/2, disjunction/1, else_expr/1,
2449 eof_marker/0, error_marker/1, float/1, form_list/1, fun_expr/1,
2450 fun_type/0, function/2, function_type/1, function_type/2, gener‐
2451 ator/2, if_expr/1, implicit_fun/2, infix_expr/3, integer/1, in‐
2452 teger_range_type/2, list/2, list_comp/2, macro/2, map_expr/2,
2453 map_field_assoc/2, map_field_exact/2, map_type/0, map_type/1,
2454 map_type_assoc/2, map_type_exact/2, match_expr/2, maybe_expr/1,
2455 maybe_expr/2, maybe_match_expr/2, module_qualifier/2,
2456 named_fun_expr/2, nil/0, operator/1, parentheses/1, pre‐
2457 fix_expr/2, receive_expr/3, record_access/3, record_expr/2,
2458 record_field/2, record_index_expr/2, record_type/2,
2459 record_type_field/2, size_qualifier/2, string/1, text/1, tree/2,
2460 try_expr/3, tuple/1, tuple_type/0, tuple_type/1, type_applica‐
2461 tion/2, type_union/1, typed_record_field/2, underscore/0,
2462 user_type_application/2, variable/1, warning_marker/1.
2463
2464 type_application(TypeName::syntaxTree(), Arguments::[syntaxTree()]) ->
2465 syntaxTree()
2466
2467 Creates an abstract type application expression. If Arguments is
2468 [T1, ..., Tn], the result represents "TypeName(T1, ...Tn)".
2469
2470 See also: type_application/3, type_application_arguments/1,
2471 type_application_name/1, user_type_application/2.
2472
2473 type_application(Module::none | syntaxTree(), TypeName::syntaxTree(),
2474 Arguments::[syntaxTree()]) -> syntaxTree()
2475
2476 Creates an abstract type application expression. If Module is
2477 none, this is call is equivalent to type_application(TypeName,
2478 Arguments), otherwise it is equivalent to type_application(mod‐
2479 ule_qualifier(Module, TypeName), Arguments).
2480
2481 (This is a utility function.)
2482
2483 See also: module_qualifier/2, type_application/2.
2484
2485 type_application_arguments(Node::syntaxTree()) -> [syntaxTree()]
2486
2487 Returns the arguments subtrees of a type_application node.
2488
2489 See also: type_application/2.
2490
2491 type_application_name(Node::syntaxTree()) -> syntaxTree()
2492
2493 Returns the type name subtree of a type_application node.
2494
2495 See also: type_application/2.
2496
2497 type_union(Types::[syntaxTree()]) -> syntaxTree()
2498
2499 Creates an abstract type union. If Types is [T1, ..., Tn], the
2500 result represents "T1 | ... | Tn".
2501
2502 See also: type_union_types/1.
2503
2504 type_union_types(Node::syntaxTree()) -> [syntaxTree()]
2505
2506 Returns the list of type subtrees of a type_union node.
2507
2508 See also: type_union/1.
2509
2510 typed_record_field(Field::syntaxTree(), Type::syntaxTree()) -> syntax‐
2511 Tree()
2512
2513 Creates an abstract typed record field specification. The result
2514 represents "Field :: Type".
2515
2516 See also: typed_record_field_body/1, typed_record_field_type/1.
2517
2518 typed_record_field_body(Node::syntaxTree()) -> syntaxTree()
2519
2520 Returns the field subtree of a typed_record_field node.
2521
2522 See also: typed_record_field/2.
2523
2524 typed_record_field_type(Node::syntaxTree()) -> syntaxTree()
2525
2526 Returns the type subtree of a typed_record_field node.
2527
2528 See also: typed_record_field/2.
2529
2530 underscore() -> syntaxTree()
2531
2532 Creates an abstract universal pattern ("_"). The lexical repre‐
2533 sentation is a single underscore character. Note that this is
2534 not a variable, lexically speaking.
2535
2536 See also: variable/1.
2537
2538 update_tree(Node::syntaxTree(), Groups::[[syntaxTree()]]) -> syntax‐
2539 Tree()
2540
2541 Creates a syntax tree with the same type and attributes as the
2542 given tree. This is equivalent to copy_attrs(Node,
2543 make_tree(type(Node), Groups)).
2544
2545 See also: copy_attrs/2, make_tree/2, type/1.
2546
2547 user_type_application(TypeName::syntaxTree(), Arguments::[syntax‐
2548 Tree()]) -> syntaxTree()
2549
2550 Creates an abstract user type. If Arguments is [T1, ..., Tn],
2551 the result represents "TypeName(T1, ...Tn)".
2552
2553 See also: type_application/2, user_type_application_arguments/1,
2554 user_type_application_name/1.
2555
2556 user_type_application_arguments(Node::syntaxTree()) -> [syntaxTree()]
2557
2558 Returns the arguments subtrees of a user_type_application node.
2559
2560 See also: user_type_application/2.
2561
2562 user_type_application_name(Node::syntaxTree()) -> syntaxTree()
2563
2564 Returns the type name subtree of a user_type_application node.
2565
2566 See also: user_type_application/2.
2567
2568 variable(Name::atom() | string()) -> syntaxTree()
2569
2570 Creates an abstract variable with the given name. Name may be
2571 any atom or string that represents a lexically valid variable
2572 name, but not a single underscore character; see underscore/0.
2573
2574 Note: no checking is done whether the character sequence repre‐
2575 sents a proper variable name, i.e., whether or not its first
2576 character is an uppercase Erlang character, or whether it does
2577 not contain control characters, whitespace, etc.
2578
2579 See also: underscore/0, variable_literal/1, variable_name/1.
2580
2581 variable_literal(Node::syntaxTree()) -> string()
2582
2583 Returns the name of a variable node as a string.
2584
2585 See also: variable/1.
2586
2587 variable_name(Node::syntaxTree()) -> atom()
2588
2589 Returns the name of a variable node as an atom.
2590
2591 See also: variable/1.
2592
2593 warning_marker(Warning::term()) -> syntaxTree()
2594
2595 Creates an abstract warning marker. The result represents an oc‐
2596 currence of a possible problem in the source code, with an asso‐
2597 ciated Erlang I/O ErrorInfo structure given by Error (see module
2598 io(3) for details). Warning markers are regarded as source code
2599 forms, but have no defined lexical form.
2600
2601 Note: this is supported only for backwards compatibility with
2602 existing parsers and tools.
2603
2604 See also: eof_marker/0, error_marker/1, is_form/1, warn‐
2605 ing_marker_info/1.
2606
2607 warning_marker_info(Node::syntaxTree()) -> term()
2608
2609 Returns the ErrorInfo structure of a warning_marker node.
2610
2611 See also: warning_marker/1.
2612
2614 Richard Carlsson <carlsson.richard@gmail.com>
2615
2616
2617
2618 syntax_tools 3.0 erl_syntax(3)