brighterscript 1.0.0-alpha.30 → 1.0.0-alpha.32

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 (100) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/AstValidationSegmenter.d.ts +10 -3
  3. package/dist/AstValidationSegmenter.js +73 -50
  4. package/dist/AstValidationSegmenter.js.map +1 -1
  5. package/dist/CrossScopeValidator.d.ts +67 -0
  6. package/dist/CrossScopeValidator.js +625 -0
  7. package/dist/CrossScopeValidator.js.map +1 -0
  8. package/dist/DiagnosticManager.d.ts +1 -0
  9. package/dist/DiagnosticManager.js +17 -13
  10. package/dist/DiagnosticManager.js.map +1 -1
  11. package/dist/DiagnosticMessages.d.ts +6 -6
  12. package/dist/DiagnosticMessages.js +8 -8
  13. package/dist/DiagnosticMessages.js.map +1 -1
  14. package/dist/Program.d.ts +11 -17
  15. package/dist/Program.js +91 -96
  16. package/dist/Program.js.map +1 -1
  17. package/dist/Scope.js +18 -24
  18. package/dist/Scope.js.map +1 -1
  19. package/dist/SemanticTokenUtils.js +4 -0
  20. package/dist/SemanticTokenUtils.js.map +1 -1
  21. package/dist/SymbolTable.js +4 -1
  22. package/dist/SymbolTable.js.map +1 -1
  23. package/dist/SymbolTypeFlag.d.ts +2 -1
  24. package/dist/SymbolTypeFlag.js +1 -0
  25. package/dist/SymbolTypeFlag.js.map +1 -1
  26. package/dist/astUtils/CachedLookups.d.ts +2 -1
  27. package/dist/astUtils/CachedLookups.js +9 -2
  28. package/dist/astUtils/CachedLookups.js.map +1 -1
  29. package/dist/astUtils/reflection.d.ts +4 -3
  30. package/dist/astUtils/reflection.js +7 -3
  31. package/dist/astUtils/reflection.js.map +1 -1
  32. package/dist/astUtils/visitors.d.ts +3 -2
  33. package/dist/astUtils/visitors.js.map +1 -1
  34. package/dist/bscPlugin/BscPlugin.js +2 -2
  35. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  36. package/dist/bscPlugin/hover/HoverProcessor.js +1 -1
  37. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
  38. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +6 -0
  39. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
  40. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +13 -0
  41. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -1
  42. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js +1 -4
  43. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -1
  44. package/dist/bscPlugin/validation/{BrsFileAfterValidatior.js → BrsFileAfterValidator.js} +1 -1
  45. package/dist/bscPlugin/validation/BrsFileAfterValidator.js.map +1 -0
  46. package/dist/bscPlugin/validation/ScopeValidator.d.ts +3 -11
  47. package/dist/bscPlugin/validation/ScopeValidator.js +120 -191
  48. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  49. package/dist/bscPlugin/validation/ScopeValidator.spec.js +111 -10
  50. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -1
  51. package/dist/files/BrsFile.Class.spec.js +7 -7
  52. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  53. package/dist/files/BrsFile.d.ts +8 -5
  54. package/dist/files/BrsFile.js +63 -57
  55. package/dist/files/BrsFile.js.map +1 -1
  56. package/dist/files/BrsFile.spec.js +145 -19
  57. package/dist/files/BrsFile.spec.js.map +1 -1
  58. package/dist/interfaces.d.ts +3 -8
  59. package/dist/interfaces.js +3 -13
  60. package/dist/interfaces.js.map +1 -1
  61. package/dist/parser/AstNode.d.ts +2 -1
  62. package/dist/parser/AstNode.js +1 -0
  63. package/dist/parser/AstNode.js.map +1 -1
  64. package/dist/parser/Expression.d.ts +1 -1
  65. package/dist/parser/Parser.d.ts +1 -0
  66. package/dist/parser/Parser.js +42 -35
  67. package/dist/parser/Parser.js.map +1 -1
  68. package/dist/parser/Statement.d.ts +26 -4
  69. package/dist/parser/Statement.js +95 -64
  70. package/dist/parser/Statement.js.map +1 -1
  71. package/dist/parser/TranspileState.d.ts +2 -1
  72. package/dist/parser/TranspileState.js +9 -7
  73. package/dist/parser/TranspileState.js.map +1 -1
  74. package/dist/parser/tests/statement/Enum.spec.js +63 -2
  75. package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
  76. package/dist/parser/tests/statement/InterfaceStatement.spec.js +1 -0
  77. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
  78. package/dist/roku-types/data.json +20 -2
  79. package/dist/roku-types/index.d.ts +14 -0
  80. package/dist/types/BuiltInInterfaceAdder.d.ts +3 -1
  81. package/dist/types/BuiltInInterfaceAdder.js +34 -7
  82. package/dist/types/BuiltInInterfaceAdder.js.map +1 -1
  83. package/dist/types/ClassType.d.ts +0 -1
  84. package/dist/types/ClassType.js +0 -1
  85. package/dist/types/ClassType.js.map +1 -1
  86. package/dist/types/ClassType.spec.js +2 -2
  87. package/dist/types/ReferenceType.d.ts +8 -0
  88. package/dist/types/ReferenceType.js +56 -1
  89. package/dist/types/ReferenceType.js.map +1 -1
  90. package/dist/types/UnionType.js +1 -1
  91. package/dist/types/UnionType.js.map +1 -1
  92. package/dist/types/helpers.d.ts +2 -0
  93. package/dist/types/helpers.js +14 -1
  94. package/dist/types/helpers.js.map +1 -1
  95. package/dist/util.d.ts +2 -0
  96. package/dist/util.js +41 -21
  97. package/dist/util.js.map +1 -1
  98. package/package.json +2 -2
  99. package/dist/bscPlugin/validation/BrsFileAfterValidatior.js.map +0 -1
  100. /package/dist/bscPlugin/validation/{BrsFileAfterValidatior.d.ts → BrsFileAfterValidator.d.ts} +0 -0
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ConditionalCompileConstStatement = exports.ConditionalCompileStatement = exports.AliasStatement = exports.ConditionalCompileErrorStatement = exports.TypecastStatement = exports.ContinueStatement = exports.ConstStatement = exports.EnumMemberStatement = exports.EnumStatement = exports.ThrowStatement = exports.CatchStatement = exports.TryCatchStatement = exports.FieldStatement = exports.MethodStatement = exports.ClassStatement = exports.InterfaceMethodStatement = exports.InterfaceFieldStatement = exports.InterfaceStatement = exports.ImportStatement = exports.NamespaceStatement = exports.LibraryStatement = exports.IndexedSetStatement = exports.DottedSetStatement = exports.WhileStatement = exports.ForEachStatement = exports.ForStatement = exports.StopStatement = exports.EndStatement = exports.ReturnStatement = exports.LabelStatement = exports.GotoStatement = exports.DimStatement = exports.PrintStatement = exports.IncrementStatement = exports.IfStatement = exports.FunctionStatement = exports.ExitWhileStatement = exports.ExitForStatement = exports.ExpressionStatement = exports.Block = exports.AssignmentStatement = exports.Body = exports.EmptyStatement = void 0;
3
+ exports.ConditionalCompileConstStatement = exports.ConditionalCompileStatement = exports.AliasStatement = exports.ConditionalCompileErrorStatement = exports.TypecastStatement = exports.ContinueStatement = exports.ConstStatement = exports.EnumMemberStatement = exports.EnumStatement = exports.ThrowStatement = exports.CatchStatement = exports.TryCatchStatement = exports.FieldStatement = exports.MethodStatement = exports.ClassStatement = exports.InterfaceMethodStatement = exports.InterfaceFieldStatement = exports.InterfaceStatement = exports.ImportStatement = exports.NamespaceStatement = exports.LibraryStatement = exports.IndexedSetStatement = exports.DottedSetStatement = exports.WhileStatement = exports.ForEachStatement = exports.ForStatement = exports.StopStatement = exports.EndStatement = exports.ReturnStatement = exports.LabelStatement = exports.GotoStatement = exports.DimStatement = exports.PrintStatement = exports.IncrementStatement = exports.IfStatement = exports.FunctionStatement = exports.ExitWhileStatement = exports.ExitForStatement = exports.ExpressionStatement = exports.Block = exports.AugmentedAssignmentStatement = exports.AssignmentStatement = exports.Body = exports.EmptyStatement = void 0;
4
4
  const TokenKind_1 = require("../lexer/TokenKind");
5
5
  const Expression_1 = require("./Expression");
6
6
  const util_1 = require("../util");
@@ -112,20 +112,14 @@ class AssignmentStatement extends AstNode_2.Statement {
112
112
  this.range = util_1.util.createBoundingRange(util_1.util.createBoundingRangeFromTokens(this.tokens), this.value);
113
113
  }
114
114
  transpile(state) {
115
- var _a, _b, _c, _d;
116
- //if the value is a compound assignment, just transpile the expression itself
117
- if (TokenKind_1.CompoundAssignmentOperators.includes((_c = (_b = (_a = this.value) === null || _a === void 0 ? void 0 : _a.tokens) === null || _b === void 0 ? void 0 : _b.operator) === null || _c === void 0 ? void 0 : _c.kind)) {
118
- return this.value.transpile(state);
119
- }
120
- else {
121
- return [
122
- state.transpileToken(this.tokens.name),
123
- ' ',
124
- state.transpileToken((_d = this.tokens.equals) !== null && _d !== void 0 ? _d : (0, creators_1.createToken)(TokenKind_1.TokenKind.Equal)),
125
- ' ',
126
- ...this.value.transpile(state)
127
- ];
128
- }
115
+ var _a;
116
+ return [
117
+ state.transpileToken(this.tokens.name),
118
+ ' ',
119
+ state.transpileToken((_a = this.tokens.equals) !== null && _a !== void 0 ? _a : (0, creators_1.createToken)(TokenKind_1.TokenKind.Equal)),
120
+ ' ',
121
+ ...this.value.transpile(state)
122
+ ];
129
123
  }
130
124
  walk(visitor, options) {
131
125
  if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
@@ -147,6 +141,46 @@ class AssignmentStatement extends AstNode_2.Statement {
147
141
  }
148
142
  }
149
143
  exports.AssignmentStatement = AssignmentStatement;
144
+ class AugmentedAssignmentStatement extends AstNode_2.Statement {
145
+ constructor(options) {
146
+ super();
147
+ this.kind = AstNode_1.AstNodeKind.AugmentedAssignmentStatement;
148
+ this.value = options.value;
149
+ this.tokens = {
150
+ operator: options.operator
151
+ };
152
+ this.item = options.item;
153
+ this.value = options.value;
154
+ this.range = util_1.util.createBoundingRange(this.item, util_1.util.createBoundingRangeFromTokens(this.tokens), this.value);
155
+ }
156
+ transpile(state) {
157
+ return [
158
+ this.item.transpile(state),
159
+ ' ',
160
+ state.transpileToken(this.tokens.operator),
161
+ ' ',
162
+ this.value.transpile(state)
163
+ ];
164
+ }
165
+ walk(visitor, options) {
166
+ if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
167
+ (0, visitors_1.walk)(this, 'item', visitor, options);
168
+ (0, visitors_1.walk)(this, 'value', visitor, options);
169
+ }
170
+ }
171
+ getType(options) {
172
+ const variableType = util_1.util.binaryOperatorResultType(this.item.getType(options), this.tokens.operator, this.value.getType(options));
173
+ //const variableType = this.typeExpression?.getType({ ...options, typeChain: undefined }) ?? this.value.getType({ ...options, typeChain: undefined });
174
+ // Note: compound assignments (eg. +=) are internally dealt with via the RHS being a BinaryExpression
175
+ // so this.value will be a BinaryExpression, and BinaryExpressions can figure out their own types
176
+ // options.typeChain?.push(new TypeChainEntry({ name: this.tokens.name.text, type: variableType, data: options.data, range: this.tokens.name.range, astNode: this }));
177
+ return variableType;
178
+ }
179
+ getLeadingTrivia() {
180
+ return this.item.getLeadingTrivia();
181
+ }
182
+ }
183
+ exports.AugmentedAssignmentStatement = AugmentedAssignmentStatement;
150
184
  class Block extends AstNode_2.Statement {
151
185
  constructor(options) {
152
186
  var _a;
@@ -823,30 +857,27 @@ class DottedSetStatement extends AstNode_2.Statement {
823
857
  this.kind = AstNode_1.AstNodeKind.DottedSetStatement;
824
858
  this.tokens = {
825
859
  name: options.name,
826
- dot: options.dot
860
+ dot: options.dot,
861
+ equals: options.equals
827
862
  };
828
863
  this.obj = options.obj;
829
864
  this.value = options.value;
830
865
  this.range = util_1.util.createBoundingRange(this.obj, this.tokens.dot, this.tokens.name, this.value);
831
866
  }
832
867
  transpile(state) {
833
- var _a, _b, _c;
834
868
  //if the value is a compound assignment, don't add the obj, dot, name, or operator...the expression will handle that
835
- if (TokenKind_1.CompoundAssignmentOperators.includes((_c = (_b = (_a = this.value) === null || _a === void 0 ? void 0 : _a.tokens) === null || _b === void 0 ? void 0 : _b.operator) === null || _c === void 0 ? void 0 : _c.kind)) {
836
- return this.value.transpile(state);
837
- }
838
- else {
839
- return [
840
- //object
841
- ...this.obj.transpile(state),
842
- this.tokens.dot ? state.tokenToSourceNode(this.tokens.dot) : '.',
843
- //name
844
- state.transpileToken(this.tokens.name),
845
- ' = ',
846
- //right-hand-side of assignment
847
- ...this.value.transpile(state)
848
- ];
849
- }
869
+ return [
870
+ //object
871
+ ...this.obj.transpile(state),
872
+ this.tokens.dot ? state.tokenToSourceNode(this.tokens.dot) : '.',
873
+ //name
874
+ state.transpileToken(this.tokens.name),
875
+ ' ',
876
+ state.transpileToken(this.tokens.equals, '='),
877
+ ' ',
878
+ //right-hand-side of assignment
879
+ ...this.value.transpile(state)
880
+ ];
850
881
  }
851
882
  walk(visitor, options) {
852
883
  if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
@@ -877,7 +908,8 @@ class IndexedSetStatement extends AstNode_2.Statement {
877
908
  this.kind = AstNode_1.AstNodeKind.IndexedSetStatement;
878
909
  this.tokens = {
879
910
  openingSquare: options.openingSquare,
880
- closingSquare: options.closingSquare
911
+ closingSquare: options.closingSquare,
912
+ equals: options.equals
881
913
  };
882
914
  this.obj = options.obj;
883
915
  this.indexes = options.indexes;
@@ -885,29 +917,23 @@ class IndexedSetStatement extends AstNode_2.Statement {
885
917
  this.range = util_1.util.createBoundingRange(this.obj, this.tokens.openingSquare, ...this.indexes, this.tokens.closingSquare, this.value);
886
918
  }
887
919
  transpile(state) {
888
- var _a, _b, _c, _d;
889
- //if the value is a component assignment, don't add the obj, index or operator...the expression will handle that
890
- if (TokenKind_1.CompoundAssignmentOperators.includes((_c = (_b = (_a = this.value) === null || _a === void 0 ? void 0 : _a.tokens) === null || _b === void 0 ? void 0 : _b.operator) === null || _c === void 0 ? void 0 : _c.kind)) {
891
- return this.value.transpile(state);
892
- }
893
- else {
894
- const result = [];
895
- result.push(
896
- //obj
897
- ...this.obj.transpile(state),
898
- // [
899
- state.transpileToken(this.tokens.openingSquare));
900
- for (let i = 0; i < this.indexes.length; i++) {
901
- //add comma between indexes
902
- if (i > 0) {
903
- result.push(', ');
904
- }
905
- let index = this.indexes[i];
906
- result.push(...((_d = index === null || index === void 0 ? void 0 : index.transpile(state)) !== null && _d !== void 0 ? _d : []));
920
+ var _a;
921
+ const result = [];
922
+ result.push(
923
+ //obj
924
+ ...this.obj.transpile(state),
925
+ // [
926
+ state.transpileToken(this.tokens.openingSquare, '['));
927
+ for (let i = 0; i < this.indexes.length; i++) {
928
+ //add comma between indexes
929
+ if (i > 0) {
930
+ result.push(', ');
907
931
  }
908
- result.push(state.transpileToken(this.tokens.closingSquare), ' = ', ...this.value.transpile(state));
909
- return result;
932
+ let index = this.indexes[i];
933
+ result.push(...((_a = index === null || index === void 0 ? void 0 : index.transpile(state)) !== null && _a !== void 0 ? _a : []));
910
934
  }
935
+ result.push(state.transpileToken(this.tokens.closingSquare, ']'), ' ', state.transpileToken(this.tokens.equals, '='), ' ', ...this.value.transpile(state));
936
+ return result;
911
937
  }
912
938
  walk(visitor, options) {
913
939
  if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
@@ -1001,7 +1027,11 @@ class NamespaceStatement extends AstNode_2.Statement {
1001
1027
  }
1002
1028
  transpile(state) {
1003
1029
  //namespaces don't actually have any real content, so just transpile their bodies
1004
- return this.body.transpile(state);
1030
+ return [
1031
+ state.transpileLeadingComments(this.tokens.namespace),
1032
+ this.body.transpile(state),
1033
+ state.transpileLeadingComments(this.tokens.endNamespace)
1034
+ ];
1005
1035
  }
1006
1036
  getTypedef(state) {
1007
1037
  var _a;
@@ -1053,8 +1083,7 @@ class ImportStatement extends AstNode_2.Statement {
1053
1083
  //The xml files are responsible for adding the additional script imports, but
1054
1084
  //add the import statement as a comment just for debugging purposes
1055
1085
  return [
1056
- `'`,
1057
- state.transpileToken(this.tokens.import, 'import'),
1086
+ state.transpileToken(this.tokens.import, 'import', true),
1058
1087
  ' ',
1059
1088
  state.transpileToken(this.tokens.path)
1060
1089
  ];
@@ -1156,7 +1185,9 @@ class InterfaceStatement extends AstNode_2.Statement {
1156
1185
  }
1157
1186
  transpile(state) {
1158
1187
  //interfaces should completely disappear at runtime
1159
- return [];
1188
+ return [
1189
+ state.transpileLeadingComments(this.tokens.interface)
1190
+ ];
1160
1191
  }
1161
1192
  getTypedef(state) {
1162
1193
  var _a, _b, _c, _d;
@@ -2155,7 +2186,9 @@ class EnumStatement extends AstNode_2.Statement {
2155
2186
  }
2156
2187
  transpile(state) {
2157
2188
  //enum declarations do not exist at runtime, so don't transpile anything...
2158
- return [];
2189
+ return [
2190
+ state.transpileLeadingComments(this.tokens.enum)
2191
+ ];
2159
2192
  }
2160
2193
  getTypedef(state) {
2161
2194
  var _a, _b, _c, _d, _e, _f;
@@ -2288,7 +2321,7 @@ class ConstStatement extends AstNode_2.Statement {
2288
2321
  }
2289
2322
  transpile(state) {
2290
2323
  //const declarations don't exist at runtime, so just transpile empty
2291
- return [];
2324
+ return [state.transpileLeadingComments(this.tokens.const)];
2292
2325
  }
2293
2326
  getTypedef(state) {
2294
2327
  var _a;
@@ -2349,8 +2382,7 @@ class TypecastStatement extends AstNode_2.Statement {
2349
2382
  transpile(state) {
2350
2383
  //the typecast statement is a comment just for debugging purposes
2351
2384
  return [
2352
- `'`,
2353
- state.transpileToken(this.tokens.typecast, 'typecast'),
2385
+ state.transpileToken(this.tokens.typecast, 'typecast', true),
2354
2386
  ' ',
2355
2387
  this.typecastExpression.obj.transpile(state),
2356
2388
  ' ',
@@ -2414,8 +2446,7 @@ class AliasStatement extends AstNode_2.Statement {
2414
2446
  transpile(state) {
2415
2447
  //the alias statement is a comment just for debugging purposes
2416
2448
  return [
2417
- `'`,
2418
- state.transpileToken(this.tokens.alias, 'alias'),
2449
+ state.transpileToken(this.tokens.alias, 'alias', true),
2419
2450
  ' ',
2420
2451
  state.transpileToken(this.tokens.name),
2421
2452
  ' ',