import Ġorg . eclipse . lsp 4 j . Initialize Params Ċ import Ġorg . eclipse . lsp 4 j . Initialize Result Ċ import Ġorg . eclipse . lsp 4 j .* Ċ import Ġorg . eclipse . lsp 4 j . Server Capabilities Ċ import Ġorg . eclipse . lsp 4 j . services . Language Server Ċ import Ġorg . eclipse . lsp 4 j . services . Language Client Ċ import Ġorg . eclipse . lsp 4 j . services . Language Client Aware Ċ import Ġorg . eclipse . lsp 4 j . services . TextDocument Service Ċ import Ġorg . eclipse . lsp 4 j . services . Workspace Service Ċ import Ġjava . util . ArrayList Ċ import Ġjava . util . List Ċ import Ġjava . util . Map Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ Ċ internal Ġclass ĠExample Language Server : ĠLanguage Server , ĠLanguage Client Aware Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġclient : ĠLanguage Client ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ SuppressWarnings (" unused ") ĊĊĠĠĠ Ġprivate Ġvar Ġworkspace Root : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Override ĊĊĠĠĠ Ġfun Ġinitialize ( params : ĠInitialize Params ): ĠCompletableFuture < Initialize Result > Ġ{ ĊĠĠĠĠĠĠĠ ĠSystem . out . println (" initialize ") ĊĠĠĠĠĠĠĠ Ġworkspace Root Ġ= Ġparams . getRoot Path () ĊĠĠĠĠĠĠĠ Ġval Ġcapabilities Ġ= ĠServer Capabilities () ĊĠĠĠĠĠĠĠ Ġcapabilities . setText Document Sync ( TextDocument Sync Kind . Full ) ĊĠĠĠĠĠĠĠ Ġcapabilities . set Code Action Provider ( false ) ĊĠĠĠĠĠĠĠ Ġcapabilities . set Completion Provider ( Completion Options ( true , Ġnull )) ĊĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture . completed Future ( Initialize Result ( capabilities )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Override ĊĊĠĠĠ Ġfun Ġshutdown (): ĠCompletableFuture < Object > Ġ{ ĊĠĠĠĠĠĠĠ ĠSystem . out . println (" shutdown ") ĊĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture . completed Future ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Override ĊĊĠĠĠ Ġfun Ġexit () Ġ{ ĊĠĠĠĠĠĠĠ ĠSystem . out . println (" exit ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġfull TextDocument Service : ĠFull TextDocument Service Ġ= Ġobject : ĠFull TextDocument Service () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Override ĊĊĠĠĠĠĠĠĠ Ġfun Ġcompletion ( text Document Position : ĠText Document Position Params ?): ĠCompletableFuture < Completion List > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (" completion ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtypescript Completion Item Ġ= ĠCompletion Item () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtypescript Completion Item . setLabel (" TypeScript ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtypescript Completion Item . set Kind ( Completion Item Kind . Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtypescript Completion Item . setData ( 1 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjavascript Completion Item Ġ= ĠCompletion Item () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjavascript Completion Item . setLabel (" JavaScript ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjavascript Completion Item . set Kind ( Completion Item Kind . Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjavascript Completion Item . setData ( 2 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomplet ions : ĠList < Completion Item > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomplet ions . add ( typescript Completion Item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomplet ions . add ( javascript Completion Item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture . completed Future ( Completion List ( false , Ġcomplet ions )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Override ĊĊĠĠĠĠĠĠĠ Ġfun Ġresolve Completion Item ( item : ĠCompletion Item ): ĠCompletableFuture < Completion Item > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (" resolve Completion Item ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . getData (). equals ( 1 . 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . set Detail (" TypeScript Ġdetails ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . set Documentation (" TypeScript Ġdocumentation ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( item . getData (). equals ( 2 . 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . set Detail (" JavaScript Ġdetails ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . set Documentation (" JavaScript Ġdocumentation ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture . completed Future ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Override ĊĊĠĠĠĠĠĠĠ Ġfun Ġdid Change ( params : ĠDid Change TextDocument Params ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (" did Change ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . did Change ( params ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocument : ĠText Document Item Ġ= Ġthis . documents . get ( params . getText Document (). get Uri ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Document ( document ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : ĠOverride ĊĊĠĠĠ Ġval Ġtext Document Service : ĠText Document Service ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (" getText Document Service ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfull TextDocument Service ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvalidate Document ( document : ĠText Document Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdiagnostics : ĠList < Diagnostic > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġval Ġlines : ĠArray < String > Ġ= Ġdocument . getText (). split ("\\ r ? \\ n ") ĊĠĠĠĠĠĠĠ Ġvar Ġproblems Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġlines . size Ġ&& Ġproblems Ġ< Ġmax NumberOf Problems ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġlines [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex : ĠInt Ġ= Ġline . indexOf (" typescript ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproblems ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiagnostic Ġ= ĠDiagnostic () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiagnostic . set Severity ( Diagnostic Severity . Warning ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiagnostic . set Range ( Range ( Position ( i , Ġindex ), ĠPosition ( i , Ġindex Ġ+ Ġ 1 0 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiagnostic . setMessage ( String . format ("% s Ġshould Ġbe Ġsp el led ĠTypeScript ", Ġline . substring ( index , Ġindex Ġ+ Ġ 1 0 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiagnostic . set Source (" ex ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiagnostics . add ( diagnostic ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclient . publish Diagnostics ( Publish Diagnostics Params ( document . get Uri (), Ġdiagnostics )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġmax NumberOf Problems Ġ= Ġ 1 0 0 ĊĊĠĠĠ Ġ@ get : ĠOverride ĊĊĠĠĠ Ġval Ġworkspace Service : ĠWorkspace Service ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (" get Workspace Service ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġobject : ĠWorkspace Service () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Override ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġsymbol ( params : ĠWorkspace Symbol Params ?): ĠCompletableFuture < List < Symbol Information ? >> ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (" symbol ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Override ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġdid Change Configuration ( params : ĠDid Change Configuration Params ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (" did Change Configuration ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax NumberOf Problems Ġ= Ġ( params . get Settings ()[" un v script LS "]. get OrDefault (" max NumberOf Problems ", Ġ 1 0 0 . 0 ) Ġas ĠDouble ). intValue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull TextDocument Service . documents . values (). forEach Ġ{ Ġd Ġ-> Ġvalidate Document ( d ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Override ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġdid Change W atched Files ( params : ĠDid Change W atched Files Params ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (" did Change W atched Files ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . log Message ( Message Params ( MessageType . Log , Ġ" We Ġreceived Ġan Ġfile Ġchange Ġevent ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Override ĊĊĠĠĠ Ġfun Ġconnect ( client : ĠLanguage Client ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠSystem . out . println (" connect ") ĊĠĠĠĠĠĠĠ Ġthis . client Ġ= Ġclient ĊĠĠĠ Ġ} Ċ }