Skip to content

Commit 24d37af

Browse files
Razmo99JustinGrote
authored andcommitted
reworked GetAst for better detection
1 parent d0e94e2 commit 24d37af

File tree

1 file changed

+25
-23
lines changed
  • src/PowerShellEditorServices/Services/PowerShell/Refactoring

1 file changed

+25
-23
lines changed

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

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -108,40 +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);
119-
120-
if (token is NamedBlockAst)
121-
{
122-
return token.Parent;
123-
}
124-
125-
if (null == token)
117+
// Check if the Ast is a FunctionDefinitionAst
118+
IEnumerable<FunctionDefinitionAst> Functions = tokens.OfType<FunctionDefinitionAst>();
119+
if (Functions.Any())
126120
{
127-
IEnumerable<Ast> LineT = Ast.FindAll(ast =>
121+
foreach (FunctionDefinitionAst Function in Functions)
128122
{
129-
return StartLineNumber == ast.Extent.StartLineNumber &&
130-
StartColumnNumber >= ast.Extent.StartColumnNumber;
131-
}, true);
132-
return LineT.OfType<FunctionDefinitionAst>()?.LastOrDefault();
123+
if (Function.Extent.StartLineNumber != Function.Extent.EndLineNumber)
124+
{
125+
return Function;
126+
}
127+
}
133128
}
134129

135-
IEnumerable<Ast> tokens = token.FindAll(ast =>
130+
IEnumerable<Ast> token = null;
131+
token = Ast.FindAll(ast =>
136132
{
137-
return ast.Extent.EndColumnNumber >= StartColumnNumber
138-
&& StartColumnNumber >= ast.Extent.StartColumnNumber;
133+
return ast.Extent.StartLineNumber == StartLineNumber &&
134+
ast.Extent.StartColumnNumber <= StartColumnNumber &&
135+
ast.Extent.EndColumnNumber >= StartColumnNumber;
139136
}, true);
140-
if (tokens.Count() > 1)
137+
if (token != null)
141138
{
142-
token = tokens.LastOrDefault();
139+
if (token.First() is AssignmentStatementAst Assignment)
140+
{
141+
return Assignment.Left;
142+
}
143+
return token.Last();
143144
}
144-
return token;
145+
146+
return token.First();
145147
}
146148
}
147149
}

0 commit comments

Comments
 (0)