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.
- package/CHANGELOG.md +14 -0
- package/README.md +9 -0
- package/eslint-result.sarif +4397 -0
- package/lib/esm/languageserver/handlers/languageHandlers.js +4 -1
- package/lib/esm/languageserver/handlers/languageHandlers.js.map +1 -1
- package/lib/esm/languageserver/handlers/schemaSelectionHandlers.js +44 -60
- package/lib/esm/languageserver/handlers/schemaSelectionHandlers.js.map +1 -1
- package/lib/esm/languageserver/handlers/settingsHandlers.d.ts +1 -1
- package/lib/esm/languageserver/handlers/settingsHandlers.js +161 -183
- package/lib/esm/languageserver/handlers/settingsHandlers.js.map +1 -1
- package/lib/esm/languageserver/telemetry.d.ts +2 -12
- package/lib/esm/languageserver/telemetry.js +1 -1
- package/lib/esm/languageserver/telemetry.js.map +1 -1
- package/lib/esm/languageservice/jsonSchema.d.ts +1 -0
- package/lib/esm/languageservice/parser/jsonParser07.d.ts +2 -0
- package/lib/esm/languageservice/parser/jsonParser07.js +44 -19
- package/lib/esm/languageservice/parser/jsonParser07.js.map +1 -1
- package/lib/esm/languageservice/parser/yaml-documents.js +6 -5
- package/lib/esm/languageservice/parser/yaml-documents.js.map +1 -1
- package/lib/esm/languageservice/parser/yamlParser07.js +1 -2
- package/lib/esm/languageservice/parser/yamlParser07.js.map +1 -1
- package/lib/esm/languageservice/services/documentSymbols.d.ts +1 -1
- package/lib/esm/languageservice/services/validation/yaml-style.js +2 -3
- package/lib/esm/languageservice/services/validation/yaml-style.js.map +1 -1
- package/lib/esm/languageservice/services/yamlCodeActions.js +2 -3
- package/lib/esm/languageservice/services/yamlCodeActions.js.map +1 -1
- package/lib/esm/languageservice/services/yamlCodeLens.d.ts +1 -1
- package/lib/esm/languageservice/services/yamlCodeLens.js +23 -34
- package/lib/esm/languageservice/services/yamlCodeLens.js.map +1 -1
- package/lib/esm/languageservice/services/yamlCommands.js +3 -12
- package/lib/esm/languageservice/services/yamlCommands.js.map +1 -1
- package/lib/esm/languageservice/services/yamlCompletion.d.ts +3 -2
- package/lib/esm/languageservice/services/yamlCompletion.js +439 -414
- package/lib/esm/languageservice/services/yamlCompletion.js.map +1 -1
- package/lib/esm/languageservice/services/yamlDefinition.d.ts +1 -1
- package/lib/esm/languageservice/services/yamlFolding.js +1 -2
- package/lib/esm/languageservice/services/yamlFolding.js.map +1 -1
- package/lib/esm/languageservice/services/yamlHover.d.ts +1 -1
- package/lib/esm/languageservice/services/yamlLinks.d.ts +1 -1
- package/lib/esm/languageservice/services/yamlOnTypeFormatting.js +0 -1
- package/lib/esm/languageservice/services/yamlOnTypeFormatting.js.map +1 -1
- package/lib/esm/languageservice/services/yamlSchemaService.js +202 -218
- package/lib/esm/languageservice/services/yamlSchemaService.js.map +1 -1
- package/lib/esm/languageservice/services/yamlValidation.d.ts +1 -1
- package/lib/esm/languageservice/services/yamlValidation.js +61 -71
- package/lib/esm/languageservice/services/yamlValidation.js.map +1 -1
- package/lib/esm/languageservice/telemetry.d.ts +16 -0
- package/lib/esm/languageservice/telemetry.js +6 -0
- package/lib/esm/languageservice/telemetry.js.map +1 -0
- package/lib/esm/languageservice/utils/astUtils.js +2 -6
- package/lib/esm/languageservice/utils/astUtils.js.map +1 -1
- package/lib/esm/languageservice/utils/indentationGuesser.js +0 -1
- package/lib/esm/languageservice/utils/indentationGuesser.js.map +1 -1
- package/lib/esm/languageservice/utils/objects.js +1 -2
- package/lib/esm/languageservice/utils/objects.js.map +1 -1
- package/lib/esm/languageservice/utils/schemaUrls.d.ts +1 -1
- package/lib/esm/languageservice/utils/schemaUrls.js +2 -4
- package/lib/esm/languageservice/utils/schemaUrls.js.map +1 -1
- package/lib/esm/languageservice/utils/schemaUtils.d.ts +2 -0
- package/lib/esm/languageservice/utils/schemaUtils.js +9 -6
- package/lib/esm/languageservice/utils/schemaUtils.js.map +1 -1
- package/lib/esm/languageservice/yamlLanguageService.d.ts +2 -3
- package/lib/esm/languageservice/yamlLanguageService.js +0 -1
- package/lib/esm/languageservice/yamlLanguageService.js.map +1 -1
- package/lib/esm/server.js +5 -14
- package/lib/esm/server.js.map +1 -1
- package/lib/esm/webworker/yamlServerMain.js +2 -2
- package/lib/esm/webworker/yamlServerMain.js.map +1 -1
- package/lib/esm/yamlServerInit.d.ts +1 -1
- package/lib/umd/languageserver/handlers/languageHandlers.js +4 -1
- package/lib/umd/languageserver/handlers/languageHandlers.js.map +1 -1
- package/lib/umd/languageserver/handlers/schemaSelectionHandlers.js +44 -60
- package/lib/umd/languageserver/handlers/schemaSelectionHandlers.js.map +1 -1
- package/lib/umd/languageserver/handlers/settingsHandlers.d.ts +1 -1
- package/lib/umd/languageserver/handlers/settingsHandlers.js +161 -183
- package/lib/umd/languageserver/handlers/settingsHandlers.js.map +1 -1
- package/lib/umd/languageserver/telemetry.d.ts +2 -12
- package/lib/umd/languageserver/telemetry.js +3 -3
- package/lib/umd/languageserver/telemetry.js.map +1 -1
- package/lib/umd/languageservice/jsonSchema.d.ts +1 -0
- package/lib/umd/languageservice/parser/jsonParser07.d.ts +2 -0
- package/lib/umd/languageservice/parser/jsonParser07.js +45 -20
- package/lib/umd/languageservice/parser/jsonParser07.js.map +1 -1
- package/lib/umd/languageservice/parser/yaml-documents.js +6 -5
- package/lib/umd/languageservice/parser/yaml-documents.js.map +1 -1
- package/lib/umd/languageservice/parser/yamlParser07.js +1 -2
- package/lib/umd/languageservice/parser/yamlParser07.js.map +1 -1
- package/lib/umd/languageservice/services/documentSymbols.d.ts +1 -1
- package/lib/umd/languageservice/services/validation/yaml-style.js +2 -3
- package/lib/umd/languageservice/services/validation/yaml-style.js.map +1 -1
- package/lib/umd/languageservice/services/yamlCodeActions.js +2 -3
- package/lib/umd/languageservice/services/yamlCodeActions.js.map +1 -1
- package/lib/umd/languageservice/services/yamlCodeLens.d.ts +1 -1
- package/lib/umd/languageservice/services/yamlCodeLens.js +23 -34
- package/lib/umd/languageservice/services/yamlCodeLens.js.map +1 -1
- package/lib/umd/languageservice/services/yamlCommands.js +3 -12
- package/lib/umd/languageservice/services/yamlCommands.js.map +1 -1
- package/lib/umd/languageservice/services/yamlCompletion.d.ts +3 -2
- package/lib/umd/languageservice/services/yamlCompletion.js +438 -413
- package/lib/umd/languageservice/services/yamlCompletion.js.map +1 -1
- package/lib/umd/languageservice/services/yamlDefinition.d.ts +1 -1
- package/lib/umd/languageservice/services/yamlFolding.js +1 -2
- package/lib/umd/languageservice/services/yamlFolding.js.map +1 -1
- package/lib/umd/languageservice/services/yamlHover.d.ts +1 -1
- package/lib/umd/languageservice/services/yamlLinks.d.ts +1 -1
- package/lib/umd/languageservice/services/yamlOnTypeFormatting.js +0 -1
- package/lib/umd/languageservice/services/yamlOnTypeFormatting.js.map +1 -1
- package/lib/umd/languageservice/services/yamlSchemaService.js +202 -218
- package/lib/umd/languageservice/services/yamlSchemaService.js.map +1 -1
- package/lib/umd/languageservice/services/yamlValidation.d.ts +1 -1
- package/lib/umd/languageservice/services/yamlValidation.js +61 -71
- package/lib/umd/languageservice/services/yamlValidation.js.map +1 -1
- package/lib/umd/languageservice/telemetry.d.ts +16 -0
- package/lib/umd/languageservice/telemetry.js +17 -0
- package/lib/umd/languageservice/telemetry.js.map +1 -0
- package/lib/umd/languageservice/utils/astUtils.js +2 -6
- package/lib/umd/languageservice/utils/astUtils.js.map +1 -1
- package/lib/umd/languageservice/utils/indentationGuesser.js +0 -1
- package/lib/umd/languageservice/utils/indentationGuesser.js.map +1 -1
- package/lib/umd/languageservice/utils/objects.js +1 -2
- package/lib/umd/languageservice/utils/objects.js.map +1 -1
- package/lib/umd/languageservice/utils/schemaUrls.d.ts +1 -1
- package/lib/umd/languageservice/utils/schemaUrls.js +2 -4
- package/lib/umd/languageservice/utils/schemaUrls.js.map +1 -1
- package/lib/umd/languageservice/utils/schemaUtils.d.ts +2 -0
- package/lib/umd/languageservice/utils/schemaUtils.js +12 -7
- package/lib/umd/languageservice/utils/schemaUtils.js.map +1 -1
- package/lib/umd/languageservice/yamlLanguageService.d.ts +2 -3
- package/lib/umd/languageservice/yamlLanguageService.js +0 -1
- package/lib/umd/languageservice/yamlLanguageService.js.map +1 -1
- package/lib/umd/server.js +4 -13
- package/lib/umd/server.js.map +1 -1
- package/lib/umd/webworker/yamlServerMain.js +1 -1
- package/lib/umd/webworker/yamlServerMain.js.map +1 -1
- package/lib/umd/yamlServerInit.d.ts +1 -1
- package/out/server/src/languageserver/handlers/languageHandlers.js +4 -1
- package/out/server/src/languageserver/handlers/languageHandlers.js.map +1 -1
- package/out/server/src/languageserver/handlers/schemaSelectionHandlers.js +44 -60
- package/out/server/src/languageserver/handlers/schemaSelectionHandlers.js.map +1 -1
- package/out/server/src/languageserver/handlers/settingsHandlers.d.ts +1 -1
- package/out/server/src/languageserver/handlers/settingsHandlers.js +161 -183
- package/out/server/src/languageserver/handlers/settingsHandlers.js.map +1 -1
- package/out/server/src/languageserver/telemetry.d.ts +2 -12
- package/out/server/src/languageserver/telemetry.js +3 -3
- package/out/server/src/languageserver/telemetry.js.map +1 -1
- package/out/server/src/languageservice/jsonSchema.d.ts +1 -0
- package/out/server/src/languageservice/parser/jsonParser07.d.ts +2 -0
- package/out/server/src/languageservice/parser/jsonParser07.js +44 -19
- package/out/server/src/languageservice/parser/jsonParser07.js.map +1 -1
- package/out/server/src/languageservice/parser/yaml-documents.js +6 -5
- package/out/server/src/languageservice/parser/yaml-documents.js.map +1 -1
- package/out/server/src/languageservice/parser/yamlParser07.js +1 -2
- package/out/server/src/languageservice/parser/yamlParser07.js.map +1 -1
- package/out/server/src/languageservice/services/documentSymbols.d.ts +1 -1
- package/out/server/src/languageservice/services/validation/yaml-style.js +2 -3
- package/out/server/src/languageservice/services/validation/yaml-style.js.map +1 -1
- package/out/server/src/languageservice/services/yamlCodeActions.js +2 -3
- package/out/server/src/languageservice/services/yamlCodeActions.js.map +1 -1
- package/out/server/src/languageservice/services/yamlCodeLens.d.ts +1 -1
- package/out/server/src/languageservice/services/yamlCodeLens.js +23 -34
- package/out/server/src/languageservice/services/yamlCodeLens.js.map +1 -1
- package/out/server/src/languageservice/services/yamlCommands.js +3 -12
- package/out/server/src/languageservice/services/yamlCommands.js.map +1 -1
- package/out/server/src/languageservice/services/yamlCompletion.d.ts +3 -2
- package/out/server/src/languageservice/services/yamlCompletion.js +438 -413
- package/out/server/src/languageservice/services/yamlCompletion.js.map +1 -1
- package/out/server/src/languageservice/services/yamlDefinition.d.ts +1 -1
- package/out/server/src/languageservice/services/yamlFolding.js +1 -2
- package/out/server/src/languageservice/services/yamlFolding.js.map +1 -1
- package/out/server/src/languageservice/services/yamlHover.d.ts +1 -1
- package/out/server/src/languageservice/services/yamlLinks.d.ts +1 -1
- package/out/server/src/languageservice/services/yamlOnTypeFormatting.js +0 -1
- package/out/server/src/languageservice/services/yamlOnTypeFormatting.js.map +1 -1
- package/out/server/src/languageservice/services/yamlSchemaService.js +202 -218
- package/out/server/src/languageservice/services/yamlSchemaService.js.map +1 -1
- package/out/server/src/languageservice/services/yamlValidation.d.ts +1 -1
- package/out/server/src/languageservice/services/yamlValidation.js +61 -71
- package/out/server/src/languageservice/services/yamlValidation.js.map +1 -1
- package/out/server/src/languageservice/telemetry.d.ts +16 -0
- package/out/server/src/languageservice/telemetry.js +7 -0
- package/out/server/src/languageservice/telemetry.js.map +1 -0
- package/out/server/src/languageservice/utils/astUtils.js +2 -6
- package/out/server/src/languageservice/utils/astUtils.js.map +1 -1
- package/out/server/src/languageservice/utils/indentationGuesser.js +0 -1
- package/out/server/src/languageservice/utils/indentationGuesser.js.map +1 -1
- package/out/server/src/languageservice/utils/objects.js +1 -2
- package/out/server/src/languageservice/utils/objects.js.map +1 -1
- package/out/server/src/languageservice/utils/schemaUrls.d.ts +1 -1
- package/out/server/src/languageservice/utils/schemaUrls.js +2 -4
- package/out/server/src/languageservice/utils/schemaUrls.js.map +1 -1
- package/out/server/src/languageservice/utils/schemaUtils.d.ts +2 -0
- package/out/server/src/languageservice/utils/schemaUtils.js +12 -7
- package/out/server/src/languageservice/utils/schemaUtils.js.map +1 -1
- package/out/server/src/languageservice/yamlLanguageService.d.ts +2 -3
- package/out/server/src/languageservice/yamlLanguageService.js +0 -1
- package/out/server/src/languageservice/yamlLanguageService.js.map +1 -1
- package/out/server/src/server.js +4 -13
- package/out/server/src/server.js.map +1 -1
- package/out/server/src/webworker/yamlServerMain.js +1 -1
- package/out/server/src/webworker/yamlServerMain.js.map +1 -1
- package/out/server/src/yamlServerInit.d.ts +1 -1
- package/out/server/test/autoCompletion.test.js +267 -178
- package/out/server/test/autoCompletion.test.js.map +1 -1
- package/out/server/test/autoCompletionFix.test.js +222 -134
- package/out/server/test/autoCompletionFix.test.js.map +1 -1
- package/out/server/test/code-action-schema.test.js +6 -15
- package/out/server/test/code-action-schema.test.js.map +1 -1
- package/out/server/test/defaultSnippets.test.js +11 -19
- package/out/server/test/defaultSnippets.test.js.map +1 -1
- package/out/server/test/findLinks.test.js +3 -12
- package/out/server/test/findLinks.test.js.map +1 -1
- package/out/server/test/hover.test.js +64 -73
- package/out/server/test/hover.test.js.map +1 -1
- package/out/server/test/integration.test.js +3 -12
- package/out/server/test/integration.test.js.map +1 -1
- package/out/server/test/jsonParser.test.js +15 -26
- package/out/server/test/jsonParser.test.js.map +1 -1
- package/out/server/test/multipleDocuments.test.js +3 -12
- package/out/server/test/multipleDocuments.test.js.map +1 -1
- package/out/server/test/schema.test.js +71 -85
- package/out/server/test/schema.test.js.map +1 -1
- package/out/server/test/schemaRequestHandler.test.js +9 -18
- package/out/server/test/schemaRequestHandler.test.js.map +1 -1
- package/out/server/test/schemaSelectionHandlers.test.js +12 -21
- package/out/server/test/schemaSelectionHandlers.test.js.map +1 -1
- package/out/server/test/schemaValidation.test.js +216 -97
- package/out/server/test/schemaValidation.test.js.map +1 -1
- package/out/server/test/settingsHandlers.test.js +44 -55
- package/out/server/test/settingsHandlers.test.js.map +1 -1
- package/out/server/test/telemetry.test.js +1 -1
- package/out/server/test/telemetry.test.js.map +1 -1
- package/out/server/test/utils/testsTypes.d.ts +3 -2
- package/out/server/test/utils/testsTypes.js +1 -1
- package/out/server/test/utils/testsTypes.js.map +1 -1
- package/out/server/test/utils/verifyError.d.ts +1 -1
- package/out/server/test/utils/verifyError.js +22 -20
- package/out/server/test/utils/verifyError.js.map +1 -1
- package/out/server/test/yamlCodeLens.test.js +25 -34
- package/out/server/test/yamlCodeLens.test.js.map +1 -1
- package/out/server/test/yamlCommands.test.js +6 -15
- package/out/server/test/yamlCommands.test.js.map +1 -1
- package/out/server/test/yamlSchema.test.js +9 -18
- package/out/server/test/yamlSchema.test.js.map +1 -1
- package/out/server/test/yamlSchemaService.test.js +9 -18
- package/out/server/test/yamlSchemaService.test.js.map +1 -1
- package/out/server/test/yamlValidation.test.js +30 -39
- package/out/server/test/yamlValidation.test.js.map +1 -1
- 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
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
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
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
if (
|
|
174
|
-
|
|
175
|
-
|
|
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
|
-
|
|
180
|
-
|
|
181
|
-
|
|
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
|
-
|
|
184
|
-
|
|
157
|
+
else {
|
|
158
|
+
// add to the existing parent
|
|
159
|
+
parentCompletion.parent.insertTexts.push(completionItem.insertText);
|
|
185
160
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
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
|
-
|
|
192
|
-
|
|
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
|
-
|
|
195
|
-
|
|
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
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
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
|
-
|
|
233
|
-
const
|
|
234
|
-
if (
|
|
235
|
-
|
|
236
|
-
const
|
|
237
|
-
kind: vscode_languageserver_types_1.CompletionItemKind.
|
|
238
|
-
label:
|
|
239
|
-
|
|
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(
|
|
243
|
-
}
|
|
258
|
+
result.items.push(schemaIdCompletion);
|
|
259
|
+
});
|
|
244
260
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
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
|
-
|
|
264
|
-
|
|
276
|
+
else {
|
|
277
|
+
node = currentDoc.findClosestNode(offset, textBuffer);
|
|
278
|
+
foundByClosest = true;
|
|
265
279
|
}
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
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
|
-
|
|
282
|
-
|
|
283
|
-
if (
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
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 (
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
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 (
|
|
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 (
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
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 (
|
|
347
|
-
if (
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
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
|
|
376
|
-
|
|
377
|
-
|
|
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
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
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.
|
|
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
|
-
|
|
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.
|
|
427
|
-
|
|
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
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
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
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
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
|
-
|
|
462
|
-
|
|
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) ||
|
|
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
|
-
|
|
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 =
|
|
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 (
|
|
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
|
|
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' &&
|
|
733
|
-
|
|
734
|
-
|
|
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}${
|
|
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,
|
|
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
|
-
|
|
1447
|
-
return result;
|
|
1472
|
+
return value.replace(/\$\{1:(.*)\}/, '$1');
|
|
1448
1473
|
}
|
|
1449
1474
|
function isParentCompletionItem(item) {
|
|
1450
1475
|
return 'parent' in item;
|