@microsoft/powerquery-language-services 0.3.3 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/powerquery-language-services/inspection/autocomplete/task.js +1 -0
- package/lib/powerquery-language-services/inspection/autocomplete/task.js.map +1 -1
- package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.js +6 -0
- package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.js.map +1 -1
- package/lib/powerquery-language-services/validate/validate.js +7 -1
- package/lib/powerquery-language-services/validate/validate.js.map +1 -1
- package/lib/powerquery-language-services/validate/validateFunctionExpression.d.ts +1 -2
- package/lib/powerquery-language-services/validate/validateFunctionExpression.js +35 -88
- package/lib/powerquery-language-services/validate/validateFunctionExpression.js.map +1 -1
- package/package.json +3 -3
|
@@ -18,6 +18,7 @@ const autocompleteFieldAccess_1 = require("./autocompleteFieldAccess");
|
|
|
18
18
|
const autocompleteKeyword_1 = require("./autocompleteKeyword/autocompleteKeyword");
|
|
19
19
|
const autocompleteLanguageConstant_1 = require("./autocompleteLanguageConstant");
|
|
20
20
|
const autocompletePrimitiveType_1 = require("./autocompletePrimitiveType");
|
|
21
|
+
// Given some Position and ParseState, return autocomplete suggestions.
|
|
21
22
|
function autocomplete(settings, parseState, typeCache, maybeActiveNode, maybeParseError) {
|
|
22
23
|
return __awaiter(this, void 0, void 0, function* () {
|
|
23
24
|
const trace = settings.traceManager.entry("Autocomplete" /* Autocomplete */, autocomplete.name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../../../src/powerquery-language-services/inspection/autocomplete/task.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;;;;;;;;;;AAElC,oDAAoD;AAapD,qCAA+C;AAG/C,uEAAuE;AACvE,mFAAmF;AACnF,iFAAiF;AACjF,2EAA2E;AAG3E,SAAsB,YAAY,CAC9B,QAA4B,EAC5B,UAAiC,EACjC,SAAoB,EACpB,eAAiC,EACjC,eAA6D;;QAE7D,MAAM,KAAK,GAAU,QAAQ,CAAC,YAAY,CAAC,KAAK,oCAAyC,YAAY,CAAC,IAAI,CAAC,CAAC;QAE5G,MAAM,mBAAmB,GAAyB,UAAU,CAAC,YAAY,CAAC,mBAAmB,CAAC;QAE9F,IAAI,kBAA6C,CAAC;QAElD,IAAI,eAAe,KAAK,SAAS,EAAE;YAC/B,MAAM,oBAAoB,GAAyC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,CACnG,eAAe,CAAC,UAAU,CAC7B,CAAC;YAEF,IAAI,oBAAoB,KAAK,SAAS,EAAE;gBACpC,kBAAkB,GAAG,IAAA,4BAAmB,EAAC,eAAe,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;aAC5F;SACJ;QAED,MAAM,gBAAgB,GAAiC,MAAM,IAAA,oDAA0B,EACnF,QAAQ,EACR,UAAU,EACV,eAAe,EACf,SAAS,CACZ,CAAC;QAEF,MAAM,YAAY,GAA6B,MAAM,IAAA,4CAAsB,EACvE,QAAQ,EACR,mBAAmB,EACnB,eAAe,EACf,kBAAkB,CACrB,CAAC;QAEF,MAAM,qBAAqB,GAAsC,IAAA,8DAA+B,EAC5F,QAAQ,EACR,eAAe,CAClB,CAAC;QAEF,MAAM,kBAAkB,GAAmC,IAAA,wDAA4B,EACnF,QAAQ,EACR,eAAe,EACf,kBAAkB,CACrB,CAAC;QAEF,KAAK,CAAC,IAAI,EAAE,CAAC;QAEb,OAAO;YACH,gBAAgB;YAChB,YAAY;YACZ,qBAAqB;YACrB,kBAAkB;SACrB,CAAC;IACN,CAAC;CAAA;AAxDD,oCAwDC"}
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../../../src/powerquery-language-services/inspection/autocomplete/task.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;;;;;;;;;;AAElC,oDAAoD;AAapD,qCAA+C;AAG/C,uEAAuE;AACvE,mFAAmF;AACnF,iFAAiF;AACjF,2EAA2E;AAG3E,uEAAuE;AACvE,SAAsB,YAAY,CAC9B,QAA4B,EAC5B,UAAiC,EACjC,SAAoB,EACpB,eAAiC,EACjC,eAA6D;;QAE7D,MAAM,KAAK,GAAU,QAAQ,CAAC,YAAY,CAAC,KAAK,oCAAyC,YAAY,CAAC,IAAI,CAAC,CAAC;QAE5G,MAAM,mBAAmB,GAAyB,UAAU,CAAC,YAAY,CAAC,mBAAmB,CAAC;QAE9F,IAAI,kBAA6C,CAAC;QAElD,IAAI,eAAe,KAAK,SAAS,EAAE;YAC/B,MAAM,oBAAoB,GAAyC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,CACnG,eAAe,CAAC,UAAU,CAC7B,CAAC;YAEF,IAAI,oBAAoB,KAAK,SAAS,EAAE;gBACpC,kBAAkB,GAAG,IAAA,4BAAmB,EAAC,eAAe,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;aAC5F;SACJ;QAED,MAAM,gBAAgB,GAAiC,MAAM,IAAA,oDAA0B,EACnF,QAAQ,EACR,UAAU,EACV,eAAe,EACf,SAAS,CACZ,CAAC;QAEF,MAAM,YAAY,GAA6B,MAAM,IAAA,4CAAsB,EACvE,QAAQ,EACR,mBAAmB,EACnB,eAAe,EACf,kBAAkB,CACrB,CAAC;QAEF,MAAM,qBAAqB,GAAsC,IAAA,8DAA+B,EAC5F,QAAQ,EACR,eAAe,CAClB,CAAC;QAEF,MAAM,kBAAkB,GAAmC,IAAA,wDAA4B,EACnF,QAAQ,EACR,eAAe,EACf,kBAAkB,CACrB,CAAC;QAEF,KAAK,CAAC,IAAI,EAAE,CAAC;QAEb,OAAO;YACH,gBAAgB;YAChB,YAAY;YACZ,qBAAqB;YACrB,kBAAkB;SACrB,CAAC;IACN,CAAC;CAAA;AAxDD,oCAwDC"}
|
package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.js
CHANGED
|
@@ -18,6 +18,12 @@ const powerquery_parser_1 = require("@microsoft/powerquery-parser");
|
|
|
18
18
|
const activeNode_1 = require("../activeNode");
|
|
19
19
|
const invokeExpression_1 = require("./invokeExpression");
|
|
20
20
|
const typeCache_1 = require("../typeCache");
|
|
21
|
+
// If the cursor is in an InvokeExpression then return:
|
|
22
|
+
// * the number of given arguments
|
|
23
|
+
// * the number of expected arguments
|
|
24
|
+
// * the given argument nodes
|
|
25
|
+
// * the given argument types
|
|
26
|
+
// * type checking for parameter types vs given types
|
|
21
27
|
function tryCurrentInvokeExpression(settings, nodeIdMapCollection, maybeActiveNode,
|
|
22
28
|
// If a TypeCache is given, then potentially add to its values and include it as part of the return,
|
|
23
29
|
// Else create a new TypeCache and include it in the return.
|
package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"currentInvokeExpression.js","sourceRoot":"","sources":["../../../../src/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"currentInvokeExpression.js","sourceRoot":"","sources":["../../../../src/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
14
14
|
exports.validate = void 0;
|
|
15
15
|
const PQP = require("@microsoft/powerquery-parser");
|
|
16
16
|
const validateDuplicateIdentifiers_1 = require("./validateDuplicateIdentifiers");
|
|
17
|
+
const validateFunctionExpression_1 = require("./validateFunctionExpression");
|
|
17
18
|
const validateInvokeExpression_1 = require("./validateInvokeExpression");
|
|
18
19
|
const validateLexAndParse_1 = require("./validateLexAndParse");
|
|
19
20
|
const workspaceCache_1 = require("../workspaceCache");
|
|
@@ -26,18 +27,23 @@ function validate(textDocument, validationSettings) {
|
|
|
26
27
|
hasSyntaxError: false,
|
|
27
28
|
};
|
|
28
29
|
}
|
|
30
|
+
let functionExpressionDiagnostics;
|
|
29
31
|
let invokeExpressionDiagnostics;
|
|
30
32
|
if (validationSettings.checkInvokeExpressions &&
|
|
31
33
|
(PQP.TaskUtils.isParseStageOk(maybeTriedParse) || PQP.TaskUtils.isParseStageParseError(maybeTriedParse))) {
|
|
32
|
-
|
|
34
|
+
const nodeIdMapCollection = maybeTriedParse.nodeIdMapCollection;
|
|
35
|
+
functionExpressionDiagnostics = (0, validateFunctionExpression_1.validateFunctionExpression)(validationSettings, nodeIdMapCollection);
|
|
36
|
+
invokeExpressionDiagnostics = yield (0, validateInvokeExpression_1.validateInvokeExpression)(validationSettings, nodeIdMapCollection, workspaceCache_1.WorkspaceCacheUtils.getTypeCache(textDocument));
|
|
33
37
|
}
|
|
34
38
|
else {
|
|
39
|
+
functionExpressionDiagnostics = [];
|
|
35
40
|
invokeExpressionDiagnostics = [];
|
|
36
41
|
}
|
|
37
42
|
return {
|
|
38
43
|
diagnostics: [
|
|
39
44
|
...(yield (0, validateDuplicateIdentifiers_1.validateDuplicateIdentifiers)(textDocument, validationSettings)),
|
|
40
45
|
...(yield (0, validateLexAndParse_1.validateLexAndParse)(textDocument, validationSettings)),
|
|
46
|
+
...functionExpressionDiagnostics,
|
|
41
47
|
...invokeExpressionDiagnostics,
|
|
42
48
|
],
|
|
43
49
|
hasSyntaxError: PQP.TaskUtils.isLexStageError(maybeTriedParse) || PQP.TaskUtils.isParseStageError(maybeTriedParse),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/powerquery-language-services/validate/validate.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;;;;;;;;;;AAElC,oDAAoD;
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/powerquery-language-services/validate/validate.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;;;;;;;;;;AAElC,oDAAoD;AAKpD,iFAA8E;AAC9E,6EAA0E;AAC1E,yEAAsE;AACtE,+DAA4D;AAG5D,sDAAwD;AAExD,SAAsB,QAAQ,CAC1B,YAA0B,EAC1B,kBAAsC;;QAEtC,MAAM,eAAe,GAAwC,MAAM,oCAAmB,CAAC,uBAAuB,CAC1G,YAAY,EACZ,kBAAkB,CACrB,CAAC;QAEF,IAAI,eAAe,KAAK,SAAS,EAAE;YAC/B,OAAO;gBACH,WAAW,EAAE,EAAE;gBACf,cAAc,EAAE,KAAK;aACxB,CAAC;SACL;QAED,IAAI,6BAA2C,CAAC;QAChD,IAAI,2BAAyC,CAAC;QAE9C,IACI,kBAAkB,CAAC,sBAAsB;YACzC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,eAAe,CAAC,CAAC,EAC1G;YACE,MAAM,mBAAmB,GAAyB,eAAe,CAAC,mBAAmB,CAAC;YAEtF,6BAA6B,GAAG,IAAA,uDAA0B,EAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;YAEpG,2BAA2B,GAAG,MAAM,IAAA,mDAAwB,EACxD,kBAAkB,EAClB,mBAAmB,EACnB,oCAAmB,CAAC,YAAY,CAAC,YAAY,CAAC,CACjD,CAAC;SACL;aAAM;YACH,6BAA6B,GAAG,EAAE,CAAC;YACnC,2BAA2B,GAAG,EAAE,CAAC;SACpC;QAED,OAAO;YACH,WAAW,EAAE;gBACT,GAAG,CAAC,MAAM,IAAA,2DAA4B,EAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;gBACzE,GAAG,CAAC,MAAM,IAAA,yCAAmB,EAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;gBAChE,GAAG,6BAA6B;gBAChC,GAAG,2BAA2B;aACjC;YACD,cAAc,EACV,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,eAAe,CAAC;SACzG,CAAC;IACN,CAAC;CAAA;AA/CD,4BA+CC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Diagnostic } from "vscode-languageserver-types";
|
|
2
2
|
import { NodeIdMap } from "@microsoft/powerquery-parser/lib/powerquery-parser/parser";
|
|
3
|
-
import { Inspection } from "..";
|
|
4
3
|
import { ValidationSettings } from "./validationSettings";
|
|
5
|
-
export declare function validateFunctionExpression(validationSettings: ValidationSettings, nodeIdMapCollection: NodeIdMap.Collection
|
|
4
|
+
export declare function validateFunctionExpression(validationSettings: ValidationSettings, nodeIdMapCollection: NodeIdMap.Collection): Diagnostic[];
|
|
@@ -1,109 +1,56 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// Copyright (c) Microsoft Corporation.
|
|
3
3
|
// Licensed under the MIT license.
|
|
4
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
5
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
6
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
7
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
8
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
9
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
10
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
11
|
-
});
|
|
12
|
-
};
|
|
13
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
5
|
exports.validateFunctionExpression = void 0;
|
|
15
|
-
const powerquery_parser_1 = require("@microsoft/powerquery-parser");
|
|
16
|
-
const language_1 = require("@microsoft/powerquery-parser/lib/powerquery-parser/language");
|
|
17
6
|
const vscode_languageserver_types_1 = require("vscode-languageserver-types");
|
|
18
7
|
const parser_1 = require("@microsoft/powerquery-parser/lib/powerquery-parser/parser");
|
|
19
|
-
const __1 = require("..");
|
|
20
8
|
const localization_1 = require("../localization");
|
|
21
9
|
const diagnosticErrorCode_1 = require("../diagnosticErrorCode");
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
throw inspection;
|
|
37
|
-
}
|
|
38
|
-
invokeExpressionTasks.push(invokeExpressionToDiagnostics(validationSettings, nodeIdMapCollection, inspection.value));
|
|
39
|
-
}
|
|
40
|
-
return (yield Promise.all(invokeExpressionTasks)).flat();
|
|
41
|
-
});
|
|
10
|
+
const __1 = require("..");
|
|
11
|
+
// Check for repeat parameter names for FunctionExpressions.
|
|
12
|
+
function validateFunctionExpression(validationSettings, nodeIdMapCollection) {
|
|
13
|
+
var _a;
|
|
14
|
+
const maybeFnExpressionIds = nodeIdMapCollection.idsByNodeKind.get("FunctionExpression" /* FunctionExpression */);
|
|
15
|
+
if (maybeFnExpressionIds === undefined) {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
const diagnostics = [];
|
|
19
|
+
for (const nodeId of maybeFnExpressionIds) {
|
|
20
|
+
diagnostics.push(validateNoDuplicateParameter(validationSettings, nodeIdMapCollection, nodeId));
|
|
21
|
+
(_a = validationSettings.maybeCancellationToken) === null || _a === void 0 ? void 0 : _a.throwIfCancelled();
|
|
22
|
+
}
|
|
23
|
+
return diagnostics.flat();
|
|
42
24
|
}
|
|
43
25
|
exports.validateFunctionExpression = validateFunctionExpression;
|
|
44
|
-
function
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
result.push(createDiagnosticForArgumentNumberMismatch(validationSettings, invokeExpressionRange, invokeExpressionArguments.numMinExpectedArguments, invokeExpressionArguments.numMaxExpectedArguments, numGivenArguments));
|
|
61
|
-
}
|
|
26
|
+
function validateNoDuplicateParameter(validationSettings, nodeIdMapCollection, fnExpressionId) {
|
|
27
|
+
var _a;
|
|
28
|
+
const fnExpression = parser_1.NodeIdMapUtils.assertGetXorChecked(nodeIdMapCollection, fnExpressionId, "FunctionExpression" /* FunctionExpression */);
|
|
29
|
+
const parameterNames = new Map();
|
|
30
|
+
for (const parameter of parser_1.NodeIdMapIterator.iterFunctionExpressionParameterNames(nodeIdMapCollection, fnExpression)) {
|
|
31
|
+
const existingNames = (_a = parameterNames.get(parameter.literal)) !== null && _a !== void 0 ? _a : [];
|
|
32
|
+
existingNames.push(parameter);
|
|
33
|
+
parameterNames.set(parameter.literal, existingNames);
|
|
34
|
+
}
|
|
35
|
+
const diagnostics = [];
|
|
36
|
+
for (const [identifierLiteral, nodes] of parameterNames) {
|
|
37
|
+
if (nodes.length > 1) {
|
|
38
|
+
diagnostics.push(...nodes.map((identifier) => {
|
|
39
|
+
const parameterRange = __1.PositionUtils.createRangeFromTokenRange(identifier.tokenRange);
|
|
40
|
+
return createDiagnosticForDuplicateParameterName(validationSettings, parameterRange, identifierLiteral);
|
|
41
|
+
}));
|
|
62
42
|
}
|
|
63
|
-
|
|
64
|
-
|
|
43
|
+
}
|
|
44
|
+
return diagnostics;
|
|
65
45
|
}
|
|
66
|
-
function
|
|
46
|
+
function createDiagnosticForDuplicateParameterName(validationSettings, invokeExpressionRange, parameterName) {
|
|
67
47
|
const templates = localization_1.LocalizationUtils.getLocalizationTemplates(validationSettings.locale);
|
|
68
48
|
return {
|
|
69
|
-
code: diagnosticErrorCode_1.DiagnosticErrorCode.
|
|
70
|
-
message: localization_1.Localization.
|
|
49
|
+
code: diagnosticErrorCode_1.DiagnosticErrorCode.DuplicateIdentifier,
|
|
50
|
+
message: localization_1.Localization.error_validation_duplicate_identifier(templates, parameterName),
|
|
71
51
|
range: invokeExpressionRange,
|
|
72
52
|
severity: vscode_languageserver_types_1.DiagnosticSeverity.Error,
|
|
73
53
|
source: validationSettings.source,
|
|
74
54
|
};
|
|
75
55
|
}
|
|
76
|
-
function createDiagnosticForArgumentMismatch(validationSettings, mismatch, maybeFunctionName, invokeExpressionRange, maybeGivenArgumentRange) {
|
|
77
|
-
var _a;
|
|
78
|
-
let range;
|
|
79
|
-
let message;
|
|
80
|
-
const parameter = mismatch.expected;
|
|
81
|
-
const argName = parameter.nameLiteral;
|
|
82
|
-
const expected = language_1.TypeUtils.nameOfTypeKind((_a = parameter.maybeType) !== null && _a !== void 0 ? _a : language_1.Type.AnyInstance.kind);
|
|
83
|
-
// An argument containing at least one leaf node was given.
|
|
84
|
-
if (maybeGivenArgumentRange) {
|
|
85
|
-
const actual = language_1.TypeUtils.nameOfTypeKind(powerquery_parser_1.Assert.asDefined(mismatch.actual).kind);
|
|
86
|
-
range = maybeGivenArgumentRange;
|
|
87
|
-
message = createTypeMismatchMessage(validationSettings.locale, maybeFunctionName, argName, expected, actual);
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
range = invokeExpressionRange;
|
|
91
|
-
message = createMissingMandatoryMessage(validationSettings.locale, maybeFunctionName, argName);
|
|
92
|
-
}
|
|
93
|
-
return {
|
|
94
|
-
code: diagnosticErrorCode_1.DiagnosticErrorCode.InvokeArgumentTypeMismatch,
|
|
95
|
-
message,
|
|
96
|
-
range,
|
|
97
|
-
severity: vscode_languageserver_types_1.DiagnosticSeverity.Error,
|
|
98
|
-
source: validationSettings.source,
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
function createMissingMandatoryMessage(locale, maybeFunctionName, argName) {
|
|
102
|
-
const templates = localization_1.LocalizationUtils.getLocalizationTemplates(locale);
|
|
103
|
-
return localization_1.Localization.error_validation_invokeExpression_missingMandatory(templates, maybeFunctionName, argName);
|
|
104
|
-
}
|
|
105
|
-
function createTypeMismatchMessage(locale, maybeFunctionName, argName, expected, actual) {
|
|
106
|
-
const templates = localization_1.LocalizationUtils.getLocalizationTemplates(locale);
|
|
107
|
-
return localization_1.Localization.error_validation_invokeExpression_typeMismatch(templates, maybeFunctionName, argName, expected, actual);
|
|
108
|
-
}
|
|
109
56
|
//# sourceMappingURL=validateFunctionExpression.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateFunctionExpression.js","sourceRoot":"","sources":["../../../src/powerquery-language-services/validate/validateFunctionExpression.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC
|
|
1
|
+
{"version":3,"file":"validateFunctionExpression.js","sourceRoot":"","sources":["../../../src/powerquery-language-services/validate/validateFunctionExpression.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAElC,6EAA6E;AAC7E,sFAKmE;AAInE,kDAAkE;AAClE,gEAA6D;AAE7D,0BAAmC;AAGnC,4DAA4D;AAC5D,SAAgB,0BAA0B,CACtC,kBAAsC,EACtC,mBAAyC;;IAEzC,MAAM,oBAAoB,GAA4B,mBAAmB,CAAC,aAAa,CAAC,GAAG,+CAE1F,CAAC;IAEF,IAAI,oBAAoB,KAAK,SAAS,EAAE;QACpC,OAAO,EAAE,CAAC;KACb;IAED,MAAM,WAAW,GAAmB,EAAE,CAAC;IAEvC,KAAK,MAAM,MAAM,IAAI,oBAAoB,EAAE;QACvC,WAAW,CAAC,IAAI,CAAC,4BAA4B,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC;QAChG,MAAA,kBAAkB,CAAC,sBAAsB,0CAAE,gBAAgB,EAAE,CAAC;KACjE;IAED,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC;AAC9B,CAAC;AApBD,gEAoBC;AAED,SAAS,4BAA4B,CACjC,kBAAsC,EACtC,mBAAyC,EACzC,cAAsB;;IAEtB,MAAM,YAAY,GAAa,uBAAc,CAAC,mBAAmB,CAC7D,mBAAmB,EACnB,cAAc,gDAEjB,CAAC;IAEF,MAAM,cAAc,GAAkC,IAAI,GAAG,EAAE,CAAC;IAEhE,KAAK,MAAM,SAAS,IAAI,0BAAiB,CAAC,oCAAoC,CAAC,mBAAmB,EAAE,YAAY,CAAC,EAAE;QAC/G,MAAM,aAAa,GAAqB,MAAA,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,mCAAI,EAAE,CAAC;QACpF,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9B,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;KACxD;IAED,MAAM,WAAW,GAAiB,EAAE,CAAC;IAErC,KAAK,MAAM,CAAC,iBAAiB,EAAE,KAAK,CAAC,IAAI,cAAc,EAAE;QACrD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAClB,WAAW,CAAC,IAAI,CACZ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,UAA0B,EAAE,EAAE;gBACxC,MAAM,cAAc,GAAU,iBAAa,CAAC,yBAAyB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;gBAE7F,OAAO,yCAAyC,CAC5C,kBAAkB,EAClB,cAAc,EACd,iBAAiB,CACpB,CAAC;YACN,CAAC,CAAC,CACL,CAAC;SACL;KACJ;IAED,OAAO,WAAW,CAAC;AACvB,CAAC;AAED,SAAS,yCAAyC,CAC9C,kBAAsC,EACtC,qBAA4B,EAC5B,aAAqB;IAErB,MAAM,SAAS,GAA2B,gCAAiB,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAEhH,OAAO;QACH,IAAI,EAAE,yCAAmB,CAAC,mBAAmB;QAC7C,OAAO,EAAE,2BAAY,CAAC,qCAAqC,CAAC,SAAS,EAAE,aAAa,CAAC;QACrF,KAAK,EAAE,qBAAqB;QAC5B,QAAQ,EAAE,gDAAkB,CAAC,KAAK;QAClC,MAAM,EAAE,kBAAkB,CAAC,MAAM;KACpC,CAAC;AACN,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@microsoft/powerquery-language-services",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.5",
|
|
4
4
|
"author": "Microsoft",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"scripts": {
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
"typescript": "4.5.4"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@microsoft/powerquery-formatter": "0.0.
|
|
50
|
-
"@microsoft/powerquery-parser": "0.6.
|
|
49
|
+
"@microsoft/powerquery-formatter": "0.0.47",
|
|
50
|
+
"@microsoft/powerquery-parser": "0.6.6",
|
|
51
51
|
"vscode-languageserver-textdocument": "1.0.3",
|
|
52
52
|
"vscode-languageserver-types": "3.16.0"
|
|
53
53
|
},
|