code: function isSourceElement(opts, node) {
    if (node == null) {
      return false;
    }
    // JS and JS like to avoid repetitions
    const jsSourceElements = [
      "FunctionDeclaration",
      "BlockStatement",
      "BreakStatement",
      "ContinueStatement",
      "DebuggerStatement",
      "DoWhileStatement",
      "EmptyStatement",
      "ExpressionStatement",
      "ForInStatement",
      "ForStatement",
      "IfStatement",
      "LabeledStatement",
      "ReturnStatement",
      "SwitchStatement",
      "ThrowStatement",
      "TryStatement",
      "VariableDeclaration",
      "WhileStatement",
      "WithStatement",
      "ClassDeclaration", // ES 2015
      "ImportDeclaration", // Module
      "ExportDefaultDeclaration", // Module
      "ExportNamedDeclaration", // Module
      "ExportAllDeclaration", // Module
      "TypeAlias", // Flow
      "InterfaceDeclaration", // Flow, TypeScript
      "TypeAliasDeclaration", // TypeScript
      "ExportAssignment", // TypeScript
      "ExportDeclaration" // TypeScript
    ];
    const jsonSourceElements = [
      "ObjectExpression",
      "ArrayExpression",
      "StringLiteral",
      "NumericLiteral",
      "BooleanLiteral",
      "NullLiteral"
    ];
    const graphqlSourceElements = [
      "OperationDefinition",
      "FragmentDefinition",
      "VariableDefinition",
      "TypeExtensionDefinition",
      "ObjectTypeDefinition",
      "FieldDefinition",
      "DirectiveDefinition",
      "EnumTypeDefinition",
      "EnumValueDefinition",
      "InputValueDefinition",
      "InputObjectTypeDefinition",
      "SchemaDefinition",
      "OperationTypeDefinition",
      "InterfaceTypeDefinition",
      "UnionTypeDefinition",
      "ScalarTypeDefinition"
    ];
    switch (opts.parser) {
      case "flow":
      case "babel":
      case "typescript":
        return jsSourceElements.indexOf(node.type) > -1;
      case "json":
        return jsonSourceElements.indexOf(node.type) > -1;
      case "graphql":
        return graphqlSourceElements.indexOf(node.kind) > -1;
      case "vue":
        return node.tag !== "root";
    }
    return false;
  }
docs: See https://www.ecma-international.org/ecma-262/5.1/#sec-A.5