diff --git a/src/PowerShellEditorServices/Symbols/PesterDocumentSymbolProvider.cs b/src/PowerShellEditorServices/Symbols/PesterDocumentSymbolProvider.cs index 729faffc0..762cc002b 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,19 @@ 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; + } + + return (commandElementAst is ExpandableStringExpressionAst); + } } ///