brighterscript 0.66.0-alpha.3 → 0.66.0-alpha.5

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 (198) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/dist/BusyStatusTracker.d.ts +31 -0
  3. package/dist/BusyStatusTracker.js +83 -0
  4. package/dist/BusyStatusTracker.js.map +1 -0
  5. package/dist/DiagnosticMessages.d.ts +6 -1
  6. package/dist/DiagnosticMessages.js +5 -0
  7. package/dist/DiagnosticMessages.js.map +1 -1
  8. package/dist/LanguageServer.d.ts +18 -0
  9. package/dist/LanguageServer.js +126 -57
  10. package/dist/LanguageServer.js.map +1 -1
  11. package/dist/Logger.d.ts +1 -1
  12. package/dist/Logger.js.map +1 -1
  13. package/dist/Program.d.ts +3 -8
  14. package/dist/Program.js +13 -55
  15. package/dist/Program.js.map +1 -1
  16. package/dist/ProgramBuilder.js +14 -2
  17. package/dist/ProgramBuilder.js.map +1 -1
  18. package/dist/Scope.d.ts +1 -13
  19. package/dist/Scope.js +10 -65
  20. package/dist/Scope.js.map +1 -1
  21. package/dist/SymbolTable.d.ts +12 -10
  22. package/dist/SymbolTable.js +33 -24
  23. package/dist/SymbolTable.js.map +1 -1
  24. package/dist/Throttler.d.ts +12 -0
  25. package/dist/Throttler.js +39 -0
  26. package/dist/Throttler.js.map +1 -1
  27. package/dist/astUtils/creators.js +5 -3
  28. package/dist/astUtils/creators.js.map +1 -1
  29. package/dist/astUtils/reflection.d.ts +3 -1
  30. package/dist/astUtils/reflection.js +12 -1
  31. package/dist/astUtils/reflection.js.map +1 -1
  32. package/dist/astUtils/reflection.spec.js +2 -1
  33. package/dist/astUtils/reflection.spec.js.map +1 -1
  34. package/dist/bscPlugin/CallExpressionInfo.d.ts +3 -3
  35. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -1
  36. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +39 -1
  37. package/dist/bscPlugin/completions/CompletionsProcessor.js +305 -3
  38. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -1
  39. package/dist/bscPlugin/completions/CompletionsProcessor.spec.d.ts +1 -0
  40. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +1369 -0
  41. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +1 -0
  42. package/dist/bscPlugin/hover/HoverProcessor.d.ts +9 -4
  43. package/dist/bscPlugin/hover/HoverProcessor.js +64 -67
  44. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
  45. package/dist/bscPlugin/hover/HoverProcessor.spec.js +107 -4
  46. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
  47. package/dist/bscPlugin/validation/BrsFileValidator.js +18 -15
  48. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  49. package/dist/bscPlugin/validation/ScopeValidator.d.ts +10 -1
  50. package/dist/bscPlugin/validation/ScopeValidator.js +85 -42
  51. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  52. package/dist/bscPlugin/validation/ScopeValidator.spec.js +307 -0
  53. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -1
  54. package/dist/cli.js +9 -1
  55. package/dist/cli.js.map +1 -1
  56. package/dist/deferred.d.ts +1 -1
  57. package/dist/deferred.js.map +1 -1
  58. package/dist/diagnosticUtils.d.ts +7 -2
  59. package/dist/diagnosticUtils.js +43 -15
  60. package/dist/diagnosticUtils.js.map +1 -1
  61. package/dist/files/BrsFile.Class.spec.js +10 -8
  62. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  63. package/dist/files/BrsFile.d.ts +3 -20
  64. package/dist/files/BrsFile.js +7 -355
  65. package/dist/files/BrsFile.js.map +1 -1
  66. package/dist/files/BrsFile.spec.js +2 -248
  67. package/dist/files/BrsFile.spec.js.map +1 -1
  68. package/dist/files/XmlFile.d.ts +1 -6
  69. package/dist/files/XmlFile.js +0 -13
  70. package/dist/files/XmlFile.js.map +1 -1
  71. package/dist/files/XmlFile.spec.js +0 -36
  72. package/dist/files/XmlFile.spec.js.map +1 -1
  73. package/dist/globalCallables.js +9 -1
  74. package/dist/globalCallables.js.map +1 -1
  75. package/dist/index.d.ts +2 -0
  76. package/dist/index.js +2 -0
  77. package/dist/index.js.map +1 -1
  78. package/dist/interfaces.d.ts +12 -1
  79. package/dist/interfaces.js.map +1 -1
  80. package/dist/lexer/Lexer.d.ts +12 -0
  81. package/dist/lexer/Lexer.js +27 -2
  82. package/dist/lexer/Lexer.js.map +1 -1
  83. package/dist/lexer/Lexer.spec.js +40 -0
  84. package/dist/lexer/Lexer.spec.js.map +1 -1
  85. package/dist/lexer/Token.d.ts +4 -0
  86. package/dist/lexer/Token.js.map +1 -1
  87. package/dist/lexer/TokenKind.d.ts +4 -0
  88. package/dist/lexer/TokenKind.js +10 -1
  89. package/dist/lexer/TokenKind.js.map +1 -1
  90. package/dist/parser/AstNode.d.ts +8 -1
  91. package/dist/parser/AstNode.js +16 -0
  92. package/dist/parser/AstNode.js.map +1 -1
  93. package/dist/parser/Expression.d.ts +16 -1
  94. package/dist/parser/Expression.js +43 -1
  95. package/dist/parser/Expression.js.map +1 -1
  96. package/dist/parser/Parser.d.ts +7 -0
  97. package/dist/parser/Parser.js +46 -6
  98. package/dist/parser/Parser.js.map +1 -1
  99. package/dist/parser/Parser.spec.js +327 -3
  100. package/dist/parser/Parser.spec.js.map +1 -1
  101. package/dist/parser/SGTypes.d.ts +1 -1
  102. package/dist/parser/Statement.d.ts +16 -3
  103. package/dist/parser/Statement.js +53 -15
  104. package/dist/parser/Statement.js.map +1 -1
  105. package/dist/parser/tests/Parser.spec.js +2 -1
  106. package/dist/parser/tests/Parser.spec.js.map +1 -1
  107. package/dist/parser/tests/controlFlow/For.spec.js +16 -8
  108. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  109. package/dist/parser/tests/controlFlow/ForEach.spec.js +12 -6
  110. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  111. package/dist/parser/tests/controlFlow/While.spec.js +8 -4
  112. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  113. package/dist/parser/tests/expression/Call.spec.js +4 -4
  114. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  115. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +13 -13
  116. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  117. package/dist/parser/tests/statement/ConstStatement.spec.js +0 -33
  118. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -1
  119. package/dist/parser/tests/statement/Enum.spec.js +1 -257
  120. package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
  121. package/dist/parser/tests/statement/PrintStatement.spec.js +6 -3
  122. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  123. package/dist/parser/tests/statement/ReturnStatement.spec.js +5 -3
  124. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  125. package/dist/parser/tests/statement/Set.spec.js +26 -13
  126. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  127. package/dist/roku-types/data.json +158 -137
  128. package/dist/roku-types/index.d.ts +3 -38
  129. package/dist/types/ArrayType.d.ts +3 -1
  130. package/dist/types/ArrayType.js +42 -6
  131. package/dist/types/ArrayType.js.map +1 -1
  132. package/dist/types/ArrayType.spec.js +21 -2
  133. package/dist/types/ArrayType.spec.js.map +1 -1
  134. package/dist/types/BooleanType.js +5 -1
  135. package/dist/types/BooleanType.js.map +1 -1
  136. package/dist/types/BscType.d.ts +6 -2
  137. package/dist/types/BscType.js +20 -4
  138. package/dist/types/BscType.js.map +1 -1
  139. package/dist/types/BuiltInInterfaceAdder.d.ts +15 -0
  140. package/dist/types/BuiltInInterfaceAdder.js +93 -0
  141. package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
  142. package/dist/types/BuiltInInterfaceAdder.spec.d.ts +1 -0
  143. package/dist/types/BuiltInInterfaceAdder.spec.js +109 -0
  144. package/dist/types/BuiltInInterfaceAdder.spec.js.map +1 -0
  145. package/dist/types/ClassType.d.ts +4 -0
  146. package/dist/types/ClassType.js +25 -1
  147. package/dist/types/ClassType.js.map +1 -1
  148. package/dist/types/DoubleType.d.ts +1 -1
  149. package/dist/types/DoubleType.js +5 -1
  150. package/dist/types/DoubleType.js.map +1 -1
  151. package/dist/types/DynamicType.js +2 -0
  152. package/dist/types/DynamicType.js.map +1 -1
  153. package/dist/types/EnumType.d.ts +1 -0
  154. package/dist/types/EnumType.js +6 -1
  155. package/dist/types/EnumType.js.map +1 -1
  156. package/dist/types/FloatType.d.ts +1 -1
  157. package/dist/types/FloatType.js +5 -1
  158. package/dist/types/FloatType.js.map +1 -1
  159. package/dist/types/FunctionType.js +5 -1
  160. package/dist/types/FunctionType.js.map +1 -1
  161. package/dist/types/IntegerType.d.ts +1 -1
  162. package/dist/types/IntegerType.js +5 -1
  163. package/dist/types/IntegerType.js.map +1 -1
  164. package/dist/types/InterfaceType.js +2 -1
  165. package/dist/types/InterfaceType.js.map +1 -1
  166. package/dist/types/InvalidType.d.ts +1 -1
  167. package/dist/types/InvalidType.js +5 -1
  168. package/dist/types/InvalidType.js.map +1 -1
  169. package/dist/types/LongIntegerType.d.ts +1 -1
  170. package/dist/types/LongIntegerType.js +5 -1
  171. package/dist/types/LongIntegerType.js.map +1 -1
  172. package/dist/types/ObjectType.js +2 -0
  173. package/dist/types/ObjectType.js.map +1 -1
  174. package/dist/types/ReferenceType.d.ts +12 -0
  175. package/dist/types/ReferenceType.js +69 -12
  176. package/dist/types/ReferenceType.js.map +1 -1
  177. package/dist/types/ReferenceType.spec.js +15 -0
  178. package/dist/types/ReferenceType.spec.js.map +1 -1
  179. package/dist/types/StringType.d.ts +1 -1
  180. package/dist/types/StringType.js +4 -0
  181. package/dist/types/StringType.js.map +1 -1
  182. package/dist/types/TypedFunctionType.js +9 -2
  183. package/dist/types/TypedFunctionType.js.map +1 -1
  184. package/dist/types/UnionType.d.ts +2 -0
  185. package/dist/types/UnionType.js +22 -1
  186. package/dist/types/UnionType.js.map +1 -1
  187. package/dist/types/UnionType.spec.js +43 -17
  188. package/dist/types/UnionType.spec.js.map +1 -1
  189. package/dist/types/VoidType.d.ts +1 -1
  190. package/dist/types/VoidType.js +5 -1
  191. package/dist/types/VoidType.js.map +1 -1
  192. package/dist/types/helpers.d.ts +1 -0
  193. package/dist/types/helpers.js +18 -3
  194. package/dist/types/helpers.js.map +1 -1
  195. package/dist/util.d.ts +10 -2
  196. package/dist/util.js +82 -6
  197. package/dist/util.js.map +1 -1
  198. package/package.json +2 -2
@@ -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';
@@ -119,6 +120,7 @@ export declare class FunctionStatement extends Statement implements TypedefProvi
119
120
  * Get the name of this expression based on the parse mode
120
121
  */
121
122
  getName(parseMode: ParseMode): string;
123
+ getLeadingTrivia(): Token[];
122
124
  transpile(state: BrsTranspileState): any[];
123
125
  getTypedef(state: BrsTranspileState): any[];
124
126
  walk(visitor: WalkVisitor, options: WalkOptions): void;
@@ -222,6 +224,7 @@ export declare class LabelStatement extends Statement {
222
224
  });
223
225
  readonly kind = AstNodeKind.LabelStatement;
224
226
  readonly range: Range;
227
+ getLeadingTrivia(): Token[];
225
228
  transpile(state: BrsTranspileState): SourceNode[];
226
229
  walk(visitor: WalkVisitor, options: WalkOptions): void;
227
230
  }
@@ -352,10 +355,10 @@ export declare class LibraryStatement extends Statement implements TypedefProvid
352
355
  }
353
356
  export declare class NamespaceStatement extends Statement implements TypedefProvider {
354
357
  keyword: Token;
355
- nameExpression: Expression;
358
+ nameExpression: VariableExpression | DottedGetExpression;
356
359
  body: Body;
357
360
  endKeyword: Token;
358
- constructor(keyword: Token, nameExpression: Expression, body: Body, endKeyword: Token);
361
+ constructor(keyword: Token, nameExpression: VariableExpression | DottedGetExpression, body: Body, endKeyword: Token);
359
362
  readonly kind = AstNodeKind.NamespaceStatement;
360
363
  /**
361
364
  * The string name for this namespace
@@ -365,6 +368,7 @@ export declare class NamespaceStatement extends Statement implements TypedefProv
365
368
  private _range;
366
369
  cacheRange(): Range;
367
370
  getName(parseMode: ParseMode): string;
371
+ getLeadingTrivia(): Token[];
368
372
  getNameParts(): Identifier[];
369
373
  transpile(state: BrsTranspileState): TranspileResult;
370
374
  getTypedef(state: BrsTranspileState): string[];
@@ -400,6 +404,7 @@ export declare class InterfaceStatement extends Statement implements TypedefProv
400
404
  get fields(): InterfaceFieldStatement[];
401
405
  get methods(): InterfaceMethodStatement[];
402
406
  hasParentInterface(): boolean;
407
+ getLeadingTrivia(): Token[];
403
408
  /**
404
409
  * The name of the interface WITH its leading namespace (if applicable)
405
410
  */
@@ -427,6 +432,7 @@ export declare class InterfaceFieldStatement extends Statement implements Typede
427
432
  name: Identifier;
428
433
  as: Token;
429
434
  };
435
+ getLeadingTrivia(): Token[];
430
436
  get name(): string;
431
437
  walk(visitor: WalkVisitor, options: WalkOptions): void;
432
438
  getTypedef(state: BrsTranspileState): (string | SourceNode)[];
@@ -450,6 +456,7 @@ export declare class InterfaceMethodStatement extends Statement implements Typed
450
456
  rightParen: Token;
451
457
  as: Token;
452
458
  };
459
+ getLeadingTrivia(): Token[];
453
460
  walk(visitor: WalkVisitor, options: WalkOptions): void;
454
461
  getTypedef(state: BrsTranspileState): TranspileResult;
455
462
  getType(options: GetTypeOptions): TypedFunctionType;
@@ -471,6 +478,7 @@ export declare class ClassStatement extends Statement implements TypedefProvider
471
478
  name: Identifier, body: Statement[], end: Token, extendsKeyword?: Token, parentClassName?: TypeExpression);
472
479
  readonly kind = AstNodeKind.ClassStatement;
473
480
  getName(parseMode: ParseMode): string;
481
+ getLeadingTrivia(): Token[];
474
482
  memberMap: Record<string, MemberStatement>;
475
483
  methods: MethodStatement[];
476
484
  fields: FieldStatement[];
@@ -524,6 +532,7 @@ export declare class MethodStatement extends FunctionStatement {
524
532
  * Get the name of this method.
525
533
  */
526
534
  getName(parseMode: ParseMode): string;
535
+ getLeadingTrivia(): Token[];
527
536
  transpile(state: BrsTranspileState): any[];
528
537
  getTypedef(state: BrsTranspileState): (string | SourceNode)[];
529
538
  /**
@@ -552,6 +561,7 @@ export declare class FieldStatement extends Statement implements TypedefProvider
552
561
  */
553
562
  getType(options: GetTypeOptions): BscType;
554
563
  readonly range: Range;
564
+ getLeadingTrivia(): Token[];
555
565
  transpile(state: BrsTranspileState): TranspileResult;
556
566
  getTypedef(state: BrsTranspileState): any[];
557
567
  walk(visitor: WalkVisitor, options: WalkOptions): void;
@@ -612,6 +622,7 @@ export declare class EnumStatement extends Statement implements TypedefProvider
612
622
  symbolTable: SymbolTable;
613
623
  get range(): Range;
614
624
  getMembers(): EnumMemberStatement[];
625
+ getLeadingTrivia(): Token[];
615
626
  /**
616
627
  * Get a map of member names and their values.
617
628
  * All values are stored as their AST LiteralExpression representation (i.e. string enum values include the wrapping quotes)
@@ -647,6 +658,7 @@ export declare class EnumMemberStatement extends Statement implements TypedefPro
647
658
  * The name of the member
648
659
  */
649
660
  get name(): string;
661
+ getLeadingTrivia(): Token[];
650
662
  transpile(state: BrsTranspileState): TranspileResult;
651
663
  getTypedef(state: BrsTranspileState): (string | SourceNode)[];
652
664
  walk(visitor: WalkVisitor, options: WalkOptions): void;
@@ -667,6 +679,7 @@ export declare class ConstStatement extends Statement implements TypedefProvider
667
679
  readonly kind = AstNodeKind.ConstStatement;
668
680
  range: Range;
669
681
  get name(): string;
682
+ getLeadingTrivia(): Token[];
670
683
  /**
671
684
  * The name of the statement WITH its leading namespace (if applicable)
672
685
  */
@@ -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)
@@ -1890,7 +1922,7 @@ class EnumStatement extends AstNode_2.Statement {
1890
1922
  const resultType = new EnumType_1.EnumType(this.fullName, (_a = members[0]) === null || _a === void 0 ? void 0 : _a.getType(options));
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
  */