Skip to content

Commit 4303879

Browse files
Fix incorrectly setting end range to 1
When passing a single Line/Column value, we now assume you want a zero length extent of a single point. This was already the case for buffer ranges. Also take a pass at style because it was an abomination and I apologize to the world for doing it.
1 parent 8ebedc6 commit 4303879

File tree

1 file changed

+54
-48
lines changed

1 file changed

+54
-48
lines changed

module/PowerShellEditorServices/Commands/Public/ConvertTo-ScriptExtent.ps1

Lines changed: 54 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)