@@ -31,6 +31,12 @@ suite('Client integration', () => {
3131 const fsProvider = new MemoryFileSystemProvider ( ) ;
3232 let fsProviderDisposable ! : vscode . Disposable ;
3333
34+ function positionEqual ( pos : vscode . Position , l : number , c : number ) : void {
35+ assert . strictEqual ( pos . line , l ) ;
36+ assert . strictEqual ( pos . character , c ) ;
37+ }
38+
39+
3440 function rangeEqual ( range : vscode . Range , sl : number , sc : number , el : number , ec : number ) : void {
3541 assert . strictEqual ( range . start . line , sl ) ;
3642 assert . strictEqual ( range . start . character , sc ) ;
@@ -153,6 +159,9 @@ suite('Client integration', () => {
153159 implementationProvider : true ,
154160 selectionRangeProvider : true ,
155161 inlineValuesProvider : { } ,
162+ inlayHintsProvider : {
163+ resolveProvider : true
164+ } ,
156165 typeDefinitionProvider : true ,
157166 callHierarchyProvider : true ,
158167 semanticTokensProvider : {
@@ -1280,6 +1289,35 @@ suite('Client integration', () => {
12801289 assert . strictEqual ( middlewareCalled , true ) ;
12811290 } ) ;
12821291
1292+ test ( 'Inlay Hints' , async ( ) => {
1293+ const providerData = client . getFeature ( lsclient . Proposed . InlayHintsRequest . method ) . getProvider ( document ) ;
1294+ isDefined ( providerData ) ;
1295+ const provider = providerData . provider ;
1296+ const results = ( await provider . provideInlayHints ( document , range , tokenSource . token ) ) ;
1297+
1298+ isArray ( results , undefined , 2 ) ;
1299+
1300+ const hint = results [ 0 ] ;
1301+ positionEqual ( hint . position , 1 , 1 ) ;
1302+ assert . strictEqual ( hint . kind , vscode . InlayHintKind . Type ) ;
1303+ const label = hint . label ;
1304+ isArray ( label as [ ] , vscode . InlayHintLabelPart , 1 ) ;
1305+ assert . strictEqual ( ( label as vscode . InlayHintLabelPart [ ] ) [ 0 ] . value , 'type' ) ;
1306+
1307+ let middlewareCalled : boolean = false ;
1308+ middleware . provideInlayHints = ( d , r , t , n ) => {
1309+ middlewareCalled = true ;
1310+ return n ( d , r , t ) ;
1311+ } ;
1312+ await provider . provideInlayHints ( document , range , tokenSource . token ) ;
1313+ middleware . provideInlayHints = undefined ;
1314+ assert . strictEqual ( middlewareCalled , true ) ;
1315+ assert . ok ( typeof provider . resolveInlayHint === 'function' ) ;
1316+
1317+ const resolvedHint = await provider . resolveInlayHint ! ( hint , tokenSource . token ) ;
1318+ assert . strictEqual ( ( resolvedHint ?. label as vscode . InlayHintLabelPart [ ] ) [ 0 ] . tooltip , 'tooltip' ) ;
1319+ } ) ;
1320+
12831321 test ( 'Workspace symbols' , async ( ) => {
12841322 const providers = client . getFeature ( lsclient . WorkspaceSymbolRequest . method ) . getProviders ( ) ;
12851323 isDefined ( providers ) ;
0 commit comments