package Ġnl . kn aw . h uc . di . rd . tag . tag ml . lsp Ċ Ċ import Ġnl . kn aw . h uc . di . rd . tag . tag ml . lsp . Alex and ria Util . to L SP Range Ċ import Ġorg . eclipse . lsp 4 j .* Ċ import Ġorg . eclipse . lsp 4 j . jsonrpc . Response ErrorException Ċ import Ġorg . eclipse . lsp 4 j . jsonrpc . messages . Either Ċ import Ġorg . eclipse . lsp 4 j . jsonrpc . messages . Either . for Left Ċ import Ġorg . eclipse . lsp 4 j . jsonrpc . messages . ResponseError Ċ import Ġorg . eclipse . lsp 4 j . jsonrpc . messages . Response ErrorCode Ċ import Ġorg . eclipse . lsp 4 j . services . TextDocument Service Ċ import Ġjava . util . Collections . synchronized Map Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ Ċ type alias ĠCode Action Response Ġ= ĠMutable List < Code Action Response Element > Ċ type alias ĠCode Action Response Element Ġ= ĠEither < Command , ĠCode Action > Ċ Ċ type alias ĠDocument Symbol Response Ġ= ĠMutable List < Document Symbol Result Element > Ċ type alias ĠDocument Symbol Result Element Ġ= ĠEither < Symbol Information , ĠDocument Symbol > Ċ Ċ class ĠTAG ML TextDocument Service ( private Ġval Ġtag ml Language Server : ĠTAG ML Language Server ) Ġ: ĠText Document Service Ġ{ ĊĠĠĠ Ġ// ĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( this . java Class ) ĊĠĠĠ Ġprivate Ġval Ġdocs : ĠMutable Map < String , ĠTAG ML Document Model > Ġ= Ġsynchronized Map ( hash Map Of ()) ĊĠĠĠ Ġprivate Ġval Ġa lex and ria Ġ= ĠAlex and ria () ĊĊĠĠĠ Ġoverride Ġfun Ġdid Open ( params : ĠDid Open TextDocument Params ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġlogger . info (" TAG ML TextDocument Service . did Open ($ params )") Ċ // ĠĠĠĠĠĠĠ Ġcheck Server IsInitialized () ĊĠĠĠĠĠĠĠ Ġif Ġ(! tag ml Language Server . isInitialized ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception al Result : ĠCompletableFuture < *> Ġ= ĠCompletableFuture < Any >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠResponse Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse ErrorCode . server Not Initialized , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" server Ġnot Ġinitialized , Ġexpected Ġ' initialize ' Ġfirst ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ( Response ErrorException ( error )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdoc Id Ġ= Ġparams . text Document . uri ĊĠĠĠĠĠĠĠ Ġval Ġmodel Ġ= Ġtag ml Model Of ( Base TAG ML Document Model ( doc Id , Ġparams . text Document . text , Ġparams . text Document . version )) ĊĠĠĠĠĠĠĠ Ġthis . docs [ doc Id ] Ġ= Ġmodel ĊĠĠĠĠĠĠĠ Ġpublish Diagnostics ( doc Id , Ġmodel ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtag ml Model Of ( base : ĠBase TAG ML Document Model ): ĠTAG ML Document Model Ġ= Ġa lex and ria . validate ( base ) ĊĊĠĠĠ Ġoverride Ġfun Ġdid Change ( params : ĠDid Change TextDocument Params ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġlogger . info (" TAG ML TextDocument Service . did Change ($ params )") ĊĠĠĠĠĠĠĠ Ġval Ġdoc Id Ġ= Ġparams . text Document . uri ĊĠĠĠĠĠĠĠ Ġval Ġoriginal Text Ġ= Ġdocs [ doc Id ]?. base ?. text ĊĠĠĠĠĠĠĠ Ġval Ġchanged Text Ġ= Ġupdate Text ( original Text , Ġparams . content Changes ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmodel Ġ= Ġtag ml Model Of ( Base TAG ML Document Model ( doc Id , Ġchanged Text , Ġparams . text Document . version )) ĊĠĠĠĠĠĠĠ Ġthis . docs [ doc Id ] Ġ= Ġmodel ĊĠĠĠĠĠĠĠ Ġpublish Diagnostics ( doc Id , Ġmodel ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Text ( original Text : ĠString ?, Ġcontent Changes : ĠList < TextDocument Content ChangeEvent >): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġorig Ġ= Ġoriginal Text Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġfor Ġ( change Event Ġin Ġcontent Changes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrange Ġ= Ġchange Event . range ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġchange Event . text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( range Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorig Ġ= Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTODO () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġorig ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpublish Diagnostics ( uri : ĠString , Ġmodel : ĠTAG ML Document Model ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCompletableFuture . run Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag ml Language Server . client . publish Diagnostics ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPublish Diagnostics Params ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuri , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiagnostics ( model ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdocument Symbol ( params : ĠDocument Symbol Params ?): ĠCompletableFuture < Mutable List < Either < Symbol Information , ĠDocument Symbol >>> Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhover ( position : ĠText Document Position Params ): ĠCompletableFuture < Hover > Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġdoc Id Ġ= Ġposition . text Document . uri Ċ // ĠĠĠĠĠĠĠ Ġval Ġmodel Ġ= Ġdocs [ doc Id ] Ċ // ĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġmodel ?. token Index ?. token At ( position . position ) ĊĠĠĠĠĠĠĠ Ġval Ġcontents Ġ= ĠMark up Content (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ" TODO " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkind Ġ= Ġ" markdown " Ġ// Ġaltern atively :, Ġ" plaintext " ĊĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġcontents . value Ġ= Ġ"** ${ token }** " ĊĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture . supply Async Ġ{ ĠHover ( contents ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdocument Highlight ( position : ĠText Document Position Params ?): ĠCompletableFuture < Mutable List < out ĠDocument Highlight >> Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcode Action ( params : ĠCode Action Params ?): ĠCompletableFuture < Code Action Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdoc Id Ġ= Ġparams ?. text Document ?. uri ĊĠĠĠĠĠĠĠ Ġval Ġmodel Ġ= Ġdocs [ doc Id ] ĊĠĠĠĠĠĠĠ Ġval Ġrange Ġ= Ġparams ?. range ĊĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture . supply Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction List Ġ= Ġmutable ListOf < Code Action Response Element >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction List ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdiagnostics ( model : ĠTAG ML Document Model ): ĠList < Diagnostic > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( model ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCorrect TAG ML Document Model Ġ-> ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInc orrect TAG ML Document Model Ġ-> Ġmodel . diagnostics ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠTODO (" Unhandled Ġtype Ġ${ model . java Class }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdefinition ( params : ĠText Document Position Params ?): ĠCompletableFuture < Mutable List < out ĠLocation >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocation List Ġ= Ġmutable ListOf < Location >() ĊĠĠĠĠĠĠĠ Ġif Ġ( params Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġparams . text Document ?. uri Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Document Ġ= Ġparams . text Document ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag ml Document Model Ġ= Ġdocs [ uri ] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tag ml Document Model Ġis ĠCorrect TAG ML Document Model ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag ml Document Model . range Pair At ( params . position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map Ġ{ Ġit . to L SP Range () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map Ġ{ ĠLocation ( uri , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . forEach Ġ{ Ġlocation List . add ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture . supply Async Ġ{ Ġlocation List Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Test Diagnostic ( res : ĠMutable List < Diagnostic >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart : ĠPosition Ġ= ĠPosition ( 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġend : ĠPosition Ġ= ĠPosition ( 1 , Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġdiagnostic Ġ= ĠDiagnostic ( Range ( start , Ġend ), Ġ" this Ġis Ġa Ġtest "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseverity Ġ= ĠDiagnostic Severity . Information ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġres . add ( diagnostic ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdid Save ( params : ĠDid Save TextDocument Params ?) Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠTODO (" not Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdid Close ( params : ĠDid Close TextDocument Params ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . docs . remove ( params . text Document . uri ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompletion ( position : ĠCompletion Params ?): ĠCompletableFuture < Either < Mutable List < Completion Item >, ĠCompletion List >> Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġlogger . info (" completion ($ position )") ĊĠĠĠĠĠĠĠ Ġval Ġcompletion Item 1 Ġ= ĠCompletion Item (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Ġ= Ġ" Hello ĠWorld " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkind Ġ= ĠCompletion Item Kind . Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpre select Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcompletion Item 2 Ġ= ĠCompletion Item (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Ġ= Ġ" Good bye " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkind Ġ= ĠCompletion Item Kind . Text ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcompletion ItemList Ġ= Ġmutable ListOf ( completion Item 1 , Ġcompletion Item 2 ) ĊĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture . completed Future ( for Left ( completion ItemList )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Server IsInitialized () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! tag ml Language Server . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ( Response ErrorException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse ErrorCode . server Not Initialized , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" server Ġnot Ġinitialized , Ġexpected Ġ' initialize ' Ġfirst ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ