Skip to content

Commit 5d32932

Browse files
committed
Merge branch 'rename-function-customvisitor' of https://github.com/Razmo99/PowerShellEditorServices into rename-function-customvisitor
2 parents c5bebe3 + ca3d230 commit 5d32932

File tree

2 files changed

+91
-75
lines changed

2 files changed

+91
-75
lines changed

src/PowerShellEditorServices/Services/PowerShell/Refactoring/Utilities.cs

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -108,14 +108,24 @@ public static FunctionDefinitionAst GetFunctionDefByCommandAst(string OldName, i
108108

109109
public static Ast GetAst(int StartLineNumber, int StartColumnNumber, Ast Ast)
110110
{
111-
Ast token = null;
112111

113-
token = Ast.Find(ast =>
112+
// Get all the tokens on the startline so we can look for an appropriate Ast to return
113+
IEnumerable<Ast> tokens = Ast.FindAll(ast =>
114114
{
115-
return StartLineNumber == ast.Extent.StartLineNumber &&
116-
ast.Extent.EndColumnNumber >= StartColumnNumber &&
117-
StartColumnNumber >= ast.Extent.StartColumnNumber;
115+
return StartLineNumber == ast.Extent.StartLineNumber;
118116
}, true);
117+
// Check if the Ast is a FunctionDefinitionAst
118+
IEnumerable<FunctionDefinitionAst> Functions = tokens.OfType<FunctionDefinitionAst>();
119+
if (Functions.Any())
120+
{
121+
foreach (FunctionDefinitionAst Function in Functions)
122+
{
123+
if (Function.Extent.StartLineNumber != Function.Extent.EndLineNumber)
124+
{
125+
return Function;
126+
}
127+
}
128+
}
119129

120130
if (token is NamedBlockAst)
121131
{
@@ -134,14 +144,20 @@ public static Ast GetAst(int StartLineNumber, int StartColumnNumber, Ast Ast)
134144

135145
IEnumerable<Ast> tokens = token.FindAll(ast =>
136146
{
137-
return ast.Extent.EndColumnNumber >= StartColumnNumber
138-
&& StartColumnNumber >= ast.Extent.StartColumnNumber;
147+
return ast.Extent.StartLineNumber == StartLineNumber &&
148+
ast.Extent.StartColumnNumber <= StartColumnNumber &&
149+
ast.Extent.EndColumnNumber >= StartColumnNumber;
139150
}, true);
140-
if (tokens.Count() > 1)
151+
if (token != null)
141152
{
142-
token = tokens.LastOrDefault();
153+
if (token.First() is AssignmentStatementAst Assignment)
154+
{
155+
return Assignment.Left;
156+
}
157+
return token.Last();
143158
}
144-
return token;
159+
160+
return token.First();
145161
}
146162
}
147163
}

test/PowerShellEditorServices.Test/Refactoring/RefactorUtilitiesTests.cs

Lines changed: 65 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -40,113 +40,113 @@ public void Dispose()
4040
[Fact]
4141
public void GetVariableExpressionAst()
4242
{
43-
RenameSymbolParams request = new(){
44-
Column=11,
45-
Line=15,
46-
RenameTo="Renamed",
47-
FileName="TestDetection.ps1"
43+
RenameSymbolParams request = new()
44+
{
45+
Column = 11,
46+
Line = 15,
47+
RenameTo = "Renamed",
48+
FileName = "TestDetection.ps1"
4849
};
4950
ScriptFile scriptFile = GetTestScript(request.FileName);
5051

51-
Ast symbol = Utilities.GetAst(request.Line,request.Column,scriptFile.ScriptAst);
52-
Assert.Equal(15,symbol.Extent.StartLineNumber);
53-
Assert.Equal(1,symbol.Extent.StartColumnNumber);
52+
Ast symbol = Utilities.GetAst(request.Line, request.Column, scriptFile.ScriptAst);
53+
Assert.IsType<VariableExpressionAst>(symbol);
54+
Assert.Equal(15, symbol.Extent.StartLineNumber);
55+
Assert.Equal(1, symbol.Extent.StartColumnNumber);
5456

5557
}
5658
[Fact]
5759
public void GetVariableExpressionStartAst()
5860
{
59-
RenameSymbolParams request = new(){
60-
Column=1,
61-
Line=15,
62-
RenameTo="Renamed",
63-
FileName="TestDetection.ps1"
61+
RenameSymbolParams request = new()
62+
{
63+
Column = 1,
64+
Line = 15,
65+
RenameTo = "Renamed",
66+
FileName = "TestDetection.ps1"
6467
};
6568
ScriptFile scriptFile = GetTestScript(request.FileName);
6669

67-
Ast symbol = Utilities.GetAst(request.Line,request.Column,scriptFile.ScriptAst);
68-
Assert.Equal(15,symbol.Extent.StartLineNumber);
69-
Assert.Equal(1,symbol.Extent.StartColumnNumber);
70+
Ast symbol = Utilities.GetAst(request.Line, request.Column, scriptFile.ScriptAst);
71+
Assert.IsType<VariableExpressionAst>(symbol);
72+
Assert.Equal(15, symbol.Extent.StartLineNumber);
73+
Assert.Equal(1, symbol.Extent.StartColumnNumber);
7074

7175
}
7276
[Fact]
7377
public void GetVariableWithinParameterAst()
7478
{
75-
RenameSymbolParams request = new(){
76-
Column=21,
77-
Line=3,
78-
RenameTo="Renamed",
79-
FileName="TestDetection.ps1"
79+
RenameSymbolParams request = new()
80+
{
81+
Column = 21,
82+
Line = 3,
83+
RenameTo = "Renamed",
84+
FileName = "TestDetection.ps1"
8085
};
8186
ScriptFile scriptFile = GetTestScript(request.FileName);
8287

83-
Ast symbol = Utilities.GetAst(request.Line,request.Column,scriptFile.ScriptAst);
84-
Assert.Equal(3,symbol.Extent.StartLineNumber);
85-
Assert.Equal(17,symbol.Extent.StartColumnNumber);
88+
Ast symbol = Utilities.GetAst(request.Line, request.Column, scriptFile.ScriptAst);
89+
Assert.IsType<VariableExpressionAst>(symbol);
90+
Assert.Equal(3, symbol.Extent.StartLineNumber);
91+
Assert.Equal(17, symbol.Extent.StartColumnNumber);
8692

8793
}
8894
[Fact]
8995
public void GetHashTableKey()
9096
{
91-
RenameSymbolParams request = new(){
92-
Column=9,
93-
Line=16,
94-
RenameTo="Renamed",
95-
FileName="TestDetection.ps1"
97+
RenameSymbolParams request = new()
98+
{
99+
Column = 9,
100+
Line = 16,
101+
RenameTo = "Renamed",
102+
FileName = "TestDetection.ps1"
96103
};
97104
ScriptFile scriptFile = GetTestScript(request.FileName);
98-
99-
Ast symbol = Utilities.GetAst(request.Line,request.Column,scriptFile.ScriptAst);
100-
Assert.Equal(16,symbol.Extent.StartLineNumber);
101-
Assert.Equal(5,symbol.Extent.StartColumnNumber);
105+
List<Token> Tokens = scriptFile.ScriptTokens.Cast<Token>().ToList();
106+
IEnumerable<Token> Found = Tokens.FindAll(e =>
107+
{
108+
return e.Extent.StartLineNumber == request.Line &&
109+
e.Extent.StartColumnNumber <= request.Column &&
110+
e.Extent.EndColumnNumber >= request.Column;
111+
});
112+
Ast symbol = Utilities.GetAst(request.Line, request.Column, scriptFile.ScriptAst);
113+
Assert.Equal(16, symbol.Extent.StartLineNumber);
114+
Assert.Equal(5, symbol.Extent.StartColumnNumber);
102115

103116
}
104117
[Fact]
105118
public void GetVariableWithinCommandAst()
106119
{
107-
RenameSymbolParams request = new(){
108-
Column=29,
109-
Line=6,
110-
RenameTo="Renamed",
111-
FileName="TestDetection.ps1"
120+
RenameSymbolParams request = new()
121+
{
122+
Column = 29,
123+
Line = 6,
124+
RenameTo = "Renamed",
125+
FileName = "TestDetection.ps1"
112126
};
113127
ScriptFile scriptFile = GetTestScript(request.FileName);
114128

115-
Ast symbol = Utilities.GetAst(request.Line,request.Column,scriptFile.ScriptAst);
116-
Assert.Equal(6,symbol.Extent.StartLineNumber);
117-
Assert.Equal(28,symbol.Extent.StartColumnNumber);
129+
Ast symbol = Utilities.GetAst(request.Line, request.Column, scriptFile.ScriptAst);
130+
Assert.Equal(6, symbol.Extent.StartLineNumber);
131+
Assert.Equal(28, symbol.Extent.StartColumnNumber);
118132

119133
}
120134
[Fact]
121135
public void GetCommandParameterAst()
122136
{
123-
RenameSymbolParams request = new(){
124-
Column=12,
125-
Line=21,
126-
RenameTo="Renamed",
127-
FileName="TestDetection.ps1"
128-
};
129-
ScriptFile scriptFile = GetTestScript(request.FileName);
130-
131-
Ast symbol = Utilities.GetAst(request.Line,request.Column,scriptFile.ScriptAst);
132-
Assert.Equal(21,symbol.Extent.StartLineNumber);
133-
Assert.Equal(10,symbol.Extent.StartColumnNumber);
134-
135-
}
136-
[Fact]
137-
public void GetFunctionDefinitionAst()
138-
{
139-
RenameSymbolParams request = new(){
140-
Column=12,
141-
Line=1,
142-
RenameTo="Renamed",
143-
FileName="TestDetection.ps1"
137+
RenameSymbolParams request = new()
138+
{
139+
Column = 12,
140+
Line = 21,
141+
RenameTo = "Renamed",
142+
FileName = "TestDetection.ps1"
144143
};
145144
ScriptFile scriptFile = GetTestScript(request.FileName);
146145

147-
Ast symbol = Utilities.GetAst(request.Line,request.Column,scriptFile.ScriptAst);
148-
Assert.Equal(1,symbol.Extent.StartLineNumber);
149-
Assert.Equal(1,symbol.Extent.StartColumnNumber);
146+
Ast symbol = Utilities.GetAst(request.Line, request.Column, scriptFile.ScriptAst);
147+
Assert.IsType<CommandParameterAst>(symbol);
148+
Assert.Equal(21, symbol.Extent.StartLineNumber);
149+
Assert.Equal(10, symbol.Extent.StartColumnNumber);
150150

151151
}
152152
}

0 commit comments

Comments
 (0)