Skip to content

Commit ca3d230

Browse files
committed
reworked GetAst for better detection
1 parent 05dac0b commit ca3d230

File tree

1 file changed

+28
-11
lines changed
  • src/PowerShellEditorServices/Services/PowerShell/Refactoring

1 file changed

+28
-11
lines changed

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

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -108,25 +108,42 @@ 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

120-
IEnumerable<Ast> tokens = token.FindAll(ast =>
130+
IEnumerable<Ast> token = null;
131+
token = Ast.FindAll(ast =>
121132
{
122-
return ast.Extent.EndColumnNumber >= StartColumnNumber
123-
&& StartColumnNumber >= ast.Extent.StartColumnNumber;
133+
return ast.Extent.StartLineNumber == StartLineNumber &&
134+
ast.Extent.StartColumnNumber <= StartColumnNumber &&
135+
ast.Extent.EndColumnNumber >= StartColumnNumber;
124136
}, true);
125-
if (tokens.Count() > 1)
137+
if (token != null)
126138
{
127-
token = tokens.LastOrDefault();
139+
if (token.First() is AssignmentStatementAst Assignment)
140+
{
141+
return Assignment.Left;
142+
}
143+
return token.Last();
128144
}
129-
return token;
145+
146+
return token.First();
130147
}
131148
}
132149
}

0 commit comments

Comments
 (0)