@@ -3,9 +3,11 @@ import dedent from 'dedent';
33import { describe , expect , test } from 'vitest' ;
44import { createIFF } from './test/fixture.js' ;
55import {
6+ compareCompletionEntries ,
67 formatPath ,
78 launchTsserver ,
89 mergeSpanGroups ,
10+ simplifyCompletionEntry ,
911 simplifyRefItems ,
1012 simplifySpanGroups ,
1113 sortRefItems ,
@@ -35,6 +37,10 @@ describe('supports navigation features', async () => {
3537 @value c_1: red;
3638 @value c_2: red;
3739 ` ,
40+ 'completion.ts' : dedent `
41+ styles;
42+ a_1;
43+ ` ,
3844 'tsconfig.json' : dedent `
3945 {
4046 "cmkOptions": {
@@ -46,6 +52,15 @@ describe('supports navigation features', async () => {
4652 await tsserver . sendUpdateOpen ( {
4753 openFiles : [ { file : iff . paths [ 'tsconfig.json' ] } ] ,
4854 } ) ;
55+ await tsserver . sendConfigure ( {
56+ preferences : {
57+ includeCompletionsForModuleExports : true ,
58+ includeCompletionsWithSnippetText : true ,
59+ includeCompletionsWithInsertText : true ,
60+ jsxAttributeCompletionStyle : 'auto' ,
61+ quotePreference : 'single' ,
62+ } ,
63+ } ) ;
4964 const a_1_in_index_ts = {
5065 file : formatPath ( iff . paths [ 'index.ts' ] ) ,
5166 start : { line : 2 , offset : 8 } ,
@@ -190,4 +205,37 @@ describe('supports navigation features', async () => {
190205 } ) ;
191206 expect ( sortRefItems ( simplifyRefItems ( res . body ?. refs ?? [ ] ) ) ) . toStrictEqual ( sortRefItems ( expected ) ) ;
192207 } ) ;
208+ test . each ( [
209+ {
210+ name : 'styles' ,
211+ entryName : 'styles' ,
212+ file : iff . paths [ 'completion.ts' ] ,
213+ line : 1 ,
214+ offset : 7 ,
215+ expected : [
216+ { name : 'styles' , sortText : '0' , source : formatPath ( iff . paths [ 'a.module.css' ] ) } ,
217+ { name : 'styles' , sortText : '16' , source : formatPath ( iff . paths [ 'b.module.css' ] ) } ,
218+ { name : 'styles' , sortText : '16' , source : formatPath ( iff . paths [ 'c.module.css' ] ) } ,
219+ ] ,
220+ } ,
221+ {
222+ name : 'a_1' ,
223+ entryName : 'a_1' ,
224+ file : iff . paths [ 'completion.ts' ] ,
225+ line : 2 ,
226+ offset : 4 ,
227+ expected : [ ] ,
228+ } ,
229+ ] ) ( 'Completions for $name' , async ( { entryName, file, line, offset, expected } ) => {
230+ const res = await tsserver . sendCompletionInfo ( {
231+ file,
232+ line,
233+ offset,
234+ } ) ;
235+ expect (
236+ simplifyCompletionEntry ( res . body ?. entries . filter ( ( entry ) => entry . name === entryName ) ?? [ ] ) . sort (
237+ compareCompletionEntries ,
238+ ) ,
239+ ) . toStrictEqual ( expected . sort ( compareCompletionEntries ) ) ;
240+ } ) ;
193241} ) ;
0 commit comments