rust-code-analysis 0.0.25

Tool to compute and export code metrics
Documentation
// Code generated; DO NOT EDIT.

use num_derive::FromPrimitive;

#[derive(Clone, Debug, PartialEq, Eq, FromPrimitive)]
pub enum Tsx {
    End = 0,
    Identifier = 1,
    HashBangLine = 2,
    Export = 3,
    STAR = 4,
    Default = 5,
    Type = 6,
    EQ = 7,
    As = 8,
    Namespace = 9,
    LBRACE = 10,
    COMMA = 11,
    RBRACE = 12,
    Typeof = 13,
    Import2 = 14,
    From = 15,
    Var = 16,
    Let = 17,
    Const = 18,
    BANG = 19,
    Else = 20,
    If = 21,
    Switch = 22,
    For = 23,
    LPAREN = 24,
    RPAREN = 25,
    Await = 26,
    In = 27,
    Of = 28,
    While = 29,
    Do = 30,
    Try = 31,
    With = 32,
    Break = 33,
    Continue = 34,
    Debugger = 35,
    Return = 36,
    Throw = 37,
    SEMI = 38,
    COLON = 39,
    Case = 40,
    Catch = 41,
    Finally = 42,
    Yield = 43,
    LBRACK = 44,
    RBRACK = 45,
    LT = 46,
    GT = 47,
    SLASH = 48,
    JsxText = 49,
    Identifier2 = 50,
    DOT = 51,
    Class2 = 52,
    Async = 53,
    Function2 = 54,
    EQGT = 55,
    QMARKDOT = 56,
    New = 57,
    PLUSEQ = 58,
    DASHEQ = 59,
    STAREQ = 60,
    SLASHEQ = 61,
    PERCENTEQ = 62,
    CARETEQ = 63,
    AMPEQ = 64,
    PIPEEQ = 65,
    GTGTEQ = 66,
    GTGTGTEQ = 67,
    LTLTEQ = 68,
    STARSTAREQ = 69,
    AMPAMPEQ = 70,
    PIPEPIPEEQ = 71,
    QMARKQMARKEQ = 72,
    DOTDOTDOT = 73,
    AMPAMP = 74,
    PIPEPIPE = 75,
    GTGT = 76,
    GTGTGT = 77,
    LTLT = 78,
    AMP = 79,
    CARET = 80,
    PIPE = 81,
    PLUS = 82,
    DASH = 83,
    PERCENT = 84,
    STARSTAR = 85,
    LTEQ = 86,
    EQEQ = 87,
    EQEQEQ = 88,
    BANGEQ = 89,
    BANGEQEQ = 90,
    GTEQ = 91,
    QMARKQMARK = 92,
    Instanceof = 93,
    TILDE = 94,
    Void = 95,
    Delete = 96,
    PLUSPLUS = 97,
    DASHDASH = 98,
    DQUOTE = 99,
    SQUOTE = 100,
    StringFragment = 101,
    StringFragment2 = 102,
    EscapeSequence = 103,
    Comment = 104,
    BQUOTE = 105,
    DOLLARLBRACE = 106,
    SLASH2 = 107,
    RegexPattern = 108,
    RegexFlags = 109,
    Number = 110,
    PrivatePropertyIdentifier = 111,
    Target = 112,
    This = 113,
    Super = 114,
    True = 115,
    False = 116,
    Null = 117,
    Undefined = 118,
    AT = 119,
    Static = 120,
    Readonly = 121,
    Get = 122,
    Set = 123,
    QMARK = 124,
    Declare = 125,
    Public = 126,
    Private = 127,
    Protected = 128,
    Override = 129,
    Module2 = 130,
    Any = 131,
    Number2 = 132,
    Boolean = 133,
    String2 = 134,
    Symbol = 135,
    Abstract = 136,
    Require = 137,
    Extends = 138,
    Implements = 139,
    Global = 140,
    Interface = 141,
    Enum = 142,
    DASHQMARKCOLON = 143,
    QMARKCOLON = 144,
    Asserts2 = 145,
    Infer = 146,
    Is = 147,
    Keyof = 148,
    Unknown = 149,
    Never = 150,
    Object2 = 151,
    LBRACEPIPE = 152,
    PIPERBRACE = 153,
    AutomaticSemicolon = 154,
    TemplateChars = 155,
    QMARK2 = 156,
    FunctionSignatureAutomaticSemicolon = 157,
    Program = 158,
    ExportStatement = 159,
    ExportClause = 160,
    ExportSpecifier = 161,
    Declaration = 162,
    Import = 163,
    ImportStatement = 164,
    ImportClause = 165,
    FromClause = 166,
    NamespaceImport = 167,
    NamedImports = 168,
    ExpressionStatement = 169,
    VariableDeclaration = 170,
    LexicalDeclaration = 171,
    VariableDeclarator = 172,
    StatementBlock = 173,
    ElseClause = 174,
    IfStatement = 175,
    SwitchStatement = 176,
    ForStatement = 177,
    ForInStatement = 178,
    ForHeader = 179,
    WhileStatement = 180,
    DoStatement = 181,
    TryStatement = 182,
    WithStatement = 183,
    BreakStatement = 184,
    ContinueStatement = 185,
    DebuggerStatement = 186,
    ReturnStatement = 187,
    ThrowStatement = 188,
    EmptyStatement = 189,
    LabeledStatement = 190,
    SwitchBody = 191,
    SwitchCase = 192,
    SwitchDefault = 193,
    CatchClause = 194,
    FinallyClause = 195,
    ParenthesizedExpression = 196,
    Expression = 197,
    PrimaryExpression = 198,
    YieldExpression = 199,
    Object = 200,
    ObjectPattern = 201,
    AssignmentPattern = 202,
    ObjectAssignmentPattern = 203,
    Array = 204,
    ArrayPattern = 205,
    JsxElement = 206,
    JsxFragment = 207,
    JsxExpression = 208,
    JsxOpeningElement = 209,
    NestedIdentifier = 210,
    JsxNamespaceName = 211,
    JsxClosingElement = 212,
    JsxSelfClosingElement = 213,
    JsxAttribute = 214,
    Class = 215,
    ClassDeclaration = 216,
    ClassHeritage = 217,
    Function = 218,
    FunctionDeclaration = 219,
    GeneratorFunction = 220,
    GeneratorFunctionDeclaration = 221,
    ArrowFunction = 222,
    CallSignature2 = 223,
    FormalParameter = 224,
    CallExpression = 225,
    NewExpression = 226,
    AwaitExpression = 227,
    MemberExpression = 228,
    SubscriptExpression = 229,
    AssignmentExpression = 230,
    AugmentedAssignmentLhs = 231,
    AugmentedAssignmentExpression = 232,
    Initializer = 233,
    DestructuringPattern = 234,
    SpreadElement = 235,
    TernaryExpression = 236,
    BinaryExpression = 237,
    UnaryExpression = 238,
    UpdateExpression = 239,
    SequenceExpression = 240,
    String = 241,
    TemplateString = 242,
    TemplateSubstitution = 243,
    Regex = 244,
    MetaProperty = 245,
    Arguments = 246,
    Decorator = 247,
    MemberExpression2 = 248,
    CallExpression2 = 249,
    ClassBody = 250,
    FormalParameters = 251,
    Pattern = 252,
    RestPattern = 253,
    MethodDefinition = 254,
    Pair = 255,
    PairPattern = 256,
    PropertyName = 257,
    ComputedPropertyName = 258,
    PublicFieldDefinition = 259,
    NonNullExpression = 260,
    MethodSignature = 261,
    AbstractMethodSignature = 262,
    FunctionSignature = 263,
    AsExpression = 264,
    ImportRequireClause = 265,
    ExtendsClause = 266,
    ImplementsClause = 267,
    AmbientDeclaration = 268,
    AbstractClassDeclaration = 269,
    Module = 270,
    InternalModule = 271,
    Module3 = 272,
    ImportAlias = 273,
    NestedTypeIdentifier = 274,
    InterfaceDeclaration = 275,
    ExtendsTypeClause = 276,
    EnumDeclaration = 277,
    EnumBody = 278,
    EnumAssignment = 279,
    TypeAliasDeclaration = 280,
    AccessibilityModifier = 281,
    OverrideModifier = 282,
    RequiredParameter = 283,
    OptionalParameter = 284,
    ParameterName = 285,
    OmittingTypeAnnotation = 286,
    OptingTypeAnnotation = 287,
    TypeAnnotation = 288,
    Asserts = 289,
    Type2 = 290,
    RequiredParameter2 = 291,
    OptionalParameter2 = 292,
    OptionalType = 293,
    RestType = 294,
    TupleTypeMember = 295,
    ConstructorType = 296,
    PrimaryType = 297,
    TemplateType = 298,
    TemplateLiteralType = 299,
    InferType = 300,
    ConditionalType = 301,
    GenericType = 302,
    TypePredicate = 303,
    TypePredicateAnnotation = 304,
    MemberExpression3 = 305,
    SubscriptExpression2 = 306,
    CallExpression3 = 307,
    TypeQuery = 308,
    IndexTypeQuery = 309,
    LookupType = 310,
    MappedTypeClause = 311,
    LiteralType = 312,
    UnaryExpression2 = 313,
    ExistentialType = 314,
    FlowMaybeType = 315,
    ParenthesizedType = 316,
    PredefinedType = 317,
    TypeArguments = 318,
    ObjectType = 319,
    CallSignature = 320,
    PropertySignature = 321,
    TypeParameters = 322,
    TypeParameter = 323,
    DefaultType = 324,
    Constraint = 325,
    ConstructSignature = 326,
    IndexSignature = 327,
    ArrayType = 328,
    TupleType = 329,
    ReadonlyType = 330,
    UnionType = 331,
    IntersectionType = 332,
    FunctionType = 333,
    ProgramRepeat1 = 334,
    ExportStatementRepeat1 = 335,
    ExportClauseRepeat1 = 336,
    NamedImportsRepeat1 = 337,
    VariableDeclarationRepeat1 = 338,
    SwitchBodyRepeat1 = 339,
    ObjectRepeat1 = 340,
    ObjectPatternRepeat1 = 341,
    ArrayRepeat1 = 342,
    ArrayPatternRepeat1 = 343,
    JsxElementRepeat1 = 344,
    StringRepeat1 = 345,
    StringRepeat2 = 346,
    TemplateStringRepeat1 = 347,
    ClassBodyRepeat1 = 348,
    FormalParametersRepeat1 = 349,
    JsxStartOpeningElementRepeat1 = 350,
    ExtendsClauseRepeat1 = 351,
    ImplementsClauseRepeat1 = 352,
    ExtendsTypeClauseRepeat1 = 353,
    EnumBodyRepeat1 = 354,
    TemplateLiteralTypeRepeat1 = 355,
    ObjectTypeRepeat1 = 356,
    TypeParametersRepeat1 = 357,
    TupleTypeRepeat1 = 358,
    ImportSpecifier = 359,
    NamespaceExport = 360,
    PropertyIdentifier = 361,
    ShorthandPropertyIdentifier = 362,
    ShorthandPropertyIdentifierPattern = 363,
    StatementIdentifier = 364,
    ThisType = 365,
    TypeIdentifier = 366,
    Error = 367,
}

impl From<Tsx> for &'static str {
    #[inline(always)]
    fn from(tok: Tsx) -> Self {
        match tok {
            Tsx::End => "end",
            Tsx::Identifier => "identifier",
            Tsx::HashBangLine => "hash_bang_line",
            Tsx::Export => "export",
            Tsx::STAR => "*",
            Tsx::Default => "default",
            Tsx::Type => "type",
            Tsx::EQ => "=",
            Tsx::As => "as",
            Tsx::Namespace => "namespace",
            Tsx::LBRACE => "{",
            Tsx::COMMA => ",",
            Tsx::RBRACE => "}",
            Tsx::Typeof => "typeof",
            Tsx::Import2 => "import",
            Tsx::From => "from",
            Tsx::Var => "var",
            Tsx::Let => "let",
            Tsx::Const => "const",
            Tsx::BANG => "!",
            Tsx::Else => "else",
            Tsx::If => "if",
            Tsx::Switch => "switch",
            Tsx::For => "for",
            Tsx::LPAREN => "(",
            Tsx::RPAREN => ")",
            Tsx::Await => "await",
            Tsx::In => "in",
            Tsx::Of => "of",
            Tsx::While => "while",
            Tsx::Do => "do",
            Tsx::Try => "try",
            Tsx::With => "with",
            Tsx::Break => "break",
            Tsx::Continue => "continue",
            Tsx::Debugger => "debugger",
            Tsx::Return => "return",
            Tsx::Throw => "throw",
            Tsx::SEMI => ";",
            Tsx::COLON => ":",
            Tsx::Case => "case",
            Tsx::Catch => "catch",
            Tsx::Finally => "finally",
            Tsx::Yield => "yield",
            Tsx::LBRACK => "[",
            Tsx::RBRACK => "]",
            Tsx::LT => "<",
            Tsx::GT => ">",
            Tsx::SLASH => "/",
            Tsx::JsxText => "jsx_text",
            Tsx::Identifier2 => "identifier",
            Tsx::DOT => ".",
            Tsx::Class2 => "class",
            Tsx::Async => "async",
            Tsx::Function2 => "function",
            Tsx::EQGT => "=>",
            Tsx::QMARKDOT => "?.",
            Tsx::New => "new",
            Tsx::PLUSEQ => "+=",
            Tsx::DASHEQ => "-=",
            Tsx::STAREQ => "*=",
            Tsx::SLASHEQ => "/=",
            Tsx::PERCENTEQ => "%=",
            Tsx::CARETEQ => "^=",
            Tsx::AMPEQ => "&=",
            Tsx::PIPEEQ => "|=",
            Tsx::GTGTEQ => ">>=",
            Tsx::GTGTGTEQ => ">>>=",
            Tsx::LTLTEQ => "<<=",
            Tsx::STARSTAREQ => "**=",
            Tsx::AMPAMPEQ => "&&=",
            Tsx::PIPEPIPEEQ => "||=",
            Tsx::QMARKQMARKEQ => "??=",
            Tsx::DOTDOTDOT => "...",
            Tsx::AMPAMP => "&&",
            Tsx::PIPEPIPE => "||",
            Tsx::GTGT => ">>",
            Tsx::GTGTGT => ">>>",
            Tsx::LTLT => "<<",
            Tsx::AMP => "&",
            Tsx::CARET => "^",
            Tsx::PIPE => "|",
            Tsx::PLUS => "+",
            Tsx::DASH => "-",
            Tsx::PERCENT => "%",
            Tsx::STARSTAR => "**",
            Tsx::LTEQ => "<=",
            Tsx::EQEQ => "==",
            Tsx::EQEQEQ => "===",
            Tsx::BANGEQ => "!=",
            Tsx::BANGEQEQ => "!==",
            Tsx::GTEQ => ">=",
            Tsx::QMARKQMARK => "??",
            Tsx::Instanceof => "instanceof",
            Tsx::TILDE => "~",
            Tsx::Void => "void",
            Tsx::Delete => "delete",
            Tsx::PLUSPLUS => "++",
            Tsx::DASHDASH => "--",
            Tsx::DQUOTE => "\"",
            Tsx::SQUOTE => "'",
            Tsx::StringFragment => "string_fragment",
            Tsx::StringFragment2 => "string_fragment",
            Tsx::EscapeSequence => "escape_sequence",
            Tsx::Comment => "comment",
            Tsx::BQUOTE => "`",
            Tsx::DOLLARLBRACE => "${",
            Tsx::SLASH2 => "/",
            Tsx::RegexPattern => "regex_pattern",
            Tsx::RegexFlags => "regex_flags",
            Tsx::Number => "number",
            Tsx::PrivatePropertyIdentifier => "private_property_identifier",
            Tsx::Target => "target",
            Tsx::This => "this",
            Tsx::Super => "super",
            Tsx::True => "true",
            Tsx::False => "false",
            Tsx::Null => "null",
            Tsx::Undefined => "undefined",
            Tsx::AT => "@",
            Tsx::Static => "static",
            Tsx::Readonly => "readonly",
            Tsx::Get => "get",
            Tsx::Set => "set",
            Tsx::QMARK => "?",
            Tsx::Declare => "declare",
            Tsx::Public => "public",
            Tsx::Private => "private",
            Tsx::Protected => "protected",
            Tsx::Override => "override",
            Tsx::Module2 => "module",
            Tsx::Any => "any",
            Tsx::Number2 => "number",
            Tsx::Boolean => "boolean",
            Tsx::String2 => "string",
            Tsx::Symbol => "symbol",
            Tsx::Abstract => "abstract",
            Tsx::Require => "require",
            Tsx::Extends => "extends",
            Tsx::Implements => "implements",
            Tsx::Global => "global",
            Tsx::Interface => "interface",
            Tsx::Enum => "enum",
            Tsx::DASHQMARKCOLON => "-?:",
            Tsx::QMARKCOLON => "?:",
            Tsx::Asserts2 => "asserts",
            Tsx::Infer => "infer",
            Tsx::Is => "is",
            Tsx::Keyof => "keyof",
            Tsx::Unknown => "unknown",
            Tsx::Never => "never",
            Tsx::Object2 => "object",
            Tsx::LBRACEPIPE => "{|",
            Tsx::PIPERBRACE => "|}",
            Tsx::AutomaticSemicolon => "_automatic_semicolon",
            Tsx::TemplateChars => "_template_chars",
            Tsx::QMARK2 => "?",
            Tsx::FunctionSignatureAutomaticSemicolon => "_function_signature_automatic_semicolon",
            Tsx::Program => "program",
            Tsx::ExportStatement => "export_statement",
            Tsx::ExportClause => "export_clause",
            Tsx::ExportSpecifier => "export_specifier",
            Tsx::Declaration => "declaration",
            Tsx::Import => "import",
            Tsx::ImportStatement => "import_statement",
            Tsx::ImportClause => "import_clause",
            Tsx::FromClause => "_from_clause",
            Tsx::NamespaceImport => "namespace_import",
            Tsx::NamedImports => "named_imports",
            Tsx::ExpressionStatement => "expression_statement",
            Tsx::VariableDeclaration => "variable_declaration",
            Tsx::LexicalDeclaration => "lexical_declaration",
            Tsx::VariableDeclarator => "variable_declarator",
            Tsx::StatementBlock => "statement_block",
            Tsx::ElseClause => "else_clause",
            Tsx::IfStatement => "if_statement",
            Tsx::SwitchStatement => "switch_statement",
            Tsx::ForStatement => "for_statement",
            Tsx::ForInStatement => "for_in_statement",
            Tsx::ForHeader => "_for_header",
            Tsx::WhileStatement => "while_statement",
            Tsx::DoStatement => "do_statement",
            Tsx::TryStatement => "try_statement",
            Tsx::WithStatement => "with_statement",
            Tsx::BreakStatement => "break_statement",
            Tsx::ContinueStatement => "continue_statement",
            Tsx::DebuggerStatement => "debugger_statement",
            Tsx::ReturnStatement => "return_statement",
            Tsx::ThrowStatement => "throw_statement",
            Tsx::EmptyStatement => "empty_statement",
            Tsx::LabeledStatement => "labeled_statement",
            Tsx::SwitchBody => "switch_body",
            Tsx::SwitchCase => "switch_case",
            Tsx::SwitchDefault => "switch_default",
            Tsx::CatchClause => "catch_clause",
            Tsx::FinallyClause => "finally_clause",
            Tsx::ParenthesizedExpression => "parenthesized_expression",
            Tsx::Expression => "expression",
            Tsx::PrimaryExpression => "primary_expression",
            Tsx::YieldExpression => "yield_expression",
            Tsx::Object => "object",
            Tsx::ObjectPattern => "object_pattern",
            Tsx::AssignmentPattern => "assignment_pattern",
            Tsx::ObjectAssignmentPattern => "object_assignment_pattern",
            Tsx::Array => "array",
            Tsx::ArrayPattern => "array_pattern",
            Tsx::JsxElement => "jsx_element",
            Tsx::JsxFragment => "jsx_fragment",
            Tsx::JsxExpression => "jsx_expression",
            Tsx::JsxOpeningElement => "jsx_opening_element",
            Tsx::NestedIdentifier => "nested_identifier",
            Tsx::JsxNamespaceName => "jsx_namespace_name",
            Tsx::JsxClosingElement => "jsx_closing_element",
            Tsx::JsxSelfClosingElement => "jsx_self_closing_element",
            Tsx::JsxAttribute => "jsx_attribute",
            Tsx::Class => "class",
            Tsx::ClassDeclaration => "class_declaration",
            Tsx::ClassHeritage => "class_heritage",
            Tsx::Function => "function",
            Tsx::FunctionDeclaration => "function_declaration",
            Tsx::GeneratorFunction => "generator_function",
            Tsx::GeneratorFunctionDeclaration => "generator_function_declaration",
            Tsx::ArrowFunction => "arrow_function",
            Tsx::CallSignature2 => "_call_signature",
            Tsx::FormalParameter => "_formal_parameter",
            Tsx::CallExpression => "call_expression",
            Tsx::NewExpression => "new_expression",
            Tsx::AwaitExpression => "await_expression",
            Tsx::MemberExpression => "member_expression",
            Tsx::SubscriptExpression => "subscript_expression",
            Tsx::AssignmentExpression => "assignment_expression",
            Tsx::AugmentedAssignmentLhs => "_augmented_assignment_lhs",
            Tsx::AugmentedAssignmentExpression => "augmented_assignment_expression",
            Tsx::Initializer => "_initializer",
            Tsx::DestructuringPattern => "_destructuring_pattern",
            Tsx::SpreadElement => "spread_element",
            Tsx::TernaryExpression => "ternary_expression",
            Tsx::BinaryExpression => "binary_expression",
            Tsx::UnaryExpression => "unary_expression",
            Tsx::UpdateExpression => "update_expression",
            Tsx::SequenceExpression => "sequence_expression",
            Tsx::String => "string",
            Tsx::TemplateString => "template_string",
            Tsx::TemplateSubstitution => "template_substitution",
            Tsx::Regex => "regex",
            Tsx::MetaProperty => "meta_property",
            Tsx::Arguments => "arguments",
            Tsx::Decorator => "decorator",
            Tsx::MemberExpression2 => "member_expression",
            Tsx::CallExpression2 => "call_expression",
            Tsx::ClassBody => "class_body",
            Tsx::FormalParameters => "formal_parameters",
            Tsx::Pattern => "pattern",
            Tsx::RestPattern => "rest_pattern",
            Tsx::MethodDefinition => "method_definition",
            Tsx::Pair => "pair",
            Tsx::PairPattern => "pair_pattern",
            Tsx::PropertyName => "_property_name",
            Tsx::ComputedPropertyName => "computed_property_name",
            Tsx::PublicFieldDefinition => "public_field_definition",
            Tsx::NonNullExpression => "non_null_expression",
            Tsx::MethodSignature => "method_signature",
            Tsx::AbstractMethodSignature => "abstract_method_signature",
            Tsx::FunctionSignature => "function_signature",
            Tsx::AsExpression => "as_expression",
            Tsx::ImportRequireClause => "import_require_clause",
            Tsx::ExtendsClause => "extends_clause",
            Tsx::ImplementsClause => "implements_clause",
            Tsx::AmbientDeclaration => "ambient_declaration",
            Tsx::AbstractClassDeclaration => "abstract_class_declaration",
            Tsx::Module => "module",
            Tsx::InternalModule => "internal_module",
            Tsx::Module3 => "_module",
            Tsx::ImportAlias => "import_alias",
            Tsx::NestedTypeIdentifier => "nested_type_identifier",
            Tsx::InterfaceDeclaration => "interface_declaration",
            Tsx::ExtendsTypeClause => "extends_type_clause",
            Tsx::EnumDeclaration => "enum_declaration",
            Tsx::EnumBody => "enum_body",
            Tsx::EnumAssignment => "enum_assignment",
            Tsx::TypeAliasDeclaration => "type_alias_declaration",
            Tsx::AccessibilityModifier => "accessibility_modifier",
            Tsx::OverrideModifier => "override_modifier",
            Tsx::RequiredParameter => "required_parameter",
            Tsx::OptionalParameter => "optional_parameter",
            Tsx::ParameterName => "_parameter_name",
            Tsx::OmittingTypeAnnotation => "omitting_type_annotation",
            Tsx::OptingTypeAnnotation => "opting_type_annotation",
            Tsx::TypeAnnotation => "type_annotation",
            Tsx::Asserts => "asserts",
            Tsx::Type2 => "_type",
            Tsx::RequiredParameter2 => "required_parameter",
            Tsx::OptionalParameter2 => "optional_parameter",
            Tsx::OptionalType => "optional_type",
            Tsx::RestType => "rest_type",
            Tsx::TupleTypeMember => "_tuple_type_member",
            Tsx::ConstructorType => "constructor_type",
            Tsx::PrimaryType => "_primary_type",
            Tsx::TemplateType => "template_type",
            Tsx::TemplateLiteralType => "template_literal_type",
            Tsx::InferType => "infer_type",
            Tsx::ConditionalType => "conditional_type",
            Tsx::GenericType => "generic_type",
            Tsx::TypePredicate => "type_predicate",
            Tsx::TypePredicateAnnotation => "type_predicate_annotation",
            Tsx::MemberExpression3 => "member_expression",
            Tsx::SubscriptExpression2 => "subscript_expression",
            Tsx::CallExpression3 => "call_expression",
            Tsx::TypeQuery => "type_query",
            Tsx::IndexTypeQuery => "index_type_query",
            Tsx::LookupType => "lookup_type",
            Tsx::MappedTypeClause => "mapped_type_clause",
            Tsx::LiteralType => "literal_type",
            Tsx::UnaryExpression2 => "unary_expression",
            Tsx::ExistentialType => "existential_type",
            Tsx::FlowMaybeType => "flow_maybe_type",
            Tsx::ParenthesizedType => "parenthesized_type",
            Tsx::PredefinedType => "predefined_type",
            Tsx::TypeArguments => "type_arguments",
            Tsx::ObjectType => "object_type",
            Tsx::CallSignature => "call_signature",
            Tsx::PropertySignature => "property_signature",
            Tsx::TypeParameters => "type_parameters",
            Tsx::TypeParameter => "type_parameter",
            Tsx::DefaultType => "default_type",
            Tsx::Constraint => "constraint",
            Tsx::ConstructSignature => "construct_signature",
            Tsx::IndexSignature => "index_signature",
            Tsx::ArrayType => "array_type",
            Tsx::TupleType => "tuple_type",
            Tsx::ReadonlyType => "readonly_type",
            Tsx::UnionType => "union_type",
            Tsx::IntersectionType => "intersection_type",
            Tsx::FunctionType => "function_type",
            Tsx::ProgramRepeat1 => "program_repeat1",
            Tsx::ExportStatementRepeat1 => "export_statement_repeat1",
            Tsx::ExportClauseRepeat1 => "export_clause_repeat1",
            Tsx::NamedImportsRepeat1 => "named_imports_repeat1",
            Tsx::VariableDeclarationRepeat1 => "variable_declaration_repeat1",
            Tsx::SwitchBodyRepeat1 => "switch_body_repeat1",
            Tsx::ObjectRepeat1 => "object_repeat1",
            Tsx::ObjectPatternRepeat1 => "object_pattern_repeat1",
            Tsx::ArrayRepeat1 => "array_repeat1",
            Tsx::ArrayPatternRepeat1 => "array_pattern_repeat1",
            Tsx::JsxElementRepeat1 => "jsx_element_repeat1",
            Tsx::StringRepeat1 => "string_repeat1",
            Tsx::StringRepeat2 => "string_repeat2",
            Tsx::TemplateStringRepeat1 => "template_string_repeat1",
            Tsx::ClassBodyRepeat1 => "class_body_repeat1",
            Tsx::FormalParametersRepeat1 => "formal_parameters_repeat1",
            Tsx::JsxStartOpeningElementRepeat1 => "_jsx_start_opening_element_repeat1",
            Tsx::ExtendsClauseRepeat1 => "extends_clause_repeat1",
            Tsx::ImplementsClauseRepeat1 => "implements_clause_repeat1",
            Tsx::ExtendsTypeClauseRepeat1 => "extends_type_clause_repeat1",
            Tsx::EnumBodyRepeat1 => "enum_body_repeat1",
            Tsx::TemplateLiteralTypeRepeat1 => "template_literal_type_repeat1",
            Tsx::ObjectTypeRepeat1 => "object_type_repeat1",
            Tsx::TypeParametersRepeat1 => "type_parameters_repeat1",
            Tsx::TupleTypeRepeat1 => "tuple_type_repeat1",
            Tsx::ImportSpecifier => "import_specifier",
            Tsx::NamespaceExport => "namespace_export",
            Tsx::PropertyIdentifier => "property_identifier",
            Tsx::ShorthandPropertyIdentifier => "shorthand_property_identifier",
            Tsx::ShorthandPropertyIdentifierPattern => "shorthand_property_identifier_pattern",
            Tsx::StatementIdentifier => "statement_identifier",
            Tsx::ThisType => "this_type",
            Tsx::TypeIdentifier => "type_identifier",
            Tsx::Error => "ERROR",
        }
    }
}

impl From<u16> for Tsx {
    #[inline(always)]
    fn from(x: u16) -> Self {
        num::FromPrimitive::from_u16(x).unwrap_or(Self::Error)
    }
}

// Tsx == u16
impl PartialEq<u16> for Tsx {
    #[inline(always)]
    fn eq(&self, x: &u16) -> bool {
        *self == Tsx::from(*x)
    }
}

// u16 == Tsx
impl PartialEq<Tsx> for u16 {
    #[inline(always)]
    fn eq(&self, x: &Tsx) -> bool {
        *x == *self
    }
}