11namespace ts . projectSystem {
22 describe ( "unittests:: tsserver:: getExportReferences" , ( ) => {
3- it ( "should get const variable decralation references" , ( ) => {
4- const mainTs : File = {
5- path : "/main.ts" ,
6- content : 'import { value } from "./mod";' ,
7- } ;
8- const modTs : File = {
9- path : "/mod.ts" ,
10- content : "export const value = 0;" ,
11- } ;
12- const tsconfig : File = {
13- path : "/tsconfig.json" ,
14- content : "{}" ,
15- } ;
3+ const mainTs : File = {
4+ path : "/main.ts" ,
5+ content : 'import { value, valueA, valueB, valueC, valueD } from "./mod";' ,
6+ } ;
7+ const modTs : File = {
8+ path : "/mod.ts" ,
9+ content : `export const value = 0;
10+ export const [valueA, valueB] = [0, 1];
11+ export const { valueC, valueD } = { valueC: 0, valueD: 1 };` ,
12+ } ;
13+ const tsconfig : File = {
14+ path : "/tsconfig.json" ,
15+ content : "{}" ,
16+ } ;
1617
18+ function makeSampleSession ( ) {
1719 const host = createServerHost ( [ mainTs , modTs , tsconfig ] ) ;
1820 const session = createSession ( host ) ;
1921 openFilesForSession ( [ mainTs , modTs ] , session ) ;
22+ return session ;
23+ }
24+
25+ const referenceMainTs = ( mainTs : File , text : string ) : protocol . ReferencesResponseItem =>
26+ makeReferenceItem ( {
27+ file : mainTs ,
28+ isDefinition : true ,
29+ lineText : 'import { value, valueA, valueB, valueC, valueD } from "./mod";' ,
30+ contextText : 'import { value, valueA, valueB, valueC, valueD } from "./mod";' ,
31+ text,
32+ } ) ;
33+
34+ it ( "should get const variable decralation references" , ( ) => {
35+ const session = makeSampleSession ( ) ;
2036
2137 const response = executeSessionRequest < protocol . ReferencesRequest , protocol . ReferencesResponse > (
2238 session ,
@@ -32,20 +48,83 @@ namespace ts.projectSystem {
3248 contextText : "export const value = 0;" ,
3349 text : "value" ,
3450 } ) ;
35- const referenceMainTs = ( mainTs : File ) : protocol . ReferencesResponseItem =>
51+ const expectResponse = {
52+ refs : [ referenceModTs ( modTs ) , referenceMainTs ( mainTs , "value" ) ] ,
53+ symbolDisplayString : "const value: 0" ,
54+ symbolName : "value" ,
55+ symbolStartOffset : protocolLocationFromSubstring ( modTs . content , "value" ) . offset ,
56+ } ;
57+
58+ assert . deepEqual ( response , expectResponse ) ;
59+ } ) ;
60+
61+ it ( "should get array destructuring decralation references" , ( ) => {
62+ const session = makeSampleSession ( ) ;
63+ const response = executeSessionRequest < protocol . ReferencesRequest , protocol . ReferencesResponse > (
64+ session ,
65+ protocol . CommandTypes . References ,
66+ protocolFileLocationFromSubstring ( modTs , "valueA" ) ,
67+ ) ;
68+
69+ const referenceModTs = ( modTs : File ) : protocol . ReferencesResponseItem =>
3670 makeReferenceItem ( {
37- file : mainTs ,
71+ file : modTs ,
3872 isDefinition : true ,
39- lineText : 'import { value } from "./mod";' ,
40- contextText : 'import { value } from "./mod";' ,
41- text : "value " ,
73+ lineText : "export const [valueA, valueB] = [0, 1];" ,
74+ contextText : "export const [valueA, valueB] = [0, 1];" ,
75+ text : "valueA " ,
4276 } ) ;
4377
4478 const expectResponse = {
45- refs : [ referenceModTs ( modTs ) , referenceMainTs ( mainTs ) ] ,
46- symbolDisplayString : "const value: 0" ,
47- symbolName : "value" ,
48- symbolStartOffset : protocolLocationFromSubstring ( modTs . content , "value" ) . offset ,
79+ refs : [ referenceModTs ( modTs ) , referenceMainTs ( mainTs , "valueA" ) ] ,
80+ symbolDisplayString : "const valueA: number" ,
81+ symbolName : "valueA" ,
82+ symbolStartOffset : protocolLocationFromSubstring ( modTs . content , "valueA" ) . offset ,
83+ } ;
84+
85+ assert . deepEqual ( response , expectResponse ) ;
86+ } ) ;
87+
88+ it ( "should get object destructuring decralation references" , ( ) => {
89+ const session = makeSampleSession ( ) ;
90+ const response = executeSessionRequest < protocol . ReferencesRequest , protocol . ReferencesResponse > (
91+ session ,
92+ protocol . CommandTypes . References ,
93+ protocolFileLocationFromSubstring ( modTs , "valueC" ) ,
94+ ) ;
95+
96+ const referenceModTs = (
97+ modTs : File ,
98+ opts : {
99+ contextText : string ;
100+ options ?: SpanFromSubstringOptions ;
101+ contextOptions ?: SpanFromSubstringOptions ;
102+ } ,
103+ ) : protocol . ReferencesResponseItem =>
104+ makeReferenceItem ( {
105+ file : modTs ,
106+ isDefinition : true ,
107+ lineText : "export const { valueC, valueD } = { valueC: 0, valueD: 1 };" ,
108+ contextText : opts . contextText ,
109+ text : "valueC" ,
110+ options : opts . options ,
111+ contextOptions : opts . contextOptions ,
112+ } ) ;
113+
114+ const expectResponse = {
115+ refs : [
116+ referenceModTs ( modTs , {
117+ contextText : "export const { valueC, valueD } = { valueC: 0, valueD: 1 };" ,
118+ } ) ,
119+ referenceMainTs ( mainTs , "valueC" ) ,
120+ referenceModTs ( modTs , {
121+ contextText : "valueC: 0" ,
122+ options : { index : 1 } ,
123+ } ) ,
124+ ] ,
125+ symbolDisplayString : "const valueC: number" ,
126+ symbolName : "valueC" ,
127+ symbolStartOffset : protocolLocationFromSubstring ( modTs . content , "valueC" ) . offset ,
49128 } ;
50129
51130 assert . deepEqual ( response , expectResponse ) ;
0 commit comments