From f55b168953f36632e7dda264bdaaff2be5d40ec0 Mon Sep 17 00:00:00 2001 From: Keith Hill Date: Wed, 16 Jan 2019 20:44:10 -0700 Subject: [PATCH 1/2] Fix #827 Pester TestName w/expandable str returns nothing This update will return null to indicate that the TestName arg was present but not something we could evaluate. The extension will see the null value and pop a dialog box. --- .../Symbols/PesterDocumentSymbolProvider.cs | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/PowerShellEditorServices/Symbols/PesterDocumentSymbolProvider.cs b/src/PowerShellEditorServices/Symbols/PesterDocumentSymbolProvider.cs index 729faffc0..33fd3c329 100644 --- a/src/PowerShellEditorServices/Symbols/PesterDocumentSymbolProvider.cs +++ b/src/PowerShellEditorServices/Symbols/PesterDocumentSymbolProvider.cs @@ -32,8 +32,7 @@ IEnumerable IDocumentSymbolProvider.ProvideDocumentSymbols( return commandAsts.OfType() .Where(IsPesterCommand) - .Select(ast => ConvertPesterAstToSymbolReference(scriptFile, ast)) - .Where(pesterSymbol => pesterSymbol?.TestName != null); + .Select(ast => ConvertPesterAstToSymbolReference(scriptFile, ast)); } /// @@ -105,20 +104,21 @@ private static PesterSymbolReference ConvertPesterAstToSymbolReference(ScriptFil // Check for an explicit "-Name" parameter if (currentCommandElement is CommandParameterAst parameterAst) { + // Found -Name parameter, move to next element which is the argument for -TestName i++; - if (parameterAst.ParameterName == "Name" && i < pesterCommandAst.CommandElements.Count) + + if (!alreadySawName && TryGetTestNameArgument(pesterCommandAst.CommandElements[i], out testName)) { - testName = alreadySawName ? null : (pesterCommandAst.CommandElements[i] as StringConstantExpressionAst)?.Value; alreadySawName = true; } + continue; } // Otherwise, if an argument is given with no parameter, we assume it's the name // If we've already seen a name, we set the name to null - if (pesterCommandAst.CommandElements[i] is StringConstantExpressionAst testNameStrAst) + if (!alreadySawName && TryGetTestNameArgument(pesterCommandAst.CommandElements[i], out testName)) { - testName = alreadySawName ? null : testNameStrAst.Value; alreadySawName = true; } } @@ -131,6 +131,23 @@ private static PesterSymbolReference ConvertPesterAstToSymbolReference(ScriptFil pesterCommandAst.Extent ); } + + private static bool TryGetTestNameArgument(CommandElementAst commandElementAst, out string testName) + { + testName = null; + + if (commandElementAst is StringConstantExpressionAst testNameStrAst) + { + testName = testNameStrAst.Value; + return true; + } + else if (commandElementAst is ExpandableStringExpressionAst) + { + return true; + } + + return false; + } } /// From f6426ce71b4683d3c5304822d6a96f0471be320b Mon Sep 17 00:00:00 2001 From: Keith Hill Date: Thu, 17 Jan 2019 21:11:23 -0700 Subject: [PATCH 2/2] Address PR feedback, simplify logic --- .../Symbols/PesterDocumentSymbolProvider.cs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/PowerShellEditorServices/Symbols/PesterDocumentSymbolProvider.cs b/src/PowerShellEditorServices/Symbols/PesterDocumentSymbolProvider.cs index 33fd3c329..762cc002b 100644 --- a/src/PowerShellEditorServices/Symbols/PesterDocumentSymbolProvider.cs +++ b/src/PowerShellEditorServices/Symbols/PesterDocumentSymbolProvider.cs @@ -141,12 +141,8 @@ private static bool TryGetTestNameArgument(CommandElementAst commandElementAst, testName = testNameStrAst.Value; return true; } - else if (commandElementAst is ExpandableStringExpressionAst) - { - return true; - } - return false; + return (commandElementAst is ExpandableStringExpressionAst); } }