@artel/artc 0.9.26021 → 0.9.26023-pre-release

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 (92) hide show
  1. package/build/Cli.js +3 -3
  2. package/build/api/Api.js +2 -2
  3. package/build/api/ApiNodeJS.js +3 -3
  4. package/build/api/ApiServices.js +700 -239
  5. package/build/{chunk-FRGVWOKG.js → chunk-2BLIDCVA.js} +1 -1
  6. package/build/{chunk-RKCSFKQS.js → chunk-4YCJNPUR.js} +5297 -4089
  7. package/build/{chunk-NMHOQ26L.js → chunk-GLYRYS42.js} +2 -2
  8. package/build/types/analysis/a/Analyzer.d.ts +1 -0
  9. package/build/types/analysis/m/Analyzer.d.ts +4 -2
  10. package/build/types/analysis/m/ResolvedTranslationPackage.d.ts +10 -2
  11. package/build/types/analysis/m/TranslatedEntityNameConflictsValidator.d.ts +1 -0
  12. package/build/types/diagnostic/DiagnosticCode.d.ts +16 -10
  13. package/build/types/entities/IEntity.d.ts +3 -3
  14. package/build/types/entities/TypeEntityMembers.d.ts +6 -0
  15. package/build/types/entities/interfaces/BaseOrdinaryPackageFunctionEntity.d.ts +3 -3
  16. package/build/types/entities/interfaces/BasePackageMemberAccessorEntity.d.ts +3 -3
  17. package/build/types/entities/interfaces/DereferenceOperatorEntity.d.ts +6 -6
  18. package/build/types/entities/interfaces/FunctionEntity.d.ts +3 -4
  19. package/build/types/entities/interfaces/IndexerEntity.d.ts +6 -6
  20. package/build/types/entities/interfaces/VariableEntity.d.ts +5 -5
  21. package/build/types/entities/intrinsic/IntrinsicConstructorEntity.d.ts +6 -6
  22. package/build/types/entities/intrinsic/IntrinsicFunctionEntity.d.ts +6 -6
  23. package/build/types/entities/intrinsic/IntrinsicTypeParameterEntity.d.ts +3 -3
  24. package/build/types/entities/intrinsic/IntrinsicVariableEntity.d.ts +13 -13
  25. package/build/types/entities/source/a/SourceAliasTypeEntity.d.ts +3 -3
  26. package/build/types/entities/source/a/SourceConstructorEntity.d.ts +3 -3
  27. package/build/types/entities/source/a/SourceDereferenceOperatorEntity.d.ts +3 -3
  28. package/build/types/entities/source/a/SourceDestructorEntity.d.ts +3 -3
  29. package/build/types/entities/source/a/SourceFunctionEntity.d.ts +18 -19
  30. package/build/types/entities/source/a/SourceFunctionTypeEntity.d.ts +3 -3
  31. package/build/types/entities/source/a/SourceGetterEntity.d.ts +12 -12
  32. package/build/types/entities/source/a/SourceIndexerEntity.d.ts +3 -3
  33. package/build/types/entities/source/a/SourcePackageAliasEntity.d.ts +3 -3
  34. package/build/types/entities/source/a/SourcePackageEntity.d.ts +3 -3
  35. package/build/types/entities/source/a/SourceReducedTypeEntity.d.ts +3 -3
  36. package/build/types/entities/source/a/SourceSetterEntity.d.ts +12 -12
  37. package/build/types/entities/source/a/SourceStructuredTypeEntity.d.ts +6 -6
  38. package/build/types/entities/source/a/SourceTextTranslationEntity.d.ts +3 -3
  39. package/build/types/entities/source/a/SourceTypeExtensionEntity.d.ts +3 -3
  40. package/build/types/entities/source/a/SourceTypeParameterEntity.d.ts +3 -3
  41. package/build/types/entities/source/a/SourceVariableEntity.d.ts +42 -42
  42. package/build/types/entities/source/a/SourceVariantTypeEntity.d.ts +3 -3
  43. package/build/types/entities/source/m/SourceAliasTypeEntity.d.ts +3 -3
  44. package/build/types/entities/source/m/SourceConstructorEntity.d.ts +3 -3
  45. package/build/types/entities/source/m/SourceDestructorEntity.d.ts +3 -3
  46. package/build/types/entities/source/m/SourceFunctionEntity.d.ts +21 -22
  47. package/build/types/entities/source/m/SourceFunctionTypeEntity.d.ts +3 -3
  48. package/build/types/entities/source/m/SourceGetterEntity.d.ts +12 -12
  49. package/build/types/entities/source/m/SourceIndexerEntity.d.ts +3 -3
  50. package/build/types/entities/source/m/SourcePackageAliasEntity.d.ts +3 -3
  51. package/build/types/entities/source/m/SourcePackageEntity.d.ts +3 -3
  52. package/build/types/entities/source/m/SourceSetterEntity.d.ts +12 -12
  53. package/build/types/entities/source/m/SourceStructuredTypeEntity.d.ts +6 -6
  54. package/build/types/entities/source/m/SourceTextTranslationEntity.d.ts +3 -3
  55. package/build/types/entities/source/m/SourceTypeParameterEntity.d.ts +3 -3
  56. package/build/types/entities/source/m/SourceVariableEntity.d.ts +51 -51
  57. package/build/types/entities/source/m/SourceVariantTypeEntity.d.ts +3 -3
  58. package/build/types/entities/translated/TranslatedAliasTypeEntity.d.ts +3 -4
  59. package/build/types/entities/translated/TranslatedDereferenceOperatorEntity.d.ts +3 -4
  60. package/build/types/entities/translated/TranslatedFunctionEntity.d.ts +6 -8
  61. package/build/types/entities/translated/TranslatedFunctionTypeEntity.d.ts +3 -4
  62. package/build/types/entities/translated/TranslatedIndexerEntity.d.ts +3 -4
  63. package/build/types/entities/translated/TranslatedPackageEntity.d.ts +3 -4
  64. package/build/types/entities/translated/TranslatedPackageMemberAccessorEntity.d.ts +3 -4
  65. package/build/types/entities/translated/TranslatedParameterEntity.d.ts +3 -4
  66. package/build/types/entities/translated/TranslatedReducedTypeEntity.d.ts +3 -4
  67. package/build/types/entities/translated/TranslatedStructuredTypeEntity.d.ts +9 -12
  68. package/build/types/entities/translated/TranslatedTypeExtensionEntity.d.ts +3 -4
  69. package/build/types/entities/translated/TranslatedTypeMemberAccessorEntity.d.ts +6 -7
  70. package/build/types/entities/translated/TranslatedTypeParameterEntity.d.ts +3 -4
  71. package/build/types/entities/translated/TranslatedVariableEntity.d.ts +7 -9
  72. package/build/types/entities/translated/TranslatedVariantTypeEntity.d.ts +3 -4
  73. package/build/types/entities/translated/source/m/SourceTranslatedIndexedElementAccessorEntity.d.ts +13 -0
  74. package/build/types/entities/translated/source/m/SourceTranslatedIndexerEntity.d.ts +7 -5
  75. package/build/types/entities/translated/source/m/index.d.ts +1 -0
  76. package/build/types/parser/a/TokenKind.d.ts +26 -28
  77. package/build/types/parser/m/TokenKind.d.ts +27 -29
  78. package/build/types/services/common/Types.d.ts +2 -1
  79. package/build/types/services/m/NodeSemanticInfo.d.ts +7 -3
  80. package/build/types/tree/a/Nodes.d.ts +30 -30
  81. package/build/types/tree/a/SyntaxFactory.d.ts +1 -1
  82. package/build/types/tree/a/TokenKind.d.ts +10 -10
  83. package/build/types/tree/m/NodeKind.d.ts +9 -8
  84. package/build/types/tree/m/Nodes.d.ts +618 -572
  85. package/build/types/tree/m/SyntaxFactory.d.ts +51 -0
  86. package/build/types/tree/m/SyntaxToCode.d.ts +25 -24
  87. package/build/types/tree/m/TokenKind.d.ts +16 -16
  88. package/build/types/tree/m/index.d.ts +1 -0
  89. package/build/types/ts-interop/Entities.d.ts +51 -52
  90. package/build/types/ts-interop/TsInteropContext.d.ts +3 -3
  91. package/build/types/ts-interop/TypeEntities.d.ts +27 -27
  92. package/package.json +1 -1
@@ -29,6 +29,7 @@ import {
29
29
  IndexerDeclaration_typeMember,
30
30
  JavaScriptInterfacePackageImplementationConfig,
31
31
  JsonConfigurationFileNameSet,
32
+ Keyword2 as Keyword,
32
33
  LocaleByConfigurationDirectoryName,
33
34
  LocaleByJsonConfigurationFileName,
34
35
  LocalizationHelper,
@@ -56,10 +57,12 @@ import {
56
57
  SourcePackageDependencyGraph,
57
58
  Substitutions,
58
59
  SyntaxFactory,
60
+ SyntaxFactory2,
59
61
  SyntaxToCode,
60
62
  SyntaxToCode2,
61
63
  TargetPlatformConfig,
62
64
  TaskController,
65
+ Token2 as Token,
63
66
  TreeQuery,
64
67
  TreeQuery2,
65
68
  TsInteropInputs,
@@ -103,6 +106,8 @@ import {
103
106
  isNarrowableReferenceExpression2,
104
107
  isNodeM,
105
108
  isNonEmptyArray,
109
+ isOperatorDefinedByKeyword,
110
+ isOperatorDefinedByToken,
106
111
  isPackageMemberDeclaration,
107
112
  isPackageMemberDeclaration2,
108
113
  isPackageMemberEntity,
@@ -123,16 +128,18 @@ import {
123
128
  isUnaryOperatorKind,
124
129
  isVariableEntityWithExplicitAccessors,
125
130
  kebabCaseToCamelCase,
131
+ keywordKindByOperatorKind,
126
132
  localeToString,
127
133
  modifierKindsInSortOrder,
128
134
  operatorKinds,
129
135
  operatorKinds2,
130
136
  setUserLocale,
131
137
  sortModifiers,
138
+ tokenKindByOperatorKind,
132
139
  traverseTreeAsync,
133
140
  traverseTreeAsync2,
134
141
  yieldTask
135
- } from "../chunk-RKCSFKQS.js";
142
+ } from "../chunk-4YCJNPUR.js";
136
143
 
137
144
  // source/services/common/Types.ts
138
145
  import * as ls from "vscode-languageserver";
@@ -442,8 +449,17 @@ var TranslationsGenerator = class _TranslationsGenerator {
442
449
  );
443
450
  }
444
451
  }).join(`${newLine}${newLine}`);
445
- const editRange = Range.empty(translationsDeclaration.openBraceToken.rangeWithoutTrivia.end);
446
- let editText = newLine + memberTranslationsCode;
452
+ let editText;
453
+ let editRange;
454
+ const translationsKeywordLine = this.sourceFile.getPositionAt(translationsDeclaration.translationsKeyword.rangeWithoutTrivia.start).line;
455
+ const closeBraceTokenLine = this.sourceFile.getPositionAt(translationsDeclaration.closeBraceToken.rangeWithoutTrivia.start).line;
456
+ if (translationsKeywordLine === closeBraceTokenLine) {
457
+ editText = newLine + memberTranslationsCode + newLine;
458
+ editRange = Range.empty(translationsDeclaration.closeBraceToken.rangeWithoutTrivia.start);
459
+ } else {
460
+ editText = newLine + memberTranslationsCode;
461
+ editRange = Range.empty(translationsDeclaration.openBraceToken.rangeWithoutTrivia.end);
462
+ }
447
463
  if (translationsDeclaration.translationList.translationDeclarations.count() > 0) {
448
464
  editText += newLine;
449
465
  }
@@ -495,8 +511,19 @@ var TranslationsGenerator = class _TranslationsGenerator {
495
511
  let editText;
496
512
  let editRange;
497
513
  if (typeTranslation.openBraceToken !== void 0) {
498
- editRange = Range.empty(typeTranslation.openBraceToken.rangeWithoutTrivia.end);
499
- editText = newLine + memberTranslationsCode;
514
+ Debug.assert(typeTranslation.closeBraceToken !== void 0);
515
+ const typeKeywordLine = this.sourceFile.getPositionAt(typeTranslation.typeKeyword.rangeWithoutTrivia.start).line;
516
+ const closeBraceTokenLine = this.sourceFile.getPositionAt(typeTranslation.closeBraceToken.rangeWithoutTrivia.start).line;
517
+ const closeBraceTokenIndentation = " ".repeat(
518
+ this.sourceFile.getPositionAt(typeTranslation.rangeWithoutTrivia.start).character
519
+ );
520
+ if (typeKeywordLine === closeBraceTokenLine) {
521
+ editText = newLine + memberTranslationsCode + newLine + closeBraceTokenIndentation;
522
+ editRange = Range.empty(typeTranslation.closeBraceToken.rangeWithoutTrivia.start);
523
+ } else {
524
+ editText = newLine + memberTranslationsCode + closeBraceTokenIndentation;
525
+ editRange = Range.empty(typeTranslation.openBraceToken.rangeWithoutTrivia.end);
526
+ }
500
527
  if (typeTranslation.memberList !== void 0 && typeTranslation.memberList.members.count() > 0) {
501
528
  editText += newLine;
502
529
  }
@@ -568,7 +595,7 @@ var TranslationsGenerator = class _TranslationsGenerator {
568
595
  return this.translationPackage.translatedTargetPackage.getMembers().getNamedMembers().filter((m) => this.isNotTranslatedEntity(m) && ResolvedTranslationPackage.isPackageMemberEntityThatShouldBeTranslatedByUser(m));
569
596
  }
570
597
  isNotTranslatedEntity(entity) {
571
- const translation = entity.getTranslation();
598
+ const translation = entity.translation;
572
599
  return translation === void 0 || translation.definition.kind === "intrinsic";
573
600
  }
574
601
  createPackageMemberTranslationNode(entity) {
@@ -629,7 +656,7 @@ var TranslationsGenerator = class _TranslationsGenerator {
629
656
  }
630
657
  createFieldTranslation(entity) {
631
658
  const name = this.getNameText(entity.getName());
632
- return SyntaxFactory.fieldOrVariantTranslation(name, name);
659
+ return SyntaxFactory.fieldOrVariantValueTranslation(name, name);
633
660
  }
634
661
  createMethodTranslation(entity) {
635
662
  switch (entity.methodKind) {
@@ -1277,7 +1304,7 @@ var CompletionServiceA = class {
1277
1304
  const precedingSegmentNames = packageImport.packageName.segments.takeWhile((s) => s.rangeWithTrivia.start < tokenOrKeyword.value.rangeWithTrivia.start).map((p) => this.analyzer.createNameFromIdentifier(p)).toArray();
1278
1305
  return new PackageImportCompletionContext(precedingSegmentNames, void 0);
1279
1306
  }
1280
- if (tokenOrKeyword.isToken(50 /* OpenBrace */) && tokenOrKeyword.parent.kind === 6 /* PackageGroupImportDirective */ || this.tokenOrKeywordIsPackageImportListChild(tokenOrKeyword)) {
1307
+ if (tokenOrKeyword.isToken(49 /* OpenBrace */) && tokenOrKeyword.parent.kind === 6 /* PackageGroupImportDirective */ || this.tokenOrKeywordIsPackageImportListChild(tokenOrKeyword)) {
1281
1308
  return new PackageImportCompletionContext([], void 0);
1282
1309
  }
1283
1310
  if (tokenOrKeyword.isToken(34 /* Dot */) && tokenOrKeyword.parent.kind === 72 /* MemberAccessExpression */) {
@@ -1738,7 +1765,7 @@ var CompletionServiceA = class {
1738
1765
  return false;
1739
1766
  }
1740
1767
  const tokenOrKeyword = positionDescription.tokenOrKeyword;
1741
- return tokenOrKeyword.isToken(51 /* OpenParenthesis */) && tokenOrKeyword.parent.kind === 151 /* Modifier */;
1768
+ return tokenOrKeyword.isToken(50 /* OpenParenthesis */) && tokenOrKeyword.parent.kind === 151 /* Modifier */;
1742
1769
  }
1743
1770
  isElseOrElseIfKeywordContext(positionDescription) {
1744
1771
  if (positionDescription.kind !== "after-token-or-keyword") {
@@ -2543,7 +2570,7 @@ var VariableEntityCompletionItemInfo = class {
2543
2570
  case "package":
2544
2571
  return 7 /* PackageVariable */;
2545
2572
  case "field":
2546
- return this.entity.isVariant() ? 12 /* VariantValue */ : 2 /* Field */;
2573
+ return this.entity.isVariantValue() ? 12 /* VariantValue */ : 2 /* Field */;
2547
2574
  case "parameter":
2548
2575
  return 10 /* Parameter */;
2549
2576
  case "local":
@@ -3121,7 +3148,7 @@ var SyntaxContextFactory = class {
3121
3148
  isStatementContext: false
3122
3149
  };
3123
3150
  }
3124
- if (tokenOrKeyword.isToken(50 /* OpenBrace */) && (tokenOrKeyword.parent.kind === 91 /* StatementBlock */ || tokenOrKeyword.parent.kind === 92 /* FunctionBlock */)) {
3151
+ if (tokenOrKeyword.isToken(49 /* OpenBrace */) && (tokenOrKeyword.parent.kind === 91 /* StatementBlock */ || tokenOrKeyword.parent.kind === 92 /* FunctionBlock */)) {
3125
3152
  return {
3126
3153
  expressionContext: { expressionRole: new ExpressionRole_other(void 0) },
3127
3154
  isStatementContext: true
@@ -3130,7 +3157,7 @@ var SyntaxContextFactory = class {
3130
3157
  if (tokenOrKeyword.isToken(58 /* Semicolon */) && tokenOrKeyword.parent.kind === 90 /* StatementList */) {
3131
3158
  return { expressionContext: { expressionRole: new ExpressionRole_other(void 0) }, isStatementContext: true };
3132
3159
  }
3133
- if (tokenOrKeyword.isToken(51 /* OpenParenthesis */)) {
3160
+ if (tokenOrKeyword.isToken(50 /* OpenParenthesis */)) {
3134
3161
  if (tokenOrKeyword.parent.kind === 69 /* ParenthesizedExpression */) {
3135
3162
  const expressionRole = new ExpressionRole_other(tokenOrKeyword.parent.expression);
3136
3163
  return { expressionContext: { expressionRole }, isStatementContext: false };
@@ -3163,11 +3190,11 @@ var SyntaxContextFactory = class {
3163
3190
  return { expressionContext: { expressionRole }, isStatementContext: false };
3164
3191
  }
3165
3192
  }
3166
- if (tokenOrKeyword.isToken(52 /* OpenSquareBracket */) && tokenOrKeyword.parent.kind === 66 /* IndexedAccessExpression */) {
3193
+ if (tokenOrKeyword.isToken(51 /* OpenSquareBracket */) && tokenOrKeyword.parent.kind === 66 /* IndexedAccessExpression */) {
3167
3194
  const expressionRole = new ExpressionRole_argument(tokenOrKeyword.parent.argumentList, 0);
3168
3195
  return { expressionContext: { expressionRole }, isStatementContext: false };
3169
3196
  }
3170
- if (tokenOrKeyword.isToken(52 /* OpenSquareBracket */) && tokenOrKeyword.parent.kind === 55 /* ArrayLiteral */) {
3197
+ if (tokenOrKeyword.isToken(51 /* OpenSquareBracket */) && tokenOrKeyword.parent.kind === 55 /* ArrayLiteral */) {
3171
3198
  const expressionRole = new ExpressionRole_arrayElement(tokenOrKeyword.parent);
3172
3199
  return { expressionContext: { expressionRole }, isStatementContext: false };
3173
3200
  }
@@ -3285,7 +3312,7 @@ var SyntaxContextFactory = class {
3285
3312
  if (tokenOrKeyword.isToken(28 /* CloseBrace */) && (tokenOrKeyword.parent.kind === 120 /* TranslationsDeclaration */ || tokenOrKeyword.parent.kind === 20 /* PackageMemberGroupDeclaration */ || tokenOrKeyword.parent.kind === 6 /* PackageGroupImportDirective */ || tokenOrKeyword.parent.kind === 92 /* FunctionBlock */ && (tokenOrKeyword.parent.parent.kind === 21 /* PackageConstructorDeclaration */ || tokenOrKeyword.parent.parent.kind === 22 /* PackageEntryPointDeclaration */ || tokenOrKeyword.parent.parent.kind === 23 /* PackageFunctionDeclaration */))) {
3286
3313
  return true;
3287
3314
  }
3288
- if (tokenOrKeyword.isToken(50 /* OpenBrace */) && tokenOrKeyword.parent.kind === 20 /* PackageMemberGroupDeclaration */) {
3315
+ if (tokenOrKeyword.isToken(49 /* OpenBrace */) && tokenOrKeyword.parent.kind === 20 /* PackageMemberGroupDeclaration */) {
3289
3316
  return true;
3290
3317
  }
3291
3318
  if (this.packageDeclarations.some((kind) => SyntaxContextUtils.tokenOrKeywordIsValidEndOfNode(tokenOrKeyword, kind))) {
@@ -3322,7 +3349,7 @@ var SyntaxContextFactory = class {
3322
3349
  if (tokenOrKeyword.isToken(58 /* Semicolon */) && tokenOrKeyword.parent.kind === 25 /* TypeMemberDeclarationList */) {
3323
3350
  return true;
3324
3351
  }
3325
- if (tokenOrKeyword.isToken(50 /* OpenBrace */) && tokenOrKeyword.parent.kind === 26 /* TypeMemberDeclarationBlock */) {
3352
+ if (tokenOrKeyword.isToken(49 /* OpenBrace */) && tokenOrKeyword.parent.kind === 26 /* TypeMemberDeclarationBlock */) {
3326
3353
  return true;
3327
3354
  }
3328
3355
  if (tokenOrKeyword.isToken(28 /* CloseBrace */) && tokenOrKeyword.parent.kind === 26 /* TypeMemberDeclarationBlock */ && tokenOrKeyword.parent.parent.kind === 39 /* TypeMemberGroupDeclaration */) {
@@ -3387,7 +3414,7 @@ var SyntaxContextFactory = class {
3387
3414
  if (tokenOrKeyword.isKeyword(6 /* ExtensionTo */) && tokenOrKeyword.parent.kind === 35 /* TypeExtensionDeclaration */) {
3388
3415
  return { allowsAnonymousTypes: false };
3389
3416
  }
3390
- if (tokenOrKeyword.isToken(43 /* LessThan */) && tokenOrKeyword.parent.kind === 154 /* TypeArgumentClause */) {
3417
+ if (tokenOrKeyword.isToken(44 /* LessThan */) && tokenOrKeyword.parent.kind === 154 /* TypeArgumentClause */) {
3391
3418
  return { allowsAnonymousTypes: true };
3392
3419
  }
3393
3420
  if (tokenOrKeyword.isToken(32 /* Comma */) && (tokenOrKeyword.parent.kind === 24 /* BaseTypeList */ || tokenOrKeyword.parent.kind === 155 /* TypeArgumentList */)) {
@@ -3411,7 +3438,7 @@ var SyntaxContextFactory = class {
3411
3438
  if (tokenOrKeyword.isToken(10 /* Ampersand */) && tokenOrKeyword.parent.kind === 12 /* IntersectionTypeSpecifier */) {
3412
3439
  return { allowsAnonymousTypes: false };
3413
3440
  }
3414
- if (tokenOrKeyword.isToken(51 /* OpenParenthesis */) && tokenOrKeyword.parent.kind === 13 /* ParenthesizedTypeSpecifier */) {
3441
+ if (tokenOrKeyword.isToken(50 /* OpenParenthesis */) && tokenOrKeyword.parent.kind === 13 /* ParenthesizedTypeSpecifier */) {
3415
3442
  return { allowsAnonymousTypes: true };
3416
3443
  }
3417
3444
  return void 0;
@@ -3420,7 +3447,7 @@ var SyntaxContextFactory = class {
3420
3447
  if (tokenOrKeyword.isToken(58 /* Semicolon */) && tokenOrKeyword.parent.kind === 121 /* TopLevelTranslationList */) {
3421
3448
  return { translationsDeclaration: tokenOrKeyword.parent.parent };
3422
3449
  }
3423
- if (tokenOrKeyword.isToken(50 /* OpenBrace */) && tokenOrKeyword.parent.kind === 120 /* TranslationsDeclaration */) {
3450
+ if (tokenOrKeyword.isToken(49 /* OpenBrace */) && tokenOrKeyword.parent.kind === 120 /* TranslationsDeclaration */) {
3424
3451
  return { translationsDeclaration: tokenOrKeyword.parent };
3425
3452
  }
3426
3453
  const type = SyntaxContextUtils.ifTokenIsValidEndOfNodeThenNode(
@@ -3457,7 +3484,7 @@ var SyntaxContextFactory = class {
3457
3484
  if (tokenOrKeyword.isToken(58 /* Semicolon */) && tokenOrKeyword.parent.kind === 135 /* TypeMemberTranslationList */) {
3458
3485
  return { typeTranslation: tokenOrKeyword.parent.parent };
3459
3486
  }
3460
- if (tokenOrKeyword.isToken(50 /* OpenBrace */) && tokenOrKeyword.parent.kind === 136 /* TypeTranslationDeclaration */) {
3487
+ if (tokenOrKeyword.isToken(49 /* OpenBrace */) && tokenOrKeyword.parent.kind === 136 /* TypeTranslationDeclaration */) {
3461
3488
  return { typeTranslation: tokenOrKeyword.parent };
3462
3489
  }
3463
3490
  const indexer = SyntaxContextUtils.ifTokenIsValidEndOfNodeThenNode(tokenOrKeyword, 126 /* IndexerTranslation */);
@@ -3702,7 +3729,7 @@ var NodeSemanticInfoServiceA = class {
3702
3729
  return this.ofDefaultMatchExpression(analyzer, tokenOrKeyword.parent);
3703
3730
  } else if (tokenOrKeyword.isKeyword(16 /* Function */) && tokenOrKeyword.parent.kind === 61 /* FunctionLiteral */) {
3704
3731
  return this.ofRegularOrBlockFunctionLiteral(analyzer, tokenOrKeyword.parent);
3705
- } else if (tokenOrKeyword.isToken(50 /* OpenBrace */) && tokenOrKeyword.parent.kind === 92 /* FunctionBlock */ && tokenOrKeyword.parent.parent.kind === 62 /* FunctionBlockLiteral */) {
3732
+ } else if (tokenOrKeyword.isToken(49 /* OpenBrace */) && tokenOrKeyword.parent.kind === 92 /* FunctionBlock */ && tokenOrKeyword.parent.parent.kind === 62 /* FunctionBlockLiteral */) {
3706
3733
  return this.ofRegularOrBlockFunctionLiteral(analyzer, tokenOrKeyword.parent.parent);
3707
3734
  } else if (tokenOrKeyword.isKeyword(35 /* Creation */) && tokenOrKeyword.parent.kind === 88 /* OwnConstructorCallExpression */) {
3708
3735
  return this.ofOwnConstructorCallExpression(analyzer, tokenOrKeyword.parent, options7);
@@ -3710,19 +3737,19 @@ var NodeSemanticInfoServiceA = class {
3710
3737
  return this.ofObjectExpression(analyzer, tokenOrKeyword.parent, options7);
3711
3738
  } else if (tokenOrKeyword.isKeyword(60 /* Base */) && tokenOrKeyword.parent.kind === 84 /* BaseExpression */) {
3712
3739
  return this.ofBaseExpression(analyzer, tokenOrKeyword.parent, options7);
3713
- } else if ((tokenOrKeyword.isToken(52 /* OpenSquareBracket */) || tokenOrKeyword.isToken(30 /* CloseSquareBracket */)) && tokenOrKeyword.parent.kind === 44 /* IndexParameterClause */) {
3740
+ } else if ((tokenOrKeyword.isToken(51 /* OpenSquareBracket */) || tokenOrKeyword.isToken(30 /* CloseSquareBracket */)) && tokenOrKeyword.parent.kind === 44 /* IndexParameterClause */) {
3714
3741
  return this.ofIndexedElementAccessorDeclaration(analyzer, tokenOrKeyword.parent.parent);
3715
- } else if ((tokenOrKeyword.isToken(52 /* OpenSquareBracket */) || tokenOrKeyword.isToken(30 /* CloseSquareBracket */)) && tokenOrKeyword.parent.kind === 66 /* IndexedAccessExpression */) {
3742
+ } else if ((tokenOrKeyword.isToken(51 /* OpenSquareBracket */) || tokenOrKeyword.isToken(30 /* CloseSquareBracket */)) && tokenOrKeyword.parent.kind === 66 /* IndexedAccessExpression */) {
3716
3743
  return this.ofIndexedAccessExpressionOperator(analyzer, tokenOrKeyword.parent, options7);
3717
3744
  } else if (tokenOrKeyword.isKeyword(35 /* Creation */) && tokenOrKeyword.parent.kind === 124 /* ConstructorTranslation */) {
3718
3745
  return this.ofConstructorTranslationSourceConstructor(analyzer, tokenOrKeyword.parent, options7);
3719
3746
  } else if (tokenOrKeyword.isKeyword(7 /* Object */) && tokenOrKeyword.parent.kind === 146 /* ParameterDeclaration */) {
3720
3747
  return this.ofObjectParameterDeclaration(analyzer, tokenOrKeyword.parent, tokenOrKeyword.value);
3721
- } else if ((tokenOrKeyword.isToken(51 /* OpenParenthesis */) || tokenOrKeyword.isToken(29 /* CloseParenthesis */)) && tokenOrKeyword.parent.kind === 123 /* TranslationParameterClause */ && tokenOrKeyword.parent.parent.kind === 124 /* ConstructorTranslation */ && tokenOrKeyword.parent.parent.translatedParameterClause === tokenOrKeyword.parent) {
3748
+ } else if ((tokenOrKeyword.isToken(50 /* OpenParenthesis */) || tokenOrKeyword.isToken(29 /* CloseParenthesis */)) && tokenOrKeyword.parent.kind === 123 /* TranslationParameterClause */ && tokenOrKeyword.parent.parent.kind === 124 /* ConstructorTranslation */ && tokenOrKeyword.parent.parent.translatedParameterClause === tokenOrKeyword.parent) {
3722
3749
  return this.ofConstructorTranslationTranslatedConstructor(analyzer, tokenOrKeyword.parent.parent, options7);
3723
- } else if ((tokenOrKeyword.isToken(52 /* OpenSquareBracket */) || tokenOrKeyword.isToken(30 /* CloseSquareBracket */)) && tokenOrKeyword.parent.kind === 125 /* IndexParameterTranslationClause */ && tokenOrKeyword.parent.parent.kind === 126 /* IndexerTranslation */ && tokenOrKeyword.parent.parent.sourceParameterClause === tokenOrKeyword.parent) {
3750
+ } else if ((tokenOrKeyword.isToken(51 /* OpenSquareBracket */) || tokenOrKeyword.isToken(30 /* CloseSquareBracket */)) && tokenOrKeyword.parent.kind === 125 /* IndexParameterTranslationClause */ && tokenOrKeyword.parent.parent.kind === 126 /* IndexerTranslation */ && tokenOrKeyword.parent.parent.sourceParameterClause === tokenOrKeyword.parent) {
3724
3751
  return this.ofIndexerTranslationSourceIndexer(analyzer, tokenOrKeyword.parent.parent, options7);
3725
- } else if ((tokenOrKeyword.isToken(52 /* OpenSquareBracket */) || tokenOrKeyword.isToken(30 /* CloseSquareBracket */)) && tokenOrKeyword.parent.kind === 125 /* IndexParameterTranslationClause */ && tokenOrKeyword.parent.parent.kind === 126 /* IndexerTranslation */ && tokenOrKeyword.parent.parent.translatedParameterClause === tokenOrKeyword.parent) {
3752
+ } else if ((tokenOrKeyword.isToken(51 /* OpenSquareBracket */) || tokenOrKeyword.isToken(30 /* CloseSquareBracket */)) && tokenOrKeyword.parent.kind === 125 /* IndexParameterTranslationClause */ && tokenOrKeyword.parent.parent.kind === 126 /* IndexerTranslation */ && tokenOrKeyword.parent.parent.translatedParameterClause === tokenOrKeyword.parent) {
3726
3753
  return this.ofIndexerTranslationTranslatedIndexer(analyzer, tokenOrKeyword.parent.parent, options7);
3727
3754
  }
3728
3755
  return void 0;
@@ -4826,11 +4853,44 @@ function getEntitySourceLocations(analyzer, entity) {
4826
4853
  } else if (entity.kind === 3 /* Indexer */) {
4827
4854
  const definition = entity.getDefinition();
4828
4855
  if (definition.kind === 0 /* Source */) {
4829
- result = definition.nodes.map((d) => {
4830
- const range = d.parameterClause.rangeWithoutTrivia;
4831
- const sourceFile = analyzer.getProjectSourceFile(d.sourceFile);
4832
- return new SourceLocation(sourceFile, range);
4833
- });
4856
+ const result2 = [];
4857
+ for (const node of definition.nodes) {
4858
+ switch (node.kind) {
4859
+ case 42 /* IndexedElementGetterDeclaration */: {
4860
+ const range = node.parameterClause.rangeWithoutTrivia;
4861
+ const sourceFile = analyzer.getProjectSourceFile(node.sourceFile);
4862
+ result2.push(new SourceLocation(sourceFile, range));
4863
+ break;
4864
+ }
4865
+ case 43 /* IndexedElementSetterDeclaration */: {
4866
+ const range = node.parameterClause.rangeWithoutTrivia;
4867
+ const sourceFile = analyzer.getProjectSourceFile(node.sourceFile);
4868
+ result2.push(new SourceLocation(sourceFile, range));
4869
+ break;
4870
+ }
4871
+ case 1045 /* IndexedElementGetterDeclaration */: {
4872
+ const range = new Range(
4873
+ node.openSquareBracketToken.rangeWithoutTrivia.start,
4874
+ node.openSquareBracketToken.rangeWithoutTrivia.end
4875
+ );
4876
+ const sourceFile = analyzer.getProjectSourceFile(node.sourceFile);
4877
+ result2.push(new SourceLocation(sourceFile, range));
4878
+ break;
4879
+ }
4880
+ case 1047 /* IndexedElementSetterDeclaration */: {
4881
+ const range = new Range(
4882
+ node.openSquareBracketToken.rangeWithoutTrivia.start,
4883
+ node.equalsToken.rangeWithoutTrivia.end
4884
+ );
4885
+ const sourceFile = analyzer.getProjectSourceFile(node.sourceFile);
4886
+ result2.push(new SourceLocation(sourceFile, range));
4887
+ break;
4888
+ }
4889
+ default:
4890
+ Debug.never(node);
4891
+ }
4892
+ }
4893
+ return result2;
4834
4894
  }
4835
4895
  } else if (entity.kind === 4 /* DereferenceOperator */) {
4836
4896
  const definition = entity.getDefinition();
@@ -4934,14 +4994,20 @@ function getEntitySourceLocations(analyzer, entity) {
4934
4994
  range = node.varKeyword.rangeWithoutTrivia;
4935
4995
  break;
4936
4996
  case 1030 /* FieldGetterDeclaration */:
4937
- case 1032 /* FieldSetterDeclaration */:
4997
+ case 1031 /* FieldSetterDeclaration */:
4938
4998
  range = node.varKeyword.rangeWithoutTrivia;
4939
4999
  break;
4940
- case 1046 /* IndexedElementGetterDeclaration */:
4941
- range = node.parameterClause.rangeWithoutTrivia;
5000
+ case 1045 /* IndexedElementGetterDeclaration */:
5001
+ range = new Range(
5002
+ node.openSquareBracketToken.rangeWithoutTrivia.start,
5003
+ node.openSquareBracketToken.rangeWithoutTrivia.end
5004
+ );
4942
5005
  break;
4943
5006
  case 1047 /* IndexedElementSetterDeclaration */:
4944
- range = node.parameterClause.rangeWithoutTrivia;
5007
+ range = new Range(
5008
+ node.openSquareBracketToken.rangeWithoutTrivia.start,
5009
+ node.equalsToken.rangeWithoutTrivia.end
5010
+ );
4945
5011
  break;
4946
5012
  case 1038 /* FunctionLiteral */:
4947
5013
  range = node.functionKeyword.rangeWithoutTrivia;
@@ -5250,7 +5316,7 @@ var DefinitionServiceA = class extends DefinitionService {
5250
5316
  const tokenOrKeyword = getTokenOrKeywordsTouchingOffset(sourceFile.getSyntaxNode(), offset).getSingleWithHighestPriority((t) => {
5251
5317
  if (t.isToken(9 /* Identifier */) || t.isKeyword()) {
5252
5318
  return 2;
5253
- } else if (t.isToken(27 /* Caret */) || t.isToken(52 /* OpenSquareBracket */) || t.isToken(30 /* CloseSquareBracket */)) {
5319
+ } else if (t.isToken(27 /* Caret */) || t.isToken(51 /* OpenSquareBracket */) || t.isToken(30 /* CloseSquareBracket */)) {
5254
5320
  return 1;
5255
5321
  } else {
5256
5322
  return 0;
@@ -5543,7 +5609,7 @@ var HoverServiceA = class extends HoverService {
5543
5609
  return 2;
5544
5610
  } else if (t.isToken(13 /* Asterisk */)) {
5545
5611
  return 1;
5546
- } else if (t.isToken(27 /* Caret */) || t.isToken(52 /* OpenSquareBracket */) || t.isToken(30 /* CloseSquareBracket */) || t.isToken(50 /* OpenBrace */)) {
5612
+ } else if (t.isToken(27 /* Caret */) || t.isToken(51 /* OpenSquareBracket */) || t.isToken(30 /* CloseSquareBracket */) || t.isToken(49 /* OpenBrace */)) {
5547
5613
  return 1;
5548
5614
  } else {
5549
5615
  return 0;
@@ -5663,7 +5729,7 @@ var DefinitionInfoFinderA = class {
5663
5729
  const tokenOrKeyword = getTokenOrKeywordsTouchingOffset(sourceFile.getSyntaxNode(), offset).getSingleWithHighestPriority((t) => {
5664
5730
  if (t.isToken(9 /* Identifier */) || t.isKeyword()) {
5665
5731
  return 2;
5666
- } else if (t.isToken(27 /* Caret */) || t.isToken(52 /* OpenSquareBracket */) || t.isToken(30 /* CloseSquareBracket */)) {
5732
+ } else if (t.isToken(27 /* Caret */) || t.isToken(51 /* OpenSquareBracket */) || t.isToken(30 /* CloseSquareBracket */)) {
5667
5733
  return 1;
5668
5734
  } else {
5669
5735
  return 0;
@@ -5701,17 +5767,6 @@ var DefinitionInfoFinderA = class {
5701
5767
  // source/services/m/NodeSemanticInfo.ts
5702
5768
  var NodeSemanticInfoServiceM = class {
5703
5769
  static ofTokenOrKeyword(analyzer, tokenOrKeyword, options7) {
5704
- const parent = tokenOrKeyword.value.parent;
5705
- if (parent.kind === 1062 /* MethodDeclaration */) {
5706
- if (tokenOrKeyword.value === parent.name) {
5707
- return new DefinitionNodeSemanticInfo(analyzer.entity.ofMethodDeclaration(parent));
5708
- }
5709
- }
5710
- if (parent.kind === 1046 /* IndexedElementGetterDeclaration */ || parent.kind === 1047 /* IndexedElementSetterDeclaration */) {
5711
- if (tokenOrKeyword.value === parent.openSquareBracketToken || tokenOrKeyword.value === parent.closeSquareBracketToken) {
5712
- return new DefinitionNodeSemanticInfo(analyzer.entity.ofIndexerDeclaration(parent));
5713
- }
5714
- }
5715
5770
  if (isIdentifier2(tokenOrKeyword.value)) {
5716
5771
  return this.ofNonKeywordIdentifier(analyzer, tokenOrKeyword.value, options7);
5717
5772
  } else if (tokenOrKeyword.parent.kind === 1095 /* PrefixUnaryExpression */) {
@@ -5724,20 +5779,28 @@ var NodeSemanticInfoServiceM = class {
5724
5779
  return this.ofDefaultMatchExpression(analyzer, tokenOrKeyword.parent);
5725
5780
  } else if (tokenOrKeyword.isKeyword(1017 /* Function */) && tokenOrKeyword.parent.kind === 1038 /* FunctionLiteral */) {
5726
5781
  return this.ofRegularOrBlockFunctionLiteral(analyzer, tokenOrKeyword.parent);
5727
- } else if (tokenOrKeyword.isToken(1047 /* OpenBrace */) && tokenOrKeyword.parent.kind === 1036 /* FunctionBlock */ && tokenOrKeyword.parent.parent.kind === 1037 /* FunctionBlockLiteral */) {
5782
+ } else if (tokenOrKeyword.isToken(1046 /* OpenBrace */) && tokenOrKeyword.parent.kind === 1036 /* FunctionBlock */ && tokenOrKeyword.parent.parent.kind === 1037 /* FunctionBlockLiteral */) {
5728
5783
  return this.ofRegularOrBlockFunctionLiteral(analyzer, tokenOrKeyword.parent.parent);
5729
5784
  } else if (tokenOrKeyword.isKeyword(1025 /* Object */) && tokenOrKeyword.parent.kind === 1073 /* ObjectExpression */) {
5730
5785
  return this.ofObjectExpression(analyzer, tokenOrKeyword.parent, options7);
5731
5786
  } else if (tokenOrKeyword.isKeyword(1002 /* Base */) && tokenOrKeyword.parent.kind === 1009 /* BaseExpression */) {
5732
5787
  return this.ofBaseExpression(analyzer, tokenOrKeyword.parent, options7);
5733
- } else if ((tokenOrKeyword.isToken(1049 /* OpenSquareBracket */) || tokenOrKeyword.isToken(1022 /* CloseSquareBracket */)) && tokenOrKeyword.parent.kind === 1045 /* IndexedAccessExpression */) {
5788
+ } else if ((tokenOrKeyword.isToken(1048 /* OpenSquareBracket */) || tokenOrKeyword.isToken(1022 /* CloseSquareBracket */)) && tokenOrKeyword.parent.kind === 1044 /* IndexedAccessExpression */) {
5734
5789
  return this.ofIndexedAccessExpressionOperator(analyzer, tokenOrKeyword.parent, options7);
5735
5790
  } else if (tokenOrKeyword.isKeyword(1025 /* Object */) && tokenOrKeyword.parent.kind === 1091 /* ParameterDeclaration */) {
5736
5791
  return this.ofObjectParameterDeclaration(analyzer, tokenOrKeyword.parent, tokenOrKeyword.value);
5737
- } else if ((tokenOrKeyword.isToken(1049 /* OpenSquareBracket */) || tokenOrKeyword.isToken(1022 /* CloseSquareBracket */)) && tokenOrKeyword.parent.kind === 1044 /* IndexParameterTranslationClause */ && tokenOrKeyword.parent.parent.kind === 1048 /* IndexerTranslation */ && tokenOrKeyword.parent.parent.sourceParameterClause === tokenOrKeyword.parent) {
5738
- return this.ofIndexerTranslationSourceIndexer(analyzer, tokenOrKeyword.parent.parent, options7);
5739
- } else if ((tokenOrKeyword.isToken(1049 /* OpenSquareBracket */) || tokenOrKeyword.isToken(1022 /* CloseSquareBracket */)) && tokenOrKeyword.parent.kind === 1044 /* IndexParameterTranslationClause */ && tokenOrKeyword.parent.parent.kind === 1048 /* IndexerTranslation */ && tokenOrKeyword.parent.parent.translatedParameterClause === tokenOrKeyword.parent) {
5740
- return this.ofIndexerTranslationTranslatedIndexer(analyzer, tokenOrKeyword.parent.parent, options7);
5792
+ } else if (tokenOrKeyword.parent.kind === 1062 /* MethodDeclaration */ && tokenOrKeyword.value === tokenOrKeyword.parent.name) {
5793
+ return this.ofOperatorDeclaration(analyzer, tokenOrKeyword.parent);
5794
+ } else if (tokenOrKeyword.parent.kind === 1063 /* MethodTranslation */ && tokenOrKeyword.value === tokenOrKeyword.parent.sourceName) {
5795
+ return this.ofOperatorTranslationSourceOperator(analyzer, tokenOrKeyword.parent, options7);
5796
+ } else if (tokenOrKeyword.parent.kind === 1063 /* MethodTranslation */ && tokenOrKeyword.value === tokenOrKeyword.parent.translatedName) {
5797
+ return this.ofOperatorTranslationTranslatedOperator(analyzer, tokenOrKeyword.parent, options7);
5798
+ } else if (tokenOrKeyword.parent.kind === 1045 /* IndexedElementGetterDeclaration */ && (tokenOrKeyword.value === tokenOrKeyword.parent.openSquareBracketToken || tokenOrKeyword.value === tokenOrKeyword.parent.closeSquareBracketToken) || tokenOrKeyword.parent.kind === 1047 /* IndexedElementSetterDeclaration */ && (tokenOrKeyword.value === tokenOrKeyword.parent.openSquareBracketToken || tokenOrKeyword.value === tokenOrKeyword.parent.closeSquareBracketToken || tokenOrKeyword.value === tokenOrKeyword.parent.equalsToken)) {
5799
+ return this.ofIndexerDeclaration(analyzer, tokenOrKeyword.parent);
5800
+ } else if (tokenOrKeyword.parent.kind === 1046 /* IndexedElementGetterTranslation */ && (tokenOrKeyword.value === tokenOrKeyword.parent.sourceOpenSquareBracketToken || tokenOrKeyword.value === tokenOrKeyword.parent.sourceCloseSquareBracketToken) || tokenOrKeyword.parent.kind === 1048 /* IndexedElementSetterTranslation */ && (tokenOrKeyword.value === tokenOrKeyword.parent.sourceOpenSquareBracketToken || tokenOrKeyword.value === tokenOrKeyword.parent.sourceCloseSquareBracketToken || tokenOrKeyword.value === tokenOrKeyword.parent.sourceEqualsToken)) {
5801
+ return this.ofIndexerTranslationSourceIndexer(analyzer, tokenOrKeyword.parent, options7);
5802
+ } else if (tokenOrKeyword.parent.kind === 1046 /* IndexedElementGetterTranslation */ && (tokenOrKeyword.value === tokenOrKeyword.parent.translatedOpenSquareBracketToken || tokenOrKeyword.value === tokenOrKeyword.parent.translatedCloseSquareBracketToken) || tokenOrKeyword.parent.kind === 1048 /* IndexedElementSetterTranslation */ && (tokenOrKeyword.value === tokenOrKeyword.parent.translatedOpenSquareBracketToken || tokenOrKeyword.value === tokenOrKeyword.parent.translatedCloseSquareBracketToken || tokenOrKeyword.value === tokenOrKeyword.parent.translatedEqualsToken)) {
5803
+ return this.ofIndexerTranslationTranslatedIndexer(analyzer, tokenOrKeyword.parent, options7);
5741
5804
  }
5742
5805
  return void 0;
5743
5806
  }
@@ -5824,7 +5887,8 @@ var NodeSemanticInfoServiceM = class {
5824
5887
  }
5825
5888
  break;
5826
5889
  }
5827
- case 1031 /* FieldOrVariantTranslation */:
5890
+ case 1032 /* FieldTranslation */:
5891
+ case 1145 /* VariantValueTranslation */:
5828
5892
  case 1063 /* MethodTranslation */: {
5829
5893
  const translationPackage = this.getResolvedContainingTranslationPackage(analyzer, node);
5830
5894
  const translationTargets = translationPackage?.getTypeMemberTranslationTargets(parent);
@@ -5877,7 +5941,7 @@ var NodeSemanticInfoServiceM = class {
5877
5941
  result = new DefinitionNodeSemanticInfo(analyzer.entity.ofComputedPackageVariableDeclaration(parent));
5878
5942
  break;
5879
5943
  case 1030 /* FieldGetterDeclaration */:
5880
- case 1032 /* FieldSetterDeclaration */:
5944
+ case 1031 /* FieldSetterDeclaration */:
5881
5945
  result = new DefinitionNodeSemanticInfo(analyzer.entity.ofComputedFieldDeclaration(parent));
5882
5946
  break;
5883
5947
  case 1122 /* TranslationTextTemplateParameter */:
@@ -6380,10 +6444,6 @@ var NodeSemanticInfoServiceM = class {
6380
6444
  }
6381
6445
  return result;
6382
6446
  }
6383
- static ofIndexedElementAccessorDeclaration(analyzer, node) {
6384
- const entity = analyzer.entity.ofIndexerDeclaration(node);
6385
- return new DefinitionNodeSemanticInfo(entity);
6386
- }
6387
6447
  static ofIndexedAccessExpressionOperator(analyzer, node, options7) {
6388
6448
  const meaning = analyzer.resolveIndexedAccessExpression(node);
6389
6449
  if (meaning.kind === "resolved") {
@@ -6496,6 +6556,44 @@ var NodeSemanticInfoServiceM = class {
6496
6556
  }
6497
6557
  return result;
6498
6558
  }
6559
+ static ofOperatorDeclaration(analyzer, node) {
6560
+ return new DefinitionNodeSemanticInfo(analyzer.entity.ofMethodDeclaration(node));
6561
+ }
6562
+ static ofOperatorTranslationSourceOperator(analyzer, node, options7) {
6563
+ let result = void 0;
6564
+ const translationPackage = this.getResolvedContainingTranslationPackage(analyzer, node);
6565
+ const translationTargets = translationPackage?.getTypeMemberTranslationTargets(node);
6566
+ if (translationTargets !== void 0 && translationTargets.values.length > 0) {
6567
+ const targets = translationTargets.values.map((t) => new EntityReferenceTarget(t, 0 /* Get */));
6568
+ result = new ReferenceNodeSemanticInfo(createNonEmptyArray(targets), !translationTargets.areSuitable);
6569
+ if (options7.includeBetterReferenceTargets) {
6570
+ result = this.getBetterReferenceTargetsOrPreserve(result);
6571
+ }
6572
+ }
6573
+ return result;
6574
+ }
6575
+ static ofOperatorTranslationTranslatedOperator(analyzer, node, options7) {
6576
+ let result = void 0;
6577
+ const translationPackage = this.getResolvedContainingTranslationPackage(analyzer, node);
6578
+ const translationTargets = translationPackage?.getTypeMemberTranslationTargets(node);
6579
+ if (translationPackage !== void 0 && translationTargets !== void 0 && translationTargets.values.length > 0) {
6580
+ const targets = translationTargets.values.map((f) => new EntityReferenceTarget(
6581
+ translationPackage.localizationContext.getLocalizedTypeMemberEntity(f),
6582
+ 0 /* Get */
6583
+ ));
6584
+ result = new ReferenceNodeSemanticInfo(createNonEmptyArray(targets), !translationTargets.areSuitable);
6585
+ if (options7.includeBetterReferenceTargets) {
6586
+ result = this.getBetterReferenceTargetsOrPreserve(result);
6587
+ }
6588
+ }
6589
+ return result;
6590
+ }
6591
+ static ofIndexerDeclaration(analyzer, node) {
6592
+ return new DefinitionNodeSemanticInfo(analyzer.entity.ofIndexerDeclaration(node));
6593
+ }
6594
+ static ofIndexedElementAccessorDeclaration(analyzer, node) {
6595
+ return new DefinitionNodeSemanticInfo(analyzer.entity.ofIndexedElementAccessorDeclaration(node));
6596
+ }
6499
6597
  static ofIndexerTranslationSourceIndexer(analyzer, node, options7) {
6500
6598
  let result;
6501
6599
  const translationPackage = this.getResolvedContainingTranslationPackage(analyzer, node);
@@ -6514,8 +6612,8 @@ var NodeSemanticInfoServiceM = class {
6514
6612
  const translationPackage = this.getResolvedContainingTranslationPackage(analyzer, node);
6515
6613
  const translationTargets = translationPackage?.getTypeMemberTranslationTargets(node);
6516
6614
  if (translationPackage !== void 0 && translationTargets !== void 0 && translationTargets.values.length > 0) {
6517
- const targets = translationTargets.values.map((t) => new EntityReferenceTarget(
6518
- translationPackage.localizationContext.getLocalizedTypeMemberEntity(t),
6615
+ const targets = translationTargets.values.map((f) => new EntityReferenceTarget(
6616
+ translationPackage.localizationContext.getLocalizedTypeMemberEntity(f),
6519
6617
  0 /* Get */
6520
6618
  ));
6521
6619
  result = new ReferenceNodeSemanticInfo(createNonEmptyArray(targets), !translationTargets.areSuitable);
@@ -6630,7 +6728,8 @@ var NodeSemanticInfoServiceM = class {
6630
6728
  translationTargets = translationPackage.getPackageMemberTranslationTargets(translationDeclaration);
6631
6729
  break;
6632
6730
  case 1063 /* MethodTranslation */:
6633
- case 1048 /* IndexerTranslation */:
6731
+ case 1046 /* IndexedElementGetterTranslation */:
6732
+ case 1048 /* IndexedElementSetterTranslation */:
6634
6733
  translationTargets = translationPackage.getTypeMemberTranslationTargets(translationDeclaration);
6635
6734
  break;
6636
6735
  default:
@@ -6946,7 +7045,7 @@ var DefinitionInfoFinderM = class {
6946
7045
  const tokenOrKeyword = getTokenOrKeywordsTouchingOffset2(sourceFile.getSyntaxNode(), offset).getSingleWithHighestPriority((t) => {
6947
7046
  if (t.isToken(1037 /* Identifier */) || t.isKeyword()) {
6948
7047
  return 2;
6949
- } else if (t.isToken(1019 /* Caret */) || t.isToken(1049 /* OpenSquareBracket */) || t.isToken(1022 /* CloseSquareBracket */)) {
7048
+ } else if (t.isToken(1019 /* Caret */) || t.isToken(1048 /* OpenSquareBracket */) || t.isToken(1022 /* CloseSquareBracket */)) {
6950
7049
  return 1;
6951
7050
  } else {
6952
7051
  return 0;
@@ -7037,8 +7136,8 @@ var ReferencesFinder = class {
7037
7136
  return true;
7038
7137
  }
7039
7138
  if (this.isForRename) {
7040
- const entity1Translation = entity1.getTranslation();
7041
- const entity2Translation = entity2.getTranslation();
7139
+ const entity1Translation = entity1.translation;
7140
+ const entity2Translation = entity2.translation;
7042
7141
  if (entity1Translation !== void 0 && entity2Translation !== void 0 && entity1Translation.equals(entity2Translation)) {
7043
7142
  return true;
7044
7143
  }
@@ -7379,17 +7478,7 @@ var ReferencesFinderM = class extends ReferencesFinder {
7379
7478
  result.push(new Reference(sourceFile, node.keyword.rangeWithoutTrivia, referenceKind));
7380
7479
  }
7381
7480
  }
7382
- if ((node.kind === 1046 /* IndexedElementGetterDeclaration */ || node.kind === 1047 /* IndexedElementSetterDeclaration */) && this.restrictions.canBeIndexer) {
7383
- const semanticInfo = NodeSemanticInfoServiceM.ofIndexedElementAccessorDeclaration(
7384
- this.analyzer.dialectM,
7385
- node
7386
- );
7387
- const referenceKind = this.ifReferenceToSomeOfDefinitionsThenKind(semanticInfo);
7388
- if (referenceKind !== void 0) {
7389
- result.push(new Reference(sourceFile, node.parameterClause.rangeWithoutTrivia, referenceKind));
7390
- }
7391
- }
7392
- if (node.kind === 1045 /* IndexedAccessExpression */ && this.restrictions.canBeIndexer) {
7481
+ if (node.kind === 1044 /* IndexedAccessExpression */ && this.restrictions.canBeIndexer) {
7393
7482
  const semanticInfo = NodeSemanticInfoServiceM.ofIndexedAccessExpressionOperator(
7394
7483
  this.analyzer.dialectM,
7395
7484
  node,
@@ -7404,39 +7493,95 @@ var ReferencesFinderM = class extends ReferencesFinder {
7404
7493
  result.push(new Reference(sourceFile, range, referenceKind));
7405
7494
  }
7406
7495
  }
7407
- if (node.kind === 1048 /* IndexerTranslation */ && this.restrictions.canBeIndexer) {
7408
- {
7409
- const semanticInfo = NodeSemanticInfoServiceM.ofIndexerTranslationSourceIndexer(
7410
- this.analyzer.dialectM,
7411
- node,
7412
- semanticInfoOptions
7413
- );
7414
- const referenceKind = this.ifReferenceToSomeOfDefinitionsThenKind(semanticInfo);
7415
- if (referenceKind !== void 0) {
7416
- result.push(new Reference(sourceFile, node.sourceParameterClause.rangeWithoutTrivia, referenceKind));
7417
- }
7496
+ }
7497
+ if (node.kind === 1062 /* MethodDeclaration */) {
7498
+ const semanticInfo = NodeSemanticInfoServiceM.ofOperatorDeclaration(
7499
+ this.analyzer.dialectM,
7500
+ node
7501
+ );
7502
+ const referenceKind = this.ifReferenceToSomeOfDefinitionsThenKind(semanticInfo);
7503
+ if (referenceKind !== void 0) {
7504
+ result.push(new Reference(sourceFile, node.name.rangeWithoutTrivia, referenceKind));
7505
+ }
7506
+ }
7507
+ if (node.kind === 1063 /* MethodTranslation */) {
7508
+ {
7509
+ const semanticInfo = NodeSemanticInfoServiceM.ofOperatorTranslationSourceOperator(
7510
+ this.analyzer.dialectM,
7511
+ node,
7512
+ semanticInfoOptions
7513
+ );
7514
+ const referenceKind = this.ifReferenceToSomeOfDefinitionsThenKind(semanticInfo);
7515
+ if (referenceKind !== void 0) {
7516
+ result.push(new Reference(sourceFile, node.sourceName.rangeWithoutTrivia, referenceKind));
7418
7517
  }
7419
- {
7420
- const semanticInfo = NodeSemanticInfoServiceM.ofIndexerTranslationTranslatedIndexer(
7421
- this.analyzer.dialectM,
7422
- node,
7423
- semanticInfoOptions
7424
- );
7425
- const referenceKind = this.ifReferenceToSomeOfDefinitionsThenKind(semanticInfo);
7426
- if (referenceKind !== void 0) {
7427
- result.push(new Reference(
7428
- sourceFile,
7429
- node.translatedParameterClause.rangeWithoutTrivia,
7430
- referenceKind
7431
- ));
7432
- }
7518
+ }
7519
+ {
7520
+ const semanticInfo = NodeSemanticInfoServiceM.ofOperatorTranslationTranslatedOperator(
7521
+ this.analyzer.dialectM,
7522
+ node,
7523
+ semanticInfoOptions
7524
+ );
7525
+ const referenceKind = this.ifReferenceToSomeOfDefinitionsThenKind(semanticInfo);
7526
+ if (referenceKind !== void 0) {
7527
+ result.push(new Reference(sourceFile, node.translatedName.rangeWithoutTrivia, referenceKind));
7433
7528
  }
7434
7529
  }
7435
- if (node.kind === 1062 /* MethodDeclaration */) {
7436
- const semanticInfo = new DefinitionNodeSemanticInfo(this.analyzer.dialectM.entity.ofMethodDeclaration(node));
7530
+ }
7531
+ if (node.kind === 1045 /* IndexedElementGetterDeclaration */ || node.kind === 1047 /* IndexedElementSetterDeclaration */) {
7532
+ {
7533
+ const range = node.kind === 1045 /* IndexedElementGetterDeclaration */ ? new Range(
7534
+ node.openSquareBracketToken.rangeWithoutTrivia.start,
7535
+ node.closeSquareBracketToken.rangeWithoutTrivia.end
7536
+ ) : new Range(
7537
+ node.openSquareBracketToken.rangeWithoutTrivia.start,
7538
+ node.equalsToken.rangeWithoutTrivia.end
7539
+ );
7540
+ const semanticInfo = NodeSemanticInfoServiceM.ofIndexerDeclaration(
7541
+ this.analyzer.dialectM,
7542
+ node
7543
+ );
7437
7544
  const referenceKind = this.ifReferenceToSomeOfDefinitionsThenKind(semanticInfo);
7438
7545
  if (referenceKind !== void 0) {
7439
- result.push(new Reference(sourceFile, node.name.rangeWithoutTrivia, referenceKind));
7546
+ result.push(new Reference(sourceFile, range, referenceKind));
7547
+ }
7548
+ }
7549
+ }
7550
+ if (node.kind === 1046 /* IndexedElementGetterTranslation */ || node.kind === 1048 /* IndexedElementSetterTranslation */) {
7551
+ {
7552
+ const range = node.kind === 1046 /* IndexedElementGetterTranslation */ ? new Range(
7553
+ node.sourceOpenSquareBracketToken.rangeWithoutTrivia.start,
7554
+ node.sourceCloseSquareBracketToken.rangeWithoutTrivia.end
7555
+ ) : new Range(
7556
+ node.sourceOpenSquareBracketToken.rangeWithoutTrivia.start,
7557
+ node.sourceEqualsToken.rangeWithoutTrivia.end
7558
+ );
7559
+ const semanticInfo = NodeSemanticInfoServiceM.ofIndexerTranslationSourceIndexer(
7560
+ this.analyzer.dialectM,
7561
+ node,
7562
+ semanticInfoOptions
7563
+ );
7564
+ const referenceKind = this.ifReferenceToSomeOfDefinitionsThenKind(semanticInfo);
7565
+ if (referenceKind !== void 0) {
7566
+ result.push(new Reference(sourceFile, range, referenceKind));
7567
+ }
7568
+ }
7569
+ {
7570
+ const range = node.kind === 1046 /* IndexedElementGetterTranslation */ ? new Range(
7571
+ node.translatedOpenSquareBracketToken.rangeWithoutTrivia.start,
7572
+ node.translatedCloseSquareBracketToken.rangeWithoutTrivia.end
7573
+ ) : new Range(
7574
+ node.translatedOpenSquareBracketToken.rangeWithoutTrivia.start,
7575
+ node.translatedEqualsToken.rangeWithoutTrivia.end
7576
+ );
7577
+ const semanticInfo = NodeSemanticInfoServiceM.ofIndexerTranslationTranslatedIndexer(
7578
+ this.analyzer.dialectM,
7579
+ node,
7580
+ semanticInfoOptions
7581
+ );
7582
+ const referenceKind = this.ifReferenceToSomeOfDefinitionsThenKind(semanticInfo);
7583
+ if (referenceKind !== void 0) {
7584
+ result.push(new Reference(sourceFile, range, referenceKind));
7440
7585
  }
7441
7586
  }
7442
7587
  }
@@ -7944,7 +8089,7 @@ var SemanticTokensServiceA = class {
7944
8089
  const meaning = analyzer.resolveIdentifierExpression(node);
7945
8090
  if (meaning.kind === "variable-access") {
7946
8091
  const variable = meaning.variable.entity;
7947
- if (variable.subkind === "field" && variable.isVariant()) {
8092
+ if (variable.subkind === "field" && variable.isVariantValue()) {
7948
8093
  result.push(new SemanticToken(
7949
8094
  node.rangeWithoutTrivia,
7950
8095
  3 /* Variant */,
@@ -7991,7 +8136,7 @@ var SemanticTokensServiceA = class {
7991
8136
  const meaning = analyzer.resolveMemberAccessExpression(node);
7992
8137
  if (meaning.kind === "static-field-access") {
7993
8138
  const entity = meaning.field.entity;
7994
- if (entity.subkind === "field" && entity.isVariant()) {
8139
+ if (entity.subkind === "field" && entity.isVariantValue()) {
7995
8140
  result.push(
7996
8141
  new SemanticToken(
7997
8142
  node.memberName.rangeWithoutTrivia,
@@ -11467,7 +11612,7 @@ var EntityToSyntax = class {
11467
11612
  );
11468
11613
  }
11469
11614
  convertField(entity) {
11470
- if (entity.isVariant()) {
11615
+ if (entity.isVariantValue()) {
11471
11616
  return this.convertVariant(entity);
11472
11617
  }
11473
11618
  let result;
@@ -12046,7 +12191,7 @@ var SourceGenerationService = class extends RxObject7 {
12046
12191
  }
12047
12192
  getOrGeneratePackageSource(analyzer, packageEntity, taskController) {
12048
12193
  return __async(this, null, function* () {
12049
- const packageLocale = packageEntity.getLocale();
12194
+ const packageLocale = packageEntity.locale;
12050
12195
  const key = `${packageEntity.getName().toString()}-${localeToString(packageLocale)}`;
12051
12196
  let result = this.generatedPackageStates.get(key);
12052
12197
  if (result !== void 0 && result.originalPackageEntity !== packageEntity) {
@@ -12578,7 +12723,7 @@ var SourceFileItemsServiceM = class {
12578
12723
  ));
12579
12724
  break;
12580
12725
  }
12581
- case 1032 /* FieldSetterDeclaration */: {
12726
+ case 1031 /* FieldSetterDeclaration */: {
12582
12727
  result.push(this.createItem(
12583
12728
  16 /* FieldSetter */,
12584
12729
  node2.name.value,
@@ -12600,7 +12745,7 @@ var SourceFileItemsServiceM = class {
12600
12745
  }
12601
12746
  break;
12602
12747
  }
12603
- case 1046 /* IndexedElementGetterDeclaration */: {
12748
+ case 1045 /* IndexedElementGetterDeclaration */: {
12604
12749
  result.push(this.createItem(
12605
12750
  18 /* IndexedElementGetter */,
12606
12751
  void 0,
@@ -12873,10 +13018,33 @@ var TranslationsGenerator2 = class _TranslationsGenerator {
12873
13018
  );
12874
13019
  }
12875
13020
  }).join(`${newLine}${newLine}`);
12876
- const editRange = Range.empty(translationsDeclaration.openBraceToken.rangeWithoutTrivia.end);
12877
- let editText = newLine + memberTranslationsCode;
12878
- if (translationsDeclaration.translationList.translationDeclarations.count() > 0) {
12879
- editText += newLine;
13021
+ let editText;
13022
+ let editRange;
13023
+ if (translationsDeclaration.openBraceToken !== void 0) {
13024
+ Debug.assert(translationsDeclaration.closeBraceToken !== void 0);
13025
+ const translationsKeywordLine = this.sourceFile.getPositionAt(translationsDeclaration.translationsKeyword.rangeWithoutTrivia.start).line;
13026
+ const closeBraceTokenLine = this.sourceFile.getPositionAt(translationsDeclaration.closeBraceToken.rangeWithoutTrivia.start).line;
13027
+ if (translationsKeywordLine === closeBraceTokenLine) {
13028
+ editText = newLine + memberTranslationsCode + newLine;
13029
+ editRange = Range.empty(translationsDeclaration.closeBraceToken.rangeWithoutTrivia.start);
13030
+ } else {
13031
+ editText = newLine + memberTranslationsCode;
13032
+ editRange = Range.empty(translationsDeclaration.openBraceToken.rangeWithoutTrivia.end);
13033
+ }
13034
+ if (translationsDeclaration.translationList.translationDeclarations.count() > 0) {
13035
+ editText += newLine;
13036
+ }
13037
+ } else {
13038
+ Debug.assert(translationsDeclaration.endKeyword !== void 0);
13039
+ const translationsKeywordLine = this.sourceFile.getPositionAt(translationsDeclaration.translationsKeyword.rangeWithoutTrivia.start).line;
13040
+ const endKeywordLine = this.sourceFile.getPositionAt(translationsDeclaration.endKeyword.rangeWithoutTrivia.start).line;
13041
+ if (translationsKeywordLine === endKeywordLine) {
13042
+ editText = newLine + memberTranslationsCode + newLine;
13043
+ editRange = Range.empty(translationsDeclaration.endKeyword.rangeWithoutTrivia.start);
13044
+ } else {
13045
+ editText = this.hasAtLeastOneTranslatedPackageMember() ? newLine + memberTranslationsCode + newLine : newLine + memberTranslationsCode;
13046
+ editRange = Range.empty(translationsDeclaration.translationsKeyword.rangeWithoutTrivia.end);
13047
+ }
12880
13048
  }
12881
13049
  result.push(new SourceFileEdit(this.sourceFile, editRange, editText));
12882
13050
  }
@@ -12926,17 +13094,36 @@ var TranslationsGenerator2 = class _TranslationsGenerator {
12926
13094
  let editText;
12927
13095
  let editRange;
12928
13096
  if (typeTranslation.openBraceToken !== void 0) {
12929
- editRange = Range.empty(typeTranslation.openBraceToken.rangeWithoutTrivia.end);
12930
- editText = newLine + memberTranslationsCode;
13097
+ Debug.assert(typeTranslation.closeBraceToken !== void 0);
13098
+ const typeKeywordLine = this.sourceFile.getPositionAt(typeTranslation.typeKeyword.rangeWithoutTrivia.start).line;
13099
+ const closeBraceTokenLine = this.sourceFile.getPositionAt(typeTranslation.closeBraceToken.rangeWithoutTrivia.start).line;
13100
+ const closeBraceTokenIndentation = " ".repeat(
13101
+ this.sourceFile.getPositionAt(typeTranslation.rangeWithoutTrivia.start).character
13102
+ );
13103
+ if (typeKeywordLine === closeBraceTokenLine) {
13104
+ editText = newLine + memberTranslationsCode + newLine + closeBraceTokenIndentation;
13105
+ editRange = Range.empty(typeTranslation.closeBraceToken.rangeWithoutTrivia.start);
13106
+ } else {
13107
+ editText = newLine + memberTranslationsCode + closeBraceTokenIndentation;
13108
+ editRange = Range.empty(typeTranslation.openBraceToken.rangeWithoutTrivia.end);
13109
+ }
12931
13110
  if (typeTranslation.memberList !== void 0 && typeTranslation.memberList.members.count() > 0) {
12932
13111
  editText += newLine;
12933
13112
  }
12934
13113
  } else {
12935
- const typeTranslationIndentation = " ".repeat(
13114
+ Debug.assert(typeTranslation.endKeyword !== void 0);
13115
+ const typeKeywordLine = this.sourceFile.getPositionAt(typeTranslation.typeKeyword.rangeWithoutTrivia.start).line;
13116
+ const endKeywordLine = this.sourceFile.getPositionAt(typeTranslation.endKeyword.rangeWithoutTrivia.start).line;
13117
+ const endKeywordIndentation = " ".repeat(
12936
13118
  this.sourceFile.getPositionAt(typeTranslation.rangeWithoutTrivia.start).character
12937
13119
  );
12938
- editText = newLine + typeTranslationIndentation + "{" + newLine + memberTranslationsCode + newLine + typeTranslationIndentation + "}";
12939
- editRange = Range.empty(typeTranslation.rangeWithoutTrivia.end);
13120
+ if (typeKeywordLine === endKeywordLine) {
13121
+ editText = newLine + memberTranslationsCode + newLine + endKeywordIndentation;
13122
+ editRange = Range.empty(typeTranslation.endKeyword.rangeWithoutTrivia.start);
13123
+ } else {
13124
+ editText = this.hasAtLeastOneTranslatedTypeMember(entity) ? newLine + memberTranslationsCode + newLine + endKeywordIndentation : newLine + memberTranslationsCode + endKeywordIndentation;
13125
+ editRange = Range.empty((typeTranslation.translatedTypeParameterClause ?? typeTranslation.translatedName).rangeWithoutTrivia.end);
13126
+ }
12940
13127
  }
12941
13128
  return [new SourceFileEdit(this.sourceFile, editRange, editText)];
12942
13129
  }
@@ -12944,6 +13131,10 @@ var TranslationsGenerator2 = class _TranslationsGenerator {
12944
13131
  const translatedTypeEntity = this.translationPackage.localizationContext.getLocalizedPackageTypeEntity(entity);
12945
13132
  return translatedTypeEntity.getMembers().getAll().filter((m) => this.isNotTranslatedEntity(m) && ResolvedTranslationPackage2.isTypeMemberEntityThatShouldBeTranslatedByUser(m)).map((m) => m.originalEntity);
12946
13133
  }
13134
+ hasAtLeastOneTranslatedTypeMember(entity) {
13135
+ const translatedTypeEntity = this.translationPackage.localizationContext.getLocalizedPackageTypeEntity(entity);
13136
+ return translatedTypeEntity.getMembers().getAll().find((m) => !this.isNotTranslatedEntity(m) && ResolvedTranslationPackage2.isTypeMemberEntityThatShouldBeTranslatedByUser(m)) !== void 0;
13137
+ }
12947
13138
  detectIndentationForPackageMemberTranslations(translationsDeclaration) {
12948
13139
  let indentationSize;
12949
13140
  const firstMember = translationsDeclaration.translationList.translationDeclarations.first();
@@ -12998,15 +13189,174 @@ var TranslationsGenerator2 = class _TranslationsGenerator {
12998
13189
  collectNotTranslatedPackageMembers() {
12999
13190
  return this.translationPackage.translatedTargetPackage.getMembers().getNamedMembers().filter((m) => this.isNotTranslatedEntity(m) && ResolvedTranslationPackage2.isPackageMemberEntityThatShouldBeTranslatedByUser(m));
13000
13191
  }
13192
+ hasAtLeastOneTranslatedPackageMember() {
13193
+ return this.translationPackage.translatedTargetPackage.getMembers().getNamedMembers().find((m) => !this.isNotTranslatedEntity(m) && ResolvedTranslationPackage2.isPackageMemberEntityThatShouldBeTranslatedByUser(m)) !== void 0;
13194
+ }
13001
13195
  isNotTranslatedEntity(entity) {
13002
- const translation = entity.getTranslation();
13196
+ const translation = entity.translation;
13003
13197
  return translation === void 0 || translation.definition.kind === "intrinsic";
13004
13198
  }
13005
13199
  createPackageMemberTranslationNode(entity) {
13006
- return void 0;
13200
+ switch (entity.kind) {
13201
+ case 0 /* Variable */:
13202
+ return this.createPackageVariableTranslation(entity);
13203
+ case 1 /* Function */:
13204
+ return this.createPackageFunctionTranslation(entity);
13205
+ case 2 /* Type */: {
13206
+ const aliasTarget = ifTypeEntityIsFunctionTypeAliasThenFunctionType(entity);
13207
+ if (aliasTarget !== void 0 && entity.typeEntityKind === 4 /* Alias */) {
13208
+ return this.createFunctionTypeAliasTranslation(entity, aliasTarget);
13209
+ }
13210
+ return this.createPackageTypeWithMembersTranslation(entity);
13211
+ }
13212
+ case 6 /* TypeExtension */:
13213
+ case 8 /* TextTranslation */:
13214
+ return void 0;
13215
+ default:
13216
+ Debug.never(entity);
13217
+ }
13218
+ }
13219
+ createPackageVariableTranslation(entity) {
13220
+ const name = this.getNameText(entity.getName());
13221
+ return SyntaxFactory2.packageVariableTranslation(name, name);
13222
+ }
13223
+ createPackageFunctionTranslation(entity) {
13224
+ const name = this.getNameText(entity.getName());
13225
+ const typeParameters = entity.getTypeParameters().map((p) => this.getNameText(p.getName()));
13226
+ const parameters = this.createParameters(entity.getParameters());
13227
+ return SyntaxFactory2.packageFunctionTranslation(name, typeParameters, parameters, name, typeParameters, parameters);
13228
+ }
13229
+ createPackageTypeWithMembersTranslation(entity) {
13230
+ const name = this.getNameText(entity.getName());
13231
+ const typeParameters = entity.getTypeParameters().map((p) => this.getNameText(p.getName()));
13232
+ const members = Query.from(this.collectNotTranslatedTypeMembers(entity)).mapAndFilter((e) => this.createTypeMemberTranslationNode(e)).filter((n) => n !== void 0).uniqueWithComparator(compareNodes2).toArray();
13233
+ return SyntaxFactory2.typeTranslation(name, typeParameters, name, typeParameters, members);
13234
+ }
13235
+ createFunctionTypeAliasTranslation(entity, aliasTarget) {
13236
+ const name = this.getNameText(entity.getName());
13237
+ const typeParameters = entity.getTypeParameters().map((p) => this.getNameText(p.getName()));
13238
+ const parameters = this.createParameters(aliasTarget.getParameters());
13239
+ return SyntaxFactory2.functionTypeTranslation(name, typeParameters, parameters, name, typeParameters, parameters);
13007
13240
  }
13008
13241
  createTypeMemberTranslationNode(entity) {
13009
- return void 0;
13242
+ switch (entity.kind) {
13243
+ case 0 /* Variable */:
13244
+ if (entity.isVariantValue()) {
13245
+ return this.createVariantValueTranslation(entity);
13246
+ }
13247
+ return this.createFieldTranslation(entity);
13248
+ case 1 /* Function */:
13249
+ return this.createMethodOrIndexedElementAccessorTranslation(entity);
13250
+ case 3 /* Indexer */:
13251
+ return void 0;
13252
+ case 4 /* DereferenceOperator */:
13253
+ return void 0;
13254
+ default:
13255
+ Debug.never(entity);
13256
+ }
13257
+ }
13258
+ createFieldTranslation(entity) {
13259
+ const name = this.getNameText(entity.getName());
13260
+ return SyntaxFactory2.fieldTranslation(name, name);
13261
+ }
13262
+ createVariantValueTranslation(entity) {
13263
+ const name = this.getNameText(entity.getName());
13264
+ return SyntaxFactory2.variantValueTranslation(name, name);
13265
+ }
13266
+ createMethodOrIndexedElementAccessorTranslation(entity) {
13267
+ switch (entity.methodKind) {
13268
+ case 0 /* Ordinary */: {
13269
+ const name = this.getNameText(entity.getName());
13270
+ const typeParameters = entity.getTypeParameters().map((p) => this.getNameText(p.getName()));
13271
+ const parameters = this.createParameters(entity.getParameters());
13272
+ return SyntaxFactory2.methodTranslation(name, typeParameters, parameters, name, typeParameters, parameters);
13273
+ }
13274
+ case 3 /* Operator */: {
13275
+ const operatorKind = entity.getOperatorKind();
13276
+ if (operatorKind === void 0) {
13277
+ return void 0;
13278
+ }
13279
+ const syntacticalOperatorKind = this.analyzer.convertSemanticOperatorKind(operatorKind);
13280
+ if (syntacticalOperatorKind === void 0) {
13281
+ return void 0;
13282
+ }
13283
+ let tokenOrKeyword = void 0;
13284
+ if (isOperatorDefinedByToken(syntacticalOperatorKind)) {
13285
+ const tokenKind = tokenKindByOperatorKind[syntacticalOperatorKind];
13286
+ tokenOrKeyword = new Token(tokenKind, "", [], [], 0 /* None */, void 0, void 0);
13287
+ }
13288
+ if (isOperatorDefinedByKeyword(syntacticalOperatorKind)) {
13289
+ const keywordKind = keywordKindByOperatorKind[syntacticalOperatorKind];
13290
+ tokenOrKeyword = new Keyword([], keywordKind, 0 /* None */, void 0, void 0);
13291
+ }
13292
+ if (tokenOrKeyword === void 0) {
13293
+ return void 0;
13294
+ }
13295
+ const parameters = this.createParameters(entity.getParameters());
13296
+ return SyntaxFactory2.operatorTranslation(tokenOrKeyword, [], parameters, tokenOrKeyword, [], parameters);
13297
+ }
13298
+ case 1 /* Constructor */: {
13299
+ const sourceName = this.getNameText(entity.getName());
13300
+ const translatedName = this.analyzer.getReservedName(
13301
+ 2 /* Creation */,
13302
+ this.translationPackage.getTranslationLocale()
13303
+ ).key;
13304
+ const parameters = this.createParameters(entity.getParameters());
13305
+ return SyntaxFactory2.methodTranslation(sourceName, [], parameters, translatedName, [], parameters);
13306
+ }
13307
+ case 2 /* Destructor */: {
13308
+ const sourceName = this.getNameText(entity.getName());
13309
+ const translatedName = this.analyzer.getReservedName(
13310
+ 3 /* Destruction */,
13311
+ this.translationPackage.getTranslationLocale()
13312
+ ).key;
13313
+ const parameters = this.createParameters(entity.getParameters());
13314
+ return SyntaxFactory2.methodTranslation(sourceName, [], parameters, translatedName, [], parameters);
13315
+ }
13316
+ case 4 /* Accessor */:
13317
+ if (entity.accessorKind === 4 /* IndexedElementGetter */) {
13318
+ const parameters = this.createParameters(entity.getParameters());
13319
+ return SyntaxFactory2.indexedElementGetterTranslation(parameters, parameters);
13320
+ }
13321
+ if (entity.accessorKind === 5 /* IndexedElementSetter */) {
13322
+ const sourceParameters = this.createParameters(entity.getParameters());
13323
+ const translatedParameters = this.createSetterParametersWithTranslatedValue(entity.getParameters());
13324
+ return SyntaxFactory2.indexedElementSetterTranslation(sourceParameters, translatedParameters);
13325
+ }
13326
+ return void 0;
13327
+ default:
13328
+ Debug.never(entity.methodKind);
13329
+ }
13330
+ }
13331
+ createParameters(parameters) {
13332
+ return parameters.map((p) => {
13333
+ const nameText = this.getNameText(p.getName());
13334
+ let flags = 0 /* None */;
13335
+ if (p.isObjectParameter()) {
13336
+ flags |= 512 /* ObjectParameterName */;
13337
+ }
13338
+ return SyntaxFactory2.identifier(nameText, flags);
13339
+ });
13340
+ }
13341
+ createSetterParametersWithTranslatedValue(parameters) {
13342
+ return parameters.map((p, i, arr) => {
13343
+ if (i === arr.length - 1) {
13344
+ const value = this.analyzer.getReservedName(
13345
+ 1 /* Value */,
13346
+ this.translationPackage.getTranslationLocale()
13347
+ );
13348
+ return SyntaxFactory2.identifier(value.key);
13349
+ }
13350
+ const nameText = this.getNameText(p.getName());
13351
+ let flags = 0 /* None */;
13352
+ if (p.isObjectParameter()) {
13353
+ flags |= 512 /* ObjectParameterName */;
13354
+ }
13355
+ return SyntaxFactory2.identifier(nameText, flags);
13356
+ });
13357
+ }
13358
+ getNameText(name) {
13359
+ return name.getPreferredUnescapedOriginal();
13010
13360
  }
13011
13361
  // TODO: Работать с синтаксическим деревом и использовать Trivia для добавления перевода строки. Требуется доработка
13012
13362
  // SyntaxToCode и возможность добавлять Trivia в узлы, создаваемые через SyntaxFactory.
@@ -13030,7 +13380,10 @@ function compareNodes2(node1, node2) {
13030
13380
  return false;
13031
13381
  }
13032
13382
  if (node1.kind === 1001 /* Token */ && node2.kind === 1001 /* Token */) {
13033
- return node1.value === node2.value;
13383
+ return node1.tokenKind === node2.tokenKind && node1.operatorKind === node2.operatorKind && node1.value === node2.value;
13384
+ }
13385
+ if (node1.kind === 1002 /* Keyword */ && node2.kind === 1002 /* Keyword */) {
13386
+ return node1.keywordKind === node2.keywordKind && node1.operatorKind === node2.operatorKind;
13034
13387
  }
13035
13388
  if (node1.children.length !== node2.children.length) {
13036
13389
  return false;
@@ -13142,7 +13495,7 @@ var SignatureForNode2 = class _SignatureForNode {
13142
13495
  switch (node.kind) {
13143
13496
  case 1013 /* CallExpression */:
13144
13497
  return _SignatureForNode.getSignaturesForCallExpression(analyzer, node);
13145
- case 1045 /* IndexedAccessExpression */:
13498
+ case 1044 /* IndexedAccessExpression */:
13146
13499
  return _SignatureForNode.getSignaturesForIndexedAccessExpression(analyzer, node);
13147
13500
  case 1108 /* Tag */:
13148
13501
  return _SignatureForNode.getSignaturesForTag(analyzer, node);
@@ -13535,7 +13888,7 @@ var CompletionServiceM = class {
13535
13888
  if (tokenOrKeyword.isKeyword(1019 /* Import */) && tokenOrKeyword.parent.kind === 1078 /* PackageImportDirective */) {
13536
13889
  return new PackageImportCompletionContext2([], void 0);
13537
13890
  }
13538
- if (tokenOrKeyword.isKeyword(1017 /* Function */) && (tokenOrKeyword.parent.kind === 1062 /* MethodDeclaration */ || tokenOrKeyword.parent.kind === 1105 /* StaticMethodDeclaration */ || tokenOrKeyword.parent.kind === 1046 /* IndexedElementGetterDeclaration */ || tokenOrKeyword.parent.kind === 1047 /* IndexedElementSetterDeclaration */)) {
13891
+ if (tokenOrKeyword.isKeyword(1017 /* Function */) && (tokenOrKeyword.parent.kind === 1062 /* MethodDeclaration */ || tokenOrKeyword.parent.kind === 1105 /* StaticMethodDeclaration */ || tokenOrKeyword.parent.kind === 1045 /* IndexedElementGetterDeclaration */ || tokenOrKeyword.parent.kind === 1047 /* IndexedElementSetterDeclaration */)) {
13539
13892
  return new OperatorNameCompletionContext2(void 0);
13540
13893
  }
13541
13894
  if (tokenOrKeyword.isToken(1030 /* Equals */) && tokenOrKeyword.parent.kind === 1077 /* PackageImport */) {
@@ -13546,7 +13899,7 @@ var CompletionServiceM = class {
13546
13899
  const precedingSegmentNames = packageImport.packageName.segments.takeWhile((s) => s.rangeWithTrivia.start < tokenOrKeyword.value.rangeWithTrivia.start).map((p) => this.analyzer.createNameFromIdentifier(p)).toArray();
13547
13900
  return new PackageImportCompletionContext2(precedingSegmentNames, void 0);
13548
13901
  }
13549
- if (tokenOrKeyword.isToken(1047 /* OpenBrace */) && tokenOrKeyword.parent.kind === 1078 /* PackageImportDirective */ || this.tokenOrKeywordIsPackageImportListChild(tokenOrKeyword)) {
13902
+ if (tokenOrKeyword.isToken(1046 /* OpenBrace */) && tokenOrKeyword.parent.kind === 1078 /* PackageImportDirective */ || this.tokenOrKeywordIsPackageImportListChild(tokenOrKeyword)) {
13550
13903
  return new PackageImportCompletionContext2([], void 0);
13551
13904
  }
13552
13905
  if (tokenOrKeyword.isToken(1026 /* Dot */) && tokenOrKeyword.parent.kind === 1061 /* MemberAccessExpression */) {
@@ -13585,7 +13938,7 @@ var CompletionServiceM = class {
13585
13938
  const showConstructors = containingEntity?.kind === 1 /* Function */ && containingEntity?.subkind === "method" && containingEntity?.methodKind === 1 /* Constructor */;
13586
13939
  return new TypeMemberCompletionContext2(type, lookupContext, lookupOptions, showConstructors);
13587
13940
  }
13588
- if (tokenOrKeyword.isToken(1048 /* OpenParenthesis */) && tokenOrKeyword.parent.kind === 1013 /* CallExpression */) {
13941
+ if (tokenOrKeyword.isToken(1047 /* OpenParenthesis */) && tokenOrKeyword.parent.kind === 1013 /* CallExpression */) {
13589
13942
  const type = this.getDenotedVariantType(tokenOrKeyword.parent, semanticContext);
13590
13943
  if (type !== void 0) {
13591
13944
  const lookupContext = semanticContext.getTypeMemberLookupContext();
@@ -13729,12 +14082,17 @@ var CompletionServiceM = class {
13729
14082
  }
13730
14083
  if (tokenOrKeyword.isKeyword(1033 /* Type */) && (tokenOrKeyword.parent.kind === 1141 /* TypeTranslationDeclaration */ || tokenOrKeyword.parent.kind === 1039 /* FunctionTypeTranslationDeclaration */)) {
13731
14084
  translationsDeclaration = tokenOrKeyword.parent.parent.parent;
13732
- translationKind = 2 /* Type */;
14085
+ translationKind = 3 /* Type */;
13733
14086
  hasPrecedingKeyword = true;
13734
14087
  }
13735
14088
  if (tokenOrKeyword.isKeyword(1017 /* Function */) && tokenOrKeyword.parent.kind === 1076 /* PackageFunctionTranslationDeclaration */) {
13736
14089
  translationsDeclaration = tokenOrKeyword.parent.parent.parent;
13737
- translationKind = 1 /* Method */;
14090
+ translationKind = 1 /* Function */;
14091
+ hasPrecedingKeyword = true;
14092
+ }
14093
+ if (tokenOrKeyword.isKeyword(1034 /* Var */) && tokenOrKeyword.parent.kind === 1089 /* PackageVariableTranslationDeclaration */) {
14094
+ translationsDeclaration = tokenOrKeyword.parent.parent.parent;
14095
+ translationKind = 2 /* Variable */;
13738
14096
  hasPrecedingKeyword = true;
13739
14097
  }
13740
14098
  if (translationsDeclaration !== void 0) {
@@ -13766,11 +14124,21 @@ var CompletionServiceM = class {
13766
14124
  translationKind = 0 /* Any */;
13767
14125
  hasPrecedingKeyword = false;
13768
14126
  }
13769
- if (tokenOrKeyword.isKeyword(1017 /* Function */) && tokenOrKeyword.parent.kind === 1063 /* MethodTranslation */) {
14127
+ if (tokenOrKeyword.isKeyword(1017 /* Function */) && (tokenOrKeyword.parent.kind === 1063 /* MethodTranslation */ || tokenOrKeyword.parent.kind === 1046 /* IndexedElementGetterTranslation */ || tokenOrKeyword.parent.kind === 1048 /* IndexedElementSetterTranslation */)) {
13770
14128
  typeTranslation = tokenOrKeyword.parent.parent.parent;
13771
14129
  translationKind = 1 /* Method */;
13772
14130
  hasPrecedingKeyword = true;
13773
14131
  }
14132
+ if (tokenOrKeyword.isKeyword(1034 /* Var */) && tokenOrKeyword.parent.kind === 1032 /* FieldTranslation */) {
14133
+ typeTranslation = tokenOrKeyword.parent.parent.parent;
14134
+ translationKind = 2 /* Field */;
14135
+ hasPrecedingKeyword = true;
14136
+ }
14137
+ if (tokenOrKeyword.isKeyword(1004 /* Case */) && tokenOrKeyword.parent.kind === 1145 /* VariantValueTranslation */) {
14138
+ typeTranslation = tokenOrKeyword.parent.parent.parent;
14139
+ translationKind = 3 /* VariantValue */;
14140
+ hasPrecedingKeyword = true;
14141
+ }
13774
14142
  if (typeTranslation !== void 0) {
13775
14143
  let type;
13776
14144
  if (this.sourceFile.package.kind === "translation") {
@@ -13797,7 +14165,7 @@ var CompletionServiceM = class {
13797
14165
  signatures = SignatureForNode2.getSignaturesForTag(this.analyzer, role.argumentList.parent);
13798
14166
  args = ArgumentFactory2.createArgumentsOfTag(role.argumentList.parent);
13799
14167
  break;
13800
- case 1045 /* IndexedAccessExpression */:
14168
+ case 1044 /* IndexedAccessExpression */:
13801
14169
  signatures = SignatureForNode2.getSignaturesForIndexedAccessExpression(
13802
14170
  this.analyzer,
13803
14171
  role.argumentList.parent
@@ -13897,7 +14265,7 @@ var CompletionServiceM = class {
13897
14265
  let isVariantValueAccess = false;
13898
14266
  if (positionDescription.kind === "after-token-or-keyword") {
13899
14267
  const tokenOrKeyword = positionDescription.tokenOrKeyword;
13900
- if (tokenOrKeyword.isToken(1048 /* OpenParenthesis */) && tokenOrKeyword.parent.kind === 1013 /* CallExpression */) {
14268
+ if (tokenOrKeyword.isToken(1047 /* OpenParenthesis */) && tokenOrKeyword.parent.kind === 1013 /* CallExpression */) {
13901
14269
  const call = tokenOrKeyword.parent;
13902
14270
  const type = this.analyzer.type.ofExpression(call.expression);
13903
14271
  if (type.kind === "variant") {
@@ -14075,7 +14443,7 @@ var CompletionServiceM = class {
14075
14443
  case 1034 /* ForStatement */:
14076
14444
  case 1058 /* LoopStatement */:
14077
14445
  case 1014 /* CaseClause */:
14078
- case 1145 /* WhileStatement */:
14446
+ case 1146 /* WhileStatement */:
14079
14447
  return false;
14080
14448
  default:
14081
14449
  Debug.never(statementBlockParent);
@@ -14118,7 +14486,7 @@ var CompletionServiceM = class {
14118
14486
  case 1034 /* ForStatement */:
14119
14487
  case 1058 /* LoopStatement */:
14120
14488
  case 1014 /* CaseClause */:
14121
- case 1145 /* WhileStatement */:
14489
+ case 1146 /* WhileStatement */:
14122
14490
  return false;
14123
14491
  default:
14124
14492
  Debug.never(statementBlockParent);
@@ -14161,7 +14529,7 @@ var CompletionServiceM = class {
14161
14529
  case 1034 /* ForStatement */:
14162
14530
  case 1058 /* LoopStatement */:
14163
14531
  case 1014 /* CaseClause */:
14164
- case 1145 /* WhileStatement */:
14532
+ case 1146 /* WhileStatement */:
14165
14533
  return false;
14166
14534
  default:
14167
14535
  Debug.never(statementBlockParent);
@@ -14255,7 +14623,7 @@ var CompletionServiceM = class {
14255
14623
  case 1033 /* FinallyClause */:
14256
14624
  case 1034 /* ForStatement */:
14257
14625
  case 1058 /* LoopStatement */:
14258
- case 1145 /* WhileStatement */:
14626
+ case 1146 /* WhileStatement */:
14259
14627
  return false;
14260
14628
  default:
14261
14629
  Debug.never(statementBlockParent);
@@ -14270,7 +14638,7 @@ var CompletionServiceM = class {
14270
14638
  return false;
14271
14639
  }
14272
14640
  const tokenOrKeyword = positionDescription.tokenOrKeyword;
14273
- if ((tokenOrKeyword.isToken(1039 /* LessThan */) || tokenOrKeyword.isToken(1024 /* Comma */)) && (tokenOrKeyword.parent.kind === 1136 /* TypeParameterClause */ || tokenOrKeyword.parent.kind === 1106 /* StaticNameClause */ || tokenOrKeyword.parent.kind === 1138 /* TypeParameterDeclarationList */ || tokenOrKeyword.parent.kind === 1140 /* TypeParameterReferenceList */)) {
14641
+ if ((tokenOrKeyword.isToken(1040 /* LessThan */) || tokenOrKeyword.isToken(1024 /* Comma */)) && (tokenOrKeyword.parent.kind === 1136 /* TypeParameterClause */ || tokenOrKeyword.parent.kind === 1106 /* StaticNameClause */ || tokenOrKeyword.parent.kind === 1138 /* TypeParameterDeclarationList */ || tokenOrKeyword.parent.kind === 1140 /* TypeParameterReferenceList */)) {
14274
14642
  return true;
14275
14643
  }
14276
14644
  return false;
@@ -14291,7 +14659,7 @@ var CompletionServiceM = class {
14291
14659
  isVariantValueCompletionContext(positionDescription) {
14292
14660
  if (positionDescription.kind === "after-token-or-keyword") {
14293
14661
  const tokenOrKeyword = positionDescription.tokenOrKeyword;
14294
- if (tokenOrKeyword.isToken(1048 /* OpenParenthesis */) && tokenOrKeyword.parent.kind === 1013 /* CallExpression */) {
14662
+ if (tokenOrKeyword.isToken(1047 /* OpenParenthesis */) && tokenOrKeyword.parent.kind === 1013 /* CallExpression */) {
14295
14663
  const call = tokenOrKeyword.parent;
14296
14664
  const type = this.analyzer.type.ofExpression(call.expression);
14297
14665
  if (type.kind === "variant") {
@@ -14540,7 +14908,7 @@ var CompletionServiceM = class {
14540
14908
  }
14541
14909
  getTopLevelAliasListCompletionItemInfos(ctx) {
14542
14910
  let result;
14543
- if (ctx.translationKind === 1 /* Method */) {
14911
+ if (ctx.translationKind === 1 /* Function */) {
14544
14912
  result = Query.from(ctx.packageMemberLookup.getNamedMembers(ctx.lookupContext)).mapAndFilter((d) => {
14545
14913
  if (d.kind === 1 /* Function */) {
14546
14914
  return new TranslationsSourceFunctionCompletionItemInfo(
@@ -14551,7 +14919,7 @@ var CompletionServiceM = class {
14551
14919
  }
14552
14920
  return void 0;
14553
14921
  });
14554
- } else if (ctx.translationKind === 2 /* Type */) {
14922
+ } else if (ctx.translationKind === 3 /* Type */) {
14555
14923
  result = Query.from(ctx.packageMemberLookup.getNamedMembers(ctx.lookupContext)).mapAndFilter((d) => {
14556
14924
  if (d.kind === 2 /* Type */) {
14557
14925
  return new TranslationsSourcePackageTypeCompletionItemInfo2(
@@ -14562,11 +14930,26 @@ var CompletionServiceM = class {
14562
14930
  }
14563
14931
  return void 0;
14564
14932
  });
14933
+ } else if (ctx.translationKind === 2 /* Variable */) {
14934
+ result = Query.from(ctx.packageMemberLookup.getNamedMembers(ctx.lookupContext)).mapAndFilter((d) => {
14935
+ if (d.kind === 0 /* Variable */) {
14936
+ return new TranslationsSourceVariableCompletionItemInfo2(
14937
+ this.completionItemInfoContext,
14938
+ d,
14939
+ !ctx.hasPrecedingKeyword
14940
+ );
14941
+ }
14942
+ return void 0;
14943
+ });
14565
14944
  } else if (ctx.translationKind === 0 /* Any */) {
14566
14945
  result = Query.from(ctx.packageMemberLookup.getNamedMembers(ctx.lookupContext)).map((d) => {
14567
14946
  switch (d.kind) {
14568
14947
  case 0 /* Variable */:
14569
- return new TranslationsSourceVariableCompletionItemInfo2(this.completionItemInfoContext, d);
14948
+ return new TranslationsSourceVariableCompletionItemInfo2(
14949
+ this.completionItemInfoContext,
14950
+ d,
14951
+ !ctx.hasPrecedingKeyword
14952
+ );
14570
14953
  case 1 /* Function */:
14571
14954
  return new TranslationsSourceFunctionCompletionItemInfo(
14572
14955
  this.completionItemInfoContext,
@@ -14589,7 +14972,9 @@ var CompletionServiceM = class {
14589
14972
  if (!ctx.hasPrecedingKeyword) {
14590
14973
  const keywords = [
14591
14974
  1033 /* Type */,
14592
- 1017 /* Function */
14975
+ 1017 /* Function */,
14976
+ 1034 /* Var */,
14977
+ 1011 /* End */
14593
14978
  ];
14594
14979
  result = result.chain(
14595
14980
  Query.from(keywords).map((k) => LocalizationHelperM.localizeKeyword(k, this.locale).map((v) => new KeywordCompletionItemInfo2(this.completionItemInfoContext, k, v.value))).flatMap((i) => i)
@@ -14601,7 +14986,13 @@ var CompletionServiceM = class {
14601
14986
  let result = Query.empty();
14602
14987
  if (ctx.typeEntity !== void 0) {
14603
14988
  if (ctx.translationKind === 1 /* Method */) {
14604
- result = Query.from(ctx.typeEntity.getMembers().getNamedMembersM()).mapAndFilter((m) => {
14989
+ const namedMembersAndOperatorsAndIndexedElementAccessors = [
14990
+ ...ctx.typeEntity.getMembers().getNamedMembersM(),
14991
+ ...ctx.typeEntity.getMembers().getOperators(),
14992
+ ...ctx.typeEntity.getMembers().getIndexers().map((it) => it.getGetter()).filter((it) => it !== void 0),
14993
+ ...ctx.typeEntity.getMembers().getIndexers().map((it) => it.getSetter()).filter((it) => it !== void 0)
14994
+ ];
14995
+ result = Query.from(namedMembersAndOperatorsAndIndexedElementAccessors).mapAndFilter((m) => {
14605
14996
  if (m.kind === 1 /* Function */) {
14606
14997
  return new TranslationsSourceFunctionCompletionItemInfo(
14607
14998
  this.completionItemInfoContext,
@@ -14611,12 +15002,42 @@ var CompletionServiceM = class {
14611
15002
  }
14612
15003
  return void 0;
14613
15004
  });
14614
- } else if (ctx.translationKind === 2 /* Indexer */) {
14615
- result = Query.from(ctx.typeEntity.getMembers().getIndexers()).map((i) => new TranslationsSourceIndexerCompletionItemInfo2(this.completionItemInfoContext, i));
14616
- } else if (ctx.translationKind === 0 /* Any */) {
15005
+ } else if (ctx.translationKind === 2 /* Field */) {
14617
15006
  result = Query.from(ctx.typeEntity.getMembers().getNamedMembersM()).mapAndFilter((m) => {
15007
+ if (m.kind === 0 /* Variable */ && m.subkind === "field" && !m.isVariantValue()) {
15008
+ return new TranslationsSourceVariableCompletionItemInfo2(
15009
+ this.completionItemInfoContext,
15010
+ m,
15011
+ !ctx.hasPrecedingKeyword
15012
+ );
15013
+ }
15014
+ return void 0;
15015
+ });
15016
+ } else if (ctx.translationKind === 3 /* VariantValue */) {
15017
+ result = Query.from(ctx.typeEntity.getMembers().getNamedMembersM()).mapAndFilter((m) => {
15018
+ if (m.kind === 0 /* Variable */ && m.subkind === "field" && m.isVariantValue()) {
15019
+ return new TranslationsSourceVariableCompletionItemInfo2(
15020
+ this.completionItemInfoContext,
15021
+ m,
15022
+ !ctx.hasPrecedingKeyword
15023
+ );
15024
+ }
15025
+ return void 0;
15026
+ });
15027
+ } else if (ctx.translationKind === 0 /* Any */) {
15028
+ const namedMembersAndOperatorsAndIndexedElementAccessors = [
15029
+ ...ctx.typeEntity.getMembers().getNamedMembersM(),
15030
+ ...ctx.typeEntity.getMembers().getOperators(),
15031
+ ...ctx.typeEntity.getMembers().getIndexers().map((it) => it.getGetter()).filter((it) => it !== void 0),
15032
+ ...ctx.typeEntity.getMembers().getIndexers().map((it) => it.getSetter()).filter((it) => it !== void 0)
15033
+ ];
15034
+ result = Query.from(namedMembersAndOperatorsAndIndexedElementAccessors).mapAndFilter((m) => {
14618
15035
  if (m.kind === 0 /* Variable */) {
14619
- return new TranslationsSourceVariableCompletionItemInfo2(this.completionItemInfoContext, m);
15036
+ return new TranslationsSourceVariableCompletionItemInfo2(
15037
+ this.completionItemInfoContext,
15038
+ m,
15039
+ !ctx.hasPrecedingKeyword
15040
+ );
14620
15041
  } else if (m.kind === 1 /* Function */) {
14621
15042
  return new TranslationsSourceFunctionCompletionItemInfo(
14622
15043
  this.completionItemInfoContext,
@@ -14625,16 +15046,17 @@ var CompletionServiceM = class {
14625
15046
  );
14626
15047
  }
14627
15048
  return void 0;
14628
- }).chain(
14629
- ctx.typeEntity.getMembers().getIndexers().map((i) => new TranslationsSourceIndexerCompletionItemInfo2(this.completionItemInfoContext, i))
14630
- );
15049
+ });
14631
15050
  } else {
14632
15051
  Debug.never(ctx.translationKind);
14633
15052
  }
14634
15053
  }
14635
15054
  if (!ctx.hasPrecedingKeyword) {
14636
15055
  const keywords = [
14637
- 1017 /* Function */
15056
+ 1017 /* Function */,
15057
+ 1034 /* Var */,
15058
+ 1004 /* Case */,
15059
+ 1011 /* End */
14638
15060
  ];
14639
15061
  result = result.chain(
14640
15062
  Query.from(keywords).map((k) => LocalizationHelperM.localizeKeyword(k, this.locale).map((v) => new KeywordCompletionItemInfo2(this.completionItemInfoContext, k, v.value))).flatMap((i) => i)
@@ -15033,7 +15455,7 @@ var VariableEntityCompletionItemInfo2 = class {
15033
15455
  case "package":
15034
15456
  return 7 /* PackageVariable */;
15035
15457
  case "field":
15036
- return this.entity.isVariant() ? 12 /* VariantValue */ : 2 /* Field */;
15458
+ return this.entity.isVariantValue() ? 12 /* VariantValue */ : 2 /* Field */;
15037
15459
  case "parameter":
15038
15460
  return 10 /* Parameter */;
15039
15461
  case "local":
@@ -15246,11 +15668,15 @@ var TargetSignatureParameterCompletionItemInfo2 = class {
15246
15668
  }
15247
15669
  };
15248
15670
  var TranslationsSourceVariableCompletionItemInfo2 = class {
15249
- constructor(ctx, variable) {
15671
+ constructor(ctx, variable, includeVarOrCaseKeyword) {
15250
15672
  this.ctx = ctx;
15251
15673
  this.variable = variable;
15674
+ this.includeVarOrCaseKeyword = includeVarOrCaseKeyword;
15252
15675
  this.kind = "translations-source-variable";
15253
15676
  }
15677
+ get keywordKind() {
15678
+ return this.variable.subkind === "field" && this.variable.isVariantValue() ? 1004 /* Case */ : 1034 /* Var */;
15679
+ }
15254
15680
  getLabel() {
15255
15681
  return this.ctx.getInsertTextForName(this.variable.getName());
15256
15682
  }
@@ -15272,7 +15698,8 @@ var TranslationsSourceVariableCompletionItemInfo2 = class {
15272
15698
  return this.ctx.displayService.displayEntity(this.variable);
15273
15699
  }
15274
15700
  getInsertText() {
15275
- return void 0;
15701
+ const keywordWithWhitespace = this.includeVarOrCaseKeyword ? `${this.ctx.displayService.m.displayKeyword(this.keywordKind)} ` : "";
15702
+ return `${keywordWithWhitespace}${this.ctx.getInsertTextForName(this.variable.getName())}`;
15276
15703
  }
15277
15704
  getInsertTextFormat() {
15278
15705
  return 0 /* PlainText */;
@@ -15290,9 +15717,32 @@ var TranslationsSourceFunctionCompletionItemInfo = class {
15290
15717
  this.func = func;
15291
15718
  this.includeFunctionKeyword = includeFunctionKeyword;
15292
15719
  this.kind = "translations-source-function";
15720
+ this.name_ = new Cached();
15721
+ }
15722
+ get name() {
15723
+ return this.name_.getOrInsertWith(() => {
15724
+ if (this.func.subkind !== "method") {
15725
+ return this.ctx.getInsertTextForName(this.func.getName());
15726
+ }
15727
+ if (this.func.methodKind === 4 /* Accessor */) {
15728
+ if (this.func.accessorKind === 4 /* IndexedElementGetter */) {
15729
+ return "[]";
15730
+ }
15731
+ if (this.func.accessorKind === 5 /* IndexedElementSetter */) {
15732
+ return "[]=";
15733
+ }
15734
+ }
15735
+ if (this.func.methodKind === 3 /* Operator */) {
15736
+ const operatorKind = this.func.getOperatorKind();
15737
+ if (operatorKind !== void 0) {
15738
+ return LocalizationHelperM.localizeOperatorKind(operatorKind, this.ctx.locale);
15739
+ }
15740
+ }
15741
+ return this.ctx.getInsertTextForName(this.func.getName());
15742
+ });
15293
15743
  }
15294
15744
  getLabel() {
15295
- return this.ctx.getInsertTextForName(this.func.getName());
15745
+ return this.name;
15296
15746
  }
15297
15747
  getCompletionItemKind() {
15298
15748
  switch (this.func.subkind) {
@@ -15314,7 +15764,7 @@ var TranslationsSourceFunctionCompletionItemInfo = class {
15314
15764
  const typeParameters = this.func.getTypeParameters().map((p) => this.ctx.getInsertTextForName(p.getName())).join(", ");
15315
15765
  const typeParametersWithAngles = typeParameters.length > 0 ? `<${typeParameters}>` : "";
15316
15766
  const parameters = this.func.getParameters().map((p) => this.ctx.getInsertTextForName(p.getName())).join(", ");
15317
- return `${keywordWithWhitespace}${this.ctx.getInsertTextForName(this.func.getName())}${typeParametersWithAngles}(${parameters})`;
15767
+ return `${keywordWithWhitespace}${this.name}${typeParametersWithAngles}(${parameters})`;
15318
15768
  }
15319
15769
  getInsertTextFormat() {
15320
15770
  return 0 /* PlainText */;
@@ -15386,39 +15836,6 @@ var TranslationsSourcePackageTypeCompletionItemInfo2 = class {
15386
15836
  return void 0;
15387
15837
  }
15388
15838
  };
15389
- var TranslationsSourceIndexerCompletionItemInfo2 = class {
15390
- constructor(ctx, indexer) {
15391
- this.ctx = ctx;
15392
- this.indexer = indexer;
15393
- this.kind = "translations-source-type-indexer";
15394
- this.label_ = new Cached();
15395
- }
15396
- get label() {
15397
- return this.label_.getOrInsertWith(() => this.ctx.displayService.displayIndexerDeclaration(new IndexerDeclaration_entity(this.indexer)));
15398
- }
15399
- getLabel() {
15400
- return this.label;
15401
- }
15402
- getCompletionItemKind() {
15403
- return 5 /* Indexer */;
15404
- }
15405
- getDetails() {
15406
- return this.label;
15407
- }
15408
- getInsertText() {
15409
- const parameters = this.indexer.getParameters().map((p) => this.ctx.getInsertTextForName(p.getName())).join(", ");
15410
- return `[${parameters}]`;
15411
- }
15412
- getInsertTextFormat() {
15413
- return 0 /* PlainText */;
15414
- }
15415
- getSortText() {
15416
- return void 0;
15417
- }
15418
- getEditRange() {
15419
- return void 0;
15420
- }
15421
- };
15422
15839
  var OperatorNameCompletionItemInfo2 = class {
15423
15840
  constructor(ctx, value, editRange) {
15424
15841
  this.ctx = ctx;
@@ -15577,7 +15994,7 @@ var SyntaxContextFactory2 = class {
15577
15994
  precedingExpression = SyntaxContextUtils2.tokenOrKeywordIsValidEndOfExpression(positionDescription.tokenOrKeyword)?.expression;
15578
15995
  if (precedingExpression !== void 0) {
15579
15996
  const parent = precedingExpression.getParentSkippingParenthesizedExpressions();
15580
- if (parent.kind === 1042 /* IfStatement */ || parent.kind === 1023 /* ElseIfClause */ || parent.kind === 1014 /* CaseClause */ || parent.kind === 1034 /* ForStatement */ || parent.kind === 1145 /* WhileStatement */) {
15997
+ if (parent.kind === 1042 /* IfStatement */ || parent.kind === 1023 /* ElseIfClause */ || parent.kind === 1014 /* CaseClause */ || parent.kind === 1034 /* ForStatement */ || parent.kind === 1146 /* WhileStatement */) {
15581
15998
  expressionContext = { expressionRole: new ExpressionRole_other2(void 0) };
15582
15999
  statementContext = { statementRole: new StatementRole_inBlock(parent.block) };
15583
16000
  }
@@ -15661,7 +16078,7 @@ var SyntaxContextFactory2 = class {
15661
16078
  statementContext: void 0
15662
16079
  };
15663
16080
  }
15664
- const hasBrace = tokenOrKeyword.isToken(1047 /* OpenBrace */);
16081
+ const hasBrace = tokenOrKeyword.isToken(1046 /* OpenBrace */);
15665
16082
  if (hasBrace) {
15666
16083
  if (tokenOrKeyword.parent.kind === 1100 /* StatementBlock */ || tokenOrKeyword.parent.kind === 1036 /* FunctionBlock */) {
15667
16084
  return {
@@ -15692,7 +16109,7 @@ var SyntaxContextFactory2 = class {
15692
16109
  };
15693
16110
  }
15694
16111
  break;
15695
- case 1046 /* IndexedElementGetterDeclaration */:
16112
+ case 1045 /* IndexedElementGetterDeclaration */:
15696
16113
  case 1047 /* IndexedElementSetterDeclaration */:
15697
16114
  if (tokenOrKeyword.parent.parent.block !== void 0) {
15698
16115
  return {
@@ -15723,10 +16140,10 @@ var SyntaxContextFactory2 = class {
15723
16140
  );
15724
16141
  if (typeAnnotation !== void 0) {
15725
16142
  switch (typeAnnotation.parent.kind) {
15726
- case 1046 /* IndexedElementGetterDeclaration */:
16143
+ case 1045 /* IndexedElementGetterDeclaration */:
15727
16144
  case 1047 /* IndexedElementSetterDeclaration */:
15728
16145
  case 1030 /* FieldGetterDeclaration */:
15729
- case 1032 /* FieldSetterDeclaration */:
16146
+ case 1031 /* FieldSetterDeclaration */:
15730
16147
  case 1062 /* MethodDeclaration */:
15731
16148
  case 1070 /* NestedFunctionDeclaration */:
15732
16149
  case 1075 /* PackageFunctionDeclaration */:
@@ -15753,7 +16170,7 @@ var SyntaxContextFactory2 = class {
15753
16170
  statementContext: { statementRole: new StatementRole_inBlock(tokenOrKeyword.parent.parent) }
15754
16171
  };
15755
16172
  }
15756
- if (tokenOrKeyword.isToken(1048 /* OpenParenthesis */)) {
16173
+ if (tokenOrKeyword.isToken(1047 /* OpenParenthesis */)) {
15757
16174
  if (tokenOrKeyword.parent.kind === 1093 /* ParenthesizedExpression */) {
15758
16175
  const expressionRole = new ExpressionRole_other2(tokenOrKeyword.parent.expression);
15759
16176
  return { expressionContext: { expressionRole }, statementContext: void 0 };
@@ -15778,11 +16195,11 @@ var SyntaxContextFactory2 = class {
15778
16195
  return { expressionContext: { expressionRole }, statementContext: void 0 };
15779
16196
  }
15780
16197
  }
15781
- if (tokenOrKeyword.isToken(1049 /* OpenSquareBracket */) && tokenOrKeyword.parent.kind === 1045 /* IndexedAccessExpression */) {
16198
+ if (tokenOrKeyword.isToken(1048 /* OpenSquareBracket */) && tokenOrKeyword.parent.kind === 1044 /* IndexedAccessExpression */) {
15782
16199
  const expressionRole = new ExpressionRole_argument2(tokenOrKeyword.parent.argumentList, 0);
15783
16200
  return { expressionContext: { expressionRole }, statementContext: void 0 };
15784
16201
  }
15785
- if (tokenOrKeyword.isToken(1049 /* OpenSquareBracket */) && tokenOrKeyword.parent.kind === 1005 /* ArrayLiteral */) {
16202
+ if (tokenOrKeyword.isToken(1048 /* OpenSquareBracket */) && tokenOrKeyword.parent.kind === 1005 /* ArrayLiteral */) {
15786
16203
  const expressionRole = new ExpressionRole_arrayElement2(tokenOrKeyword.parent);
15787
16204
  return { expressionContext: { expressionRole }, statementContext: void 0 };
15788
16205
  }
@@ -15853,11 +16270,11 @@ var SyntaxContextFactory2 = class {
15853
16270
  const expressionRole = new ExpressionRole_other2(tokenOrKeyword.parent.enumeratedExpression);
15854
16271
  return { expressionContext: { expressionRole }, statementContext: void 0 };
15855
16272
  }
15856
- if (tokenOrKeyword.isKeyword(1035 /* While */) && tokenOrKeyword.parent.kind === 1145 /* WhileStatement */) {
16273
+ if (tokenOrKeyword.isKeyword(1035 /* While */) && tokenOrKeyword.parent.kind === 1146 /* WhileStatement */) {
15857
16274
  const expressionRole = new ExpressionRole_other2(tokenOrKeyword.parent.condition);
15858
16275
  return { expressionContext: { expressionRole }, statementContext: void 0 };
15859
16276
  }
15860
- if (tokenOrKeyword.isKeyword(1037 /* Yield */) && tokenOrKeyword.parent.kind === 1146 /* YieldStatement */) {
16277
+ if (tokenOrKeyword.isKeyword(1037 /* Yield */) && tokenOrKeyword.parent.kind === 1147 /* YieldStatement */) {
15861
16278
  const expressionRole = new ExpressionRole_other2(tokenOrKeyword.parent.expression);
15862
16279
  return { expressionContext: { expressionRole }, statementContext: void 0 };
15863
16280
  }
@@ -15865,7 +16282,7 @@ var SyntaxContextFactory2 = class {
15865
16282
  const expressionRole = new ExpressionRole_other2(tokenOrKeyword.parent.condition);
15866
16283
  return { expressionContext: { expressionRole }, statementContext: void 0 };
15867
16284
  }
15868
- if (tokenOrKeyword.isToken(1048 /* OpenParenthesis */) && tokenOrKeyword.parent.kind === 1059 /* MatchExpressionGroup */) {
16285
+ if (tokenOrKeyword.isToken(1047 /* OpenParenthesis */) && tokenOrKeyword.parent.kind === 1059 /* MatchExpressionGroup */) {
15869
16286
  const expressionRole = new ExpressionRole_matchListElement2(tokenOrKeyword.parent.parent.parent.parent);
15870
16287
  return { expressionContext: { expressionRole }, statementContext: void 0 };
15871
16288
  }
@@ -15915,7 +16332,7 @@ var SyntaxContextFactory2 = class {
15915
16332
  if ((tokenOrKeyword.isToken(1020 /* CloseBrace */) || tokenOrKeyword.isKeyword(1011 /* End */)) && (tokenOrKeyword.parent.kind === 1127 /* TranslationsDeclaration */ || tokenOrKeyword.parent.kind === 1082 /* PackageMemberGroupDeclaration */ || tokenOrKeyword.parent.kind === 1078 /* PackageImportDirective */ || tokenOrKeyword.parent.kind === 1036 /* FunctionBlock */ && tokenOrKeyword.parent.parent.kind === 1075 /* PackageFunctionDeclaration */)) {
15916
16333
  return true;
15917
16334
  }
15918
- if (tokenOrKeyword.isToken(1047 /* OpenBrace */) && tokenOrKeyword.parent.kind === 1082 /* PackageMemberGroupDeclaration */) {
16335
+ if (tokenOrKeyword.isToken(1046 /* OpenBrace */) && tokenOrKeyword.parent.kind === 1082 /* PackageMemberGroupDeclaration */) {
15919
16336
  return true;
15920
16337
  }
15921
16338
  if (this.packageDeclarations.some((kind) => SyntaxContextUtils2.tokenOrKeywordIsValidEndOfNode(tokenOrKeyword, kind))) {
@@ -15931,8 +16348,8 @@ var SyntaxContextFactory2 = class {
15931
16348
  this.typeDeclarations = [
15932
16349
  1029 /* FieldDeclaration */,
15933
16350
  1030 /* FieldGetterDeclaration */,
15934
- 1032 /* FieldSetterDeclaration */,
15935
- 1046 /* IndexedElementGetterDeclaration */,
16351
+ 1031 /* FieldSetterDeclaration */,
16352
+ 1045 /* IndexedElementGetterDeclaration */,
15936
16353
  1047 /* IndexedElementSetterDeclaration */,
15937
16354
  1062 /* MethodDeclaration */,
15938
16355
  1144 /* VariantValueDeclaration */
@@ -15942,7 +16359,7 @@ var SyntaxContextFactory2 = class {
15942
16359
  if (tokenOrKeyword.isToken(1059 /* Semicolon */) && tokenOrKeyword.parent.kind === 1133 /* TypeMemberDeclarationList */) {
15943
16360
  return true;
15944
16361
  }
15945
- if (tokenOrKeyword.isToken(1047 /* OpenBrace */) && tokenOrKeyword.parent.kind === 1132 /* TypeMemberDeclarationBlock */) {
16362
+ if (tokenOrKeyword.isToken(1046 /* OpenBrace */) && tokenOrKeyword.parent.kind === 1132 /* TypeMemberDeclarationBlock */) {
15946
16363
  return true;
15947
16364
  }
15948
16365
  if (tokenOrKeyword.isToken(1034 /* GreaterThan */) && tokenOrKeyword.parent.kind === 1136 /* TypeParameterClause */ && tokenOrKeyword.parent.parent.kind === 1085 /* PackageTypeDeclaration */) {
@@ -16004,7 +16421,7 @@ var SyntaxContextFactory2 = class {
16004
16421
  if (tokenOrKeyword.isKeyword(1013 /* Extends */) && (tokenOrKeyword.parent.kind === 1028 /* ExtendsClause */ || tokenOrKeyword.parent.kind === 1137 /* TypeParameterDeclaration */)) {
16005
16422
  return { allowsLocalTypes: false };
16006
16423
  }
16007
- if (tokenOrKeyword.isToken(1039 /* LessThan */) && tokenOrKeyword.parent.kind === 1130 /* TypeArgumentClause */) {
16424
+ if (tokenOrKeyword.isToken(1040 /* LessThan */) && tokenOrKeyword.parent.kind === 1130 /* TypeArgumentClause */) {
16008
16425
  return { allowsLocalTypes: true };
16009
16426
  }
16010
16427
  if (tokenOrKeyword.isToken(1024 /* Comma */) && (tokenOrKeyword.parent.kind === 1010 /* BaseTypeList */ || tokenOrKeyword.parent.kind === 1131 /* TypeArgumentList */)) {
@@ -16019,7 +16436,7 @@ var SyntaxContextFactory2 = class {
16019
16436
  if (tokenOrKeyword.isToken(1009 /* Bar */) && tokenOrKeyword.parent.kind === 1142 /* UnionTypeSpecifier */) {
16020
16437
  return { allowsLocalTypes: false };
16021
16438
  }
16022
- if (tokenOrKeyword.isToken(1048 /* OpenParenthesis */) && tokenOrKeyword.parent.kind === 1094 /* ParenthesizedTypeSpecifier */) {
16439
+ if (tokenOrKeyword.isToken(1047 /* OpenParenthesis */) && tokenOrKeyword.parent.kind === 1094 /* ParenthesizedTypeSpecifier */) {
16023
16440
  return { allowsLocalTypes: true };
16024
16441
  }
16025
16442
  if (tokenOrKeyword.isKeyword(1034 /* Var */) && tokenOrKeyword.parent.kind === 1086 /* PackageVariableDeclaration */ || tokenOrKeyword.parent.kind === 1087 /* PackageVariableGetterDeclaration */ || tokenOrKeyword.parent.kind === 1088 /* PackageVariableSetterDeclaration */ || tokenOrKeyword.parent.kind === 1102 /* StaticFieldDeclaration */ || tokenOrKeyword.parent.kind === 1103 /* StaticFieldGetterDeclaration */ || tokenOrKeyword.parent.kind === 1104 /* StaticFieldSetterDeclaration */) {
@@ -16034,7 +16451,10 @@ var SyntaxContextFactory2 = class {
16034
16451
  if (tokenOrKeyword.isToken(1059 /* Semicolon */) && tokenOrKeyword.parent.kind === 1117 /* TopLevelTranslationList */) {
16035
16452
  return { translationsDeclaration: tokenOrKeyword.parent.parent };
16036
16453
  }
16037
- if (tokenOrKeyword.isToken(1047 /* OpenBrace */) && tokenOrKeyword.parent.kind === 1127 /* TranslationsDeclaration */) {
16454
+ if (tokenOrKeyword.isToken(1046 /* OpenBrace */) && tokenOrKeyword.parent.kind === 1127 /* TranslationsDeclaration */) {
16455
+ return { translationsDeclaration: tokenOrKeyword.parent };
16456
+ }
16457
+ if (tokenOrKeyword.isKeyword(1031 /* Translations */) && tokenOrKeyword.parent.kind === 1127 /* TranslationsDeclaration */) {
16038
16458
  return { translationsDeclaration: tokenOrKeyword.parent };
16039
16459
  }
16040
16460
  const type = SyntaxContextUtils2.ifTokenIsValidEndOfNodeThenNode(
@@ -16071,19 +16491,46 @@ var SyntaxContextFactory2 = class {
16071
16491
  if (tokenOrKeyword.isToken(1059 /* Semicolon */) && tokenOrKeyword.parent.kind === 1135 /* TypeMemberTranslationList */) {
16072
16492
  return { typeTranslation: tokenOrKeyword.parent.parent };
16073
16493
  }
16074
- if (tokenOrKeyword.isToken(1047 /* OpenBrace */) && tokenOrKeyword.parent.kind === 1141 /* TypeTranslationDeclaration */) {
16494
+ if (tokenOrKeyword.isToken(1046 /* OpenBrace */) && tokenOrKeyword.parent.kind === 1141 /* TypeTranslationDeclaration */) {
16075
16495
  return { typeTranslation: tokenOrKeyword.parent };
16076
16496
  }
16077
- const indexer = SyntaxContextUtils2.ifTokenIsValidEndOfNodeThenNode(tokenOrKeyword, 1048 /* IndexerTranslation */);
16078
- if (indexer !== void 0) {
16079
- return { typeTranslation: indexer.parent.parent };
16497
+ if (tokenOrKeyword.isToken(1037 /* Identifier */) && tokenOrKeyword.parent.kind === 1141 /* TypeTranslationDeclaration */ && tokenOrKeyword.parent.translatedName === tokenOrKeyword.value) {
16498
+ return { typeTranslation: tokenOrKeyword.parent };
16080
16499
  }
16081
- const variableOrVariant = SyntaxContextUtils2.ifTokenIsValidEndOfNodeThenNode(
16500
+ const translatedTypeParameterClause = SyntaxContextUtils2.ifTokenIsValidEndOfNodeThenNode(
16082
16501
  tokenOrKeyword,
16083
- 1031 /* FieldOrVariantTranslation */
16502
+ 1125 /* TranslationTypeParameterClause */
16084
16503
  );
16085
- if (variableOrVariant !== void 0) {
16086
- return { typeTranslation: variableOrVariant.parent.parent };
16504
+ if (translatedTypeParameterClause !== void 0 && tokenOrKeyword.parent.kind === 1141 /* TypeTranslationDeclaration */ && tokenOrKeyword.parent.translatedTypeParameterClause === translatedTypeParameterClause) {
16505
+ return { typeTranslation: tokenOrKeyword.parent };
16506
+ }
16507
+ const indexedElementGetter = SyntaxContextUtils2.ifTokenIsValidEndOfNodeThenNode(
16508
+ tokenOrKeyword,
16509
+ 1046 /* IndexedElementGetterTranslation */
16510
+ );
16511
+ if (indexedElementGetter !== void 0) {
16512
+ return { typeTranslation: indexedElementGetter.parent.parent };
16513
+ }
16514
+ const indexedElementSetter = SyntaxContextUtils2.ifTokenIsValidEndOfNodeThenNode(
16515
+ tokenOrKeyword,
16516
+ 1048 /* IndexedElementSetterTranslation */
16517
+ );
16518
+ if (indexedElementSetter !== void 0) {
16519
+ return { typeTranslation: indexedElementSetter.parent.parent };
16520
+ }
16521
+ const field = SyntaxContextUtils2.ifTokenIsValidEndOfNodeThenNode(
16522
+ tokenOrKeyword,
16523
+ 1032 /* FieldTranslation */
16524
+ );
16525
+ if (field !== void 0) {
16526
+ return { typeTranslation: field.parent.parent };
16527
+ }
16528
+ const variantValue = SyntaxContextUtils2.ifTokenIsValidEndOfNodeThenNode(
16529
+ tokenOrKeyword,
16530
+ 1145 /* VariantValueTranslation */
16531
+ );
16532
+ if (variantValue !== void 0) {
16533
+ return { typeTranslation: variantValue.parent.parent };
16087
16534
  }
16088
16535
  const method = SyntaxContextUtils2.ifTokenIsValidEndOfNodeThenNode(
16089
16536
  tokenOrKeyword,
@@ -16201,7 +16648,7 @@ var DefinitionServiceM = class extends DefinitionService {
16201
16648
  const tokenOrKeyword = getTokenOrKeywordsTouchingOffset2(sourceFile.getSyntaxNode(), offset).getSingleWithHighestPriority((t) => {
16202
16649
  if (t.isToken(1037 /* Identifier */) || t.isKeyword()) {
16203
16650
  return 2;
16204
- } else if (t.isToken(1019 /* Caret */) || t.isToken(1049 /* OpenSquareBracket */) || t.isToken(1022 /* CloseSquareBracket */)) {
16651
+ } else if (t.isToken(1019 /* Caret */) || t.isToken(1048 /* OpenSquareBracket */) || t.isToken(1022 /* CloseSquareBracket */)) {
16205
16652
  return 1;
16206
16653
  } else {
16207
16654
  return 0;
@@ -16345,7 +16792,7 @@ var EvaluatableExpressionServiceM = class {
16345
16792
  case 1087 /* PackageVariableGetterDeclaration */:
16346
16793
  case 1088 /* PackageVariableSetterDeclaration */:
16347
16794
  case 1030 /* FieldGetterDeclaration */:
16348
- case 1032 /* FieldSetterDeclaration */:
16795
+ case 1031 /* FieldSetterDeclaration */:
16349
16796
  case 1122 /* TranslationTextTemplateParameter */:
16350
16797
  case 1091 /* ParameterDeclaration */:
16351
16798
  case 1085 /* PackageTypeDeclaration */:
@@ -16366,7 +16813,8 @@ var EvaluatableExpressionServiceM = class {
16366
16813
  case 1076 /* PackageFunctionTranslationDeclaration */:
16367
16814
  case 1039 /* FunctionTypeTranslationDeclaration */:
16368
16815
  case 1089 /* PackageVariableTranslationDeclaration */:
16369
- case 1031 /* FieldOrVariantTranslation */:
16816
+ case 1032 /* FieldTranslation */:
16817
+ case 1145 /* VariantValueTranslation */:
16370
16818
  case 1141 /* TypeTranslationDeclaration */:
16371
16819
  case 1096 /* QualifiedName */:
16372
16820
  case 1063 /* MethodTranslation */:
@@ -16390,7 +16838,7 @@ var HoverServiceM = class extends HoverService {
16390
16838
  return 2;
16391
16839
  } else if (t.isToken(1004 /* Asterisk */)) {
16392
16840
  return 1;
16393
- } else if (t.isToken(1019 /* Caret */) || t.isToken(1049 /* OpenSquareBracket */) || t.isToken(1022 /* CloseSquareBracket */) || t.isToken(1047 /* OpenBrace */)) {
16841
+ } else if (t.isToken(1019 /* Caret */) || t.isToken(1048 /* OpenSquareBracket */) || t.isToken(1022 /* CloseSquareBracket */) || t.isToken(1046 /* OpenBrace */)) {
16394
16842
  return 1;
16395
16843
  } else {
16396
16844
  return 0;
@@ -16533,7 +16981,7 @@ var SemanticTokensServiceM = class {
16533
16981
  const meaning = analyzer.resolveIdentifierExpression(node);
16534
16982
  if (meaning.kind === "variable-access") {
16535
16983
  const variable = meaning.variable.entity;
16536
- if (variable.subkind === "field" && variable.isVariant()) {
16984
+ if (variable.subkind === "field" && variable.isVariantValue()) {
16537
16985
  result.push(new SemanticToken(
16538
16986
  node.rangeWithoutTrivia,
16539
16987
  3 /* Variant */,
@@ -16577,7 +17025,7 @@ var SemanticTokensServiceM = class {
16577
17025
  }
16578
17026
  if (meaning.kind === "variant-value-access") {
16579
17027
  const entity = meaning.field.entity;
16580
- if (entity.isVariant()) {
17028
+ if (entity.isVariantValue()) {
16581
17029
  result.push(
16582
17030
  new SemanticToken(
16583
17031
  node.identifier.rangeWithoutTrivia,
@@ -16592,7 +17040,7 @@ var SemanticTokensServiceM = class {
16592
17040
  const meaning = analyzer.resolveMemberAccessExpression(node);
16593
17041
  if (meaning.kind === "static-field-access") {
16594
17042
  const entity = meaning.field.entity;
16595
- if (entity.subkind === "field" && entity.isVariant()) {
17043
+ if (entity.subkind === "field" && entity.isVariantValue()) {
16596
17044
  result.push(
16597
17045
  new SemanticToken(
16598
17046
  node.memberName.rangeWithoutTrivia,
@@ -16800,7 +17248,7 @@ var ParametersSignatureHelpProvider2 = class {
16800
17248
  }
16801
17249
  break;
16802
17250
  }
16803
- case 1045 /* IndexedAccessExpression */: {
17251
+ case 1044 /* IndexedAccessExpression */: {
16804
17252
  if (this.offset >= node.openSquareBracketToken.rangeWithoutTrivia.end && (node.closeSquareBracketToken.rangeWithoutTrivia.isEmpty || this.offset <= node.closeSquareBracketToken.rangeWithoutTrivia.start)) {
16805
17253
  const args = ArgumentFactory2.createArgumentsOfIndexedAccessExpression(node);
16806
17254
  const argumentIndex = this.getArgumentIndexInList(node.argumentList.elements, this.offset);
@@ -18222,24 +18670,37 @@ ${e}`);
18222
18670
  });
18223
18671
  }
18224
18672
  onCompletionResolve(item) {
18225
- if (!isCompletionItemData(item.data)) {
18226
- return item;
18227
- }
18228
- const { cacheId, indexInCache } = item.data;
18229
- const resolutionResult = this.completionServiceA.resolveCompletionItem(cacheId, indexInCache);
18230
- let result;
18231
- if (resolutionResult.kind === "item") {
18232
- result = this.convertCompletionItem(resolutionResult.value, resolutionResult.sourceFile);
18233
- result.textEdit = item.textEdit;
18234
- } else {
18235
- result = item;
18236
- }
18237
- return result;
18673
+ return __async(this, null, function* () {
18674
+ if (!isCompletionItemData(item.data)) {
18675
+ return item;
18676
+ }
18677
+ const { cacheId, indexInCache, dialect } = item.data;
18678
+ let resolutionResult;
18679
+ switch (dialect) {
18680
+ case 0 /* ArtelA */:
18681
+ resolutionResult = this.completionServiceA.resolveCompletionItem(cacheId, indexInCache);
18682
+ break;
18683
+ case 1 /* ArtelM */:
18684
+ resolutionResult = this.completionServiceM.resolveCompletionItem(cacheId, indexInCache);
18685
+ break;
18686
+ default:
18687
+ Debug.never(dialect);
18688
+ }
18689
+ let result;
18690
+ if (resolutionResult.kind === "item") {
18691
+ result = this.convertCompletionItem(resolutionResult.value, resolutionResult.sourceFile);
18692
+ result.textEdit = item.textEdit;
18693
+ } else {
18694
+ result = item;
18695
+ }
18696
+ return result;
18697
+ });
18238
18698
  }
18239
18699
  convertCompletionItem(item, sourceFile) {
18240
18700
  const data = {
18241
18701
  cacheId: item.cacheId,
18242
- indexInCache: item.indexInCache
18702
+ indexInCache: item.indexInCache,
18703
+ dialect: sourceFile.dialect
18243
18704
  };
18244
18705
  let textEdit;
18245
18706
  if (item.editRange !== void 0) {