11using System ;
2+ using System . Collections . Generic ;
23using System . Diagnostics ;
4+ using System . Globalization ;
5+ using System . Linq ;
6+ using System . Threading ;
37using System . Threading . Tasks ;
8+ using MediatR ;
9+ using Microsoft . Extensions . Configuration ;
410using Microsoft . Extensions . DependencyInjection ;
511using Microsoft . Extensions . Logging ;
12+ using Newtonsoft . Json ;
13+ using Newtonsoft . Json . Linq ;
614using OmniSharp . Extensions . LanguageServer ;
15+ using OmniSharp . Extensions . LanguageServer . Protocol . Client ;
16+ using OmniSharp . Extensions . LanguageServer . Protocol . Client . Capabilities ;
17+ using OmniSharp . Extensions . LanguageServer . Protocol . Models ;
718using OmniSharp . Extensions . LanguageServer . Protocol . Server ;
819using OmniSharp . Extensions . LanguageServer . Server ;
920using Serilog ;
21+ using ILanguageServer = OmniSharp . Extensions . LanguageServer . Server . ILanguageServer ;
1022
1123namespace SampleServer
1224{
@@ -19,20 +31,22 @@ static void Main(string[] args)
1931
2032 static async Task MainAsync ( string [ ] args )
2133 {
22- //Debugger.Launch();
23- //while (!System.Diagnostics.Debugger.IsAttached)
24- //{
25- // await Task.Delay(100);
26- //}
34+ // Debugger.Launch();
35+ // while (!System.Diagnostics.Debugger.IsAttached)
36+ // {
37+ // await Task.Delay(100);
38+ // }
2739
2840 Log . Logger = new LoggerConfiguration ( )
29- . Enrich . FromLogContext ( )
30- . WriteTo . File ( "log.txt" , rollingInterval : RollingInterval . Day )
41+ . Enrich . FromLogContext ( )
42+ . WriteTo . File ( "log.txt" , rollingInterval : RollingInterval . Day )
3143 . MinimumLevel . Verbose ( )
3244 . CreateLogger ( ) ;
3345
3446 Log . Logger . Information ( "This only goes file..." ) ;
3547
48+ IObserver < WorkDoneProgressReport > workDone = null ;
49+
3650 var server = await LanguageServer . From ( options =>
3751 options
3852 . WithInput ( Console . OpenStandardInput ( ) )
@@ -47,25 +61,82 @@ static async Task MainAsync(string[] args)
4761 . WithHandler < MyWorkspaceSymbolsHandler > ( )
4862 . WithHandler < MyDocumentSymbolHandler > ( )
4963 . WithServices ( x => x . AddLogging ( b => b . SetMinimumLevel ( LogLevel . Trace ) ) )
50- . WithServices ( services =>
51- {
52- services . AddSingleton < Foo > ( provider =>
53- {
64+ . WithServices ( services => {
65+ services . AddSingleton ( provider => {
5466 var loggerFactory = provider . GetService < ILoggerFactory > ( ) ;
5567 var logger = loggerFactory . CreateLogger < Foo > ( ) ;
5668
5769 logger . LogInformation ( "Configuring" ) ;
5870
5971 return new Foo ( logger ) ;
6072 } ) ;
61- } ) . OnInitialize ( ( s , request ) =>
62- {
63- var serviceProvider = s . Services ;
64- var foo = serviceProvider . GetService < Foo > ( ) ;
73+ services . AddSingleton ( new ConfigurationItem ( ) {
74+ Section = "typescript" ,
75+ } ) . AddSingleton ( new ConfigurationItem ( ) {
76+ Section = "terminal" ,
77+ } ) ;
78+ } )
79+ . OnInitialize ( new InitializeDelegate ( async ( server , request ) => {
80+ var manager = server . ProgressManager . WorkDone ( request , new WorkDoneProgressBegin ( ) {
81+ Title = "Server is starting..." ,
82+ Percentage = 10 ,
83+ } ) ;
84+ workDone = manager ;
85+
86+ await Task . Delay ( 2000 ) ;
87+
88+ manager . OnNext ( new WorkDoneProgressReport ( ) {
89+ Percentage = 20 ,
90+ Message = "loading in progress"
91+ } ) ;
92+ } ) )
93+ . OnInitialized ( new InitializedDelegate ( async ( server , request , response ) => {
94+ workDone . OnNext ( new WorkDoneProgressReport ( ) {
95+ Percentage = 40 ,
96+ Message = "loading almost done" ,
97+ } ) ;
98+
99+ await Task . Delay ( 2000 ) ;
100+
101+ workDone . OnNext ( new WorkDoneProgressReport ( ) {
102+ Message = "loading done" ,
103+ Percentage = 100 ,
104+ } ) ;
105+ } ) )
106+ . OnStarted ( async ( languageServer , result ) => {
107+ using var manager = await languageServer . ProgressManager . Create ( new WorkDoneProgressBegin ( ) { Title = "Doing some work..." } ) ;
108+
109+ manager . OnNext ( new WorkDoneProgressReport ( ) { Message = "doing things..." } ) ;
110+ await Task . Delay ( 10000 ) ;
111+ manager . OnNext ( new WorkDoneProgressReport ( ) { Message = "doing things... 1234" } ) ;
112+ await Task . Delay ( 10000 ) ;
113+ manager . OnNext ( new WorkDoneProgressReport ( ) { Message = "doing things... 56789" } ) ;
114+
115+ var logger = languageServer . Services . GetService < ILogger < Foo > > ( ) ;
116+ var configuration = await languageServer . Configuration . GetConfiguration (
117+ new ConfigurationItem ( ) {
118+ Section = "typescript" ,
119+ } , new ConfigurationItem ( ) {
120+ Section = "terminal" ,
121+ } ) ;
122+
123+ var baseConfig = new JObject ( ) ;
124+ foreach ( var config in languageServer . Configuration . AsEnumerable ( ) )
125+ {
126+ baseConfig . Add ( config . Key , config . Value ) ;
127+ }
128+
129+ logger . LogInformation ( "Base Config: {Config}" , baseConfig ) ;
130+
131+ var scopedConfig = new JObject ( ) ;
132+ foreach ( var config in configuration . AsEnumerable ( ) )
133+ {
134+ scopedConfig . Add ( config . Key , config . Value ) ;
135+ }
65136
66- return Task . CompletedTask ;
137+ logger . LogInformation ( "Scoped Config: {Config}" , scopedConfig ) ;
67138 } )
68- ) ;
139+ ) ;
69140
70141 await server . WaitForExit ;
71142 }
0 commit comments