@@ -8,77 +8,63 @@ function ConvertTo-ScriptExtent {
8
8
[CmdletBinding ()]
9
9
[OutputType ([System.Management.Automation.Language.IScriptExtent ])]
10
10
param (
11
- [Parameter (Mandatory , ValueFromPipelineByPropertyName , ParameterSetName = ' ByOffset' )]
11
+ [Parameter (Mandatory , ValueFromPipelineByPropertyName , ParameterSetName = ' ByOffset' )]
12
12
[Alias (' StartOffset' , ' Offset' )]
13
- [int ]
14
- $StartOffsetNumber ,
13
+ [int ] $StartOffsetNumber ,
15
14
16
- [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByOffset' )]
15
+ [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByOffset' )]
17
16
[Alias (' EndOffset' )]
18
- [int ]
19
- $EndOffsetNumber ,
17
+ [int ] $EndOffsetNumber ,
20
18
21
- [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByPosition' )]
19
+ [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByPosition' )]
22
20
[Alias (' StartLine' , ' Line' )]
23
- [int ]
24
- $StartLineNumber ,
21
+ [int ] $StartLineNumber ,
25
22
26
- [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByPosition' )]
23
+ [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByPosition' )]
27
24
[Alias (' StartColumn' , ' Column' )]
28
- [int ]
29
- $StartColumnNumber ,
25
+ [int ] $StartColumnNumber ,
30
26
31
- [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByPosition' )]
27
+ [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByPosition' )]
32
28
[Alias (' EndLine' )]
33
- [int ]
34
- $EndLineNumber ,
29
+ [int ] $EndLineNumber ,
35
30
36
- [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByPosition' )]
31
+ [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByPosition' )]
37
32
[Alias (' EndColumn' )]
38
- [int ]
39
- $EndColumnNumber ,
33
+ [int ] $EndColumnNumber ,
40
34
41
- [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByPosition' )]
42
- [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByOffset' )]
43
- [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByBuffer' )]
35
+ [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByPosition' )]
36
+ [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByOffset' )]
37
+ [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByBuffer' )]
44
38
[Alias (' File' , ' FileName' )]
45
- [string ]
46
- $FilePath = $psEditor.GetEditorContext ().CurrentFile.Path,
39
+ [string ] $FilePath = $psEditor.GetEditorContext ().CurrentFile.Path,
47
40
48
- [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByBuffer' )]
41
+ [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByBuffer' )]
49
42
[Alias (' Start' )]
50
- [Microsoft.PowerShell.EditorServices.Extensions.IFilePosition , Microsoft.PowerShell.EditorServices ]
51
- $StartBuffer ,
43
+ [Microsoft.PowerShell.EditorServices.Extensions.IFilePosition , Microsoft.PowerShell.EditorServices ] $StartBuffer ,
52
44
53
- [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByBuffer' )]
45
+ [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByBuffer' )]
54
46
[Alias (' End' )]
55
- [Microsoft.PowerShell.EditorServices.Extensions.IFilePosition , Microsoft.PowerShell.EditorServices ]
56
- $EndBuffer ,
57
-
58
- [Parameter (Mandatory ,
59
- ValueFromPipeline ,
60
- ValueFromPipelineByPropertyName ,
61
- ParameterSetName = ' ByExtent' )]
62
- [System.Management.Automation.Language.IScriptExtent ]
63
- $Extent
47
+ [Microsoft.PowerShell.EditorServices.Extensions.IFilePosition , Microsoft.PowerShell.EditorServices ] $EndBuffer ,
48
+
49
+ [Parameter (Mandatory , ValueFromPipeline , ValueFromPipelineByPropertyName , ParameterSetName = ' ByExtent' )]
50
+ [System.Management.Automation.Language.IScriptExtent ] $Extent
64
51
)
65
52
begin {
66
53
$fileContext = $psEditor.GetEditorContext ().CurrentFile
67
54
$emptyExtent = [Microsoft.PowerShell.EditorServices.Extensions.FileScriptExtent , Microsoft.PowerShell.EditorServices ]::Empty
68
55
}
69
-
70
56
process {
71
57
# Already a InternalScriptExtent, FileScriptExtent or is empty.
72
58
$returnAsIs = $Extent -and
73
- (0 -ne $Extent.StartOffset -or
74
- 0 -ne $Extent.EndOffset -or
75
- $Extent -eq $emptyExtent )
59
+ ($Extent.StartOffset -or $Extent.EndOffset -or $Extent -eq $emptyExtent )
76
60
77
- if ($returnAsIs ) { return $Extent }
61
+ if ($returnAsIs ) {
62
+ return $Extent
63
+ }
78
64
79
65
if ($StartOffsetNumber ) {
80
66
$startOffset = $StartOffsetNumber
81
- $endOffset = $EndOffsetNumber
67
+ $endOffset = $EndOffsetNumber
82
68
83
69
# Allow creating a single position extent with just the offset parameter.
84
70
if (-not $EndOffsetNumber ) {
@@ -92,8 +78,7 @@ function ConvertTo-ScriptExtent {
92
78
}
93
79
94
80
if ($StartBuffer ) {
95
- if (-not $EndBuffer )
96
- {
81
+ if (-not $EndBuffer ) {
97
82
$EndBuffer = $StartBuffer
98
83
}
99
84
@@ -105,12 +90,34 @@ function ConvertTo-ScriptExtent {
105
90
$EndBuffer.Column )
106
91
}
107
92
108
- if (-not $StartColumnNumber ) { $StartColumnNumber = 1 }
109
- if (-not $StartLineNumber ) { $StartLineNumber = 1 }
110
- if (-not $EndLineNumber ) { $EndLineNumber = 1 }
111
- if (-not $EndColumnNumber ) { $EndColumnNumber = 1 }
93
+ # Allow piping a single line and column to get a zero length script extent.
94
+ if ($PSBoundParameters.ContainsKey (' StartColumnNumber' ) -and -not $PSBoundParameters.ContainsKey (' EndColumnNumber' )) {
95
+ $EndColumnNumber = $StartColumnNumber
96
+ }
97
+
98
+ if ($PSBoundParameters.ContainsKey (' StartLineNumber' ) -and -not $PSBoundParameters.ContainsKey (' EndLineNumber' )) {
99
+ $EndLineNumber = $StartLineNumber
100
+ }
101
+
102
+ # Protect against zero as a value since lines and columns start at 1
103
+ if (-not $StartColumnNumber ) {
104
+ $StartColumnNumber = 1
105
+ }
106
+
107
+ if (-not $StartLineNumber ) {
108
+ $StartLineNumber = 1
109
+ }
110
+
111
+ if (-not $EndLineNumber ) {
112
+ $EndLineNumber = 1
113
+ }
114
+
115
+ if (-not $EndColumnNumber ) {
116
+ $EndColumnNumber = 1
117
+ }
112
118
113
119
return [Microsoft.PowerShell.EditorServices.Extensions.FileScriptExtent , Microsoft.PowerShell.EditorServices ]::FromPositions(
120
+ $fileContext ,
114
121
$StartLineNumber ,
115
122
$StartColumnNumber ,
116
123
$EndLineNumber ,
0 commit comments