brighterscript 0.66.0-alpha.4 → 0.66.0-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/DiagnosticMessages.d.ts +21 -3
  3. package/dist/DiagnosticMessages.js +35 -2
  4. package/dist/DiagnosticMessages.js.map +1 -1
  5. package/dist/LanguageServer.d.ts +1 -0
  6. package/dist/LanguageServer.js +8 -5
  7. package/dist/LanguageServer.js.map +1 -1
  8. package/dist/Program.d.ts +20 -8
  9. package/dist/Program.js +107 -60
  10. package/dist/Program.js.map +1 -1
  11. package/dist/ProgramBuilder.js +14 -2
  12. package/dist/ProgramBuilder.js.map +1 -1
  13. package/dist/Scope.d.ts +15 -13
  14. package/dist/Scope.js +26 -65
  15. package/dist/Scope.js.map +1 -1
  16. package/dist/SymbolTable.d.ts +17 -10
  17. package/dist/SymbolTable.js +48 -26
  18. package/dist/SymbolTable.js.map +1 -1
  19. package/dist/XmlScope.d.ts +2 -0
  20. package/dist/XmlScope.js +38 -0
  21. package/dist/XmlScope.js.map +1 -1
  22. package/dist/astUtils/creators.d.ts +3 -1
  23. package/dist/astUtils/creators.js +14 -4
  24. package/dist/astUtils/creators.js.map +1 -1
  25. package/dist/astUtils/reflection.d.ts +24 -5
  26. package/dist/astUtils/reflection.js +58 -13
  27. package/dist/astUtils/reflection.js.map +1 -1
  28. package/dist/astUtils/reflection.spec.js +85 -3
  29. package/dist/astUtils/reflection.spec.js.map +1 -1
  30. package/dist/bscPlugin/CallExpressionInfo.d.ts +3 -3
  31. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -1
  32. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +4 -4
  33. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  34. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +44 -1
  35. package/dist/bscPlugin/completions/CompletionsProcessor.js +353 -20
  36. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -1
  37. package/dist/bscPlugin/completions/CompletionsProcessor.spec.d.ts +1 -0
  38. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +1452 -0
  39. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +1 -0
  40. package/dist/bscPlugin/hover/HoverProcessor.d.ts +9 -4
  41. package/dist/bscPlugin/hover/HoverProcessor.js +64 -67
  42. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
  43. package/dist/bscPlugin/hover/HoverProcessor.spec.js +162 -4
  44. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
  45. package/dist/bscPlugin/validation/BrsFileValidator.js +20 -16
  46. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  47. package/dist/bscPlugin/validation/ScopeValidator.d.ts +22 -1
  48. package/dist/bscPlugin/validation/ScopeValidator.js +194 -42
  49. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  50. package/dist/bscPlugin/validation/ScopeValidator.spec.js +621 -1
  51. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -1
  52. package/dist/diagnosticUtils.d.ts +7 -2
  53. package/dist/diagnosticUtils.js +43 -15
  54. package/dist/diagnosticUtils.js.map +1 -1
  55. package/dist/files/BrsFile.Class.spec.js +10 -8
  56. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  57. package/dist/files/BrsFile.d.ts +3 -20
  58. package/dist/files/BrsFile.js +7 -355
  59. package/dist/files/BrsFile.js.map +1 -1
  60. package/dist/files/BrsFile.spec.js +2 -248
  61. package/dist/files/BrsFile.spec.js.map +1 -1
  62. package/dist/files/XmlFile.d.ts +1 -6
  63. package/dist/files/XmlFile.js +0 -13
  64. package/dist/files/XmlFile.js.map +1 -1
  65. package/dist/files/XmlFile.spec.js +0 -36
  66. package/dist/files/XmlFile.spec.js.map +1 -1
  67. package/dist/globalCallables.js +1 -5
  68. package/dist/globalCallables.js.map +1 -1
  69. package/dist/interfaces.d.ts +22 -2
  70. package/dist/interfaces.js +4 -1
  71. package/dist/interfaces.js.map +1 -1
  72. package/dist/lexer/Lexer.d.ts +12 -0
  73. package/dist/lexer/Lexer.js +27 -2
  74. package/dist/lexer/Lexer.js.map +1 -1
  75. package/dist/lexer/Lexer.spec.js +40 -0
  76. package/dist/lexer/Lexer.spec.js.map +1 -1
  77. package/dist/lexer/Token.d.ts +4 -0
  78. package/dist/lexer/Token.js.map +1 -1
  79. package/dist/lexer/TokenKind.d.ts +4 -0
  80. package/dist/lexer/TokenKind.js +10 -1
  81. package/dist/lexer/TokenKind.js.map +1 -1
  82. package/dist/parser/AstNode.d.ts +8 -1
  83. package/dist/parser/AstNode.js +16 -0
  84. package/dist/parser/AstNode.js.map +1 -1
  85. package/dist/parser/Expression.d.ts +16 -1
  86. package/dist/parser/Expression.js +75 -11
  87. package/dist/parser/Expression.js.map +1 -1
  88. package/dist/parser/Parser.d.ts +7 -0
  89. package/dist/parser/Parser.js +55 -7
  90. package/dist/parser/Parser.js.map +1 -1
  91. package/dist/parser/Parser.spec.js +330 -4
  92. package/dist/parser/Parser.spec.js.map +1 -1
  93. package/dist/parser/SGTypes.d.ts +1 -1
  94. package/dist/parser/Statement.d.ts +18 -6
  95. package/dist/parser/Statement.js +54 -16
  96. package/dist/parser/Statement.js.map +1 -1
  97. package/dist/parser/tests/Parser.spec.js +2 -1
  98. package/dist/parser/tests/Parser.spec.js.map +1 -1
  99. package/dist/parser/tests/controlFlow/For.spec.js +16 -8
  100. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  101. package/dist/parser/tests/controlFlow/ForEach.spec.js +12 -6
  102. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  103. package/dist/parser/tests/controlFlow/While.spec.js +8 -4
  104. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  105. package/dist/parser/tests/expression/Call.spec.js +4 -4
  106. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  107. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +13 -13
  108. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  109. package/dist/parser/tests/statement/ConstStatement.spec.js +1 -34
  110. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -1
  111. package/dist/parser/tests/statement/Enum.spec.js +1 -257
  112. package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
  113. package/dist/parser/tests/statement/InterfaceStatement.spec.js +8 -0
  114. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
  115. package/dist/parser/tests/statement/PrintStatement.spec.js +6 -3
  116. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  117. package/dist/parser/tests/statement/ReturnStatement.spec.js +5 -3
  118. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  119. package/dist/parser/tests/statement/Set.spec.js +26 -13
  120. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  121. package/dist/roku-types/data.json +156 -111
  122. package/dist/roku-types/index.d.ts +2 -27
  123. package/dist/types/ArrayType.d.ts +4 -1
  124. package/dist/types/ArrayType.js +43 -7
  125. package/dist/types/ArrayType.js.map +1 -1
  126. package/dist/types/ArrayType.spec.js +31 -2
  127. package/dist/types/ArrayType.spec.js.map +1 -1
  128. package/dist/types/AssociativeArrayType.d.ts +11 -0
  129. package/dist/types/AssociativeArrayType.js +52 -0
  130. package/dist/types/AssociativeArrayType.js.map +1 -0
  131. package/dist/types/BaseFunctionType.d.ts +2 -1
  132. package/dist/types/BaseFunctionType.js +1 -1
  133. package/dist/types/BaseFunctionType.js.map +1 -1
  134. package/dist/types/BooleanType.d.ts +2 -4
  135. package/dist/types/BooleanType.js +6 -7
  136. package/dist/types/BooleanType.js.map +1 -1
  137. package/dist/types/BscType.d.ts +8 -4
  138. package/dist/types/BscType.js +42 -14
  139. package/dist/types/BscType.js.map +1 -1
  140. package/dist/types/BscTypeKind.d.ts +2 -0
  141. package/dist/types/BscTypeKind.js +2 -0
  142. package/dist/types/BscTypeKind.js.map +1 -1
  143. package/dist/types/BuiltInInterfaceAdder.d.ts +20 -0
  144. package/dist/types/BuiltInInterfaceAdder.js +139 -0
  145. package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
  146. package/dist/types/BuiltInInterfaceAdder.spec.d.ts +1 -0
  147. package/dist/types/BuiltInInterfaceAdder.spec.js +109 -0
  148. package/dist/types/BuiltInInterfaceAdder.spec.js.map +1 -0
  149. package/dist/types/ClassType.d.ts +6 -1
  150. package/dist/types/ClassType.js +26 -2
  151. package/dist/types/ClassType.js.map +1 -1
  152. package/dist/types/ComponentType.d.ts +26 -0
  153. package/dist/types/ComponentType.js +80 -0
  154. package/dist/types/ComponentType.js.map +1 -0
  155. package/dist/types/DoubleType.d.ts +2 -4
  156. package/dist/types/DoubleType.js +6 -7
  157. package/dist/types/DoubleType.js.map +1 -1
  158. package/dist/types/DynamicType.d.ts +2 -2
  159. package/dist/types/DynamicType.js +3 -1
  160. package/dist/types/DynamicType.js.map +1 -1
  161. package/dist/types/EnumType.d.ts +4 -5
  162. package/dist/types/EnumType.js +8 -7
  163. package/dist/types/EnumType.js.map +1 -1
  164. package/dist/types/FloatType.d.ts +2 -4
  165. package/dist/types/FloatType.js +6 -7
  166. package/dist/types/FloatType.js.map +1 -1
  167. package/dist/types/FunctionType.d.ts +2 -1
  168. package/dist/types/FunctionType.js +6 -2
  169. package/dist/types/FunctionType.js.map +1 -1
  170. package/dist/types/IntegerType.d.ts +2 -4
  171. package/dist/types/IntegerType.js +6 -7
  172. package/dist/types/IntegerType.js.map +1 -1
  173. package/dist/types/InterfaceType.d.ts +2 -1
  174. package/dist/types/InterfaceType.js +8 -4
  175. package/dist/types/InterfaceType.js.map +1 -1
  176. package/dist/types/InterfaceType.spec.js +2 -2
  177. package/dist/types/InvalidType.d.ts +1 -1
  178. package/dist/types/InvalidType.js +5 -1
  179. package/dist/types/InvalidType.js.map +1 -1
  180. package/dist/types/LongIntegerType.d.ts +2 -4
  181. package/dist/types/LongIntegerType.js +6 -7
  182. package/dist/types/LongIntegerType.js.map +1 -1
  183. package/dist/types/ObjectType.d.ts +3 -3
  184. package/dist/types/ObjectType.js +3 -1
  185. package/dist/types/ObjectType.js.map +1 -1
  186. package/dist/types/ReferenceType.d.ts +14 -0
  187. package/dist/types/ReferenceType.js +114 -13
  188. package/dist/types/ReferenceType.js.map +1 -1
  189. package/dist/types/ReferenceType.spec.js +15 -0
  190. package/dist/types/ReferenceType.spec.js.map +1 -1
  191. package/dist/types/StringType.d.ts +2 -4
  192. package/dist/types/StringType.js +5 -6
  193. package/dist/types/StringType.js.map +1 -1
  194. package/dist/types/TypedFunctionType.d.ts +2 -1
  195. package/dist/types/TypedFunctionType.js +10 -3
  196. package/dist/types/TypedFunctionType.js.map +1 -1
  197. package/dist/types/UninitializedType.d.ts +2 -1
  198. package/dist/types/UninitializedType.js +1 -1
  199. package/dist/types/UninitializedType.js.map +1 -1
  200. package/dist/types/UnionType.d.ts +4 -2
  201. package/dist/types/UnionType.js +25 -4
  202. package/dist/types/UnionType.js.map +1 -1
  203. package/dist/types/UnionType.spec.js +46 -19
  204. package/dist/types/UnionType.spec.js.map +1 -1
  205. package/dist/types/VoidType.d.ts +2 -1
  206. package/dist/types/VoidType.js +6 -2
  207. package/dist/types/VoidType.js.map +1 -1
  208. package/dist/types/helpers.d.ts +2 -0
  209. package/dist/types/helpers.js +18 -3
  210. package/dist/types/helpers.js.map +1 -1
  211. package/dist/util.d.ts +25 -2
  212. package/dist/util.js +179 -13
  213. package/dist/util.js.map +1 -1
  214. package/package.json +1 -1
@@ -1,6 +1,7 @@
1
1
  import type { Token, Identifier } from '../lexer/Token';
2
2
  import { TokenKind } from '../lexer/TokenKind';
3
- import type { FunctionExpression, FunctionParameterExpression, TypeExpression } from './Expression';
3
+ import type { DottedGetExpression, FunctionExpression, FunctionParameterExpression, TypeExpression } from './Expression';
4
+ import { VariableExpression } from './Expression';
4
5
  import type { Range } from 'vscode-languageserver';
5
6
  import type { BrsTranspileState } from './BrsTranspileState';
6
7
  import { ParseMode } from './Parser';
@@ -13,7 +14,6 @@ import type { Expression } from './AstNode';
13
14
  import { AstNodeKind } from './AstNode';
14
15
  import { Statement } from './AstNode';
15
16
  import { ClassType } from '../types/ClassType';
16
- import { EnumMemberType, EnumType } from '../types/EnumType';
17
17
  import { NamespaceType } from '../types/NamespaceType';
18
18
  import { InterfaceType } from '../types/InterfaceType';
19
19
  import type { BscType } from '../types/BscType';
@@ -119,6 +119,7 @@ export declare class FunctionStatement extends Statement implements TypedefProvi
119
119
  * Get the name of this expression based on the parse mode
120
120
  */
121
121
  getName(parseMode: ParseMode): string;
122
+ getLeadingTrivia(): Token[];
122
123
  transpile(state: BrsTranspileState): any[];
123
124
  getTypedef(state: BrsTranspileState): any[];
124
125
  walk(visitor: WalkVisitor, options: WalkOptions): void;
@@ -222,6 +223,7 @@ export declare class LabelStatement extends Statement {
222
223
  });
223
224
  readonly kind = AstNodeKind.LabelStatement;
224
225
  readonly range: Range;
226
+ getLeadingTrivia(): Token[];
225
227
  transpile(state: BrsTranspileState): SourceNode[];
226
228
  walk(visitor: WalkVisitor, options: WalkOptions): void;
227
229
  }
@@ -352,10 +354,10 @@ export declare class LibraryStatement extends Statement implements TypedefProvid
352
354
  }
353
355
  export declare class NamespaceStatement extends Statement implements TypedefProvider {
354
356
  keyword: Token;
355
- nameExpression: Expression;
357
+ nameExpression: VariableExpression | DottedGetExpression;
356
358
  body: Body;
357
359
  endKeyword: Token;
358
- constructor(keyword: Token, nameExpression: Expression, body: Body, endKeyword: Token);
360
+ constructor(keyword: Token, nameExpression: VariableExpression | DottedGetExpression, body: Body, endKeyword: Token);
359
361
  readonly kind = AstNodeKind.NamespaceStatement;
360
362
  /**
361
363
  * The string name for this namespace
@@ -365,6 +367,7 @@ export declare class NamespaceStatement extends Statement implements TypedefProv
365
367
  private _range;
366
368
  cacheRange(): Range;
367
369
  getName(parseMode: ParseMode): string;
370
+ getLeadingTrivia(): Token[];
368
371
  getNameParts(): Identifier[];
369
372
  transpile(state: BrsTranspileState): TranspileResult;
370
373
  getTypedef(state: BrsTranspileState): string[];
@@ -400,6 +403,7 @@ export declare class InterfaceStatement extends Statement implements TypedefProv
400
403
  get fields(): InterfaceFieldStatement[];
401
404
  get methods(): InterfaceMethodStatement[];
402
405
  hasParentInterface(): boolean;
406
+ getLeadingTrivia(): Token[];
403
407
  /**
404
408
  * The name of the interface WITH its leading namespace (if applicable)
405
409
  */
@@ -427,6 +431,7 @@ export declare class InterfaceFieldStatement extends Statement implements Typede
427
431
  name: Identifier;
428
432
  as: Token;
429
433
  };
434
+ getLeadingTrivia(): Token[];
430
435
  get name(): string;
431
436
  walk(visitor: WalkVisitor, options: WalkOptions): void;
432
437
  getTypedef(state: BrsTranspileState): (string | SourceNode)[];
@@ -450,6 +455,7 @@ export declare class InterfaceMethodStatement extends Statement implements Typed
450
455
  rightParen: Token;
451
456
  as: Token;
452
457
  };
458
+ getLeadingTrivia(): Token[];
453
459
  walk(visitor: WalkVisitor, options: WalkOptions): void;
454
460
  getTypedef(state: BrsTranspileState): TranspileResult;
455
461
  getType(options: GetTypeOptions): TypedFunctionType;
@@ -471,6 +477,7 @@ export declare class ClassStatement extends Statement implements TypedefProvider
471
477
  name: Identifier, body: Statement[], end: Token, extendsKeyword?: Token, parentClassName?: TypeExpression);
472
478
  readonly kind = AstNodeKind.ClassStatement;
473
479
  getName(parseMode: ParseMode): string;
480
+ getLeadingTrivia(): Token[];
474
481
  memberMap: Record<string, MemberStatement>;
475
482
  methods: MethodStatement[];
476
483
  fields: FieldStatement[];
@@ -524,6 +531,7 @@ export declare class MethodStatement extends FunctionStatement {
524
531
  * Get the name of this method.
525
532
  */
526
533
  getName(parseMode: ParseMode): string;
534
+ getLeadingTrivia(): Token[];
527
535
  transpile(state: BrsTranspileState): any[];
528
536
  getTypedef(state: BrsTranspileState): (string | SourceNode)[];
529
537
  /**
@@ -552,6 +560,7 @@ export declare class FieldStatement extends Statement implements TypedefProvider
552
560
  */
553
561
  getType(options: GetTypeOptions): BscType;
554
562
  readonly range: Range;
563
+ getLeadingTrivia(): Token[];
555
564
  transpile(state: BrsTranspileState): TranspileResult;
556
565
  getTypedef(state: BrsTranspileState): any[];
557
566
  walk(visitor: WalkVisitor, options: WalkOptions): void;
@@ -612,6 +621,7 @@ export declare class EnumStatement extends Statement implements TypedefProvider
612
621
  symbolTable: SymbolTable;
613
622
  get range(): Range;
614
623
  getMembers(): EnumMemberStatement[];
624
+ getLeadingTrivia(): Token[];
615
625
  /**
616
626
  * Get a map of member names and their values.
617
627
  * All values are stored as their AST LiteralExpression representation (i.e. string enum values include the wrapping quotes)
@@ -629,7 +639,7 @@ export declare class EnumStatement extends Statement implements TypedefProvider
629
639
  transpile(state: BrsTranspileState): any[];
630
640
  getTypedef(state: BrsTranspileState): TranspileResult;
631
641
  walk(visitor: WalkVisitor, options: WalkOptions): void;
632
- getType(options: GetTypeOptions): EnumType;
642
+ getType(options: GetTypeOptions): any;
633
643
  }
634
644
  export declare class EnumMemberStatement extends Statement implements TypedefProvider {
635
645
  tokens: {
@@ -647,10 +657,11 @@ export declare class EnumMemberStatement extends Statement implements TypedefPro
647
657
  * The name of the member
648
658
  */
649
659
  get name(): string;
660
+ getLeadingTrivia(): Token[];
650
661
  transpile(state: BrsTranspileState): TranspileResult;
651
662
  getTypedef(state: BrsTranspileState): (string | SourceNode)[];
652
663
  walk(visitor: WalkVisitor, options: WalkOptions): void;
653
- getType(options: GetTypeOptions): EnumMemberType;
664
+ getType(options: GetTypeOptions): any;
654
665
  }
655
666
  export declare class ConstStatement extends Statement implements TypedefProvider {
656
667
  tokens: {
@@ -667,6 +678,7 @@ export declare class ConstStatement extends Statement implements TypedefProvider
667
678
  readonly kind = AstNodeKind.ConstStatement;
668
679
  range: Range;
669
680
  get name(): string;
681
+ getLeadingTrivia(): Token[];
670
682
  /**
671
683
  * The name of the statement WITH its leading namespace (if applicable)
672
684
  */
@@ -293,6 +293,9 @@ class FunctionStatement extends AstNode_2.Statement {
293
293
  return this.name.text;
294
294
  }
295
295
  }
296
+ getLeadingTrivia() {
297
+ return util_1.util.concatAnnotationLeadingTrivia(this, this.func.getLeadingTrivia());
298
+ }
296
299
  transpile(state) {
297
300
  //create a fake token using the full transpiled name
298
301
  let nameToken = Object.assign(Object.assign({}, this.name), { text: this.getName(Parser_1.ParseMode.BrightScript) });
@@ -534,6 +537,9 @@ class LabelStatement extends AstNode_2.Statement {
534
537
  this.kind = AstNode_1.AstNodeKind.LabelStatement;
535
538
  this.range = util_1.util.createBoundingRange(tokens.identifier, tokens.colon);
536
539
  }
540
+ getLeadingTrivia() {
541
+ return util_1.util.concatAnnotationLeadingTrivia(this, this.tokens.identifier.leadingTrivia);
542
+ }
537
543
  transpile(state) {
538
544
  return [
539
545
  state.transpileToken(this.tokens.identifier),
@@ -836,9 +842,7 @@ class LibraryStatement extends AstNode_2.Statement {
836
842
  }
837
843
  exports.LibraryStatement = LibraryStatement;
838
844
  class NamespaceStatement extends AstNode_2.Statement {
839
- constructor(keyword,
840
- // this should technically only be a VariableExpression or DottedGetExpression, but that can be enforced elsewhere
841
- nameExpression, body, endKeyword) {
845
+ constructor(keyword, nameExpression, body, endKeyword) {
842
846
  super();
843
847
  this.keyword = keyword;
844
848
  this.nameExpression = nameExpression;
@@ -867,6 +871,9 @@ class NamespaceStatement extends AstNode_2.Statement {
867
871
  }
868
872
  return name;
869
873
  }
874
+ getLeadingTrivia() {
875
+ return util_1.util.concatAnnotationLeadingTrivia(this, this.keyword.leadingTrivia);
876
+ }
870
877
  getNameParts() {
871
878
  var _a, _b;
872
879
  let parts = util_1.util.getAllDottedGetParts(this.nameExpression);
@@ -901,7 +908,6 @@ class NamespaceStatement extends AstNode_2.Statement {
901
908
  }
902
909
  getType(options) {
903
910
  const resultType = new NamespaceType_1.NamespaceType(this.name);
904
- resultType.pushMemberProvider(() => this.body.getSymbolTable());
905
911
  return resultType;
906
912
  }
907
913
  }
@@ -968,6 +974,9 @@ class InterfaceStatement extends AstNode_2.Statement {
968
974
  hasParentInterface() {
969
975
  return !!this.parentInterfaceName;
970
976
  }
977
+ getLeadingTrivia() {
978
+ return util_1.util.concatAnnotationLeadingTrivia(this, this.tokens.interface.leadingTrivia);
979
+ }
971
980
  /**
972
981
  * The name of the interface WITH its leading namespace (if applicable)
973
982
  */
@@ -1056,11 +1065,11 @@ class InterfaceStatement extends AstNode_2.Statement {
1056
1065
  const resultType = new InterfaceType_1.InterfaceType(this.getName(Parser_1.ParseMode.BrighterScript), superIface);
1057
1066
  for (const statement of this.methods) {
1058
1067
  const memberType = statement === null || statement === void 0 ? void 0 : statement.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); // no typechain info needed
1059
- resultType.addMember((_b = statement === null || statement === void 0 ? void 0 : statement.tokens.name) === null || _b === void 0 ? void 0 : _b.text, statement === null || statement === void 0 ? void 0 : statement.range, memberType, SymbolTable_1.SymbolTypeFlag.runtime);
1068
+ resultType.addMember((_b = statement === null || statement === void 0 ? void 0 : statement.tokens.name) === null || _b === void 0 ? void 0 : _b.text, { definingNode: statement }, memberType, SymbolTable_1.SymbolTypeFlag.runtime);
1060
1069
  }
1061
1070
  for (const statement of this.fields) {
1062
1071
  const memberType = statement === null || statement === void 0 ? void 0 : statement.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); // no typechain info needed
1063
- resultType.addMember((_c = statement === null || statement === void 0 ? void 0 : statement.tokens.name) === null || _c === void 0 ? void 0 : _c.text, statement === null || statement === void 0 ? void 0 : statement.range, memberType, SymbolTable_1.SymbolTypeFlag.runtime);
1072
+ resultType.addMember((_c = statement === null || statement === void 0 ? void 0 : statement.tokens.name) === null || _c === void 0 ? void 0 : _c.text, { definingNode: statement }, memberType, SymbolTable_1.SymbolTypeFlag.runtime);
1064
1073
  }
1065
1074
  (_d = options.typeChain) === null || _d === void 0 ? void 0 : _d.push(new interfaces_1.TypeChainEntry(this.getName(Parser_1.ParseMode.BrighterScript), resultType, this.range));
1066
1075
  return resultType;
@@ -1080,6 +1089,9 @@ class InterfaceFieldStatement extends AstNode_2.Statement {
1080
1089
  transpile(state) {
1081
1090
  throw new Error('Method not implemented.');
1082
1091
  }
1092
+ getLeadingTrivia() {
1093
+ return util_1.util.concatAnnotationLeadingTrivia(this, this.tokens.name.leadingTrivia);
1094
+ }
1083
1095
  get name() {
1084
1096
  return this.tokens.name.text;
1085
1097
  }
@@ -1134,6 +1146,9 @@ class InterfaceMethodStatement extends AstNode_2.Statement {
1134
1146
  getName(parseMode) {
1135
1147
  return this.tokens.name.text;
1136
1148
  }
1149
+ getLeadingTrivia() {
1150
+ return util_1.util.concatAnnotationLeadingTrivia(this, this.tokens.functionType.leadingTrivia);
1151
+ }
1137
1152
  walk(visitor, options) {
1138
1153
  if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
1139
1154
  (0, visitors_1.walk)(this, 'returnTypeExpression', visitor, options);
@@ -1194,7 +1209,7 @@ class ClassStatement extends AstNode_2.Statement {
1194
1209
  * The name of the class (without namespace prefix)
1195
1210
  */
1196
1211
  name, body, end, extendsKeyword, parentClassName) {
1197
- var _a, _b, _c;
1212
+ var _a, _b, _c, _d;
1198
1213
  super();
1199
1214
  this.classKeyword = classKeyword;
1200
1215
  this.name = name;
@@ -1207,14 +1222,15 @@ class ClassStatement extends AstNode_2.Statement {
1207
1222
  this.methods = [];
1208
1223
  this.fields = [];
1209
1224
  this.body = (_a = this.body) !== null && _a !== void 0 ? _a : [];
1225
+ this.symbolTable = new SymbolTable_2.SymbolTable(`ClassStatement: '${(_b = this.name) === null || _b === void 0 ? void 0 : _b.text}'`, () => { var _a; return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolTable(); });
1210
1226
  for (let statement of this.body) {
1211
1227
  if ((0, reflection_1.isMethodStatement)(statement)) {
1212
1228
  this.methods.push(statement);
1213
- this.memberMap[(_b = statement === null || statement === void 0 ? void 0 : statement.name) === null || _b === void 0 ? void 0 : _b.text.toLowerCase()] = statement;
1229
+ this.memberMap[(_c = statement === null || statement === void 0 ? void 0 : statement.name) === null || _c === void 0 ? void 0 : _c.text.toLowerCase()] = statement;
1214
1230
  }
1215
1231
  else if ((0, reflection_1.isFieldStatement)(statement)) {
1216
1232
  this.fields.push(statement);
1217
- this.memberMap[(_c = statement === null || statement === void 0 ? void 0 : statement.name) === null || _c === void 0 ? void 0 : _c.text.toLowerCase()] = statement;
1233
+ this.memberMap[(_d = statement === null || statement === void 0 ? void 0 : statement.name) === null || _d === void 0 ? void 0 : _d.text.toLowerCase()] = statement;
1218
1234
  }
1219
1235
  }
1220
1236
  this.range = util_1.util.createBoundingRange(classKeyword, name, extendsKeyword, parentClassName, ...(body !== null && body !== void 0 ? body : []), end);
@@ -1238,6 +1254,9 @@ class ClassStatement extends AstNode_2.Statement {
1238
1254
  return undefined;
1239
1255
  }
1240
1256
  }
1257
+ getLeadingTrivia() {
1258
+ return util_1.util.concatAnnotationLeadingTrivia(this, this.classKeyword.leadingTrivia);
1259
+ }
1241
1260
  transpile(state) {
1242
1261
  let result = [];
1243
1262
  //make the builder
@@ -1481,11 +1500,11 @@ class ClassStatement extends AstNode_2.Statement {
1481
1500
  const resultType = new ClassType_1.ClassType(this.getName(Parser_1.ParseMode.BrighterScript), superClass);
1482
1501
  for (const statement of this.methods) {
1483
1502
  const funcType = statement === null || statement === void 0 ? void 0 : statement.func.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); //no typechain needed
1484
- resultType.addMember((_b = statement === null || statement === void 0 ? void 0 : statement.name) === null || _b === void 0 ? void 0 : _b.text, statement === null || statement === void 0 ? void 0 : statement.range, funcType, SymbolTable_1.SymbolTypeFlag.runtime);
1503
+ resultType.addMember((_b = statement === null || statement === void 0 ? void 0 : statement.name) === null || _b === void 0 ? void 0 : _b.text, { definingNode: statement }, funcType, SymbolTable_1.SymbolTypeFlag.runtime);
1485
1504
  }
1486
1505
  for (const statement of this.fields) {
1487
1506
  const fieldType = statement.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); //no typechain needed
1488
- resultType.addMember((_c = statement === null || statement === void 0 ? void 0 : statement.name) === null || _c === void 0 ? void 0 : _c.text, statement === null || statement === void 0 ? void 0 : statement.range, fieldType, SymbolTable_1.SymbolTypeFlag.runtime);
1507
+ resultType.addMember((_c = statement === null || statement === void 0 ? void 0 : statement.name) === null || _c === void 0 ? void 0 : _c.text, { definingNode: statement }, fieldType, SymbolTable_1.SymbolTypeFlag.runtime);
1489
1508
  }
1490
1509
  (_d = options.typeChain) === null || _d === void 0 ? void 0 : _d.push(new interfaces_1.TypeChainEntry(resultType.name, resultType, this.range));
1491
1510
  return resultType;
@@ -1522,6 +1541,9 @@ class MethodStatement extends FunctionStatement {
1522
1541
  getName(parseMode) {
1523
1542
  return this.name.text;
1524
1543
  }
1544
+ getLeadingTrivia() {
1545
+ return util_1.util.concatAnnotationLeadingTrivia(this, this.func.getLeadingTrivia());
1546
+ }
1525
1547
  transpile(state) {
1526
1548
  if (this.name.text.toLowerCase() === 'new') {
1527
1549
  this.ensureSuperConstructorCall(state);
@@ -1594,19 +1616,22 @@ class MethodStatement extends FunctionStatement {
1594
1616
  text: 'super',
1595
1617
  isReserved: false,
1596
1618
  range: state.classStatement.name.range,
1597
- leadingWhitespace: ''
1619
+ leadingWhitespace: '',
1620
+ leadingTrivia: []
1598
1621
  }), {
1599
1622
  kind: TokenKind_1.TokenKind.LeftParen,
1600
1623
  text: '(',
1601
1624
  isReserved: false,
1602
1625
  range: state.classStatement.name.range,
1603
- leadingWhitespace: ''
1626
+ leadingWhitespace: '',
1627
+ leadingTrivia: []
1604
1628
  }, {
1605
1629
  kind: TokenKind_1.TokenKind.RightParen,
1606
1630
  text: ')',
1607
1631
  isReserved: false,
1608
1632
  range: state.classStatement.name.range,
1609
- leadingWhitespace: ''
1633
+ leadingWhitespace: '',
1634
+ leadingTrivia: []
1610
1635
  }, []));
1611
1636
  state.editor.arrayUnshift(this.func.body.statements, superCall);
1612
1637
  }
@@ -1657,6 +1682,10 @@ class FieldStatement extends AstNode_2.Statement {
1657
1682
  var _a, _b, _c, _d;
1658
1683
  return (_d = (_b = (_a = this.typeExpression) === null || _a === void 0 ? void 0 : _a.getType(Object.assign(Object.assign({}, options), { flags: SymbolTable_1.SymbolTypeFlag.typetime }))) !== null && _b !== void 0 ? _b : (_c = this.initialValue) === null || _c === void 0 ? void 0 : _c.getType(Object.assign(Object.assign({}, options), { flags: SymbolTable_1.SymbolTypeFlag.runtime }))) !== null && _d !== void 0 ? _d : DynamicType_1.DynamicType.instance;
1659
1684
  }
1685
+ getLeadingTrivia() {
1686
+ var _a, _b, _c, _d;
1687
+ return util_1.util.concatAnnotationLeadingTrivia(this, (_d = (_b = (_a = this.accessModifier) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : (_c = this.name) === null || _c === void 0 ? void 0 : _c.leadingTrivia) !== null && _d !== void 0 ? _d : []);
1688
+ }
1660
1689
  transpile(state) {
1661
1690
  throw new Error('transpile not implemented for ' + Object.getPrototypeOf(this).constructor.name);
1662
1691
  }
@@ -1790,6 +1819,9 @@ class EnumStatement extends AstNode_2.Statement {
1790
1819
  }
1791
1820
  return result;
1792
1821
  }
1822
+ getLeadingTrivia() {
1823
+ return util_1.util.concatAnnotationLeadingTrivia(this, this.tokens.enum.leadingTrivia);
1824
+ }
1793
1825
  /**
1794
1826
  * Get a map of member names and their values.
1795
1827
  * All values are stored as their AST LiteralExpression representation (i.e. string enum values include the wrapping quotes)
@@ -1887,10 +1919,10 @@ class EnumStatement extends AstNode_2.Statement {
1887
1919
  getType(options) {
1888
1920
  var _a, _b, _c;
1889
1921
  const members = this.getMembers();
1890
- const resultType = new EnumType_1.EnumType(this.fullName, (_a = members[0]) === null || _a === void 0 ? void 0 : _a.getType(options));
1922
+ const resultType = new EnumType_1.EnumType(this.fullName, (_a = members[0]) === null || _a === void 0 ? void 0 : _a.getType(options).underlyingType);
1891
1923
  resultType.pushMemberProvider(() => this.getSymbolTable());
1892
1924
  for (const statement of members) {
1893
- resultType.addMember((_c = (_b = statement === null || statement === void 0 ? void 0 : statement.tokens) === null || _b === void 0 ? void 0 : _b.name) === null || _c === void 0 ? void 0 : _c.text, statement === null || statement === void 0 ? void 0 : statement.range, statement.getType(options), SymbolTable_1.SymbolTypeFlag.runtime);
1925
+ resultType.addMember((_c = (_b = statement === null || statement === void 0 ? void 0 : statement.tokens) === null || _b === void 0 ? void 0 : _b.name) === null || _c === void 0 ? void 0 : _c.text, { definingNode: statement }, statement.getType(options), SymbolTable_1.SymbolTypeFlag.runtime);
1894
1926
  }
1895
1927
  return resultType;
1896
1928
  }
@@ -1912,6 +1944,9 @@ class EnumMemberStatement extends AstNode_2.Statement {
1912
1944
  get name() {
1913
1945
  return this.tokens.name.text;
1914
1946
  }
1947
+ getLeadingTrivia() {
1948
+ return util_1.util.concatAnnotationLeadingTrivia(this, this.tokens.name.leadingTrivia);
1949
+ }
1915
1950
  transpile(state) {
1916
1951
  return [];
1917
1952
  }
@@ -1949,6 +1984,9 @@ class ConstStatement extends AstNode_2.Statement {
1949
1984
  get name() {
1950
1985
  return this.tokens.name.text;
1951
1986
  }
1987
+ getLeadingTrivia() {
1988
+ return util_1.util.concatAnnotationLeadingTrivia(this, this.tokens.const.leadingTrivia);
1989
+ }
1952
1990
  /**
1953
1991
  * The name of the statement WITH its leading namespace (if applicable)
1954
1992
  */