acorn.js 857 B

1234567891011121314151617181920212223242526272829303132333435
  1. "use strict";
  2. // This module is suitable for passing as options.parser when calling
  3. // recast.parse to process JavaScript code with Acorn:
  4. //
  5. // const ast = recast.parse(source, {
  6. // parser: require("recast/parsers/acorn")
  7. // });
  8. //
  9. const getOption = require("../lib/util.js").getOption;
  10. exports.parse = function parse(source, options) {
  11. const comments = [];
  12. const tokens = [];
  13. const ast = require("acorn").parse(source, {
  14. allowHashBang: true,
  15. allowImportExportEverywhere: true,
  16. allowReturnOutsideFunction: true,
  17. ecmaVersion: getOption(options, "ecmaVersion", 8),
  18. sourceType: getOption(options, "sourceType", "module"),
  19. locations: true,
  20. onComment: comments,
  21. onToken: tokens,
  22. });
  23. if (! ast.comments) {
  24. ast.comments = comments;
  25. }
  26. if (! ast.tokens) {
  27. ast.tokens = tokens;
  28. }
  29. return ast;
  30. };