@@ -44,45 +44,45 @@ public PsesDocumentSymbolHandler(ILoggerFactory factory, WorkspaceService worksp
44
44
DocumentSelector = LspUtils . PowerShellDocumentSelector
45
45
} ;
46
46
47
- public override Task < SymbolInformationOrDocumentSymbolContainer > Handle ( DocumentSymbolParams request , CancellationToken cancellationToken )
47
+ public override async Task < SymbolInformationOrDocumentSymbolContainer > Handle ( DocumentSymbolParams request , CancellationToken cancellationToken )
48
48
{
49
49
ScriptFile scriptFile = _workspaceService . GetFile ( request . TextDocument . Uri ) ;
50
50
51
- IEnumerable < SymbolReference > foundSymbols =
52
- ProvideDocumentSymbols ( scriptFile ) ;
53
-
54
- SymbolInformationOrDocumentSymbol [ ] symbols = null ;
51
+ IEnumerable < SymbolReference > foundSymbols = ProvideDocumentSymbols ( scriptFile ) ;
52
+ if ( foundSymbols is null )
53
+ {
54
+ return null ;
55
+ }
55
56
56
57
string containerName = Path . GetFileNameWithoutExtension ( scriptFile . FilePath ) ;
58
+ List < SymbolInformationOrDocumentSymbol > symbols = new ( ) ;
59
+ foreach ( SymbolReference r in foundSymbols )
60
+ {
61
+ // This async method is pretty dense with synchronous code
62
+ // so it's helpful to add some yields.
63
+ await Task . Yield ( ) ;
64
+ cancellationToken . ThrowIfCancellationRequested ( ) ;
65
+
66
+ // TODO: This should be a DocumentSymbol now as SymbolInformation is deprecated.
67
+ symbols . Add ( new SymbolInformationOrDocumentSymbol ( new SymbolInformation
68
+ {
69
+ ContainerName = containerName ,
70
+ Kind = SymbolTypeUtils . GetSymbolKind ( r . SymbolType ) ,
71
+ Location = new Location
72
+ {
73
+ Uri = DocumentUri . From ( r . FilePath ) ,
74
+ Range = r . ScriptRegion . ToRange ( )
75
+ } ,
76
+ Name = SymbolTypeUtils . GetDecoratedSymbolName ( r )
77
+ } ) ) ;
78
+ }
57
79
58
- symbols = foundSymbols != null
59
- ? foundSymbols
60
- . Select ( r =>
61
- {
62
- // TODO: This should be a DocumentSymbol now as SymbolInformation is deprecated.
63
- return new SymbolInformationOrDocumentSymbol ( new SymbolInformation
64
- {
65
- ContainerName = containerName ,
66
- Kind = SymbolTypeUtils . GetSymbolKind ( r . SymbolType ) ,
67
- Location = new Location
68
- {
69
- Uri = DocumentUri . From ( r . FilePath ) ,
70
- Range = r . ScriptRegion . ToRange ( )
71
- } ,
72
- Name = SymbolTypeUtils . GetDecoratedSymbolName ( r )
73
- } ) ;
74
- } )
75
- . ToArray ( )
76
- : Array . Empty < SymbolInformationOrDocumentSymbol > ( ) ;
77
-
78
- return Task . FromResult ( new SymbolInformationOrDocumentSymbolContainer ( symbols ) ) ;
80
+ return new SymbolInformationOrDocumentSymbolContainer ( symbols ) ;
79
81
}
80
82
81
- private IEnumerable < SymbolReference > ProvideDocumentSymbols (
82
- ScriptFile scriptFile )
83
+ private IEnumerable < SymbolReference > ProvideDocumentSymbols ( ScriptFile scriptFile )
83
84
{
84
- return
85
- InvokeProviders ( p => p . ProvideDocumentSymbols ( scriptFile ) )
85
+ return InvokeProviders ( p => p . ProvideDocumentSymbols ( scriptFile ) )
86
86
. SelectMany ( r => r ) ;
87
87
}
88
88
0 commit comments