Skip to main content

tsz_parser/parser/
flags.rs

1//! Node flags and modifier flags for AST nodes.
2
3/// Node flags indicating various properties of AST nodes.
4/// Matches TypeScript's `NodeFlags` enum exactly.
5/// NOTE: `wasm_bindgen` doesn't support bit-shift expressions, so these are
6/// stored as a `u32` bitfield in `NodeBase`. Use the constants below for flag operations.
7pub mod node_flags {
8    pub const NONE: u32 = 0;
9    pub const LET: u32 = 1; // 1 << 0
10    pub const CONST: u32 = 2; // 1 << 1
11    pub const USING: u32 = 4; // 1 << 2
12    pub const AWAIT_USING: u32 = 6; // Const | Using
13    pub const NESTED_NAMESPACE: u32 = 8; // 1 << 3
14    pub const SYNTHESIZED: u32 = 16; // 1 << 4
15    pub const NAMESPACE: u32 = 32; // 1 << 5
16    pub const OPTIONAL_CHAIN: u32 = 64; // 1 << 6
17    pub const EXPORT_CONTEXT: u32 = 128; // 1 << 7
18    pub const CONTAINS_THIS: u32 = 256; // 1 << 8
19    pub const HAS_IMPLICIT_RETURN: u32 = 512; // 1 << 9
20    pub const HAS_EXPLICIT_RETURN: u32 = 1024; // 1 << 10
21    pub const GLOBAL_AUGMENTATION: u32 = 2048; // 1 << 11
22    pub const HAS_ASYNC_FUNCTIONS: u32 = 4096; // 1 << 12
23    pub const DISALLOW_IN_CONTEXT: u32 = 8192; // 1 << 13
24    pub const YIELD_CONTEXT: u32 = 16384; // 1 << 14
25    pub const DECORATOR_CONTEXT: u32 = 32768; // 1 << 15
26    pub const AWAIT_CONTEXT: u32 = 65536; // 1 << 16
27    pub const DISALLOW_CONDITIONAL_TYPES_CONTEXT: u32 = 131_072; // 1 << 17
28    pub const THIS_NODE_HAS_ERROR: u32 = 262_144; // 1 << 18
29    pub const JAVASCRIPT_FILE: u32 = 524_288; // 1 << 19
30    pub const THIS_NODE_OR_ANY_SUB_NODES_HAS_ERROR: u32 = 1_048_576; // 1 << 20
31    pub const HAS_AGGREGATED_CHILD_DATA: u32 = 2_097_152; // 1 << 21
32    pub const POSSIBLY_CONTAINS_DYNAMIC_IMPORT: u32 = 4_194_304; // 1 << 22
33    pub const POSSIBLY_CONTAINS_IMPORT_META: u32 = 8_388_608; // 1 << 23
34    pub const JSDOC: u32 = 16_777_216; // 1 << 24
35    pub const AMBIENT: u32 = 33_554_432; // 1 << 25
36    pub const IN_WITH_STATEMENT: u32 = 67_108_864; // 1 << 26
37    pub const JSON_FILE: u32 = 134_217_728; // 1 << 27
38    pub const TYPE_CACHED: u32 = 268_435_456; // 1 << 28
39    pub const DEPRECATED: u32 = 536_870_912; // 1 << 29
40
41    // Type-only imports/exports
42    pub const TYPE_ONLY: u32 = 1_073_741_824; // 1 << 30
43}
44
45/// Modifier flags for declarations.
46/// Matches TypeScript's `ModifierFlags` enum exactly.
47pub mod modifier_flags {
48    pub const NONE: u32 = 0;
49
50    // Syntactic/JSDoc modifiers
51    pub const PUBLIC: u32 = 1; // 1 << 0
52    pub const PRIVATE: u32 = 2; // 1 << 1
53    pub const PROTECTED: u32 = 4; // 1 << 2
54    pub const READONLY: u32 = 8; // 1 << 3
55    pub const OVERRIDE: u32 = 16; // 1 << 4
56
57    // Syntactic-only modifiers
58    pub const EXPORT: u32 = 32; // 1 << 5
59    pub const ABSTRACT: u32 = 64; // 1 << 6
60    pub const AMBIENT: u32 = 128; // 1 << 7
61    pub const STATIC: u32 = 256; // 1 << 8
62    pub const ACCESSOR: u32 = 512; // 1 << 9
63    pub const ASYNC: u32 = 1024; // 1 << 10
64    pub const DEFAULT: u32 = 2048; // 1 << 11
65    pub const CONST: u32 = 4096; // 1 << 12
66    pub const IN: u32 = 8192; // 1 << 13
67    pub const OUT: u32 = 16384; // 1 << 14
68    pub const DECORATOR: u32 = 32768; // 1 << 15
69
70    // JSDoc-only modifiers
71    pub const DEPRECATED: u32 = 65536; // 1 << 16
72}
73
74/// Transform flags indicate which transformations are needed for emit.
75/// Matches TypeScript's `TransformFlags` enum.
76pub mod transform_flags {
77    pub const NONE: u32 = 0;
78
79    // Facts about the node
80    pub const CONTAINS_TYPESCRIPT: u32 = 1; // 1 << 0
81    pub const CONTAINS_JSX: u32 = 2; // 1 << 1
82    pub const CONTAINS_ESNEXT: u32 = 4; // 1 << 2
83    pub const CONTAINS_ES2022: u32 = 8; // 1 << 3
84    pub const CONTAINS_ES2021: u32 = 16; // 1 << 4
85    pub const CONTAINS_ES2020: u32 = 32; // 1 << 5
86    pub const CONTAINS_ES2019: u32 = 64; // 1 << 6
87    pub const CONTAINS_ES2018: u32 = 128; // 1 << 7
88    pub const CONTAINS_ES2017: u32 = 256; // 1 << 8
89    pub const CONTAINS_ES2016: u32 = 512; // 1 << 9
90    pub const CONTAINS_ES2015: u32 = 1024; // 1 << 10
91    pub const CONTAINS_GENERATOR: u32 = 2048; // 1 << 11
92    pub const CONTAINS_DESTRUCTURING_ASSIGNMENT: u32 = 4096; // 1 << 12
93
94    // Markers
95    pub const CONTAINS_TYPESCRIPT_CLASS_SYNTAX: u32 = 8192; // 1 << 13
96    pub const CONTAINS_LEXICAL_THIS: u32 = 16384; // 1 << 14
97    pub const CONTAINS_REST_OR_SPREAD: u32 = 32768; // 1 << 15
98    pub const CONTAINS_OBJECT_REST_OR_SPREAD: u32 = 65536; // 1 << 16
99    pub const CONTAINS_COMPUTED_PROPERTY_NAME: u32 = 131_072; // 1 << 17
100    pub const CONTAINS_BLOCK_SCOPED_BINDING: u32 = 262_144; // 1 << 18
101    pub const CONTAINS_BINDING_PATTERN: u32 = 524_288; // 1 << 19
102    pub const CONTAINS_YIELD: u32 = 1_048_576; // 1 << 20
103    pub const CONTAINS_AWAIT: u32 = 2_097_152; // 1 << 21
104    pub const CONTAINS_HOISTED_DECLARATION_OR_COMPLETION: u32 = 4_194_304; // 1 << 22
105    pub const CONTAINS_DYNAMIC_IMPORT: u32 = 8_388_608; // 1 << 23
106    pub const CONTAINS_CLASS_FIELDS: u32 = 16_777_216; // 1 << 24
107    pub const CONTAINS_DECORATORS: u32 = 33_554_432; // 1 << 25
108    pub const CONTAINS_POSSIBLE_TOP_LEVEL_AWAIT: u32 = 67_108_864; // 1 << 26
109    pub const CONTAINS_LEXICAL_SUPER: u32 = 134_217_728; // 1 << 27
110    pub const CONTAINS_UPDATE_EXPRESSION_FOR_IDENTIFIER: u32 = 268_435_456; // 1 << 28
111    pub const CONTAINS_PRIVATE_IDENTIFIER_IN_EXPRESSION: u32 = 536_870_912; // 1 << 29
112
113    pub const HAS_COMPUTED_FLAGS: u32 = 2_147_483_648; // 1 << 31
114}