yaml-language-server 1.11.1-dcdfa10.0 → 1.11.1-e8be2e1.0

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 (248) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +9 -0
  3. package/eslint-result.sarif +4397 -0
  4. package/lib/esm/languageserver/handlers/languageHandlers.js +4 -1
  5. package/lib/esm/languageserver/handlers/languageHandlers.js.map +1 -1
  6. package/lib/esm/languageserver/handlers/schemaSelectionHandlers.js +44 -60
  7. package/lib/esm/languageserver/handlers/schemaSelectionHandlers.js.map +1 -1
  8. package/lib/esm/languageserver/handlers/settingsHandlers.d.ts +1 -1
  9. package/lib/esm/languageserver/handlers/settingsHandlers.js +161 -183
  10. package/lib/esm/languageserver/handlers/settingsHandlers.js.map +1 -1
  11. package/lib/esm/languageserver/telemetry.d.ts +2 -12
  12. package/lib/esm/languageserver/telemetry.js +1 -1
  13. package/lib/esm/languageserver/telemetry.js.map +1 -1
  14. package/lib/esm/languageservice/jsonSchema.d.ts +1 -0
  15. package/lib/esm/languageservice/parser/jsonParser07.d.ts +2 -0
  16. package/lib/esm/languageservice/parser/jsonParser07.js +44 -19
  17. package/lib/esm/languageservice/parser/jsonParser07.js.map +1 -1
  18. package/lib/esm/languageservice/parser/yaml-documents.js +6 -5
  19. package/lib/esm/languageservice/parser/yaml-documents.js.map +1 -1
  20. package/lib/esm/languageservice/parser/yamlParser07.js +1 -2
  21. package/lib/esm/languageservice/parser/yamlParser07.js.map +1 -1
  22. package/lib/esm/languageservice/services/documentSymbols.d.ts +1 -1
  23. package/lib/esm/languageservice/services/validation/yaml-style.js +2 -3
  24. package/lib/esm/languageservice/services/validation/yaml-style.js.map +1 -1
  25. package/lib/esm/languageservice/services/yamlCodeActions.js +2 -3
  26. package/lib/esm/languageservice/services/yamlCodeActions.js.map +1 -1
  27. package/lib/esm/languageservice/services/yamlCodeLens.d.ts +1 -1
  28. package/lib/esm/languageservice/services/yamlCodeLens.js +23 -34
  29. package/lib/esm/languageservice/services/yamlCodeLens.js.map +1 -1
  30. package/lib/esm/languageservice/services/yamlCommands.js +3 -12
  31. package/lib/esm/languageservice/services/yamlCommands.js.map +1 -1
  32. package/lib/esm/languageservice/services/yamlCompletion.d.ts +3 -2
  33. package/lib/esm/languageservice/services/yamlCompletion.js +439 -414
  34. package/lib/esm/languageservice/services/yamlCompletion.js.map +1 -1
  35. package/lib/esm/languageservice/services/yamlDefinition.d.ts +1 -1
  36. package/lib/esm/languageservice/services/yamlFolding.js +1 -2
  37. package/lib/esm/languageservice/services/yamlFolding.js.map +1 -1
  38. package/lib/esm/languageservice/services/yamlHover.d.ts +1 -1
  39. package/lib/esm/languageservice/services/yamlLinks.d.ts +1 -1
  40. package/lib/esm/languageservice/services/yamlOnTypeFormatting.js +0 -1
  41. package/lib/esm/languageservice/services/yamlOnTypeFormatting.js.map +1 -1
  42. package/lib/esm/languageservice/services/yamlSchemaService.js +202 -218
  43. package/lib/esm/languageservice/services/yamlSchemaService.js.map +1 -1
  44. package/lib/esm/languageservice/services/yamlValidation.d.ts +1 -1
  45. package/lib/esm/languageservice/services/yamlValidation.js +61 -71
  46. package/lib/esm/languageservice/services/yamlValidation.js.map +1 -1
  47. package/lib/esm/languageservice/telemetry.d.ts +16 -0
  48. package/lib/esm/languageservice/telemetry.js +6 -0
  49. package/lib/esm/languageservice/telemetry.js.map +1 -0
  50. package/lib/esm/languageservice/utils/astUtils.js +2 -6
  51. package/lib/esm/languageservice/utils/astUtils.js.map +1 -1
  52. package/lib/esm/languageservice/utils/indentationGuesser.js +0 -1
  53. package/lib/esm/languageservice/utils/indentationGuesser.js.map +1 -1
  54. package/lib/esm/languageservice/utils/objects.js +1 -2
  55. package/lib/esm/languageservice/utils/objects.js.map +1 -1
  56. package/lib/esm/languageservice/utils/schemaUrls.d.ts +1 -1
  57. package/lib/esm/languageservice/utils/schemaUrls.js +2 -4
  58. package/lib/esm/languageservice/utils/schemaUrls.js.map +1 -1
  59. package/lib/esm/languageservice/utils/schemaUtils.d.ts +2 -0
  60. package/lib/esm/languageservice/utils/schemaUtils.js +9 -6
  61. package/lib/esm/languageservice/utils/schemaUtils.js.map +1 -1
  62. package/lib/esm/languageservice/yamlLanguageService.d.ts +2 -3
  63. package/lib/esm/languageservice/yamlLanguageService.js +0 -1
  64. package/lib/esm/languageservice/yamlLanguageService.js.map +1 -1
  65. package/lib/esm/server.js +5 -14
  66. package/lib/esm/server.js.map +1 -1
  67. package/lib/esm/webworker/yamlServerMain.js +2 -2
  68. package/lib/esm/webworker/yamlServerMain.js.map +1 -1
  69. package/lib/esm/yamlServerInit.d.ts +1 -1
  70. package/lib/umd/languageserver/handlers/languageHandlers.js +4 -1
  71. package/lib/umd/languageserver/handlers/languageHandlers.js.map +1 -1
  72. package/lib/umd/languageserver/handlers/schemaSelectionHandlers.js +44 -60
  73. package/lib/umd/languageserver/handlers/schemaSelectionHandlers.js.map +1 -1
  74. package/lib/umd/languageserver/handlers/settingsHandlers.d.ts +1 -1
  75. package/lib/umd/languageserver/handlers/settingsHandlers.js +161 -183
  76. package/lib/umd/languageserver/handlers/settingsHandlers.js.map +1 -1
  77. package/lib/umd/languageserver/telemetry.d.ts +2 -12
  78. package/lib/umd/languageserver/telemetry.js +3 -3
  79. package/lib/umd/languageserver/telemetry.js.map +1 -1
  80. package/lib/umd/languageservice/jsonSchema.d.ts +1 -0
  81. package/lib/umd/languageservice/parser/jsonParser07.d.ts +2 -0
  82. package/lib/umd/languageservice/parser/jsonParser07.js +45 -20
  83. package/lib/umd/languageservice/parser/jsonParser07.js.map +1 -1
  84. package/lib/umd/languageservice/parser/yaml-documents.js +6 -5
  85. package/lib/umd/languageservice/parser/yaml-documents.js.map +1 -1
  86. package/lib/umd/languageservice/parser/yamlParser07.js +1 -2
  87. package/lib/umd/languageservice/parser/yamlParser07.js.map +1 -1
  88. package/lib/umd/languageservice/services/documentSymbols.d.ts +1 -1
  89. package/lib/umd/languageservice/services/validation/yaml-style.js +2 -3
  90. package/lib/umd/languageservice/services/validation/yaml-style.js.map +1 -1
  91. package/lib/umd/languageservice/services/yamlCodeActions.js +2 -3
  92. package/lib/umd/languageservice/services/yamlCodeActions.js.map +1 -1
  93. package/lib/umd/languageservice/services/yamlCodeLens.d.ts +1 -1
  94. package/lib/umd/languageservice/services/yamlCodeLens.js +23 -34
  95. package/lib/umd/languageservice/services/yamlCodeLens.js.map +1 -1
  96. package/lib/umd/languageservice/services/yamlCommands.js +3 -12
  97. package/lib/umd/languageservice/services/yamlCommands.js.map +1 -1
  98. package/lib/umd/languageservice/services/yamlCompletion.d.ts +3 -2
  99. package/lib/umd/languageservice/services/yamlCompletion.js +438 -413
  100. package/lib/umd/languageservice/services/yamlCompletion.js.map +1 -1
  101. package/lib/umd/languageservice/services/yamlDefinition.d.ts +1 -1
  102. package/lib/umd/languageservice/services/yamlFolding.js +1 -2
  103. package/lib/umd/languageservice/services/yamlFolding.js.map +1 -1
  104. package/lib/umd/languageservice/services/yamlHover.d.ts +1 -1
  105. package/lib/umd/languageservice/services/yamlLinks.d.ts +1 -1
  106. package/lib/umd/languageservice/services/yamlOnTypeFormatting.js +0 -1
  107. package/lib/umd/languageservice/services/yamlOnTypeFormatting.js.map +1 -1
  108. package/lib/umd/languageservice/services/yamlSchemaService.js +202 -218
  109. package/lib/umd/languageservice/services/yamlSchemaService.js.map +1 -1
  110. package/lib/umd/languageservice/services/yamlValidation.d.ts +1 -1
  111. package/lib/umd/languageservice/services/yamlValidation.js +61 -71
  112. package/lib/umd/languageservice/services/yamlValidation.js.map +1 -1
  113. package/lib/umd/languageservice/telemetry.d.ts +16 -0
  114. package/lib/umd/languageservice/telemetry.js +17 -0
  115. package/lib/umd/languageservice/telemetry.js.map +1 -0
  116. package/lib/umd/languageservice/utils/astUtils.js +2 -6
  117. package/lib/umd/languageservice/utils/astUtils.js.map +1 -1
  118. package/lib/umd/languageservice/utils/indentationGuesser.js +0 -1
  119. package/lib/umd/languageservice/utils/indentationGuesser.js.map +1 -1
  120. package/lib/umd/languageservice/utils/objects.js +1 -2
  121. package/lib/umd/languageservice/utils/objects.js.map +1 -1
  122. package/lib/umd/languageservice/utils/schemaUrls.d.ts +1 -1
  123. package/lib/umd/languageservice/utils/schemaUrls.js +2 -4
  124. package/lib/umd/languageservice/utils/schemaUrls.js.map +1 -1
  125. package/lib/umd/languageservice/utils/schemaUtils.d.ts +2 -0
  126. package/lib/umd/languageservice/utils/schemaUtils.js +12 -7
  127. package/lib/umd/languageservice/utils/schemaUtils.js.map +1 -1
  128. package/lib/umd/languageservice/yamlLanguageService.d.ts +2 -3
  129. package/lib/umd/languageservice/yamlLanguageService.js +0 -1
  130. package/lib/umd/languageservice/yamlLanguageService.js.map +1 -1
  131. package/lib/umd/server.js +4 -13
  132. package/lib/umd/server.js.map +1 -1
  133. package/lib/umd/webworker/yamlServerMain.js +1 -1
  134. package/lib/umd/webworker/yamlServerMain.js.map +1 -1
  135. package/lib/umd/yamlServerInit.d.ts +1 -1
  136. package/out/server/src/languageserver/handlers/languageHandlers.js +4 -1
  137. package/out/server/src/languageserver/handlers/languageHandlers.js.map +1 -1
  138. package/out/server/src/languageserver/handlers/schemaSelectionHandlers.js +44 -60
  139. package/out/server/src/languageserver/handlers/schemaSelectionHandlers.js.map +1 -1
  140. package/out/server/src/languageserver/handlers/settingsHandlers.d.ts +1 -1
  141. package/out/server/src/languageserver/handlers/settingsHandlers.js +161 -183
  142. package/out/server/src/languageserver/handlers/settingsHandlers.js.map +1 -1
  143. package/out/server/src/languageserver/telemetry.d.ts +2 -12
  144. package/out/server/src/languageserver/telemetry.js +3 -3
  145. package/out/server/src/languageserver/telemetry.js.map +1 -1
  146. package/out/server/src/languageservice/jsonSchema.d.ts +1 -0
  147. package/out/server/src/languageservice/parser/jsonParser07.d.ts +2 -0
  148. package/out/server/src/languageservice/parser/jsonParser07.js +44 -19
  149. package/out/server/src/languageservice/parser/jsonParser07.js.map +1 -1
  150. package/out/server/src/languageservice/parser/yaml-documents.js +6 -5
  151. package/out/server/src/languageservice/parser/yaml-documents.js.map +1 -1
  152. package/out/server/src/languageservice/parser/yamlParser07.js +1 -2
  153. package/out/server/src/languageservice/parser/yamlParser07.js.map +1 -1
  154. package/out/server/src/languageservice/services/documentSymbols.d.ts +1 -1
  155. package/out/server/src/languageservice/services/validation/yaml-style.js +2 -3
  156. package/out/server/src/languageservice/services/validation/yaml-style.js.map +1 -1
  157. package/out/server/src/languageservice/services/yamlCodeActions.js +2 -3
  158. package/out/server/src/languageservice/services/yamlCodeActions.js.map +1 -1
  159. package/out/server/src/languageservice/services/yamlCodeLens.d.ts +1 -1
  160. package/out/server/src/languageservice/services/yamlCodeLens.js +23 -34
  161. package/out/server/src/languageservice/services/yamlCodeLens.js.map +1 -1
  162. package/out/server/src/languageservice/services/yamlCommands.js +3 -12
  163. package/out/server/src/languageservice/services/yamlCommands.js.map +1 -1
  164. package/out/server/src/languageservice/services/yamlCompletion.d.ts +3 -2
  165. package/out/server/src/languageservice/services/yamlCompletion.js +438 -413
  166. package/out/server/src/languageservice/services/yamlCompletion.js.map +1 -1
  167. package/out/server/src/languageservice/services/yamlDefinition.d.ts +1 -1
  168. package/out/server/src/languageservice/services/yamlFolding.js +1 -2
  169. package/out/server/src/languageservice/services/yamlFolding.js.map +1 -1
  170. package/out/server/src/languageservice/services/yamlHover.d.ts +1 -1
  171. package/out/server/src/languageservice/services/yamlLinks.d.ts +1 -1
  172. package/out/server/src/languageservice/services/yamlOnTypeFormatting.js +0 -1
  173. package/out/server/src/languageservice/services/yamlOnTypeFormatting.js.map +1 -1
  174. package/out/server/src/languageservice/services/yamlSchemaService.js +202 -218
  175. package/out/server/src/languageservice/services/yamlSchemaService.js.map +1 -1
  176. package/out/server/src/languageservice/services/yamlValidation.d.ts +1 -1
  177. package/out/server/src/languageservice/services/yamlValidation.js +61 -71
  178. package/out/server/src/languageservice/services/yamlValidation.js.map +1 -1
  179. package/out/server/src/languageservice/telemetry.d.ts +16 -0
  180. package/out/server/src/languageservice/telemetry.js +7 -0
  181. package/out/server/src/languageservice/telemetry.js.map +1 -0
  182. package/out/server/src/languageservice/utils/astUtils.js +2 -6
  183. package/out/server/src/languageservice/utils/astUtils.js.map +1 -1
  184. package/out/server/src/languageservice/utils/indentationGuesser.js +0 -1
  185. package/out/server/src/languageservice/utils/indentationGuesser.js.map +1 -1
  186. package/out/server/src/languageservice/utils/objects.js +1 -2
  187. package/out/server/src/languageservice/utils/objects.js.map +1 -1
  188. package/out/server/src/languageservice/utils/schemaUrls.d.ts +1 -1
  189. package/out/server/src/languageservice/utils/schemaUrls.js +2 -4
  190. package/out/server/src/languageservice/utils/schemaUrls.js.map +1 -1
  191. package/out/server/src/languageservice/utils/schemaUtils.d.ts +2 -0
  192. package/out/server/src/languageservice/utils/schemaUtils.js +12 -7
  193. package/out/server/src/languageservice/utils/schemaUtils.js.map +1 -1
  194. package/out/server/src/languageservice/yamlLanguageService.d.ts +2 -3
  195. package/out/server/src/languageservice/yamlLanguageService.js +0 -1
  196. package/out/server/src/languageservice/yamlLanguageService.js.map +1 -1
  197. package/out/server/src/server.js +4 -13
  198. package/out/server/src/server.js.map +1 -1
  199. package/out/server/src/webworker/yamlServerMain.js +1 -1
  200. package/out/server/src/webworker/yamlServerMain.js.map +1 -1
  201. package/out/server/src/yamlServerInit.d.ts +1 -1
  202. package/out/server/test/autoCompletion.test.js +267 -178
  203. package/out/server/test/autoCompletion.test.js.map +1 -1
  204. package/out/server/test/autoCompletionFix.test.js +222 -134
  205. package/out/server/test/autoCompletionFix.test.js.map +1 -1
  206. package/out/server/test/code-action-schema.test.js +6 -15
  207. package/out/server/test/code-action-schema.test.js.map +1 -1
  208. package/out/server/test/defaultSnippets.test.js +11 -19
  209. package/out/server/test/defaultSnippets.test.js.map +1 -1
  210. package/out/server/test/findLinks.test.js +3 -12
  211. package/out/server/test/findLinks.test.js.map +1 -1
  212. package/out/server/test/hover.test.js +64 -73
  213. package/out/server/test/hover.test.js.map +1 -1
  214. package/out/server/test/integration.test.js +3 -12
  215. package/out/server/test/integration.test.js.map +1 -1
  216. package/out/server/test/jsonParser.test.js +15 -26
  217. package/out/server/test/jsonParser.test.js.map +1 -1
  218. package/out/server/test/multipleDocuments.test.js +3 -12
  219. package/out/server/test/multipleDocuments.test.js.map +1 -1
  220. package/out/server/test/schema.test.js +71 -85
  221. package/out/server/test/schema.test.js.map +1 -1
  222. package/out/server/test/schemaRequestHandler.test.js +9 -18
  223. package/out/server/test/schemaRequestHandler.test.js.map +1 -1
  224. package/out/server/test/schemaSelectionHandlers.test.js +12 -21
  225. package/out/server/test/schemaSelectionHandlers.test.js.map +1 -1
  226. package/out/server/test/schemaValidation.test.js +216 -97
  227. package/out/server/test/schemaValidation.test.js.map +1 -1
  228. package/out/server/test/settingsHandlers.test.js +44 -55
  229. package/out/server/test/settingsHandlers.test.js.map +1 -1
  230. package/out/server/test/telemetry.test.js +1 -1
  231. package/out/server/test/telemetry.test.js.map +1 -1
  232. package/out/server/test/utils/testsTypes.d.ts +3 -2
  233. package/out/server/test/utils/testsTypes.js +1 -1
  234. package/out/server/test/utils/testsTypes.js.map +1 -1
  235. package/out/server/test/utils/verifyError.d.ts +1 -1
  236. package/out/server/test/utils/verifyError.js +22 -20
  237. package/out/server/test/utils/verifyError.js.map +1 -1
  238. package/out/server/test/yamlCodeLens.test.js +25 -34
  239. package/out/server/test/yamlCodeLens.test.js.map +1 -1
  240. package/out/server/test/yamlCommands.test.js +6 -15
  241. package/out/server/test/yamlCommands.test.js.map +1 -1
  242. package/out/server/test/yamlSchema.test.js +9 -18
  243. package/out/server/test/yamlSchema.test.js.map +1 -1
  244. package/out/server/test/yamlSchemaService.test.js +9 -18
  245. package/out/server/test/yamlSchemaService.test.js.map +1 -1
  246. package/out/server/test/yamlValidation.test.js +30 -39
  247. package/out/server/test/yamlValidation.test.js.map +1 -1
  248. package/package.json +3 -2
@@ -2,15 +2,6 @@
2
2
  * Copyright (c) Red Hat, Inc. All rights reserved.
3
3
  * Licensed under the MIT License. See License.txt in the project root for license information.
4
4
  *--------------------------------------------------------------------------------------------*/
5
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7
- return new (P || (P = Promise))(function (resolve, reject) {
8
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
9
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
10
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
11
- step((generator = generator.apply(thisArg, _arguments || [])).next());
12
- });
13
- };
14
5
  (function (factory) {
15
6
  if (typeof module === "object" && typeof module.exports === "object") {
16
7
  var v = factory(require, exports);
@@ -58,409 +49,438 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
58
49
  this.disableDefaultProperties = languageSettings.disableDefaultProperties;
59
50
  this.parentSkeletonSelectedFirst = languageSettings.parentSkeletonSelectedFirst;
60
51
  }
61
- doComplete(document, position, isKubernetes = false, doComplete = true) {
62
- return __awaiter(this, void 0, void 0, function* () {
63
- const result = vscode_languageserver_types_1.CompletionList.create([], false);
64
- if (!this.completionEnabled) {
65
- return result;
66
- }
67
- const doc = this.yamlDocument.getYamlDocument(document, { customTags: this.customTags, yamlVersion: this.yamlVersion }, true);
68
- const textBuffer = new textBuffer_1.TextBuffer(document);
69
- if (!this.configuredIndentation) {
70
- const indent = (0, indentationGuesser_1.guessIndentation)(textBuffer, 2, true);
71
- this.indentation = indent.insertSpaces ? ' '.repeat(indent.tabSize) : '\t';
72
- }
73
- else {
74
- this.indentation = this.configuredIndentation;
75
- }
76
- (0, isKubernetes_1.setKubernetesParserOption)(doc.documents, isKubernetes);
77
- const offset = document.offsetAt(position);
78
- const text = document.getText();
79
- if (text.charAt(offset - 1) === ':') {
80
- return Promise.resolve(result);
81
- }
82
- let currentDoc = (0, arrUtils_1.matchOffsetToDocument)(offset, doc);
83
- if (currentDoc === null) {
84
- return Promise.resolve(result);
85
- }
86
- // as we modify AST for completion, we need to use copy of original document
87
- currentDoc = currentDoc.clone();
88
- let [node, foundByClosest] = currentDoc.getNodeFromPosition(offset, textBuffer, this.indentation.length);
89
- const currentWord = this.getCurrentWord(document, offset);
90
- let lineContent = textBuffer.getLineContent(position.line);
91
- const lineAfterPosition = lineContent.substring(position.character);
92
- const areOnlySpacesAfterPosition = /^[ ]+\n?$/.test(lineAfterPosition);
93
- this.arrayPrefixIndentation = '';
94
- let overwriteRange = null;
95
- if (areOnlySpacesAfterPosition) {
96
- overwriteRange = vscode_languageserver_types_1.Range.create(position, vscode_languageserver_types_1.Position.create(position.line, lineContent.length));
97
- const isOnlyWhitespace = lineContent.trim().length === 0;
98
- const isOnlyDash = lineContent.match(/^\s*(-)\s*$/);
99
- if (node && (0, yaml_1.isScalar)(node) && !isOnlyWhitespace && !isOnlyDash) {
100
- // line contains part of a key with trailing spaces, adjust the overwrite range to include only the text
101
- const matches = lineContent.match(/^([\s-]*)[^:]+[ \t]+\n?$/);
102
- if (matches === null || matches === void 0 ? void 0 : matches.length) {
103
- overwriteRange = vscode_languageserver_types_1.Range.create(vscode_languageserver_types_1.Position.create(position.line, matches[1].length), vscode_languageserver_types_1.Position.create(position.line, lineContent.length));
104
- }
105
- }
106
- }
107
- else if (node && (0, yaml_1.isScalar)(node) && node.value === 'null') {
108
- const nodeStartPos = document.positionAt(node.range[0]);
109
- nodeStartPos.character += 1;
110
- const nodeEndPos = document.positionAt(node.range[2]);
111
- nodeEndPos.character += 1;
112
- overwriteRange = vscode_languageserver_types_1.Range.create(nodeStartPos, nodeEndPos);
113
- }
114
- else if (node && (0, yaml_1.isScalar)(node) && node.value) {
115
- const start = document.positionAt(node.range[0]);
116
- if (offset > 0 && start.character > 0 && text.charAt(offset - 1) === '-') {
117
- start.character -= 1;
52
+ async doComplete(document, position, isKubernetes = false, doComplete = true) {
53
+ const result = vscode_languageserver_types_1.CompletionList.create([], false);
54
+ if (!this.completionEnabled) {
55
+ return result;
56
+ }
57
+ const doc = this.yamlDocument.getYamlDocument(document, { customTags: this.customTags, yamlVersion: this.yamlVersion }, true);
58
+ const textBuffer = new textBuffer_1.TextBuffer(document);
59
+ if (!this.configuredIndentation) {
60
+ const indent = (0, indentationGuesser_1.guessIndentation)(textBuffer, 2, true);
61
+ this.indentation = indent.insertSpaces ? ' '.repeat(indent.tabSize) : '\t';
62
+ }
63
+ else {
64
+ this.indentation = this.configuredIndentation;
65
+ }
66
+ (0, isKubernetes_1.setKubernetesParserOption)(doc.documents, isKubernetes);
67
+ // set parser options
68
+ for (const jsonDoc of doc.documents) {
69
+ jsonDoc.uri = document.uri;
70
+ }
71
+ const offset = document.offsetAt(position);
72
+ const text = document.getText();
73
+ if (text.charAt(offset - 1) === ':') {
74
+ return Promise.resolve(result);
75
+ }
76
+ let currentDoc = (0, arrUtils_1.matchOffsetToDocument)(offset, doc);
77
+ if (currentDoc === null) {
78
+ return Promise.resolve(result);
79
+ }
80
+ // as we modify AST for completion, we need to use copy of original document
81
+ currentDoc = currentDoc.clone();
82
+ let [node, foundByClosest] = currentDoc.getNodeFromPosition(offset, textBuffer, this.indentation.length);
83
+ const currentWord = this.getCurrentWord(document, offset);
84
+ let lineContent = textBuffer.getLineContent(position.line);
85
+ const lineAfterPosition = lineContent.substring(position.character);
86
+ const areOnlySpacesAfterPosition = /^[ ]+\n?$/.test(lineAfterPosition);
87
+ this.arrayPrefixIndentation = '';
88
+ let overwriteRange = null;
89
+ if (areOnlySpacesAfterPosition) {
90
+ overwriteRange = vscode_languageserver_types_1.Range.create(position, vscode_languageserver_types_1.Position.create(position.line, lineContent.length));
91
+ const isOnlyWhitespace = lineContent.trim().length === 0;
92
+ const isOnlyDash = lineContent.match(/^\s*(-)\s*$/);
93
+ if (node && (0, yaml_1.isScalar)(node) && !isOnlyWhitespace && !isOnlyDash) {
94
+ // line contains part of a key with trailing spaces, adjust the overwrite range to include only the text
95
+ const matches = lineContent.match(/^([\s-]*)[^:]+[ \t]+\n?$/);
96
+ if (matches?.length) {
97
+ overwriteRange = vscode_languageserver_types_1.Range.create(vscode_languageserver_types_1.Position.create(position.line, matches[1].length), vscode_languageserver_types_1.Position.create(position.line, lineContent.length));
118
98
  }
119
- overwriteRange = vscode_languageserver_types_1.Range.create(start, document.positionAt(node.range[1]));
120
99
  }
121
- else if (node && (0, yaml_1.isScalar)(node) && node.value === null && currentWord === '-') {
122
- overwriteRange = vscode_languageserver_types_1.Range.create(position, position);
123
- this.arrayPrefixIndentation = ' ';
100
+ }
101
+ else if (node && (0, yaml_1.isScalar)(node) && node.value === 'null') {
102
+ const nodeStartPos = document.positionAt(node.range[0]);
103
+ nodeStartPos.character += 1;
104
+ const nodeEndPos = document.positionAt(node.range[2]);
105
+ nodeEndPos.character += 1;
106
+ overwriteRange = vscode_languageserver_types_1.Range.create(nodeStartPos, nodeEndPos);
107
+ }
108
+ else if (node && (0, yaml_1.isScalar)(node) && node.value) {
109
+ const start = document.positionAt(node.range[0]);
110
+ if (offset > 0 && start.character > 0 && text.charAt(offset - 1) === '-') {
111
+ start.character -= 1;
124
112
  }
125
- else {
126
- let overwriteStart = document.offsetAt(position) - currentWord.length;
127
- if (overwriteStart > 0 && text[overwriteStart - 1] === '"') {
128
- overwriteStart--;
129
- }
130
- overwriteRange = vscode_languageserver_types_1.Range.create(document.positionAt(overwriteStart), position);
113
+ overwriteRange = vscode_languageserver_types_1.Range.create(start, document.positionAt(node.range[1]));
114
+ }
115
+ else if (node && (0, yaml_1.isScalar)(node) && node.value === null && currentWord === '-') {
116
+ overwriteRange = vscode_languageserver_types_1.Range.create(position, position);
117
+ this.arrayPrefixIndentation = ' ';
118
+ }
119
+ else {
120
+ let overwriteStart = document.offsetAt(position) - currentWord.length;
121
+ if (overwriteStart > 0 && text[overwriteStart - 1] === '"') {
122
+ overwriteStart--;
131
123
  }
132
- const proposed = {};
133
- const existingProposeItem = '__';
134
- const collector = {
135
- add: (completionItem) => {
136
- const addSuggestionForParent = function (completionItem) {
137
- var _a;
138
- const existsInYaml = ((_a = proposed[completionItem.label]) === null || _a === void 0 ? void 0 : _a.label) === existingProposeItem;
139
- //don't put to parent suggestion if already in yaml
140
- if (existsInYaml) {
141
- return;
142
- }
143
- const schema = completionItem.parent.schema;
144
- const schemaType = (0, schemaUtils_1.getSchemaTypeName)(schema);
145
- const schemaDescription = schema.markdownDescription || schema.description;
146
- let parentCompletion = result.items.find((item) => { var _a; return ((_a = item.parent) === null || _a === void 0 ? void 0 : _a.schema) === schema && item.kind === parentCompletionKind; });
147
- if (parentCompletion && parentCompletion.parent.insertTexts.includes(completionItem.insertText)) {
148
- // already exists in the parent
149
- return;
150
- }
151
- else if (!parentCompletion) {
152
- // create a new parent
153
- parentCompletion = Object.assign(Object.assign({}, completionItem), { label: schemaType, documentation: schemaDescription, sortText: '_' + schemaType, kind: parentCompletionKind });
154
- parentCompletion.parent.insertTexts = [completionItem.insertText];
155
- result.items.push(parentCompletion);
156
- }
157
- else {
158
- // add to the existing parent
159
- parentCompletion.parent.insertTexts.push(completionItem.insertText);
160
- }
161
- };
162
- const isForParentCompletion = !!completionItem.parent;
163
- let label = completionItem.label;
164
- if (!label) {
165
- // we receive not valid CompletionItem as `label` is mandatory field, so just ignore it
166
- console.warn(`Ignoring CompletionItem without label: ${JSON.stringify(completionItem)}`);
124
+ overwriteRange = vscode_languageserver_types_1.Range.create(document.positionAt(overwriteStart), position);
125
+ }
126
+ const proposed = {};
127
+ const existingProposeItem = '__';
128
+ const collector = {
129
+ add: (completionItem, oneOfSchema) => {
130
+ const addSuggestionForParent = function (completionItem) {
131
+ const existsInYaml = proposed[completionItem.label]?.label === existingProposeItem;
132
+ //don't put to parent suggestion if already in yaml
133
+ if (existsInYaml) {
167
134
  return;
168
135
  }
169
- if (!(0, objects_1.isString)(label)) {
170
- label = String(label);
171
- }
172
- label = label.replace(/[\n]/g, '↵');
173
- if (label.length > 60) {
174
- const shortendedLabel = label.substr(0, 57).trim() + '...';
175
- if (!proposed[shortendedLabel]) {
176
- label = shortendedLabel;
177
- }
136
+ const schema = completionItem.parent.schema;
137
+ const schemaType = (0, schemaUtils_1.getSchemaTypeName)(schema);
138
+ const schemaDescription = schema.markdownDescription || schema.description;
139
+ let parentCompletion = result.items.find((item) => item.parent?.schema === schema && item.kind === parentCompletionKind);
140
+ if (parentCompletion && parentCompletion.parent.insertTexts.includes(completionItem.insertText)) {
141
+ // already exists in the parent
142
+ return;
178
143
  }
179
- // trim $1 from end of completion
180
- if (completionItem.insertText.endsWith('$1') && !isForParentCompletion) {
181
- completionItem.insertText = completionItem.insertText.substr(0, completionItem.insertText.length - 2);
144
+ else if (!parentCompletion) {
145
+ // create a new parent
146
+ parentCompletion = {
147
+ ...completionItem,
148
+ label: schemaType,
149
+ documentation: schemaDescription,
150
+ sortText: '_' + schemaType,
151
+ kind: parentCompletionKind,
152
+ };
153
+ parentCompletion.label = parentCompletion.label || completionItem.label;
154
+ parentCompletion.parent.insertTexts = [completionItem.insertText];
155
+ result.items.push(parentCompletion);
182
156
  }
183
- if (overwriteRange && overwriteRange.start.line === overwriteRange.end.line) {
184
- completionItem.textEdit = vscode_languageserver_types_1.TextEdit.replace(overwriteRange, completionItem.insertText);
157
+ else {
158
+ // add to the existing parent
159
+ parentCompletion.parent.insertTexts.push(completionItem.insertText);
185
160
  }
186
- completionItem.label = label;
187
- if (isForParentCompletion) {
188
- addSuggestionForParent(completionItem);
189
- return;
161
+ };
162
+ const isForParentCompletion = !!completionItem.parent;
163
+ let label = completionItem.label;
164
+ if (!label) {
165
+ // we receive not valid CompletionItem as `label` is mandatory field, so just ignore it
166
+ console.warn(`Ignoring CompletionItem without label: ${JSON.stringify(completionItem)}`);
167
+ return;
168
+ }
169
+ if (!(0, objects_1.isString)(label)) {
170
+ label = String(label);
171
+ }
172
+ label = label.replace(/[\n]/g, '↵');
173
+ if (label.length > 60) {
174
+ const shortendedLabel = label.substr(0, 57).trim() + '...';
175
+ if (!proposed[shortendedLabel]) {
176
+ label = shortendedLabel;
190
177
  }
191
- if (this.arrayPrefixIndentation) {
192
- this.updateCompletionText(completionItem, this.arrayPrefixIndentation + completionItem.insertText);
178
+ }
179
+ // trim $1 from end of completion
180
+ if (completionItem.insertText.endsWith('$1') && !isForParentCompletion) {
181
+ completionItem.insertText = completionItem.insertText.substr(0, completionItem.insertText.length - 2);
182
+ }
183
+ if (overwriteRange && overwriteRange.start.line === overwriteRange.end.line) {
184
+ completionItem.textEdit = vscode_languageserver_types_1.TextEdit.replace(overwriteRange, completionItem.insertText);
185
+ }
186
+ completionItem.label = label;
187
+ if (isForParentCompletion) {
188
+ addSuggestionForParent(completionItem);
189
+ return;
190
+ }
191
+ if (this.arrayPrefixIndentation) {
192
+ this.updateCompletionText(completionItem, this.arrayPrefixIndentation + completionItem.insertText);
193
+ }
194
+ const existing = proposed[label];
195
+ const isInsertTextDifferent = existing?.label !== existingProposeItem && existing?.insertText !== completionItem.insertText;
196
+ if (!existing) {
197
+ proposed[label] = completionItem;
198
+ result.items.push(completionItem);
199
+ }
200
+ else if (isInsertTextDifferent) {
201
+ // try to merge simple insert values
202
+ const mergedText = this.mergeSimpleInsertTexts(label, existing.insertText, completionItem.insertText, oneOfSchema);
203
+ if (mergedText) {
204
+ this.updateCompletionText(existing, mergedText);
193
205
  }
194
- const existing = proposed[label];
195
- const isInsertTextDifferent = (existing === null || existing === void 0 ? void 0 : existing.label) !== existingProposeItem && (existing === null || existing === void 0 ? void 0 : existing.insertText) !== completionItem.insertText;
196
- if (!existing) {
206
+ else {
207
+ // add to result when it wasn't able to merge (even if the item is already there but with a different value)
197
208
  proposed[label] = completionItem;
198
209
  result.items.push(completionItem);
199
210
  }
200
- else if (isInsertTextDifferent) {
201
- // try to merge simple insert values
202
- const mergedText = this.mergeSimpleInsertTexts(label, existing.insertText, completionItem.insertText);
203
- if (mergedText) {
204
- this.updateCompletionText(existing, mergedText);
205
- }
206
- else {
207
- // add to result when it wasn't able to merge (even if the item is already there but with a different value)
208
- proposed[label] = completionItem;
209
- result.items.push(completionItem);
210
- }
211
- }
212
- if (existing && !existing.documentation && completionItem.documentation) {
213
- existing.documentation = completionItem.documentation;
214
- }
215
- },
216
- error: (message) => {
217
- this.telemetry.sendError('yaml.completion.error', { error: (0, objects_1.convertErrorToTelemetryMsg)(message) });
218
- },
219
- log: (message) => {
220
- console.log(message);
221
- },
222
- getNumberOfProposals: () => {
223
- return result.items.length;
224
- },
225
- };
226
- if (this.customTags.length > 0) {
227
- this.getCustomTagValueCompletions(collector);
228
- }
229
- if (lineContent.endsWith('\n')) {
230
- lineContent = lineContent.substr(0, lineContent.length - 1);
211
+ }
212
+ if (existing && !existing.documentation && completionItem.documentation) {
213
+ existing.documentation = completionItem.documentation;
214
+ }
215
+ },
216
+ error: (message) => {
217
+ this.telemetry.sendError('yaml.completion.error', { error: (0, objects_1.convertErrorToTelemetryMsg)(message) });
218
+ },
219
+ log: (message) => {
220
+ console.log(message);
221
+ },
222
+ getNumberOfProposals: () => {
223
+ return result.items.length;
224
+ },
225
+ result,
226
+ };
227
+ if (this.customTags.length > 0) {
228
+ this.getCustomTagValueCompletions(collector);
229
+ }
230
+ if (lineContent.endsWith('\n')) {
231
+ lineContent = lineContent.substr(0, lineContent.length - 1);
232
+ }
233
+ try {
234
+ const schema = await this.schemaService.getSchemaForResource(document.uri, currentDoc);
235
+ if (!schema || schema.errors.length) {
236
+ if (position.line === 0 && position.character === 0 && !(0, modelineUtil_1.isModeline)(lineContent)) {
237
+ const inlineSchemaCompletion = {
238
+ kind: vscode_languageserver_types_1.CompletionItemKind.Text,
239
+ label: 'Inline schema',
240
+ insertText: '# yaml-language-server: $schema=',
241
+ insertTextFormat: vscode_languageserver_types_1.InsertTextFormat.PlainText,
242
+ };
243
+ result.items.push(inlineSchemaCompletion);
244
+ }
231
245
  }
232
- try {
233
- const schema = yield this.schemaService.getSchemaForResource(document.uri, currentDoc);
234
- if (!schema || schema.errors.length) {
235
- if (position.line === 0 && position.character === 0 && !(0, modelineUtil_1.isModeline)(lineContent)) {
236
- const inlineSchemaCompletion = {
237
- kind: vscode_languageserver_types_1.CompletionItemKind.Text,
238
- label: 'Inline schema',
239
- insertText: '# yaml-language-server: $schema=',
246
+ if ((0, modelineUtil_1.isModeline)(lineContent) || (0, astUtils_1.isInComment)(doc.tokens, offset)) {
247
+ const schemaIndex = lineContent.indexOf('$schema=');
248
+ if (schemaIndex !== -1 && schemaIndex + '$schema='.length <= position.character) {
249
+ this.schemaService.getAllSchemas().forEach((schema) => {
250
+ const schemaIdCompletion = {
251
+ kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
252
+ label: schema.name ?? schema.uri,
253
+ detail: schema.description,
254
+ insertText: schema.uri,
240
255
  insertTextFormat: vscode_languageserver_types_1.InsertTextFormat.PlainText,
256
+ insertTextMode: vscode_languageserver_types_1.InsertTextMode.asIs,
241
257
  };
242
- result.items.push(inlineSchemaCompletion);
243
- }
258
+ result.items.push(schemaIdCompletion);
259
+ });
244
260
  }
245
- if ((0, modelineUtil_1.isModeline)(lineContent) || (0, astUtils_1.isInComment)(doc.tokens, offset)) {
246
- const schemaIndex = lineContent.indexOf('$schema=');
247
- if (schemaIndex !== -1 && schemaIndex + '$schema='.length <= position.character) {
248
- this.schemaService.getAllSchemas().forEach((schema) => {
249
- var _a;
250
- const schemaIdCompletion = {
251
- kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
252
- label: (_a = schema.name) !== null && _a !== void 0 ? _a : schema.uri,
253
- detail: schema.description,
254
- insertText: schema.uri,
255
- insertTextFormat: vscode_languageserver_types_1.InsertTextFormat.PlainText,
256
- insertTextMode: vscode_languageserver_types_1.InsertTextMode.asIs,
257
- };
258
- result.items.push(schemaIdCompletion);
259
- });
260
- }
261
- return result;
261
+ return result;
262
+ }
263
+ if (!schema || schema.errors.length) {
264
+ return result;
265
+ }
266
+ let currentProperty = null;
267
+ if (!node) {
268
+ if (!currentDoc.internalDocument.contents || (0, yaml_1.isScalar)(currentDoc.internalDocument.contents)) {
269
+ const map = currentDoc.internalDocument.createNode({});
270
+ map.range = [offset, offset + 1, offset + 1];
271
+ currentDoc.internalDocument.contents = map;
272
+ // eslint-disable-next-line no-self-assign
273
+ currentDoc.internalDocument = currentDoc.internalDocument;
274
+ node = map;
262
275
  }
263
- if (!schema || schema.errors.length) {
264
- return result;
276
+ else {
277
+ node = currentDoc.findClosestNode(offset, textBuffer);
278
+ foundByClosest = true;
265
279
  }
266
- let currentProperty = null;
267
- if (!node) {
268
- if (!currentDoc.internalDocument.contents || (0, yaml_1.isScalar)(currentDoc.internalDocument.contents)) {
269
- const map = currentDoc.internalDocument.createNode({});
270
- map.range = [offset, offset + 1, offset + 1];
271
- currentDoc.internalDocument.contents = map;
272
- // eslint-disable-next-line no-self-assign
273
- currentDoc.internalDocument = currentDoc.internalDocument;
274
- node = map;
275
- }
276
- else {
277
- node = currentDoc.findClosestNode(offset, textBuffer);
278
- foundByClosest = true;
279
- }
280
+ }
281
+ const originalNode = node;
282
+ if (node) {
283
+ if (lineContent.length === 0) {
284
+ node = currentDoc.internalDocument.contents;
280
285
  }
281
- const originalNode = node;
282
- if (node) {
283
- if (lineContent.length === 0) {
284
- node = currentDoc.internalDocument.contents;
285
- }
286
- else {
287
- const parent = currentDoc.getParent(node);
288
- if (parent) {
289
- if ((0, yaml_1.isScalar)(node)) {
290
- if (node.value) {
291
- if ((0, yaml_1.isPair)(parent)) {
292
- if (parent.value === node) {
293
- if (lineContent.trim().length > 0 && lineContent.indexOf(':') < 0) {
294
- const map = this.createTempObjNode(currentWord, node, currentDoc);
295
- const parentParent = currentDoc.getParent(parent);
296
- if ((0, yaml_1.isSeq)(currentDoc.internalDocument.contents)) {
297
- const index = (0, astUtils_1.indexOf)(currentDoc.internalDocument.contents, parent);
298
- if (typeof index === 'number') {
299
- currentDoc.internalDocument.set(index, map);
300
- // eslint-disable-next-line no-self-assign
301
- currentDoc.internalDocument = currentDoc.internalDocument;
302
- }
303
- }
304
- else if (parentParent && ((0, yaml_1.isMap)(parentParent) || (0, yaml_1.isSeq)(parentParent))) {
305
- parentParent.set(parent.key, map);
306
- // eslint-disable-next-line no-self-assign
307
- currentDoc.internalDocument = currentDoc.internalDocument;
308
- }
309
- else {
310
- currentDoc.internalDocument.set(parent.key, map);
286
+ else {
287
+ const parent = currentDoc.getParent(node);
288
+ if (parent) {
289
+ if ((0, yaml_1.isScalar)(node)) {
290
+ if (node.value) {
291
+ if ((0, yaml_1.isPair)(parent)) {
292
+ if (parent.value === node) {
293
+ if (lineContent.trim().length > 0 && lineContent.indexOf(':') < 0) {
294
+ const map = this.createTempObjNode(currentWord, node, currentDoc);
295
+ const parentParent = currentDoc.getParent(parent);
296
+ if ((0, yaml_1.isSeq)(currentDoc.internalDocument.contents)) {
297
+ const index = (0, astUtils_1.indexOf)(currentDoc.internalDocument.contents, parent);
298
+ if (typeof index === 'number') {
299
+ currentDoc.internalDocument.set(index, map);
311
300
  // eslint-disable-next-line no-self-assign
312
301
  currentDoc.internalDocument = currentDoc.internalDocument;
313
302
  }
314
- currentProperty = map.items[0];
315
- node = map;
316
303
  }
317
- else if (lineContent.trim().length === 0) {
318
- const parentParent = currentDoc.getParent(parent);
319
- if (parentParent) {
320
- node = parentParent;
321
- }
304
+ else if (parentParent && ((0, yaml_1.isMap)(parentParent) || (0, yaml_1.isSeq)(parentParent))) {
305
+ parentParent.set(parent.key, map);
306
+ // eslint-disable-next-line no-self-assign
307
+ currentDoc.internalDocument = currentDoc.internalDocument;
308
+ }
309
+ else {
310
+ currentDoc.internalDocument.set(parent.key, map);
311
+ // eslint-disable-next-line no-self-assign
312
+ currentDoc.internalDocument = currentDoc.internalDocument;
322
313
  }
314
+ currentProperty = map.items[0];
315
+ node = map;
323
316
  }
324
- else if (parent.key === node) {
317
+ else if (lineContent.trim().length === 0) {
325
318
  const parentParent = currentDoc.getParent(parent);
326
- currentProperty = parent;
327
319
  if (parentParent) {
328
320
  node = parentParent;
329
321
  }
330
322
  }
331
323
  }
332
- else if ((0, yaml_1.isSeq)(parent)) {
333
- if (lineContent.trim().length > 0) {
334
- const map = this.createTempObjNode(currentWord, node, currentDoc);
335
- parent.delete(node);
336
- parent.add(map);
337
- // eslint-disable-next-line no-self-assign
338
- currentDoc.internalDocument = currentDoc.internalDocument;
339
- node = map;
340
- }
341
- else {
342
- node = parent;
324
+ else if (parent.key === node) {
325
+ const parentParent = currentDoc.getParent(parent);
326
+ currentProperty = parent;
327
+ if (parentParent) {
328
+ node = parentParent;
343
329
  }
344
330
  }
345
331
  }
346
- else if (node.value === null) {
347
- if ((0, yaml_1.isPair)(parent)) {
348
- if (parent.key === node) {
349
- node = parent;
350
- }
351
- else {
352
- if ((0, yaml_1.isNode)(parent.key) && parent.key.range) {
353
- const parentParent = currentDoc.getParent(parent);
354
- if (foundByClosest && parentParent && (0, yaml_1.isMap)(parentParent) && (0, astUtils_1.isMapContainsEmptyPair)(parentParent)) {
355
- node = parentParent;
356
- }
357
- else {
358
- const parentPosition = document.positionAt(parent.key.range[0]);
359
- //if cursor has bigger indentation that parent key, then we need to complete new empty object
360
- if (position.character > parentPosition.character && position.line !== parentPosition.line) {
361
- const map = this.createTempObjNode(currentWord, node, currentDoc);
362
- if (parentParent && ((0, yaml_1.isMap)(parentParent) || (0, yaml_1.isSeq)(parentParent))) {
363
- parentParent.set(parent.key, map);
364
- // eslint-disable-next-line no-self-assign
365
- currentDoc.internalDocument = currentDoc.internalDocument;
366
- }
367
- else {
368
- currentDoc.internalDocument.set(parent.key, map);
369
- // eslint-disable-next-line no-self-assign
370
- currentDoc.internalDocument = currentDoc.internalDocument;
371
- }
372
- currentProperty = map.items[0];
373
- node = map;
332
+ else if ((0, yaml_1.isSeq)(parent)) {
333
+ if (lineContent.trim().length > 0) {
334
+ const map = this.createTempObjNode(currentWord, node, currentDoc);
335
+ parent.delete(node);
336
+ parent.add(map);
337
+ // eslint-disable-next-line no-self-assign
338
+ currentDoc.internalDocument = currentDoc.internalDocument;
339
+ node = map;
340
+ }
341
+ else {
342
+ node = parent;
343
+ }
344
+ }
345
+ }
346
+ else if (node.value === null) {
347
+ if ((0, yaml_1.isPair)(parent)) {
348
+ if (parent.key === node) {
349
+ node = parent;
350
+ }
351
+ else {
352
+ if ((0, yaml_1.isNode)(parent.key) && parent.key.range) {
353
+ const parentParent = currentDoc.getParent(parent);
354
+ if (foundByClosest && parentParent && (0, yaml_1.isMap)(parentParent) && (0, astUtils_1.isMapContainsEmptyPair)(parentParent)) {
355
+ node = parentParent;
356
+ }
357
+ else {
358
+ const parentPosition = document.positionAt(parent.key.range[0]);
359
+ //if cursor has bigger indentation that parent key, then we need to complete new empty object
360
+ if (position.character > parentPosition.character && position.line !== parentPosition.line) {
361
+ const map = this.createTempObjNode(currentWord, node, currentDoc);
362
+ if (parentParent && ((0, yaml_1.isMap)(parentParent) || (0, yaml_1.isSeq)(parentParent))) {
363
+ parentParent.set(parent.key, map);
364
+ // eslint-disable-next-line no-self-assign
365
+ currentDoc.internalDocument = currentDoc.internalDocument;
374
366
  }
375
- else if (parentPosition.character === position.character) {
376
- if (parentParent) {
377
- node = parentParent;
378
- }
367
+ else {
368
+ currentDoc.internalDocument.set(parent.key, map);
369
+ // eslint-disable-next-line no-self-assign
370
+ currentDoc.internalDocument = currentDoc.internalDocument;
371
+ }
372
+ currentProperty = map.items[0];
373
+ node = map;
374
+ }
375
+ else if (parentPosition.character === position.character) {
376
+ if (parentParent) {
377
+ node = parentParent;
379
378
  }
380
379
  }
381
380
  }
382
381
  }
383
382
  }
384
- else if ((0, yaml_1.isSeq)(parent)) {
385
- if (lineContent.charAt(position.character - 1) !== '-') {
386
- const map = this.createTempObjNode(currentWord, node, currentDoc);
387
- parent.delete(node);
388
- parent.add(map);
389
- // eslint-disable-next-line no-self-assign
390
- currentDoc.internalDocument = currentDoc.internalDocument;
391
- node = map;
392
- }
393
- else if (lineContent.charAt(position.character - 1) === '-') {
394
- const map = this.createTempObjNode('', node, currentDoc);
395
- parent.delete(node);
396
- parent.add(map);
397
- // eslint-disable-next-line no-self-assign
398
- currentDoc.internalDocument = currentDoc.internalDocument;
399
- node = map;
400
- }
401
- else {
402
- node = parent;
403
- }
404
- }
405
383
  }
406
- }
407
- else if ((0, yaml_1.isMap)(node)) {
408
- if (!foundByClosest && lineContent.trim().length === 0 && (0, yaml_1.isSeq)(parent)) {
409
- const nextLine = textBuffer.getLineContent(position.line + 1);
410
- if (textBuffer.getLineCount() === position.line + 1 || nextLine.trim().length === 0) {
384
+ else if ((0, yaml_1.isSeq)(parent)) {
385
+ if (lineContent.charAt(position.character - 1) !== '-') {
386
+ const map = this.createTempObjNode(currentWord, node, currentDoc);
387
+ parent.delete(node);
388
+ parent.add(map);
389
+ // eslint-disable-next-line no-self-assign
390
+ currentDoc.internalDocument = currentDoc.internalDocument;
391
+ node = map;
392
+ }
393
+ else if (lineContent.charAt(position.character - 1) === '-') {
394
+ const map = this.createTempObjNode('', node, currentDoc);
395
+ parent.delete(node);
396
+ parent.add(map);
397
+ // eslint-disable-next-line no-self-assign
398
+ currentDoc.internalDocument = currentDoc.internalDocument;
399
+ node = map;
400
+ }
401
+ else {
411
402
  node = parent;
412
403
  }
413
404
  }
414
405
  }
415
406
  }
416
- else if ((0, yaml_1.isScalar)(node)) {
407
+ else if ((0, yaml_1.isMap)(node)) {
408
+ if (!foundByClosest && lineContent.trim().length === 0 && (0, yaml_1.isSeq)(parent)) {
409
+ const nextLine = textBuffer.getLineContent(position.line + 1);
410
+ if (textBuffer.getLineCount() === position.line + 1 || nextLine.trim().length === 0) {
411
+ node = parent;
412
+ }
413
+ }
414
+ }
415
+ }
416
+ else if ((0, yaml_1.isScalar)(node)) {
417
+ const map = this.createTempObjNode(currentWord, node, currentDoc);
418
+ currentDoc.internalDocument.contents = map;
419
+ // eslint-disable-next-line no-self-assign
420
+ currentDoc.internalDocument = currentDoc.internalDocument;
421
+ currentProperty = map.items[0];
422
+ node = map;
423
+ }
424
+ else if ((0, yaml_1.isMap)(node)) {
425
+ for (const pair of node.items) {
426
+ if ((0, yaml_1.isNode)(pair.value) && pair.value.range && pair.value.range[0] === offset + 1) {
427
+ node = pair.value;
428
+ }
429
+ }
430
+ }
431
+ else if ((0, yaml_1.isSeq)(node)) {
432
+ if (lineContent.charAt(position.character - 1) !== '-') {
417
433
  const map = this.createTempObjNode(currentWord, node, currentDoc);
418
- currentDoc.internalDocument.contents = map;
434
+ map.items = [];
419
435
  // eslint-disable-next-line no-self-assign
420
436
  currentDoc.internalDocument = currentDoc.internalDocument;
421
- currentProperty = map.items[0];
422
- node = map;
423
- }
424
- else if ((0, yaml_1.isMap)(node)) {
425
437
  for (const pair of node.items) {
426
- if ((0, yaml_1.isNode)(pair.value) && pair.value.range && pair.value.range[0] === offset + 1) {
427
- node = pair.value;
438
+ if ((0, yaml_1.isMap)(pair)) {
439
+ pair.items.forEach((value) => {
440
+ map.items.push(value);
441
+ });
428
442
  }
429
443
  }
444
+ node = map;
430
445
  }
431
446
  }
432
447
  }
433
- // completion for object keys
434
- if (node && (0, yaml_1.isMap)(node)) {
435
- // don't suggest properties that are already present
436
- const properties = node.items;
437
- for (const p of properties) {
438
- if (!currentProperty || currentProperty !== p) {
439
- if ((0, yaml_1.isScalar)(p.key)) {
440
- proposed[p.key.value + ''] = vscode_languageserver_types_1.CompletionItem.create(existingProposeItem);
441
- }
448
+ }
449
+ // completion for object keys
450
+ if (node && (0, yaml_1.isMap)(node)) {
451
+ // don't suggest properties that are already present
452
+ const properties = node.items;
453
+ for (const p of properties) {
454
+ if (!currentProperty || currentProperty !== p) {
455
+ if ((0, yaml_1.isScalar)(p.key)) {
456
+ proposed[p.key.value + ''] = vscode_languageserver_types_1.CompletionItem.create(existingProposeItem);
442
457
  }
443
458
  }
444
- this.addPropertyCompletions(schema, currentDoc, node, originalNode, '', collector, textBuffer, overwriteRange, doComplete);
445
- if (!schema && currentWord.length > 0 && text.charAt(offset - currentWord.length - 1) !== '"') {
446
- collector.add({
447
- kind: vscode_languageserver_types_1.CompletionItemKind.Property,
448
- label: currentWord,
449
- insertText: this.getInsertTextForProperty(currentWord, null, ''),
450
- insertTextFormat: vscode_languageserver_types_1.InsertTextFormat.Snippet,
451
- });
452
- }
453
459
  }
454
- // proposals for values
455
- const types = {};
456
- this.getValueCompletions(schema, currentDoc, node, offset, document, collector, types, doComplete);
457
- }
458
- catch (err) {
459
- this.telemetry.sendError('yaml.completion.error', { error: (0, objects_1.convertErrorToTelemetryMsg)(err) });
460
+ this.addPropertyCompletions(schema, currentDoc, node, originalNode, '', collector, textBuffer, overwriteRange, doComplete);
461
+ if (!schema && currentWord.length > 0 && text.charAt(offset - currentWord.length - 1) !== '"') {
462
+ collector.add({
463
+ kind: vscode_languageserver_types_1.CompletionItemKind.Property,
464
+ label: currentWord,
465
+ insertText: this.getInsertTextForProperty(currentWord, null, ''),
466
+ insertTextFormat: vscode_languageserver_types_1.InsertTextFormat.Snippet,
467
+ });
468
+ }
460
469
  }
461
- this.finalizeParentCompletion(result);
462
- return result;
463
- });
470
+ // proposals for values
471
+ const types = {};
472
+ this.getValueCompletions(schema, currentDoc, node, offset, document, collector, types, doComplete);
473
+ }
474
+ catch (err) {
475
+ this.telemetry.sendError('yaml.completion.error', { error: (0, objects_1.convertErrorToTelemetryMsg)(err) });
476
+ }
477
+ this.finalizeParentCompletion(result);
478
+ const uniqueItems = result.items.filter((arr, index, self) => index ===
479
+ self.findIndex((item) => item.label === arr.label && item.insertText === arr.insertText && item.kind === arr.kind));
480
+ if (uniqueItems?.length > 0) {
481
+ result.items = uniqueItems;
482
+ }
483
+ return result;
464
484
  }
465
485
  updateCompletionText(completionItem, text) {
466
486
  completionItem.insertText = text;
@@ -468,11 +488,22 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
468
488
  completionItem.textEdit.newText = text;
469
489
  }
470
490
  }
471
- mergeSimpleInsertTexts(label, existingText, addingText) {
491
+ mergeSimpleInsertTexts(label, existingText, addingText, oneOfSchema) {
472
492
  const containsNewLineAfterColon = (value) => {
473
493
  return value.includes('\n');
474
494
  };
495
+ const startWithNewLine = (value) => {
496
+ return value.startsWith('\n');
497
+ };
498
+ const isNullObject = (value) => {
499
+ const index = value.indexOf('\n');
500
+ return index > 0 && value.substring(index, value.length).trim().length === 0;
501
+ };
475
502
  if (containsNewLineAfterColon(existingText) || containsNewLineAfterColon(addingText)) {
503
+ //if the exisiting object null one then replace with the non-null object
504
+ if (oneOfSchema && isNullObject(existingText) && !isNullObject(addingText) && !startWithNewLine(addingText)) {
505
+ return addingText;
506
+ }
476
507
  return undefined;
477
508
  }
478
509
  const existingValues = this.getValuesFromInsertText(existingText);
@@ -553,7 +584,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
553
584
  return map;
554
585
  }
555
586
  addPropertyCompletions(schema, doc, node, originalNode, separatorAfter, collector, textBuffer, overwriteRange, doComplete) {
556
- var _a, _b;
557
587
  const matchingSchemas = doc.getMatchingSchemas(schema.schema, -1, null, doComplete);
558
588
  const existingKey = textBuffer.getText(overwriteRange);
559
589
  const lineContent = textBuffer.getLineContent(overwriteRange.start.line);
@@ -562,8 +592,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
562
592
  const isInArray = lineContent.trimLeft().indexOf('-') === 0;
563
593
  const nodeParent = doc.getParent(node);
564
594
  const matchOriginal = matchingSchemas.find((it) => it.node.internalNode === originalNode && it.schema.properties);
595
+ const oneOfSchema = matchingSchemas.filter((schema) => schema.schema.oneOf).map((oneOfSchema) => oneOfSchema.schema.oneOf)[0];
596
+ let didOneOfSchemaMatches = false;
597
+ if (oneOfSchema?.length < matchingSchemas.length) {
598
+ oneOfSchema?.forEach((property, index) => {
599
+ if (!matchingSchemas[index]?.schema.oneOf && matchingSchemas[index]?.schema.properties === property.properties) {
600
+ didOneOfSchemaMatches = true;
601
+ }
602
+ });
603
+ }
565
604
  for (const schema of matchingSchemas) {
566
- if (((schema.node.internalNode === node && !matchOriginal) || (schema.node.internalNode === originalNode && !hasColon)) &&
605
+ if (((schema.node.internalNode === node && !matchOriginal) ||
606
+ (schema.node.internalNode === originalNode && !hasColon) ||
607
+ (schema.node.parent?.internalNode === originalNode && !hasColon)) &&
567
608
  !schema.inverted) {
568
609
  this.collectDefaultSnippets(schema.schema, separatorAfter, collector, {
569
610
  newLineFirst: false,
@@ -606,18 +647,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
606
647
  textBuffer.getPosition(it.key.range[2]).line === overwriteRange.end.line - 1)) &&
607
648
  pair) {
608
649
  if (Array.isArray(propertySchema.items)) {
609
- this.addSchemaValueCompletions(propertySchema.items[0], separatorAfter, collector, {});
650
+ this.addSchemaValueCompletions(propertySchema.items[0], separatorAfter, collector, {}, 'property');
610
651
  }
611
652
  else if (typeof propertySchema.items === 'object' && propertySchema.items.type === 'object') {
612
- const insertText = `- ${this.getInsertTextForObject(propertySchema.items, separatorAfter, ' ').insertText.trimLeft()}`;
613
- const documentation = this.getDocumentationWithMarkdownText(`Create an item of an array${propertySchema.description ? ' (' + propertySchema.description + ')' : ''}`, insertText);
614
- collector.add({
615
- kind: this.getSuggestionKind(propertySchema.items.type),
616
- label: '- (array item)',
617
- documentation,
618
- insertText,
619
- insertTextFormat: vscode_languageserver_types_1.InsertTextFormat.Snippet,
620
- });
653
+ this.addArrayItemValueCompletion(propertySchema.items, separatorAfter, collector);
621
654
  }
622
655
  }
623
656
  let insertText = key;
@@ -626,7 +659,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
626
659
  }
627
660
  const isNodeNull = ((0, yaml_1.isScalar)(originalNode) && originalNode.value === null) ||
628
661
  ((0, yaml_1.isMap)(originalNode) && originalNode.items.length === 0);
629
- const existsParentCompletion = ((_a = schema.schema.required) === null || _a === void 0 ? void 0 : _a.length) > 0;
662
+ const existsParentCompletion = schema.schema.required?.length > 0;
630
663
  if (!this.parentSkeletonSelectedFirst || !isNodeNull || !existsParentCompletion) {
631
664
  collector.add({
632
665
  kind: vscode_languageserver_types_1.CompletionItemKind.Property,
@@ -634,10 +667,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
634
667
  insertText,
635
668
  insertTextFormat: vscode_languageserver_types_1.InsertTextFormat.Snippet,
636
669
  documentation: this.fromMarkup(propertySchema.markdownDescription) || propertySchema.description || '',
637
- });
670
+ }, didOneOfSchemaMatches);
638
671
  }
639
672
  // if the prop is required add it also to parent suggestion
640
- if ((_b = schema.schema.required) === null || _b === void 0 ? void 0 : _b.includes(key)) {
673
+ if (schema.schema.required?.includes(key)) {
641
674
  collector.add({
642
675
  label: key,
643
676
  insertText: this.getInsertTextForProperty(key, propertySchema, separatorAfter, identCompensation + this.indentation),
@@ -659,8 +692,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
659
692
  // test:
660
693
  // - item1
661
694
  // it will treated as a property key since `:` has been appended
662
- if (nodeParent && (0, yaml_1.isSeq)(nodeParent) && schema.schema.type !== 'object') {
663
- this.addSchemaValueCompletions(schema.schema, separatorAfter, collector, {}, Array.isArray(nodeParent.items));
695
+ if (nodeParent && (0, yaml_1.isSeq)(nodeParent) && (0, schemaUtils_1.isPrimitiveType)(schema.schema)) {
696
+ this.addSchemaValueCompletions(schema.schema, separatorAfter, collector, {}, 'property', Array.isArray(nodeParent.items));
664
697
  }
665
698
  if (schema.schema.propertyNames && schema.schema.additionalProperties && schema.schema.type === 'object') {
666
699
  const propertyNameSchema = (0, jsonParser07_1.asSchema)(schema.schema.propertyNames);
@@ -700,7 +733,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
700
733
  node = doc.getParent(node);
701
734
  }
702
735
  if (!node) {
703
- this.addSchemaValueCompletions(schema.schema, '', collector, types);
736
+ this.addSchemaValueCompletions(schema.schema, '', collector, types, 'value');
704
737
  return;
705
738
  }
706
739
  if ((0, yaml_1.isPair)(node)) {
@@ -726,54 +759,26 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
726
759
  if (Array.isArray(s.schema.items)) {
727
760
  const index = this.findItemAtOffset(node, document, offset);
728
761
  if (index < s.schema.items.length) {
729
- this.addSchemaValueCompletions(s.schema.items[index], separatorAfter, collector, types);
762
+ this.addSchemaValueCompletions(s.schema.items[index], separatorAfter, collector, types, 'value');
730
763
  }
731
764
  }
732
- else if (typeof s.schema.items === 'object' && s.schema.items.type === 'object') {
733
- const insertText = `- ${this.getInsertTextForObject(s.schema.items, separatorAfter, ' ').insertText.trimLeft()}`;
734
- const documentation = this.getDocumentationWithMarkdownText(`Create an item of an array${s.schema.description ? ' (' + s.schema.description + ')' : ''}`, insertText);
735
- collector.add({
736
- kind: this.getSuggestionKind(s.schema.items.type),
737
- label: '- (array item)',
738
- documentation,
739
- insertText,
740
- insertTextFormat: vscode_languageserver_types_1.InsertTextFormat.Snippet,
741
- });
742
- this.addSchemaValueCompletions(s.schema.items, separatorAfter, collector, types);
743
- }
744
- else if (typeof s.schema.items === 'object' && s.schema.items.anyOf) {
745
- s.schema.items.anyOf
746
- .filter((i) => typeof i === 'object')
747
- .forEach((i, index) => {
748
- const schemaType = (0, schemaUtils_1.getSchemaTypeName)(i);
749
- const insertText = `- ${this.getInsertTextForObject(i, separatorAfter).insertText.trimLeft()}`;
750
- //append insertText to documentation
751
- const schemaTypeTitle = schemaType ? ' type `' + schemaType + '`' : '';
752
- const schemaDescription = s.schema.description ? ' (' + s.schema.description + ')' : '';
753
- const documentation = this.getDocumentationWithMarkdownText(`Create an item of an array${schemaTypeTitle}${schemaDescription}`, insertText);
754
- collector.add({
755
- kind: this.getSuggestionKind(i.type),
756
- label: '- (array item) ' + (schemaType || index + 1),
757
- documentation: documentation,
758
- insertText: insertText,
759
- insertTextFormat: vscode_languageserver_types_1.InsertTextFormat.Snippet,
760
- });
761
- });
762
- this.addSchemaValueCompletions(s.schema.items, separatorAfter, collector, types);
765
+ else if (typeof s.schema.items === 'object' &&
766
+ (s.schema.items.type === 'object' || (0, schemaUtils_1.isAnyOfAllOfOneOfType)(s.schema.items))) {
767
+ this.addSchemaValueCompletions(s.schema.items, separatorAfter, collector, types, 'value', true);
763
768
  }
764
769
  else {
765
- this.addSchemaValueCompletions(s.schema.items, separatorAfter, collector, types);
770
+ this.addSchemaValueCompletions(s.schema.items, separatorAfter, collector, types, 'value');
766
771
  }
767
772
  }
768
773
  }
769
774
  if (s.schema.properties) {
770
775
  const propertySchema = s.schema.properties[parentKey];
771
776
  if (propertySchema) {
772
- this.addSchemaValueCompletions(propertySchema, separatorAfter, collector, types);
777
+ this.addSchemaValueCompletions(propertySchema, separatorAfter, collector, types, 'value');
773
778
  }
774
779
  }
775
780
  else if (s.schema.additionalProperties) {
776
- this.addSchemaValueCompletions(s.schema.additionalProperties, separatorAfter, collector, types);
781
+ this.addSchemaValueCompletions(s.schema.additionalProperties, separatorAfter, collector, types, 'value');
777
782
  }
778
783
  }
779
784
  }
@@ -786,6 +791,21 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
786
791
  }
787
792
  }
788
793
  }
794
+ addArrayItemValueCompletion(schema, separatorAfter, collector, index) {
795
+ const schemaType = (0, schemaUtils_1.getSchemaTypeName)(schema);
796
+ const insertText = `- ${this.getInsertTextForObject(schema, separatorAfter).insertText.trimLeft()}`;
797
+ //append insertText to documentation
798
+ const schemaTypeTitle = schemaType ? ' type `' + schemaType + '`' : '';
799
+ const schemaDescription = schema.description ? ' (' + schema.description + ')' : '';
800
+ const documentation = this.getDocumentationWithMarkdownText(`Create an item of an array${schemaTypeTitle}${schemaDescription}`, insertText);
801
+ collector.add({
802
+ kind: this.getSuggestionKind(schema.type),
803
+ label: '- (array item) ' + (schemaType || index),
804
+ documentation: documentation,
805
+ insertText: insertText,
806
+ insertTextFormat: vscode_languageserver_types_1.InsertTextFormat.Snippet,
807
+ });
808
+ }
789
809
  getInsertTextForProperty(key, propertySchema, separatorAfter, indent = this.indentation) {
790
810
  const propertyText = this.getInsertTextForValue(key, '', 'string');
791
811
  const resultText = propertyText + ':';
@@ -956,7 +976,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
956
976
  case 'boolean':
957
977
  case 'number':
958
978
  case 'integer':
959
- insertText += `${indent}${key}: \${${insertIndex++}:${propertySchema.default}}\n`;
979
+ insertText += `${indent}${
980
+ //added quote if key is null
981
+ key === 'null' ? this.getInsertTextForValue(key, '', 'string') : key}: \${${insertIndex++}:${propertySchema.default}}\n`;
960
982
  break;
961
983
  case 'string':
962
984
  insertText += `${indent}${key}: \${${insertIndex++}:${convertToStringValue(propertySchema.default)}}\n`;
@@ -1085,24 +1107,28 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
1085
1107
  }
1086
1108
  return this.getInsertTextForPlainText(value + separatorAfter);
1087
1109
  }
1088
- addSchemaValueCompletions(schema, separatorAfter, collector, types, isArray) {
1110
+ addSchemaValueCompletions(schema, separatorAfter, collector, types, completionType, isArray) {
1089
1111
  if (typeof schema === 'object') {
1090
1112
  this.addEnumValueCompletions(schema, separatorAfter, collector, isArray);
1091
1113
  this.addDefaultValueCompletions(schema, separatorAfter, collector);
1092
1114
  this.collectTypes(schema, types);
1115
+ if (isArray && completionType === 'value' && !(0, schemaUtils_1.isAnyOfAllOfOneOfType)(schema)) {
1116
+ // add array only for final types (no anyOf, allOf, oneOf)
1117
+ this.addArrayItemValueCompletion(schema, separatorAfter, collector);
1118
+ }
1093
1119
  if (Array.isArray(schema.allOf)) {
1094
1120
  schema.allOf.forEach((s) => {
1095
- return this.addSchemaValueCompletions(s, separatorAfter, collector, types);
1121
+ return this.addSchemaValueCompletions(s, separatorAfter, collector, types, completionType, isArray);
1096
1122
  });
1097
1123
  }
1098
1124
  if (Array.isArray(schema.anyOf)) {
1099
1125
  schema.anyOf.forEach((s) => {
1100
- return this.addSchemaValueCompletions(s, separatorAfter, collector, types);
1126
+ return this.addSchemaValueCompletions(s, separatorAfter, collector, types, completionType, isArray);
1101
1127
  });
1102
1128
  }
1103
1129
  if (Array.isArray(schema.oneOf)) {
1104
1130
  schema.oneOf.forEach((s) => {
1105
- return this.addSchemaValueCompletions(s, separatorAfter, collector, types);
1131
+ return this.addSchemaValueCompletions(s, separatorAfter, collector, types, completionType, isArray);
1106
1132
  });
1107
1133
  }
1108
1134
  }
@@ -1275,7 +1301,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
1275
1301
  }
1276
1302
  return value;
1277
1303
  };
1278
- return (0, json_1.stringifyObject)(value, '', replacer, Object.assign(Object.assign({}, settings), { indentation: this.indentation }), depth) + separatorAfter;
1304
+ return (0, json_1.stringifyObject)(value, '', replacer, { ...settings, indentation: this.indentation }, depth) + separatorAfter;
1279
1305
  }
1280
1306
  addBooleanValueCompletion(value, separatorAfter, collector) {
1281
1307
  collector.add({
@@ -1443,8 +1469,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
1443
1469
  * simplify `{$1:value}` to `value`
1444
1470
  */
1445
1471
  function evaluateTab1Symbol(value) {
1446
- const result = value.replace(/\$\{1:(.*)\}/, '$1');
1447
- return result;
1472
+ return value.replace(/\$\{1:(.*)\}/, '$1');
1448
1473
  }
1449
1474
  function isParentCompletionItem(item) {
1450
1475
  return 'parent' in item;