1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.ModifiableInstruction = void 0;
|
4 | const vscode_languageserver_types_1 = require("vscode-languageserver-types");
|
5 | const flag_1 = require("./flag");
|
6 | const instruction_1 = require("./instruction");
|
7 | class ModifiableInstruction extends instruction_1.Instruction {
|
8 | constructor(document, range, dockerfile, escapeChar, instruction, instructionRange) {
|
9 | super(document, range, dockerfile, escapeChar, instruction, instructionRange);
|
10 | }
|
11 | getFlags() {
|
12 | if (!this.flags) {
|
13 | this.flags = [];
|
14 | for (let arg of this.getArguments()) {
|
15 | let value = arg.getValue();
|
16 | if (this.stopSearchingForFlags(value)) {
|
17 | return this.flags;
|
18 | }
|
19 | else if (value.indexOf("--") === 0) {
|
20 | let range = arg.getRange();
|
21 | let rawValue = this.document.getText().substring(this.document.offsetAt(range.start), this.document.offsetAt(range.end));
|
22 | let nameIndex = value.indexOf('=');
|
23 | let index = rawValue.indexOf('=');
|
24 | let firstMatch = false;
|
25 | let secondMatch = false;
|
26 | let startIndex = -1;
|
27 | nameSearchLoop: for (let i = 0; i < rawValue.length; i++) {
|
28 | switch (rawValue.charAt(i)) {
|
29 | case '\\':
|
30 | case ' ':
|
31 | case '\t':
|
32 | case '\r':
|
33 | case '\n':
|
34 | break;
|
35 | case '-':
|
36 | if (secondMatch) {
|
37 | startIndex = i;
|
38 | break nameSearchLoop;
|
39 | }
|
40 | else if (firstMatch) {
|
41 | secondMatch = true;
|
42 | }
|
43 | else {
|
44 | firstMatch = true;
|
45 | }
|
46 | break;
|
47 | default:
|
48 | startIndex = i;
|
49 | break nameSearchLoop;
|
50 | }
|
51 | }
|
52 | let nameStart = this.document.positionAt(this.document.offsetAt(range.start) + startIndex);
|
53 | if (index === -1) {
|
54 | this.flags.push(new flag_1.Flag(this.document, range, value.substring(2), vscode_languageserver_types_1.Range.create(nameStart, range.end), null, null));
|
55 | }
|
56 | else if (index === value.length - 1) {
|
57 | let nameEnd = this.document.positionAt(this.document.offsetAt(range.start) + index);
|
58 | this.flags.push(new flag_1.Flag(this.document, range, value.substring(2, index), vscode_languageserver_types_1.Range.create(nameStart, nameEnd), "", vscode_languageserver_types_1.Range.create(range.end, range.end)));
|
59 | }
|
60 | else {
|
61 | let nameEnd = this.document.positionAt(this.document.offsetAt(range.start) + index);
|
62 | this.flags.push(new flag_1.Flag(this.document, range, value.substring(2, nameIndex), vscode_languageserver_types_1.Range.create(nameStart, nameEnd), value.substring(nameIndex + 1), vscode_languageserver_types_1.Range.create(this.document.positionAt(this.document.offsetAt(range.start) + index + 1), range.end)));
|
63 | }
|
64 | }
|
65 | }
|
66 | }
|
67 | return this.flags;
|
68 | }
|
69 | getArguments() {
|
70 | const args = super.getArguments();
|
71 | const flags = this.getFlags();
|
72 | if (flags.length === 0) {
|
73 | return args;
|
74 | }
|
75 | for (let i = 0; i < flags.length; i++) {
|
76 | args.shift();
|
77 | }
|
78 | return args;
|
79 | }
|
80 | }
|
81 | exports.ModifiableInstruction = ModifiableInstruction;
|