Repository navigation
Expand file tree
/
Copy pathScriptExtent.cs
More file actions
112 lines (85 loc) · 3.68 KB
/
Copy pathScriptExtent.cs
File metadata and controls
112 lines (85 loc) · 3.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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
108
109
110
111
112
using System.Management.Automation.Language;
namespace Microsoft.PowerShell.ScriptAnalyzer
{
public class ScriptPosition : IScriptPosition
{
public static ScriptPosition FromOffset(string scriptText, string scriptPath, int offset)
{
int currLine = 1;
int i = 0;
int lastLineOffset = -1;
while (i < offset)
{
lastLineOffset = i;
i = scriptText.IndexOf('\n', i);
currLine++;
}
return new ScriptPosition(scriptText, scriptPath, scriptText.Substring(lastLineOffset, offset), offset, currLine, offset - lastLineOffset);
}
public static ScriptPosition FromPosition(string scriptText, string scriptPath, int line, int column)
{
int offset = 0;
int currLine = 1;
while (currLine < line)
{
offset = scriptText.IndexOf('\n', offset);
currLine++;
}
string lineText = scriptText.Substring(offset, offset + column - 1);
offset += column - 1;
return new ScriptPosition(scriptText, scriptPath, lineText, offset, line, column);
}
private readonly string _scriptText;
public ScriptPosition(string scriptText, string scriptPath, string line, int offset, int lineNumber, int columnNumber)
{
_scriptText = scriptText;
File = scriptPath;
Line = line;
Offset = offset;
LineNumber = lineNumber;
ColumnNumber = columnNumber;
}
public int ColumnNumber { get; }
public string File { get; }
public string Line { get; }
public int LineNumber { get; }
public int Offset { get; }
public string GetFullScript() => _scriptText;
}
public class ScriptExtent : IScriptExtent
{
public static ScriptExtent FromOffsets(string scriptText, string scriptPath, int startOffset, int endOffset)
{
return new ScriptExtent(
scriptText.Substring(startOffset, endOffset - startOffset),
ScriptPosition.FromOffset(scriptText, scriptPath, startOffset),
ScriptPosition.FromOffset(scriptText, scriptPath, endOffset));
}
public static ScriptExtent FromPositions(string scriptText, string scriptPath, int startLine, int startColumn, int endLine, int endColumn)
{
var startPosition = ScriptPosition.FromPosition(scriptText, scriptPath, startLine, startColumn);
var endPosition = ScriptPosition.FromPosition(scriptText, scriptPath, endLine, endColumn);
return new ScriptExtent(
scriptText.Substring(startPosition.Offset, endPosition.Offset - startPosition.Offset),
startPosition,
endPosition);
}
public ScriptExtent(string text, IScriptPosition start, IScriptPosition end)
{
StartScriptPosition = start;
EndScriptPosition = end;
Text = text;
}
public int EndColumnNumber => EndScriptPosition.ColumnNumber;
public int EndLineNumber => EndScriptPosition.LineNumber;
public int EndOffset => EndScriptPosition.Offset;
public IScriptPosition EndScriptPosition { get; }
public string File => StartScriptPosition.File;
public int StartColumnNumber => StartScriptPosition.ColumnNumber;
public int StartLineNumber => StartScriptPosition.LineNumber;
public int StartOffset => StartScriptPosition.Offset;
public IScriptPosition StartScriptPosition { get; }
public string Text { get; }
}
}