11// Copyright (c) Microsoft Corporation.
22// Licensed under the MIT License.
33
4+ using System ;
45using System . Collections . Generic ;
6+ using System . Management . Automation ;
57using System . Threading ;
68using System . Threading . Tasks ;
79using Microsoft . Extensions . Logging ;
810using Microsoft . PowerShell . EditorServices . Services ;
11+ using Microsoft . PowerShell . EditorServices . Services . PowerShell ;
12+ using Microsoft . PowerShell . EditorServices . Services . PowerShell . Execution ;
913using Microsoft . PowerShell . EditorServices . Services . Symbols ;
1014using Microsoft . PowerShell . EditorServices . Services . TextDocument ;
1115using Microsoft . PowerShell . EditorServices . Utility ;
@@ -18,15 +22,18 @@ namespace Microsoft.PowerShell.EditorServices.Handlers
1822 internal class PsesHoverHandler : HoverHandlerBase
1923 {
2024 private readonly ILogger _logger ;
25+ private readonly IInternalPowerShellExecutionService _executionService ;
2126 private readonly SymbolsService _symbolsService ;
2227 private readonly WorkspaceService _workspaceService ;
2328
2429 public PsesHoverHandler (
2530 ILoggerFactory factory ,
31+ IInternalPowerShellExecutionService executionService ,
2632 SymbolsService symbolsService ,
2733 WorkspaceService workspaceService )
2834 {
2935 _logger = factory . CreateLogger < PsesHoverHandler > ( ) ;
36+ _executionService = executionService ;
3037 _symbolsService = symbolsService ;
3138 _workspaceService = workspaceService ;
3239 }
@@ -63,6 +70,21 @@ await _symbolsService.FindSymbolDetailsAtLocationAsync(
6370 new MarkedString ( "PowerShell" , symbolDetails . SymbolReference . Name )
6471 } ;
6572
73+ // If we're looking at a variable, try to get its value.
74+ if ( symbolDetails . SymbolReference . Type == SymbolType . Variable )
75+ {
76+ PSCommand command = new PSCommand ( ) . AddScript ( $ "[System.Diagnostics.DebuggerHidden()]param() { symbolDetails . SymbolReference . Name } ") ;
77+ IReadOnlyList < PSObject > results = await _executionService . ExecutePSCommandAsync < PSObject > (
78+ command ,
79+ cancellationToken ,
80+ new PowerShellExecutionOptions { ThrowOnError = false } ) . ConfigureAwait ( false ) ;
81+
82+ if ( results != null )
83+ {
84+ symbolInfo . Add ( new MarkedString ( "PowerShell" , string . Join ( Environment . NewLine , results ) ) ) ;
85+ }
86+ }
87+
6688 if ( ! string . IsNullOrEmpty ( symbolDetails . Documentation ) )
6789 {
6890 symbolInfo . Add ( new MarkedString ( "markdown" , symbolDetails . Documentation ) ) ;
0 commit comments