1defmodule ESTree.Tools.Builder do 2 @moduledoc """ 3 Functions to make building the Nodes easier 4 """ 5 6 @spec array_expression( 7 [ESTree.Expression.t | nil], 8 ESTree.SourceLocation.t | nil 9 ) :: ESTree.ArrayExpression.t 10 def array_expression(elements, loc \\ nil) do 11 %ESTree.ArrayExpression{ elements: elements, loc: loc } 12 end 13 14 @spec array_pattern( 15 [ESTree.Pattern.t | nil], 16 ESTree.SourceLocation.t | nil 17 ) :: ESTree.ArrayPattern.t 18 def array_pattern(elements, loc \\ nil) do 19 %ESTree.ArrayPattern{ elements: elements, loc: loc } 20 end 21 22 @spec arrow_function_expression( 23 [ESTree.Pattern.t], 24 [ESTree.Expression.t], 25 ESTree.BlockStatement.t | ESTree.Expression.t, 26 boolean, 27 boolean, 28 ESTree.SourceLocation.t | nil 29 ) :: ESTree.ArrowFunctionExpression.t 30 def arrow_function_expression(params, defaults, body, generator \\ false, expression \\ false, async \\ false, loc \\ nil) do 31 %ESTree.ArrowFunctionExpression{ 32 params: params, defaults: defaults, 33 body: body, generator: generator, expression: expression, loc: loc, 34 async: async 35 } 36 end 37 38 @spec assignment_expression( 39 ESTree.assignment_operator, 40 ESTree.Pattern.t, 41 ESTree.Expression.t, 42 ESTree.SourceLocation.t | nil 43 ) :: ESTree.AssignmentExpression.t 44 def assignment_expression(operator, left, right, loc \\ nil) do 45 %ESTree.AssignmentExpression{ 46 operator: operator, left: left, right: right, loc: loc 47 } 48 end 49 50 @spec assignment_property( 51 ESTree.Pattern.t, 52 ESTree.SourceLocation.t | nil 53 ) :: ESTree.AssignmentProperty.t 54 def assignment_property(value, loc \\ nil) do 55 %ESTree.AssignmentProperty{ 56 value: value, loc: loc 57 } 58 end 59 60 61 @spec await_expression( 62 ESTree.Expression.t | nil, 63 boolean, 64 ESTree.SourceLocation.t | nil 65 ) :: ESTree.AwaitExpression.t 66 def await_expression(argument, all \\ false, loc \\ nil) do 67 %ESTree.AwaitExpression{ 68 argument: argument, all: all, loc: loc 69 } 70 end 71 72 @spec binary_expression( 73 ESTree.binary_operator, 74 ESTree.Expression.t, 75 ESTree.Expression.t, 76 ESTree.SourceLocation.t | nil 77 ) :: ESTree.BinaryExpression.t 78 def binary_expression(operator, left, right, loc \\ nil) do 79 %ESTree.BinaryExpression{ 80 operator: operator, left: left, right: right, loc: loc 81 } 82 end 83 84 @spec block_statement( 85 [ESTree.Statement.t], 86 ESTree.SourceLocation.t | nil 87 ) :: ESTree.BlockStatement.t 88 def block_statement(body, loc \\ nil) do 89 %ESTree.BlockStatement{ 90 body: body, loc: loc 91 } 92 end 93 94 @spec break_statement( 95 ESTree.Identifier.t | nil, 96 ESTree.SourceLocation.t | nil 97 ) :: ESTree.BreakStatement.t 98 def break_statement(label \\ nil, loc \\ nil) do 99 %ESTree.BreakStatement{ 100 label: label, loc: loc 101 } 102 end 103 104 @spec call_expression( 105 ESTree.Expression.t, 106 [ESTree.Expression.t], 107 ESTree.SourceLocation.t | nil 108 ) :: ESTree.CallExpression.t 109 def call_expression(callee, arguments, loc \\ nil) do 110 %ESTree.CallExpression{ 111 callee: callee, arguments: arguments, loc: loc 112 } 113 end 114 115 @spec catch_clause( 116 ESTree.Pattern.t, 117 ESTree.BlockStatement.t, 118 ESTree.SourceLocation.t | nil 119 ) :: ESTree.CatchClause.t 120 def catch_clause(param, body, loc \\ nil) do 121 %ESTree.CatchClause{ 122 param: param, body: body, loc: loc 123 } 124 end 125 126 @spec class_body( 127 [ESTree.MethodDefinition.t], 128 ESTree.SourceLocation.t | nil 129 ) :: ESTree.ClassBody.t 130 def class_body(body, loc \\ nil) do 131 %ESTree.ClassBody{ 132 body: body, loc: loc 133 } 134 end 135 136 @spec class_declaration( 137 ESTree.Identifier.t, 138 ESTree.ClassBody.t, 139 ESTree.Expression.t | nil, 140 ESTree.SourceLocation.t | nil 141 ) :: ESTree.ClassDeclaration.t 142 def class_declaration(id, body, superClass \\ nil, loc \\ nil) do 143 %ESTree.ClassDeclaration{ 144 id: id, body: body, loc: loc, superClass: superClass 145 } 146 end 147 148 @spec class_expression( 149 ESTree.ClassBody.t, 150 ESTree.Expression.t | nil, 151 ESTree.SourceLocation.t | nil 152 ) :: ESTree.ClassExpression.t 153 def class_expression(body, superClass \\ nil, loc \\ nil) do 154 %ESTree.ClassExpression{ 155 body: body, loc: loc, superClass: superClass 156 } 157 end 158 159 @spec conditional_statement( 160 ESTree.Expression.t, 161 ESTree.Expression.t, 162 ESTree.Expression.t, 163 ESTree.SourceLocation.t | nil 164 ) :: ESTree.ConditionalStatement.t 165 def conditional_statement(test, alternate, consequent, loc \\ nil) do 166 %ESTree.ConditionalStatement{ 167 test: test, alternate: alternate, consequent: consequent, loc: loc 168 } 169 end 170 171 @spec continue_statement( 172 ESTree.Identifier.t, 173 ESTree.SourceLocation.t | nil 174 ) :: ESTree.ContinueStatement.t 175 def continue_statement(label, loc \\ nil) do 176 %ESTree.ContinueStatement{ 177 label: label, loc: loc 178 } 179 end 180 181 @spec debugger_statement( 182 ESTree.SourceLocation.t | nil 183 ) :: ESTree.DebuggerStatement.t 184 def debugger_statement(loc \\ nil) do 185 %ESTree.DebuggerStatement{ 186 loc: loc 187 } 188 end 189 190 @spec do_while_statement( 191 ESTree.Statement.t, 192 ESTree.Expression.t, 193 ESTree.SourceLocation.t | nil 194 ) :: ESTree.DoWhileStatement.t 195 def do_while_statement(body, test, loc \\ nil) do 196 %ESTree.DoWhileStatement{ 197 body: body, test: test, loc: loc 198 } 199 end 200 201 @spec empty_expression( 202 ESTree.SourceLocation.t | nil 203 ) :: ESTree.EmptyExpression.t 204 def empty_expression(loc \\ nil) do 205 %ESTree.EmptyExpression{ 206 loc: loc 207 } 208 end 209 210 @spec empty_statement( 211 ESTree.SourceLocation.t | nil 212 ) :: ESTree.EmptyStatement.t 213 def empty_statement(loc \\ nil) do 214 %ESTree.EmptyStatement{ 215 loc: loc 216 } 217 end 218 219 @spec export_all_declaration( 220 ESTree.Identifier.t | nil, 221 ESTree.SourceLocation.t | nil 222 ) :: ESTree.ExportAllDeclaration.t 223 def export_all_declaration(source \\ nil, loc \\ nil) do 224 %ESTree.ExportAllDeclaration{ 225 loc: loc, source: source 226 } 227 end 228 229 @spec export_default_declaration( 230 ESTree.Declaration.t | ESTree.Expression.t | nil, 231 ESTree.SourceLocation.t | nil 232 ) :: ESTree.ExportDefaultDeclaration.t 233 def export_default_declaration(declaration \\ nil, loc \\ nil) do 234 %ESTree.ExportDefaultDeclaration{ 235 loc: loc, declaration: declaration 236 } 237 end 238 239 @spec export_named_declaration( 240 ESTree.Declaration.t | nil, 241 [ESTree.ExportSpecifier], 242 ESTree.Literal.t | nil, 243 ESTree.SourceLocation.t | nil 244 ) :: ESTree.ExportNamedDeclaration.t 245 def export_named_declaration(declaration, specifiers \\ [], source \\ nil, loc \\ nil) do 246 %ESTree.ExportNamedDeclaration{ 247 declaration: declaration, specifiers: specifiers, 248 source: source, loc: loc 249 } 250 end 251 252 @spec export_specifier( 253 ESTree.Identifier.t, 254 ESTree.Identifier.t | nil, 255 ESTree.SourceLocation.t | nil 256 ) :: ESTree.ExportSpecifier.t 257 def export_specifier(exported, local \\ nil, loc \\ nil) do 258 %ESTree.ExportSpecifier{ 259 local: local, exported: exported, loc: loc 260 } 261 end 262 263 @spec expression_statement( 264 ESTree.Expression.t, 265 ESTree.SourceLocation.t | nil 266 ) :: ESTree.ExpressionStatement.t 267 def expression_statement(expression, loc \\ nil) do 268 %ESTree.ExpressionStatement{ 269 expression: expression, loc: loc 270 } 271 end 272 273 @spec for_in_statement( 274 ESTree.VariableDeclaration.t | ESTree.Pattern.t, 275 ESTree.Expression.t, 276 ESTree.Statement.t, 277 ESTree.SourceLocation.t | nil 278 ) :: ESTree.ForInStatement.t 279 def for_in_statement(left, right, body, loc \\ nil) do 280 %ESTree.ForInStatement{ 281 left: left, right: right, body: body, loc: loc 282 } 283 end 284 285 @spec for_of_statement( 286 ESTree.VariableDeclaration.t | ESTree.Pattern.t, 287 ESTree.Expression.t, 288 ESTree.Statement.t, 289 ESTree.SourceLocation.t | nil 290 ) :: ESTree.ForOfStatement.t 291 def for_of_statement(left, right, body, loc \\ nil) do 292 %ESTree.ForOfStatement{ 293 left: left, right: right, body: body, loc: loc 294 } 295 end 296 297 @spec for_statement( 298 ESTree.VariableDeclaration.t | ESTree.Expression.t, 299 ESTree.Expression.t | nil, 300 ESTree.Expression.t | nil, 301 ESTree.Statement.t, 302 ESTree.SourceLocation.t | nil 303 ) :: ESTree.ForStatement.t 304 def for_statement(init, test, update, body, loc \\ nil) do 305 %ESTree.ForStatement{ 306 init: init, test: test, update: update, body: body, loc: loc 307 } 308 end 309 310 @spec function_declaration( 311 ESTree.Identifier.t, 312 [ESTree.Pattern.t], 313 [ESTree.Expression.t], 314 ESTree.BlockStatement.t, 315 boolean, 316 boolean, 317 boolean, 318 ESTree.SourceLocation.t | nil 319 ) :: ESTree.FunctionDeclaration.t 320 def function_declaration(id, params, defaults, body, generator \\ false, expression \\ false, async \\ false, loc \\ nil) do 321 %ESTree.FunctionDeclaration{ 322 id: id, params: params, defaults: defaults, 323 body: body, generator: generator, async: async, 324 expression: expression, loc: loc 325 } 326 end 327 328 @spec function_expression( 329 [ESTree.Pattern.t], 330 [ ESTree.Expression.t ], 331 ESTree.BlockStatement.t, 332 boolean, 333 boolean, 334 boolean, 335 ESTree.SourceLocation.t | nil 336 ) :: ESTree.FunctionExpression.t 337 def function_expression(params, defaults, body, generator \\ false, expression \\ false, async \\ false, loc \\ nil) do 338 %ESTree.FunctionExpression{ 339 params: params, defaults: defaults, 340 body: body, generator: generator, async: async, 341 expression: expression, loc: loc 342 } 343 end 344 345 @spec identifier( 346 binary, 347 ESTree.SourceLocation.t | nil 348 ) :: ESTree.Identifier.t 349 def identifier(name, loc \\ nil) do 350 %ESTree.Identifier{ 351 name: name, loc: loc 352 } 353 end 354 355 @spec if_statement( 356 ESTree.Expression.t, 357 ESTree.Statement.t, 358 ESTree.Statement.t | nil, 359 ESTree.SourceLocation.t | nil 360 ) :: ESTree.IfStatement.t 361 def if_statement(test, consequent, alternate \\ nil, loc \\ nil) do 362 %ESTree.IfStatement{ 363 test: test, consequent: consequent, alternate: alternate, loc: loc 364 } 365 end 366 367 @spec import_declaration( 368 [ESTree.ImportSpecifier.t | ESTree.ImportNamespaceSpecifier.t | ESTree.ImportDefaultSpecifier.t], 369 ESTree.Identifier.t | nil, 370 ESTree.SourceLocation.t | nil 371 ) :: ESTree.ImportDeclaration.t 372 def import_declaration(specifiers, source \\ nil, loc \\ nil) do 373 %ESTree.ImportDeclaration{ 374 specifiers: specifiers, source: source, loc: loc 375 } 376 end 377 378 @spec import_default_specifier( 379 ESTree.Identifier.t, 380 ESTree.SourceLocation.t | nil 381 ) :: ESTree.ImportDefaultSpecifier.t 382 def import_default_specifier(local, loc \\ nil) do 383 %ESTree.ImportDefaultSpecifier{ 384 local: local, loc: loc 385 } 386 end 387 388 @spec import_namespace_specifier( 389 ESTree.Identifier.t, 390 ESTree.SourceLocation.t | nil 391 ) :: ESTree.ImportNamespaceSpecifier.t 392 def import_namespace_specifier(local, loc \\ nil) do 393 %ESTree.ImportNamespaceSpecifier{ 394 local: local, loc: loc 395 } 396 end 397 398 @spec import_specifier( 399 ESTree.Identifier.t, 400 ESTree.Identifier.t | nil, 401 ESTree.SourceLocation.t | nil 402 ) :: ESTree.ImportSpecifier.t 403 def import_specifier(imported, local \\ nil, loc \\ nil) do 404 %ESTree.ImportSpecifier{ 405 local: local, imported: imported, loc: loc 406 } 407 end 408 409 @spec labeled_statement( 410 ESTree.Identifier.t, 411 ESTree.Statement.t, 412 ESTree.SourceLocation.t | nil 413 ) :: ESTree.LabeledStatement.t 414 def labeled_statement(label, body, loc \\ nil) do 415 %ESTree.LabeledStatement{ 416 label: label, body: body, loc: loc 417 } 418 end 419 420 @spec literal( 421 binary | boolean | number | nil, 422 ESTree.Regex.t | nil, 423 ESTree.SourceLocation.t | nil 424 ) :: ESTree.Literal.t 425 def literal(value, regex \\ nil, loc \\ nil) do 426 %ESTree.Literal{ 427 value: value, regex: regex, loc: loc 428 } 429 end 430 431 @spec logical_expression( 432 ESTree.logical_operator, 433 ESTree.Expression.t, 434 ESTree.Expression.t, 435 ESTree.SourceLocation.t | nil 436 ) :: ESTree.LogicalExpression.t 437 def logical_expression(operator, left, right, loc \\ nil) do 438 %ESTree.LogicalExpression{ 439 operator: operator, left: left, right: right, loc: loc 440 } 441 end 442 443 @spec member_expression( 444 ESTree.Expression.t | ESTree.Super.t, 445 ESTree.Identifier.t | ESTree.Expression.t, 446 boolean, 447 ESTree.SourceLocation.t | nil 448 ) :: ESTree.MemberExpression.t 449 def member_expression(object, property, computed \\ false, loc \\ nil) do 450 %ESTree.MemberExpression{ 451 object: object, property: property, computed: computed, loc: loc 452 } 453 end 454 455 @spec meta_property( 456 ESTree.Identifier.t, 457 ESTree.Identifier.t, 458 ESTree.SourceLocation.t | nil 459 ) :: ESTree.MetaProperty.t 460 def meta_property(meta, property, loc \\ nil) do 461 %ESTree.MetaProperty{ 462 meta: meta, property: property, loc: loc 463 } 464 end 465 466 @spec method_definition( 467 ESTree.Identifier.t, 468 ESTree.FunctionExpression.t, 469 :constructor | :method | :get | :set, 470 boolean, 471 boolean, 472 ESTree.SourceLocation.t | nil 473 ) :: ESTree.MethodDefinition.t 474 def method_definition(key, value, kind \\ :method, computed \\ false, static \\ false, loc \\ nil) do 475 %ESTree.MethodDefinition{ 476 key: key, value: value, kind: kind, computed: computed, static: static, loc: loc 477 } 478 end 479 480 @spec new_expression( 481 ESTree.Expression.t, 482 [ESTree.Expression.t], 483 ESTree.SourceLocation.t | nil 484 ) :: ESTree.NewExpression.t 485 def new_expression(callee, arguments, loc \\ nil) do 486 %ESTree.NewExpression{ 487 callee: callee, arguments: arguments, loc: loc 488 } 489 end 490 491 @spec object_expression( 492 [ESTree.Property.t], 493 ESTree.SourceLocation.t | nil 494 ) :: ESTree.ObjectExpression.t 495 def object_expression(properties, loc \\ nil) do 496 %ESTree.ObjectExpression{ 497 properties: properties, loc: loc 498 } 499 end 500 501 @spec object_pattern( 502 [ESTree.Property.t], 503 ESTree.SourceLocation.t | nil 504 ) :: ESTree.ObjectPattern.t 505 def object_pattern(properties, loc \\ nil) do 506 %ESTree.ObjectPattern{ 507 properties: properties, loc: loc 508 } 509 end 510 511 @spec position( 512 pos_integer, 513 non_neg_integer 514 ) :: ESTree.Position.t 515 def position(line, column) do 516 %ESTree.Position{ 517 line: line, column: column 518 } 519 end 520 521 @spec program( 522 [ESTree.Statement.t], 523 :script | :module, 524 ESTree.SourceLocation.t | nil 525 ) :: ESTree.Program.t 526 def program(body, sourceType \\ :script, loc \\ nil) do 527 %ESTree.Program{ 528 body: body, loc: loc, sourceType: sourceType 529 } 530 end 531 532 @spec property( 533 ESTree.Expression.t, 534 ESTree.Expression.t , 535 :init | :get | :set, 536 boolean, 537 boolean, 538 boolean, 539 ESTree.SourceLocation.t | nil 540 ) :: ESTree.Property.t 541 def property(key, value, kind \\ :init, shorthand \\ false, method \\ false, computed \\false, loc \\ nil) do 542 %ESTree.Property{ 543 key: key, value: value, 544 kind: kind, shorthand: shorthand, method: method, 545 loc: loc, computed: computed 546 } 547 end 548 549 @spec regex( 550 binary, 551 binary 552 ) :: ESTree.Regex.t 553 def regex(pattern, flags) do 554 %ESTree.Regex{ 555 pattern: pattern, flags: flags 556 } 557 end 558 559 @spec rest_element( 560 ESTree.Expression.t | nil, 561 ESTree.SourceLocation.t | nil 562 ) :: ESTree.RestElement.t 563 def rest_element(argument, loc \\ nil) do 564 %ESTree.RestElement{ 565 argument: argument, loc: loc 566 } 567 end 568 569 @spec return_statement( 570 ESTree.Expression.t | nil, 571 ESTree.SourceLocation.t | nil 572 ) :: ESTree.ReturnStatement.t 573 def return_statement(argument, loc \\ nil) do 574 %ESTree.ReturnStatement{ 575 argument: argument, loc: loc 576 } 577 end 578 579 @spec sequence_expression( 580 [ESTree.Expression.t], 581 ESTree.SourceLocation.t | nil 582 ) :: ESTree.SequenceExpression.t 583 def sequence_expression(expressions, loc \\ nil) do 584 %ESTree.SequenceExpression{ 585 expressions: expressions, loc: loc 586 } 587 end 588 589 @spec source_location( 590 binary | nil, 591 ESTree.Position.t, 592 ESTree.Position.t 593 ) :: ESTree.SourceLocation.t 594 def source_location(source, start, the_end) do 595 %ESTree.SourceLocation{ 596 source: source, start: start, end: the_end 597 } 598 end 599 600 @spec spread_element( 601 ESTree.Expression.t | nil, 602 ESTree.SourceLocation.t | nil 603 ) :: ESTree.SpreadElement.t 604 def spread_element(argument, loc \\ nil) do 605 %ESTree.SpreadElement{ 606 argument: argument, loc: loc 607 } 608 end 609 610 @spec super( 611 ESTree.SourceLocation.t | nil 612 ) :: ESTree.Super.t 613 def super(loc \\ nil) do 614 %ESTree.Super{ 615 loc: loc 616 } 617 end 618 619 @spec switch_case( 620 ESTree.Expression.t | nil, 621 [ESTree.Statement.t], 622 ESTree.SourceLocation.t | nil 623 ) :: ESTree.SwitchCase.t 624 def switch_case(test, consequent, loc \\ nil) do 625 %ESTree.SwitchCase{ 626 test: test, consequent: consequent, loc: loc 627 } 628 end 629 630 @spec switch_statement( 631 ESTree.Expression.t, 632 [ESTree.SwitchCase.t], 633 ESTree.SourceLocation.t | nil 634 ) :: ESTree.SwitchStatement.t 635 def switch_statement(discriminant, cases, loc \\ nil) do 636 %ESTree.SwitchStatement{ 637 discriminant: discriminant, cases: cases, loc: loc 638 } 639 end 640 641 @spec tagged_template_expression( 642 ESTree.Expression.t, 643 ESTree.TemplateLiteral.t, 644 ESTree.SourceLocation.t | nil 645 ) :: ESTree.TaggedTemplateExpression.t 646 def tagged_template_expression(tag, quasi, loc \\ nil) do 647 %ESTree.TaggedTemplateExpression{ 648 tag: tag, quasi: quasi, loc: loc 649 } 650 end 651 652 @spec template_element( 653 binary, 654 binary, 655 boolean, 656 ESTree.SourceLocation.t | nil 657 ) :: ESTree.TemplateElement.t 658 def template_element(raw, cooked_value, tail, loc \\ nil) do 659 %ESTree.TemplateElement{ 660 value: %{cooked: cooked_value, raw: raw}, tail: tail, loc: loc 661 } 662 end 663 664 @spec template_literal( 665 [ESTree.TemplateElement.t], 666 [ESTree.Expression.t], 667 ESTree.SourceLocation.t | nil 668 ) :: ESTree.TemplateLiteral.t 669 def template_literal(quasis, expressions, loc \\ nil) do 670 %ESTree.TemplateLiteral{ 671 quasis: quasis, expressions: expressions, loc: loc 672 } 673 end 674 675 @spec this_expression( 676 ESTree.SourceLocation.t | nil 677 ) :: ESTree.ThisExpression.t 678 def this_expression(loc \\ nil) do 679 %ESTree.ThisExpression{ 680 loc: loc 681 } 682 end 683 684 @spec throw_statement( 685 ESTree.Expression.t, 686 ESTree.SourceLocation.t | nil 687 ) :: ESTree.ThrowStatement.t 688 def throw_statement(argument, loc \\ nil) do 689 %ESTree.ThrowStatement{ 690 argument: argument, loc: loc 691 } 692 end 693 694 @spec try_statement( 695 ESTree.BlockStatement.t, 696 ESTree.CatchClause.t | nil, 697 ESTree.BlockStatement.t | nil, 698 ESTree.SourceLocation.t | nil 699 ) :: ESTree.TryStatement.t 700 def try_statement(block, handler, finalizer \\ nil, loc \\ nil) do 701 %ESTree.TryStatement{ 702 block: block, handler: handler, finalizer: finalizer, loc: loc 703 } 704 end 705 706 @spec unary_expression( 707 ESTree.unary_operator, 708 boolean, 709 ESTree.Expression.t, 710 ESTree.SourceLocation.t | nil 711 ) :: ESTree.UnaryExpression.t 712 def unary_expression(operator, prefix, argument, loc \\ nil) do 713 %ESTree.UnaryExpression{ 714 operator: operator, prefix: prefix, argument: argument, loc: loc 715 } 716 end 717 718 @spec update_expression( 719 ESTree.update_operator, 720 ESTree.Expression.t, 721 boolean, 722 ESTree.SourceLocation.t | nil 723 ) :: ESTree.UpdateExpression.t 724 def update_expression(operator, argument, prefix, loc \\ nil) do 725 %ESTree.UpdateExpression{ 726 operator: operator, prefix: prefix, argument: argument, loc: loc 727 } 728 end 729 730 731 @spec variable_declaration( 732 [ESTree.VariableDeclarator.t], 733 :var | :let | :const, 734 ESTree.SourceLocation.t | nil 735 ) :: ESTree.VariableDeclaration.t 736 def variable_declaration(declarations, kind \\ :var, loc \\ nil) do 737 %ESTree.VariableDeclaration{ 738 declarations: declarations, kind: kind, loc: loc 739 } 740 end 741 742 @spec variable_declarator( 743 ESTree.Pattern.t, 744 ESTree.Expression.t | nil, 745 ESTree.SourceLocation.t | nil 746 ) :: ESTree.VariableDeclarator.t 747 def variable_declarator(id, init \\ nil, loc \\ nil) do 748 %ESTree.VariableDeclarator{ 749 id: id, init: init, loc: loc 750 } 751 end 752 753 @spec while_statement( 754 ESTree.Expression.t, 755 ESTree.Statement.t, 756 ESTree.SourceLocation.t | nil 757 ) :: ESTree.WhileStatement.t 758 def while_statement(test, body, loc \\ nil) do 759 %ESTree.WhileStatement{ 760 test: test, body: body, loc: loc 761 } 762 end 763 764 @spec with_statement( 765 ESTree.Expression.t, 766 ESTree.Statement.t, 767 ESTree.SourceLocation.t | nil 768 ) :: ESTree.WithStatement.t 769 def with_statement(object, body, loc \\ nil) do 770 %ESTree.WithStatement{ 771 object: object, body: body, loc: loc 772 } 773 end 774 775 @spec yield_expression( 776 ESTree.Expression.t | nil, 777 boolean, 778 ESTree.SourceLocation.t | nil 779 ) :: ESTree.YieldExpression.t 780 def yield_expression(argument \\ nil, delegate \\ false, loc \\ nil) do 781 %ESTree.YieldExpression{ 782 argument: argument, loc: loc, delegate: delegate 783 } 784 end 785 786 787 @spec jsx_identifier( 788 binary, 789 ESTree.SourceLocation.t | nil 790 ) :: ESTree.JSXIdentifier.t 791 def jsx_identifier(name, loc \\ nil) do 792 %ESTree.JSXIdentifier{ 793 name: name, loc: loc 794 } 795 end 796 797 798 @spec jsx_member_expression( 799 ESTree.JSXMemberExpression.t | ESTree.JSXIdentifier.t, 800 ESTree.JSXIdentifier.t, 801 ESTree.SourceLocation.t | nil 802 ) :: ESTree.MemberExpression.t 803 def jsx_member_expression(object, property, loc \\ nil) do 804 %ESTree.JSXMemberExpression{ 805 object: object, property: property, loc: loc 806 } 807 end 808 809 @spec jsx_namespaced_name( 810 ESTree.JSXIdentifier.t, 811 ESTree.JSXIdentifier.t, 812 ESTree.SourceLocation.t | nil 813 ) :: ESTree.JSXNamespacedName.t 814 def jsx_namespaced_name(namespace, name, loc \\ nil) do 815 %ESTree.JSXNamespacedName{ 816 namespace: namespace, name: name, loc: loc 817 } 818 end 819 820 @spec jsx_empty_expression( 821 ESTree.SourceLocation.t | nil 822 ) :: ESTree.JSXEmptyExpression.t 823 def jsx_empty_expression(loc \\ nil) do 824 %ESTree.JSXEmptyExpression{ 825 loc: loc 826 } 827 end 828 829 @spec jsx_expression_container( 830 ESTree.Expression.t | ESTree.JSXEmptyExpression.t, 831 ESTree.SourceLocation.t | nil 832 ) :: ESTree.JSXExpressionContainer.t 833 def jsx_expression_container(expression, loc \\ nil) do 834 %ESTree.JSXExpressionContainer{ 835 expression: expression, loc: loc 836 } 837 end 838 839 840 @spec jsx_opening_element( 841 ESTree.JSXIdentifier.t | ESTree.JSXMemberExpression.t | ESTree.JSXNamespacedName.t, 842 [ ESTree.JSXAttribute.t | ESTree.JSXSpreadAttribute.t ], 843 boolean, 844 ESTree.SourceLocation.t | nil 845 ) :: ESTree.JSXOpeningElement.t 846 def jsx_opening_element(name, attributes \\ [], selfClosing \\ false, loc \\ nil) do 847 %ESTree.JSXOpeningElement{ 848 name: name, attributes: attributes, selfClosing: selfClosing, loc: loc 849 } 850 end 851 852 853 @spec jsx_closing_element( 854 ESTree.JSXIdentifier.t | ESTree.JSXMemberExpression.t | ESTree.JSXNamespacedName.t, 855 ESTree.SourceLocation.t | nil 856 ) :: ESTree.JSXClosingElement.t 857 def jsx_closing_element(name, loc \\ nil) do 858 %ESTree.JSXClosingElement{ 859 name: name, loc: loc 860 } 861 end 862 863 864 @spec jsx_attribute( 865 ESTree.JSXIdentifier.t | ESTree.JSXNamespacedName.t, 866 ESTree.Literal.t | ESTree.JSXExpressionContainer.t | ESTree.JSXElement.t | nil, 867 ESTree.SourceLocation.t | nil 868 ) :: ESTree.JSXAttribute.t 869 def jsx_attribute(name, value \\ nil, loc \\ nil) do 870 %ESTree.JSXAttribute{ 871 name: name, value: value, loc: loc 872 } 873 end 874 875 @spec jsx_spread_attribute( 876 ESTree.Expression.t | nil, 877 ESTree.SourceLocation.t | nil 878 ) :: ESTree.SpreadElement.t 879 def jsx_spread_attribute(argument, loc \\ nil) do 880 %ESTree.JSXSpreadAttribute{ 881 argument: argument, loc: loc 882 } 883 end 884 885 @spec jsx_element( 886 ESTree.JSXOpeningElement.t, 887 [ESTree.Literal.t | ESTree.JSXExpressionContainer.t | ESTree.JSXElement.t], 888 ESTree.JSXClosingElement.t | nil, 889 ESTree.SourceLocation.t | nil 890 ) :: ESTree.JSXElement.t 891 def jsx_element(openingElement, children \\ [], closingElement \\ nil, loc \\ nil) do 892 %ESTree.JSXElement{ 893 openingElement: openingElement, children: children, closingElement: closingElement, loc: loc 894 } 895 end 896end 897