@@ -8,77 +8,63 @@ function ConvertTo-ScriptExtent {
88 [CmdletBinding ()]
99 [OutputType ([System.Management.Automation.Language.IScriptExtent ])]
1010 param (
11- [Parameter (Mandatory , ValueFromPipelineByPropertyName , ParameterSetName = ' ByOffset' )]
11+ [Parameter (Mandatory , ValueFromPipelineByPropertyName , ParameterSetName = ' ByOffset' )]
1212 [Alias (' StartOffset' , ' Offset' )]
13- [int ]
14- $StartOffsetNumber ,
13+ [int ] $StartOffsetNumber ,
1514
16- [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByOffset' )]
15+ [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByOffset' )]
1716 [Alias (' EndOffset' )]
18- [int ]
19- $EndOffsetNumber ,
17+ [int ] $EndOffsetNumber ,
2018
21- [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByPosition' )]
19+ [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByPosition' )]
2220 [Alias (' StartLine' , ' Line' )]
23- [int ]
24- $StartLineNumber ,
21+ [int ] $StartLineNumber ,
2522
26- [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByPosition' )]
23+ [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByPosition' )]
2724 [Alias (' StartColumn' , ' Column' )]
28- [int ]
29- $StartColumnNumber ,
25+ [int ] $StartColumnNumber ,
3026
31- [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByPosition' )]
27+ [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByPosition' )]
3228 [Alias (' EndLine' )]
33- [int ]
34- $EndLineNumber ,
29+ [int ] $EndLineNumber ,
3530
36- [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByPosition' )]
31+ [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByPosition' )]
3732 [Alias (' EndColumn' )]
38- [int ]
39- $EndColumnNumber ,
33+ [int ] $EndColumnNumber ,
4034
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' )]
4438 [Alias (' File' , ' FileName' )]
45- [string ]
46- $FilePath = $psEditor.GetEditorContext ().CurrentFile.Path,
39+ [string ] $FilePath = $psEditor.GetEditorContext ().CurrentFile.Path,
4740
48- [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByBuffer' )]
41+ [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByBuffer' )]
4942 [Alias (' Start' )]
50- [Microsoft.PowerShell.EditorServices.Extensions.IFilePosition , Microsoft.PowerShell.EditorServices ]
51- $StartBuffer ,
43+ [Microsoft.PowerShell.EditorServices.Extensions.IFilePosition , Microsoft.PowerShell.EditorServices ] $StartBuffer ,
5244
53- [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByBuffer' )]
45+ [Parameter (ValueFromPipelineByPropertyName , ParameterSetName = ' ByBuffer' )]
5446 [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
6451 )
6552 begin {
6653 $fileContext = $psEditor.GetEditorContext ().CurrentFile
6754 $emptyExtent = [Microsoft.PowerShell.EditorServices.Extensions.FileScriptExtent , Microsoft.PowerShell.EditorServices ]::Empty
6855 }
69-
7056 process {
7157 # Already a InternalScriptExtent, FileScriptExtent or is empty.
7258 $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 )
7660
77- if ($returnAsIs ) { return $Extent }
61+ if ($returnAsIs ) {
62+ return $Extent
63+ }
7864
7965 if ($StartOffsetNumber ) {
8066 $startOffset = $StartOffsetNumber
81- $endOffset = $EndOffsetNumber
67+ $endOffset = $EndOffsetNumber
8268
8369 # Allow creating a single position extent with just the offset parameter.
8470 if (-not $EndOffsetNumber ) {
@@ -92,8 +78,7 @@ function ConvertTo-ScriptExtent {
9278 }
9379
9480 if ($StartBuffer ) {
95- if (-not $EndBuffer )
96- {
81+ if (-not $EndBuffer ) {
9782 $EndBuffer = $StartBuffer
9883 }
9984
@@ -105,10 +90,31 @@ function ConvertTo-ScriptExtent {
10590 $EndBuffer.Column )
10691 }
10792
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+ }
112118
113119 return [Microsoft.PowerShell.EditorServices.Extensions.FileScriptExtent , Microsoft.PowerShell.EditorServices ]::FromPositions(
114120 $fileContext ,
0 commit comments