@actions/languageservice 0.2.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/LICENSE +21 -0
- package/README.md +131 -0
- package/dist/action.d.ts +28 -0
- package/dist/action.d.ts.map +1 -0
- package/dist/action.js +36 -0
- package/dist/action.js.map +1 -0
- package/dist/complete.d.ts +15 -0
- package/dist/complete.d.ts.map +1 -0
- package/dist/complete.js +203 -0
- package/dist/complete.js.map +1 -0
- package/dist/context/workflow-context.d.ts +15 -0
- package/dist/context/workflow-context.d.ts.map +1 -0
- package/dist/context/workflow-context.js +64 -0
- package/dist/context/workflow-context.js.map +1 -0
- package/dist/context-providers/config.d.ts +7 -0
- package/dist/context-providers/config.d.ts.map +1 -0
- package/dist/context-providers/config.js +2 -0
- package/dist/context-providers/config.js.map +1 -0
- package/dist/context-providers/default.d.ts +11 -0
- package/dist/context-providers/default.d.ts.map +1 -0
- package/dist/context-providers/default.js +88 -0
- package/dist/context-providers/default.js.map +1 -0
- package/dist/context-providers/descriptions.d.ts +15 -0
- package/dist/context-providers/descriptions.d.ts.map +1 -0
- package/dist/context-providers/descriptions.js +23 -0
- package/dist/context-providers/descriptions.js.map +1 -0
- package/dist/context-providers/descriptions.json +241 -0
- package/dist/context-providers/env.d.ts +4 -0
- package/dist/context-providers/env.d.ts.map +1 -0
- package/dist/context-providers/env.js +29 -0
- package/dist/context-providers/env.js.map +1 -0
- package/dist/context-providers/events/eventPayloads.d.ts +4 -0
- package/dist/context-providers/events/eventPayloads.d.ts.map +1 -0
- package/dist/context-providers/events/eventPayloads.js +111 -0
- package/dist/context-providers/events/eventPayloads.js.map +1 -0
- package/dist/context-providers/events/objects.json +26220 -0
- package/dist/context-providers/events/schedule.json +102 -0
- package/dist/context-providers/events/webhooks.json +124811 -0
- package/dist/context-providers/events/workflow_call.json +134 -0
- package/dist/context-providers/github.d.ts +5 -0
- package/dist/context-providers/github.d.ts.map +1 -0
- package/dist/context-providers/github.js +139 -0
- package/dist/context-providers/github.js.map +1 -0
- package/dist/context-providers/inputs.d.ts +4 -0
- package/dist/context-providers/inputs.d.ts.map +1 -0
- package/dist/context-providers/inputs.js +52 -0
- package/dist/context-providers/inputs.js.map +1 -0
- package/dist/context-providers/job.d.ts +4 -0
- package/dist/context-providers/job.d.ts.map +1 -0
- package/dist/context-providers/job.js +61 -0
- package/dist/context-providers/job.js.map +1 -0
- package/dist/context-providers/jobs.d.ts +4 -0
- package/dist/context-providers/jobs.d.ts.map +1 -0
- package/dist/context-providers/jobs.js +30 -0
- package/dist/context-providers/jobs.js.map +1 -0
- package/dist/context-providers/matrix.d.ts +4 -0
- package/dist/context-providers/matrix.d.ts.map +1 -0
- package/dist/context-providers/matrix.js +163 -0
- package/dist/context-providers/matrix.js.map +1 -0
- package/dist/context-providers/needs.d.ts +4 -0
- package/dist/context-providers/needs.d.ts.map +1 -0
- package/dist/context-providers/needs.js +56 -0
- package/dist/context-providers/needs.js.map +1 -0
- package/dist/context-providers/secrets.d.ts +5 -0
- package/dist/context-providers/secrets.d.ts.map +1 -0
- package/dist/context-providers/secrets.js +23 -0
- package/dist/context-providers/secrets.js.map +1 -0
- package/dist/context-providers/steps.d.ts +4 -0
- package/dist/context-providers/steps.d.ts.map +1 -0
- package/dist/context-providers/steps.js +35 -0
- package/dist/context-providers/steps.js.map +1 -0
- package/dist/context-providers/strategy.d.ts +4 -0
- package/dist/context-providers/strategy.d.ts.map +1 -0
- package/dist/context-providers/strategy.js +31 -0
- package/dist/context-providers/strategy.js.map +1 -0
- package/dist/description-providers/reusable-job-inputs.d.ts +5 -0
- package/dist/description-providers/reusable-job-inputs.d.ts.map +1 -0
- package/dist/description-providers/reusable-job-inputs.js +29 -0
- package/dist/description-providers/reusable-job-inputs.js.map +1 -0
- package/dist/document-links.d.ts +4 -0
- package/dist/document-links.d.ts.map +1 -0
- package/dist/document-links.js +73 -0
- package/dist/document-links.js.map +1 -0
- package/dist/expression-hover/expression-pos.d.ts +13 -0
- package/dist/expression-hover/expression-pos.d.ts.map +1 -0
- package/dist/expression-hover/expression-pos.js +41 -0
- package/dist/expression-hover/expression-pos.js.map +1 -0
- package/dist/expression-hover/pos-range.d.ts +3 -0
- package/dist/expression-hover/pos-range.d.ts.map +1 -0
- package/dist/expression-hover/pos-range.js +7 -0
- package/dist/expression-hover/pos-range.js.map +1 -0
- package/dist/expression-hover/visitor.d.ts +27 -0
- package/dist/expression-hover/visitor.d.ts.map +1 -0
- package/dist/expression-hover/visitor.js +116 -0
- package/dist/expression-hover/visitor.js.map +1 -0
- package/dist/expression-validation/error-dictionary.d.ts +13 -0
- package/dist/expression-validation/error-dictionary.d.ts.map +1 -0
- package/dist/expression-validation/error-dictionary.js +39 -0
- package/dist/expression-validation/error-dictionary.js.map +1 -0
- package/dist/expression-validation/functions.d.ts +9 -0
- package/dist/expression-validation/functions.d.ts.map +1 -0
- package/dist/expression-validation/functions.js +11 -0
- package/dist/expression-validation/functions.js.map +1 -0
- package/dist/hover.d.ts +16 -0
- package/dist/hover.d.ts.map +1 -0
- package/dist/hover.js +154 -0
- package/dist/hover.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/log.d.ts +39 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +48 -0
- package/dist/log.js.map +1 -0
- package/dist/nulltrace.d.ts +3 -0
- package/dist/nulltrace.d.ts.map +1 -0
- package/dist/nulltrace.js +3 -0
- package/dist/nulltrace.js.map +1 -0
- package/dist/utils/expression-detection.d.ts +3 -0
- package/dist/utils/expression-detection.d.ts.map +1 -0
- package/dist/utils/expression-detection.js +9 -0
- package/dist/utils/expression-detection.js.map +1 -0
- package/dist/utils/find-token.d.ts +23 -0
- package/dist/utils/find-token.d.ts.map +1 -0
- package/dist/utils/find-token.js +159 -0
- package/dist/utils/find-token.js.map +1 -0
- package/dist/utils/indentation-guesser.d.ts +16 -0
- package/dist/utils/indentation-guesser.d.ts.map +1 -0
- package/dist/utils/indentation-guesser.js +214 -0
- package/dist/utils/indentation-guesser.js.map +1 -0
- package/dist/utils/range.d.ts +5 -0
- package/dist/utils/range.d.ts.map +1 -0
- package/dist/utils/range.js +25 -0
- package/dist/utils/range.js.map +1 -0
- package/dist/utils/rel-char-pos.d.ts +4 -0
- package/dist/utils/rel-char-pos.d.ts.map +1 -0
- package/dist/utils/rel-char-pos.js +14 -0
- package/dist/utils/rel-char-pos.js.map +1 -0
- package/dist/utils/scalar-to-data.d.ts +4 -0
- package/dist/utils/scalar-to-data.d.ts.map +1 -0
- package/dist/utils/scalar-to-data.js +19 -0
- package/dist/utils/scalar-to-data.js.map +1 -0
- package/dist/utils/transform.d.ts +6 -0
- package/dist/utils/transform.d.ts.map +1 -0
- package/dist/utils/transform.js +66 -0
- package/dist/utils/transform.js.map +1 -0
- package/dist/utils/workflow-cache.d.ts +21 -0
- package/dist/utils/workflow-cache.d.ts.map +1 -0
- package/dist/utils/workflow-cache.js +52 -0
- package/dist/utils/workflow-cache.js.map +1 -0
- package/dist/validate-action.d.ts +6 -0
- package/dist/validate-action.d.ts.map +1 -0
- package/dist/validate-action.js +71 -0
- package/dist/validate-action.js.map +1 -0
- package/dist/validate.d.ts +20 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +162 -0
- package/dist/validate.js.map +1 -0
- package/dist/value-providers/config.d.ts +24 -0
- package/dist/value-providers/config.d.ts.map +1 -0
- package/dist/value-providers/config.js +6 -0
- package/dist/value-providers/config.js.map +1 -0
- package/dist/value-providers/default.d.ts +4 -0
- package/dist/value-providers/default.d.ts.map +1 -0
- package/dist/value-providers/default.js +38 -0
- package/dist/value-providers/default.js.map +1 -0
- package/dist/value-providers/definition.d.ts +4 -0
- package/dist/value-providers/definition.d.ts.map +1 -0
- package/dist/value-providers/definition.js +82 -0
- package/dist/value-providers/definition.js.map +1 -0
- package/dist/value-providers/needs.d.ts +4 -0
- package/dist/value-providers/needs.d.ts.map +1 -0
- package/dist/value-providers/needs.js +10 -0
- package/dist/value-providers/needs.js.map +1 -0
- package/dist/value-providers/reusable-job-inputs.d.ts +4 -0
- package/dist/value-providers/reusable-job-inputs.d.ts.map +1 -0
- package/dist/value-providers/reusable-job-inputs.js +29 -0
- package/dist/value-providers/reusable-job-inputs.js.map +1 -0
- package/dist/value-providers/reusable-job-secrets.d.ts +4 -0
- package/dist/value-providers/reusable-job-secrets.d.ts.map +1 -0
- package/dist/value-providers/reusable-job-secrets.js +41 -0
- package/dist/value-providers/reusable-job-secrets.js.map +1 -0
- package/dist/value-providers/strings-to-values.d.ts +3 -0
- package/dist/value-providers/strings-to-values.d.ts.map +1 -0
- package/dist/value-providers/strings-to-values.js +4 -0
- package/dist/value-providers/strings-to-values.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { isString } from "@actions/workflow-parser";
|
|
2
|
+
import { TokenType } from "@actions/workflow-parser/templates/tokens/types";
|
|
3
|
+
export function findInnerToken(pos, root) {
|
|
4
|
+
const { token } = findToken(pos, root);
|
|
5
|
+
return token;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Find a token at the given position in the document.
|
|
9
|
+
*
|
|
10
|
+
* If the position is within
|
|
11
|
+
* - the key of a mapping, parent will be the mapping, keyToken will be null, and token will be the key.
|
|
12
|
+
* - the value of a mapping, parent will be the mapping, keyToken will be the key for the value, and token will be the value
|
|
13
|
+
* - a sequence item, parent will be the sequence, keyToken will be null, and token will be the item
|
|
14
|
+
*
|
|
15
|
+
* @param pos Position within the document for which to find a token
|
|
16
|
+
* @param root Root node
|
|
17
|
+
* @returns Token result
|
|
18
|
+
*/
|
|
19
|
+
export function findToken(pos, root) {
|
|
20
|
+
if (!root) {
|
|
21
|
+
return {
|
|
22
|
+
token: null,
|
|
23
|
+
keyToken: null,
|
|
24
|
+
parent: null,
|
|
25
|
+
path: []
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
let lastMatching = null;
|
|
29
|
+
const s = [
|
|
30
|
+
{
|
|
31
|
+
token: root,
|
|
32
|
+
keyToken: null,
|
|
33
|
+
parent: null,
|
|
34
|
+
path: []
|
|
35
|
+
}
|
|
36
|
+
];
|
|
37
|
+
while (s.length > 0) {
|
|
38
|
+
const result = s.shift(); // eslint-disable-line @typescript-eslint/no-non-null-assertion
|
|
39
|
+
const { parent, token, keyToken, path } = result;
|
|
40
|
+
if (!token) {
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
if (!posInToken(pos, token)) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
// Pos is in token, remember this token
|
|
47
|
+
lastMatching = result;
|
|
48
|
+
// Position is in token, enqueue children if there are any
|
|
49
|
+
switch (token.templateTokenType) {
|
|
50
|
+
case TokenType.Mapping: {
|
|
51
|
+
const mappingToken = token;
|
|
52
|
+
for (const { key, value } of mappingToken) {
|
|
53
|
+
// If the position is within the key, immediately return it as the token.
|
|
54
|
+
if (posInToken(pos, key)) {
|
|
55
|
+
return {
|
|
56
|
+
parent: mappingToken,
|
|
57
|
+
keyToken: null,
|
|
58
|
+
token: key,
|
|
59
|
+
path: [...path, mappingToken]
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
// If pos, key, and value are on the same line, and value is an empty node (null, empty string) return early
|
|
63
|
+
// we cannot reliably check the position in that empty node
|
|
64
|
+
if (onSameLine(pos, key, value) && emptyNode(value)) {
|
|
65
|
+
return {
|
|
66
|
+
parent: mappingToken,
|
|
67
|
+
keyToken: key,
|
|
68
|
+
token: value,
|
|
69
|
+
path: [...path, mappingToken]
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
s.push({
|
|
73
|
+
parent: mappingToken,
|
|
74
|
+
keyToken: key,
|
|
75
|
+
token: value,
|
|
76
|
+
path: [...path, mappingToken, key]
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
case TokenType.Sequence: {
|
|
82
|
+
const sequenceToken = token;
|
|
83
|
+
for (const token of sequenceToken) {
|
|
84
|
+
s.push({
|
|
85
|
+
parent: sequenceToken,
|
|
86
|
+
keyToken: null,
|
|
87
|
+
token: token,
|
|
88
|
+
path: [...path, sequenceToken]
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
token,
|
|
96
|
+
keyToken,
|
|
97
|
+
parent,
|
|
98
|
+
path
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
// Did not find a matching token, return the last matching token as parent
|
|
102
|
+
return {
|
|
103
|
+
token: null,
|
|
104
|
+
parent: lastMatching?.token ?? null,
|
|
105
|
+
keyToken: null,
|
|
106
|
+
path: lastMatching?.token ? [...lastMatching.path, lastMatching.token] : []
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function posInToken(pos, token) {
|
|
110
|
+
if (!token.range) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
const r = token.range;
|
|
114
|
+
// TokenRange is one-based, Position is zero-based
|
|
115
|
+
const tokenLine = pos.line + 1;
|
|
116
|
+
const tokenChar = pos.character + 1;
|
|
117
|
+
// Check lines
|
|
118
|
+
if (r.start.line > tokenLine || tokenLine > r.end.line) {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
// Position is within the token lines. Check character/column if pos line matches
|
|
122
|
+
// start or end
|
|
123
|
+
if ((r.start.line === tokenLine && tokenChar < r.start.column) ||
|
|
124
|
+
(r.end.line === tokenLine && tokenChar > r.end.column)) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
function onSameLine(pos, key, value) {
|
|
130
|
+
if (!value.range) {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
if (!key.range) {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
if (value.range.start.line !== value.range.end.line) {
|
|
137
|
+
// Token occupies multiple lines, can't be an empty node
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
// TokenRange is one-based, Position is zero-based
|
|
141
|
+
const posLine = pos.line + 1;
|
|
142
|
+
if (posLine != value.range.start.line) {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
function emptyNode(token) {
|
|
148
|
+
if (!token) {
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
if (token.templateTokenType === TokenType.Null) {
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
if (isString(token)) {
|
|
155
|
+
return token.value === "";
|
|
156
|
+
}
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=find-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-token.js","sourceRoot":"","sources":["../../src/utils/find-token.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { TextDocument } from "vscode-languageserver-textdocument";
|
|
2
|
+
/**
|
|
3
|
+
* Result for a guessIndentation
|
|
4
|
+
*/
|
|
5
|
+
export interface IGuessedIndentation {
|
|
6
|
+
/**
|
|
7
|
+
* If indentation is based on spaces (`insertSpaces` = true), then what is the number of spaces that make an indent?
|
|
8
|
+
*/
|
|
9
|
+
tabSize: number;
|
|
10
|
+
/**
|
|
11
|
+
* Is indentation based on spaces?
|
|
12
|
+
*/
|
|
13
|
+
insertSpaces: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function guessIndentation(source: TextDocument, defaultTabSize: number, defaultInsertSpaces: boolean): IGuessedIndentation;
|
|
16
|
+
//# sourceMappingURL=indentation-guesser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indentation-guesser.d.ts","sourceRoot":"","sources":["../../src/utils/indentation-guesser.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,YAAY,EAAC,MAAM,oCAAoC,CAAC;AA4HhE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EACpB,cAAc,EAAE,MAAM,EACtB,mBAAmB,EAAE,OAAO,GAC3B,mBAAmB,CA2HrB"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
// Copied from https://github.com/microsoft/vscode/blob/c3b617f9b058e01cbc5cf00ec3813a7047326503/src/vs/editor/common/model/indentationGuesser.ts
|
|
2
|
+
// And adapted to work with languageserver-textdocument types
|
|
3
|
+
var CharCode;
|
|
4
|
+
(function (CharCode) {
|
|
5
|
+
CharCode[CharCode["Space"] = 32] = "Space";
|
|
6
|
+
CharCode[CharCode["Tab"] = 9] = "Tab";
|
|
7
|
+
CharCode[CharCode["Comma"] = 44] = "Comma";
|
|
8
|
+
})(CharCode || (CharCode = {}));
|
|
9
|
+
function getLineContent(doc, lineNumber) {
|
|
10
|
+
return doc.getText({
|
|
11
|
+
start: {
|
|
12
|
+
line: lineNumber - 1,
|
|
13
|
+
character: 0
|
|
14
|
+
},
|
|
15
|
+
end: {
|
|
16
|
+
line: lineNumber - 1,
|
|
17
|
+
character: Number.MAX_SAFE_INTEGER
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
function getLineCharCode(doc, lineNumber, index) {
|
|
22
|
+
return doc
|
|
23
|
+
.getText({
|
|
24
|
+
start: {
|
|
25
|
+
line: lineNumber - 1,
|
|
26
|
+
character: index
|
|
27
|
+
},
|
|
28
|
+
end: {
|
|
29
|
+
line: lineNumber - 1,
|
|
30
|
+
character: index + 1
|
|
31
|
+
}
|
|
32
|
+
})
|
|
33
|
+
.charCodeAt(0);
|
|
34
|
+
}
|
|
35
|
+
/*---------------------------------------------------------------------------------------------
|
|
36
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
37
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
38
|
+
*--------------------------------------------------------------------------------------------*/
|
|
39
|
+
class SpacesDiffResult {
|
|
40
|
+
constructor() {
|
|
41
|
+
this.spacesDiff = 0;
|
|
42
|
+
this.looksLikeAlignment = false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Compute the diff in spaces between two line's indentation.
|
|
47
|
+
*/
|
|
48
|
+
function spacesDiff(a, aLength, b, bLength, result) {
|
|
49
|
+
result.spacesDiff = 0;
|
|
50
|
+
result.looksLikeAlignment = false;
|
|
51
|
+
// This can go both ways (e.g.):
|
|
52
|
+
// - a: "\t"
|
|
53
|
+
// - b: "\t "
|
|
54
|
+
// => This should count 1 tab and 4 spaces
|
|
55
|
+
let i;
|
|
56
|
+
for (i = 0; i < aLength && i < bLength; i++) {
|
|
57
|
+
const aCharCode = a.charCodeAt(i);
|
|
58
|
+
const bCharCode = b.charCodeAt(i);
|
|
59
|
+
if (aCharCode !== bCharCode) {
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
let aSpacesCnt = 0, aTabsCount = 0;
|
|
64
|
+
for (let j = i; j < aLength; j++) {
|
|
65
|
+
const aCharCode = a.charCodeAt(j);
|
|
66
|
+
if (aCharCode === CharCode.Space) {
|
|
67
|
+
aSpacesCnt++;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
aTabsCount++;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
let bSpacesCnt = 0, bTabsCount = 0;
|
|
74
|
+
for (let j = i; j < bLength; j++) {
|
|
75
|
+
const bCharCode = b.charCodeAt(j);
|
|
76
|
+
if (bCharCode === CharCode.Space) {
|
|
77
|
+
bSpacesCnt++;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
bTabsCount++;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (aSpacesCnt > 0 && aTabsCount > 0) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (bSpacesCnt > 0 && bTabsCount > 0) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const tabsDiff = Math.abs(aTabsCount - bTabsCount);
|
|
90
|
+
const spacesDiff = Math.abs(aSpacesCnt - bSpacesCnt);
|
|
91
|
+
if (tabsDiff === 0) {
|
|
92
|
+
// check if the indentation difference might be caused by alignment reasons
|
|
93
|
+
// sometime folks like to align their code, but this should not be used as a hint
|
|
94
|
+
result.spacesDiff = spacesDiff;
|
|
95
|
+
if (spacesDiff > 0 && 0 <= bSpacesCnt - 1 && bSpacesCnt - 1 < a.length && bSpacesCnt < b.length) {
|
|
96
|
+
if (b.charCodeAt(bSpacesCnt) !== CharCode.Space && a.charCodeAt(bSpacesCnt - 1) === CharCode.Space) {
|
|
97
|
+
if (a.charCodeAt(a.length - 1) === CharCode.Comma) {
|
|
98
|
+
// This looks like an alignment desire: e.g.
|
|
99
|
+
// const a = b + c,
|
|
100
|
+
// d = b - c;
|
|
101
|
+
result.looksLikeAlignment = true;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (spacesDiff % tabsDiff === 0) {
|
|
108
|
+
result.spacesDiff = spacesDiff / tabsDiff;
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
export function guessIndentation(source, defaultTabSize, defaultInsertSpaces) {
|
|
113
|
+
// Look at most at the first 10k lines
|
|
114
|
+
const linesCount = Math.min(source.lineCount, 10000);
|
|
115
|
+
let linesIndentedWithTabsCount = 0; // number of lines that contain at least one tab in indentation
|
|
116
|
+
let linesIndentedWithSpacesCount = 0; // number of lines that contain only spaces in indentation
|
|
117
|
+
let previousLineText = ""; // content of latest line that contained non-whitespace chars
|
|
118
|
+
let previousLineIndentation = 0; // index at which latest line contained the first non-whitespace char
|
|
119
|
+
const ALLOWED_TAB_SIZE_GUESSES = [2, 4, 6, 8, 3, 5, 7]; // prefer even guesses for `tabSize`, limit to [2, 8].
|
|
120
|
+
const MAX_ALLOWED_TAB_SIZE_GUESS = 8; // max(ALLOWED_TAB_SIZE_GUESSES) = 8
|
|
121
|
+
const spacesDiffCount = [0, 0, 0, 0, 0, 0, 0, 0, 0]; // `tabSize` scores
|
|
122
|
+
const tmp = new SpacesDiffResult();
|
|
123
|
+
for (let lineNumber = 1; lineNumber <= linesCount; lineNumber++) {
|
|
124
|
+
const currentLineText = getLineContent(source, lineNumber);
|
|
125
|
+
const currentLineLength = currentLineText.length;
|
|
126
|
+
// if the text buffer is chunk based, so long lines are cons-string, v8 will flattern the string when we check charCode.
|
|
127
|
+
// checking charCode on chunks directly is cheaper.
|
|
128
|
+
const useCurrentLineText = currentLineLength <= 65536;
|
|
129
|
+
let currentLineHasContent = false; // does `currentLineText` contain non-whitespace chars
|
|
130
|
+
let currentLineIndentation = 0; // index at which `currentLineText` contains the first non-whitespace char
|
|
131
|
+
let currentLineSpacesCount = 0; // count of spaces found in `currentLineText` indentation
|
|
132
|
+
let currentLineTabsCount = 0; // count of tabs found in `currentLineText` indentation
|
|
133
|
+
for (let j = 0, lenJ = currentLineLength; j < lenJ; j++) {
|
|
134
|
+
const charCode = useCurrentLineText ? currentLineText.charCodeAt(j) : getLineCharCode(source, lineNumber, j);
|
|
135
|
+
if (charCode === CharCode.Tab) {
|
|
136
|
+
currentLineTabsCount++;
|
|
137
|
+
}
|
|
138
|
+
else if (charCode === CharCode.Space) {
|
|
139
|
+
currentLineSpacesCount++;
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
// Hit non whitespace character on this line
|
|
143
|
+
currentLineHasContent = true;
|
|
144
|
+
currentLineIndentation = j;
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Ignore empty or only whitespace lines
|
|
149
|
+
if (!currentLineHasContent) {
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
if (currentLineTabsCount > 0) {
|
|
153
|
+
linesIndentedWithTabsCount++;
|
|
154
|
+
}
|
|
155
|
+
else if (currentLineSpacesCount > 1) {
|
|
156
|
+
linesIndentedWithSpacesCount++;
|
|
157
|
+
}
|
|
158
|
+
spacesDiff(previousLineText, previousLineIndentation, currentLineText, currentLineIndentation, tmp);
|
|
159
|
+
if (tmp.looksLikeAlignment) {
|
|
160
|
+
// if defaultInsertSpaces === true && the spaces count == tabSize, we may want to count it as valid indentation
|
|
161
|
+
//
|
|
162
|
+
// - item1
|
|
163
|
+
// - item2
|
|
164
|
+
//
|
|
165
|
+
// otherwise skip this line entirely
|
|
166
|
+
//
|
|
167
|
+
// const a = 1,
|
|
168
|
+
// b = 2;
|
|
169
|
+
if (!(defaultInsertSpaces && defaultTabSize === tmp.spacesDiff)) {
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
const currentSpacesDiff = tmp.spacesDiff;
|
|
174
|
+
if (currentSpacesDiff <= MAX_ALLOWED_TAB_SIZE_GUESS) {
|
|
175
|
+
spacesDiffCount[currentSpacesDiff]++;
|
|
176
|
+
}
|
|
177
|
+
previousLineText = currentLineText;
|
|
178
|
+
previousLineIndentation = currentLineIndentation;
|
|
179
|
+
}
|
|
180
|
+
let insertSpaces = defaultInsertSpaces;
|
|
181
|
+
if (linesIndentedWithTabsCount !== linesIndentedWithSpacesCount) {
|
|
182
|
+
insertSpaces = linesIndentedWithTabsCount < linesIndentedWithSpacesCount;
|
|
183
|
+
}
|
|
184
|
+
let tabSize = defaultTabSize;
|
|
185
|
+
// Guess tabSize only if inserting spaces...
|
|
186
|
+
if (insertSpaces) {
|
|
187
|
+
let tabSizeScore = insertSpaces ? 0 : 0.1 * linesCount;
|
|
188
|
+
// console.log("score threshold: " + tabSizeScore);
|
|
189
|
+
ALLOWED_TAB_SIZE_GUESSES.forEach(possibleTabSize => {
|
|
190
|
+
const possibleTabSizeScore = spacesDiffCount[possibleTabSize];
|
|
191
|
+
if (possibleTabSizeScore > tabSizeScore) {
|
|
192
|
+
tabSizeScore = possibleTabSizeScore;
|
|
193
|
+
tabSize = possibleTabSize;
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
// Let a tabSize of 2 win even if it is not the maximum
|
|
197
|
+
// (only in case 4 was guessed)
|
|
198
|
+
if (tabSize === 4 &&
|
|
199
|
+
spacesDiffCount[4] > 0 &&
|
|
200
|
+
spacesDiffCount[2] > 0 &&
|
|
201
|
+
spacesDiffCount[2] >= spacesDiffCount[4] / 2) {
|
|
202
|
+
tabSize = 2;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// console.log('--------------------------');
|
|
206
|
+
// console.log('linesIndentedWithTabsCount: ' + linesIndentedWithTabsCount + ', linesIndentedWithSpacesCount: ' + linesIndentedWithSpacesCount);
|
|
207
|
+
// console.log('spacesDiffCount: ' + spacesDiffCount);
|
|
208
|
+
// console.log('tabSize: ' + tabSize + ', tabSizeScore: ' + tabSizeScore);
|
|
209
|
+
return {
|
|
210
|
+
insertSpaces: insertSpaces,
|
|
211
|
+
tabSize: tabSize
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=indentation-guesser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indentation-guesser.js","sourceRoot":"","sources":["../../src/utils/indentation-guesser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Position as TokenPosition, TokenRange } from "@actions/workflow-parser/templates/tokens/token-range";
|
|
2
|
+
import { Position, Range } from "vscode-languageserver-types";
|
|
3
|
+
export declare function mapRange(range: TokenRange | undefined): Range;
|
|
4
|
+
export declare function mapPosition(position: TokenPosition): Position;
|
|
5
|
+
//# sourceMappingURL=range.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range.d.ts","sourceRoot":"","sources":["../../src/utils/range.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,IAAI,aAAa,EAAE,UAAU,EAAC,MAAM,uDAAuD,CAAC;AAC5G,OAAO,EAAC,QAAQ,EAAE,KAAK,EAAC,MAAM,6BAA6B,CAAC;AAE5D,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,KAAK,CAkB7D;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,QAAQ,CAK7D"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export function mapRange(range) {
|
|
2
|
+
if (!range) {
|
|
3
|
+
return {
|
|
4
|
+
start: {
|
|
5
|
+
line: 1,
|
|
6
|
+
character: 1
|
|
7
|
+
},
|
|
8
|
+
end: {
|
|
9
|
+
line: 1,
|
|
10
|
+
character: 1
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
start: mapPosition(range.start),
|
|
16
|
+
end: mapPosition(range.end)
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function mapPosition(position) {
|
|
20
|
+
return {
|
|
21
|
+
line: position.line - 1,
|
|
22
|
+
character: position.column - 1
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=range.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range.js","sourceRoot":"","sources":["../../src/utils/range.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,QAAQ,CAAC,KAA6B;IACpD,IAAI,CAAC,KAAK,EAAE;QACV,OAAO;YACL,KAAK,EAAE;gBACL,IAAI,EAAE,CAAC;gBACP,SAAS,EAAE,CAAC;aACb;YACD,GAAG,EAAE;gBACH,IAAI,EAAE,CAAC;gBACP,SAAS,EAAE,CAAC;aACb;SACF,CAAC;KACH;IAED,OAAO;QACL,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;QAC/B,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAuB;IACjD,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC;QACvB,SAAS,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC;KAC/B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { TokenRange } from "@actions/workflow-parser/templates/tokens/token-range";
|
|
2
|
+
import { Position } from "vscode-languageserver-textdocument";
|
|
3
|
+
export declare function getRelCharOffset(tokenRange: TokenRange, currentInput: string, pos: Position): number;
|
|
4
|
+
//# sourceMappingURL=rel-char-pos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rel-char-pos.d.ts","sourceRoot":"","sources":["../../src/utils/rel-char-pos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,uDAAuD,CAAC;AACjF,OAAO,EAAC,QAAQ,EAAC,MAAM,oCAAoC,CAAC;AAG5D,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,MAAM,CAUpG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { mapRange } from "./range";
|
|
2
|
+
export function getRelCharOffset(tokenRange, currentInput, pos) {
|
|
3
|
+
const range = mapRange(tokenRange);
|
|
4
|
+
if (range.start.line !== range.end.line) {
|
|
5
|
+
const lines = currentInput.split("\n");
|
|
6
|
+
const lineDiff = pos.line - range.start.line - 1;
|
|
7
|
+
const linesBeforeCusor = lines.slice(0, lineDiff);
|
|
8
|
+
return linesBeforeCusor.join("\n").length + pos.character + 1;
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
return pos.character - range.start.character;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=rel-char-pos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rel-char-pos.js","sourceRoot":"","sources":["../../src/utils/rel-char-pos.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAC;AAEjC,MAAM,UAAU,gBAAgB,CAAC,UAAsB,EAAE,YAAoB,EAAE,GAAa;IAC1F,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE;QACvC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QACjD,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAClD,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;KAC/D;SAAM;QACL,OAAO,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;KAC9C;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scalar-to-data.d.ts","sourceRoot":"","sources":["../../src/utils/scalar-to-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,sBAAsB,CAAC;AAE1C,OAAO,EAAC,WAAW,EAAC,MAAM,wDAAwD,CAAC;AAGnF,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC,cAAc,CAkBrE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { data } from "@actions/expressions";
|
|
2
|
+
import { isBoolean, isNumber, isString } from "@actions/workflow-parser";
|
|
3
|
+
import { TokenType } from "@actions/workflow-parser/templates/tokens/types";
|
|
4
|
+
export function scalarToData(scalar) {
|
|
5
|
+
if (isNumber(scalar)) {
|
|
6
|
+
return new data.NumberData(scalar.value);
|
|
7
|
+
}
|
|
8
|
+
if (isString(scalar)) {
|
|
9
|
+
return new data.StringData(scalar.value);
|
|
10
|
+
}
|
|
11
|
+
if (isBoolean(scalar)) {
|
|
12
|
+
return new data.BooleanData(scalar.value);
|
|
13
|
+
}
|
|
14
|
+
if (scalar.templateTokenType === TokenType.Null) {
|
|
15
|
+
return new data.Null();
|
|
16
|
+
}
|
|
17
|
+
return new data.StringData(scalar.toDisplayString());
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=scalar-to-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scalar-to-data.js","sourceRoot":"","sources":["../../src/utils/scalar-to-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAC,MAAM,0BAA0B,CAAC;AAEvE,OAAO,EAAC,SAAS,EAAC,MAAM,iDAAiD,CAAC;AAE1E,MAAM,UAAU,YAAY,CAAC,MAAmB;IAC9C,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;QACpB,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC1C;IAED,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;QACpB,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC1C;IAED,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE;QACrB,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC3C;IAED,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS,CAAC,IAAI,EAAE;QAC/C,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;KACxB;IAED,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { StringToken } from "@actions/workflow-parser/templates/tokens/string-token";
|
|
2
|
+
import { TemplateToken } from "@actions/workflow-parser/templates/tokens/template-token";
|
|
3
|
+
import { Position, TextDocument } from "vscode-languageserver-textdocument";
|
|
4
|
+
export declare function transform(doc: TextDocument, pos: Position): [TextDocument, Position];
|
|
5
|
+
export declare function isPlaceholder(key: StringToken, value: TemplateToken): boolean;
|
|
6
|
+
//# sourceMappingURL=transform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/utils/transform.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,wDAAwD,CAAC;AACnF,OAAO,EAAC,aAAa,EAAC,MAAM,0DAA0D,CAAC;AACvF,OAAO,EAAC,QAAQ,EAAE,YAAY,EAAC,MAAM,oCAAoC,CAAC;AAO1E,wBAAgB,SAAS,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAkEpF;AAGD,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,WAMnE"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { isString } from "@actions/workflow-parser";
|
|
2
|
+
import { TextDocument } from "vscode-languageserver-textdocument";
|
|
3
|
+
const PLACEHOLDER_KEY = "key";
|
|
4
|
+
// Transform a document to work around YAML parsing issues
|
|
5
|
+
// Based on `_transform` in https://github.com/cschleiden/github-actions-parser/blob/main/src/lib/parser/complete.ts#L311
|
|
6
|
+
export function transform(doc, pos) {
|
|
7
|
+
let offset = doc.offsetAt(pos);
|
|
8
|
+
const lineRange = {
|
|
9
|
+
start: { line: pos.line, character: 0 },
|
|
10
|
+
end: { line: pos.line, character: Number.MAX_SAFE_INTEGER }
|
|
11
|
+
};
|
|
12
|
+
let line = doc.getText(lineRange);
|
|
13
|
+
// If the line includes a new-line char, strip that out
|
|
14
|
+
const newLinePos = line.indexOf("\n");
|
|
15
|
+
if (newLinePos >= 0) {
|
|
16
|
+
line = line.substring(0, newLinePos);
|
|
17
|
+
}
|
|
18
|
+
lineRange.end.character = line.length;
|
|
19
|
+
const linePos = pos.character;
|
|
20
|
+
// Special case for Actions, if this line contains an expression marker, do _not_ transform. This is
|
|
21
|
+
// an ugly fix for auto-completion in multi-line YAML strings. At this point in the process, we cannot
|
|
22
|
+
// determine if a line is in such a multi-line string.
|
|
23
|
+
if (line.indexOf("${{") !== -1) {
|
|
24
|
+
return [doc, pos];
|
|
25
|
+
}
|
|
26
|
+
const containsColon = line.indexOf(":") !== -1;
|
|
27
|
+
if (!containsColon) {
|
|
28
|
+
const trimmedLine = line.trim();
|
|
29
|
+
if (trimmedLine === "" || trimmedLine === "-") {
|
|
30
|
+
// Pos in sequence or empty line
|
|
31
|
+
let spacer = "";
|
|
32
|
+
if (trimmedLine === "-" && !line.endsWith(" ")) {
|
|
33
|
+
spacer = " ";
|
|
34
|
+
offset++;
|
|
35
|
+
}
|
|
36
|
+
line =
|
|
37
|
+
line.substring(0, linePos) +
|
|
38
|
+
spacer +
|
|
39
|
+
PLACEHOLDER_KEY +
|
|
40
|
+
(trimmedLine === "-" ? "" : ":") +
|
|
41
|
+
line.substring(linePos);
|
|
42
|
+
// Adjust pos by one to prevent a sequence node being marked as active
|
|
43
|
+
offset++;
|
|
44
|
+
}
|
|
45
|
+
else if (!trimmedLine.startsWith("-")) {
|
|
46
|
+
// Add `:` to end of line
|
|
47
|
+
line = line + ":";
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const newDoc = TextDocument.create(doc.uri, doc.languageId, doc.version, doc.getText());
|
|
51
|
+
TextDocument.update(newDoc, [
|
|
52
|
+
{
|
|
53
|
+
range: lineRange,
|
|
54
|
+
text: line
|
|
55
|
+
}
|
|
56
|
+
], newDoc.version + 1);
|
|
57
|
+
return [newDoc, newDoc.positionAt(offset)];
|
|
58
|
+
}
|
|
59
|
+
// Detect placeholder key and value added by transform
|
|
60
|
+
export function isPlaceholder(key, value) {
|
|
61
|
+
if (key.value === PLACEHOLDER_KEY && isString(value) && value.value == "") {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/utils/transform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ParseWorkflowResult, WorkflowTemplate } from "@actions/workflow-parser";
|
|
2
|
+
import { WorkflowTemplateConverterOptions } from "@actions/workflow-parser/model/convert";
|
|
3
|
+
import { TemplateContext } from "@actions/workflow-parser/templates/template-context";
|
|
4
|
+
import { TemplateToken } from "@actions/workflow-parser/templates/tokens/template-token";
|
|
5
|
+
import { File } from "@actions/workflow-parser/workflows/file";
|
|
6
|
+
import { CompletionConfig } from "../complete";
|
|
7
|
+
export declare function clearCacheEntry(uri: string): void;
|
|
8
|
+
export declare function clearCache(): void;
|
|
9
|
+
/**
|
|
10
|
+
* Parses a workflow file and caches the result
|
|
11
|
+
* @param transformed Indicates whether the workflow has been transformed before parsing
|
|
12
|
+
* @returns the {@link ParseWorkflowResult}
|
|
13
|
+
*/
|
|
14
|
+
export declare function fetchOrParseWorkflow(file: File, uri: string, transformed?: boolean): ParseWorkflowResult;
|
|
15
|
+
/**
|
|
16
|
+
* Converts a workflow template and caches the result
|
|
17
|
+
* @param transformed Indicates whether the workflow has been transformed before parsing
|
|
18
|
+
* @returns the converted {@link WorkflowTemplate}
|
|
19
|
+
*/
|
|
20
|
+
export declare function fetchOrConvertWorkflowTemplate(context: TemplateContext, template: TemplateToken, uri: string, config?: CompletionConfig, options?: WorkflowTemplateConverterOptions, transformed?: boolean): Promise<WorkflowTemplate>;
|
|
21
|
+
//# sourceMappingURL=workflow-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-cache.d.ts","sourceRoot":"","sources":["../../src/utils/workflow-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyC,mBAAmB,EAAE,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AACvH,OAAO,EAAC,gCAAgC,EAAC,MAAM,wCAAwC,CAAC;AACxF,OAAO,EAAC,eAAe,EAAC,MAAM,qDAAqD,CAAC;AACpF,OAAO,EAAC,aAAa,EAAC,MAAM,0DAA0D,CAAC;AACvF,OAAO,EAAC,IAAI,EAAC,MAAM,yCAAyC,CAAC;AAE7D,OAAO,EAAC,gBAAgB,EAAC,MAAM,aAAa,CAAC;AAM7C,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,QAK1C;AAED,wBAAgB,UAAU,SAGzB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,UAAQ,GAAG,mBAAmB,CAStG;AAED;;;;GAIG;AACH,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,aAAa,EACvB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,gBAAgB,EACzB,OAAO,CAAC,EAAE,gCAAgC,EAC1C,WAAW,UAAQ,GAClB,OAAO,CAAC,gBAAgB,CAAC,CAS3B"}
|