/**
 * This file exposes all AST nodes and types.
 * Using the TypeSpec Abstract Syntax Tree is considered an advanced usage of the compiler and may change at any time without notice.
 * **Note**: this is not the same thing as the _type graph_ (`Type` and its variants),  Libraries depend on the abstract syntax tree _at their own risk_!
 * Please see breaking change policy https://typespec.io/docs/handbook/breaking-change-policy/
 *
 * Some reasons you might want to use the AST:
 * - Writing a codefix: You might need to manipulate the AST to fix code. Understand that your fix might break but this should not be critical to the user.
 * - A workaround for a missing feature: Understand that your workaround might break.
 */

export { NodeFlags, SyntaxKind } from "../core/types.js";

export { getNodeForTarget } from "../core/diagnostics.js";
export { printTypeSpecNode } from "../core/formatter.js";
export {
  exprIsBareIdentifier,
  getFirstAncestor,
  getIdentifierContext,
  getNodeAtPosition,
  getNodeAtPositionDetail,
  hasParseError,
  isImportStatement,
  parse,
  parseStandaloneTypeReference,
  positionInRange,
  visitChildren,
  type NodeCallback,
} from "../core/parser.js";
export type {
  AliasStatementNode,
  AnyKeywordNode,
  ArrayExpressionNode,
  ArrayLiteralNode,
  AugmentDecoratorStatementNode,
  BaseNode,
  BooleanLiteralNode,
  CallExpressionNode,
  ConstStatementNode,
  DeclarationNode,
  DecoratorDeclarationStatementNode,
  DecoratorExpressionNode,
  DirectiveExpressionNode,
  DocErrorsTagNode,
  DocNode,
  DocParamTagNode,
  DocPropTagNode,
  DocReturnsTagNode,
  DocTag,
  DocTagBaseNode,
  DocTemplateTagNode,
  DocTextNode,
  DocUnknownTagNode,
  EmptyStatementNode,
  EnumMemberNode,
  EnumSpreadMemberNode,
  EnumStatementNode,
  ExternKeywordNode,
  FunctionDeclarationStatementNode,
  FunctionParameterNode,
  IdentifierNode,
  ImportStatementNode,
  InterfaceStatementNode,
  IntersectionExpressionNode,
  InvalidStatementNode,
  JsNamespaceDeclarationNode,
  JsSourceFileNode,
  LiteralNode,
  MemberContainerNode,
  MemberExpressionNode,
  MemberNode,
  ModelExpressionNode,
  ModelPropertyNode,
  ModelSpreadPropertyNode,
  ModelStatementNode,
  NamespaceStatementNode,
  NeverKeywordNode,
  Node,
  NumericLiteralNode,
  ObjectLiteralNode,
  ObjectLiteralPropertyNode,
  ObjectLiteralSpreadPropertyNode,
  OperationSignatureDeclarationNode,
  OperationSignatureReferenceNode,
  OperationStatementNode,
  ScalarConstructorNode,
  ScalarStatementNode,
  ScopeNode,
  StringLiteralNode,
  StringTemplateExpressionNode,
  StringTemplateHeadNode,
  StringTemplateLiteralLikeNode,
  StringTemplateMiddleNode,
  StringTemplateSpanNode,
  StringTemplateTailNode,
  TemplateArgumentNode,
  TemplateDeclarationNode,
  TemplateParameterDeclarationNode,
  TemplateableNode,
  TupleExpressionNode,
  TypeOfExpressionNode,
  TypeReferenceNode,
  TypeSpecScriptNode,
  UnionExpressionNode,
  UnionStatementNode,
  UnionVariantNode,
  UsingStatementNode,
  ValueOfExpressionNode,
  VoidKeywordNode,
} from "../core/types.js";
