UNPKG

4.08 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.ModifiableInstruction = void 0;
4const vscode_languageserver_types_1 = require("vscode-languageserver-types");
5const flag_1 = require("./flag");
6const instruction_1 = require("./instruction");
7class 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}
81exports.ModifiableInstruction = ModifiableInstruction;