@@ -13,15 +13,20 @@ namespace ts.projectSystem {
1313 }
1414
1515 interface MakeReferenceEntry extends DocumentSpanFromSubstring {
16- isDefinition : boolean ;
16+ isDefinition ?: boolean ;
17+ isWriteAccess ?: boolean ;
1718 }
18- function makeReferenceEntry ( { isDefinition, ...rest } : MakeReferenceEntry ) : ReferenceEntry {
19- return {
19+ function makeReferencedSymbolEntry ( { isDefinition, isWriteAccess , ...rest } : MakeReferenceEntry ) : ReferencedSymbolEntry {
20+ const result = {
2021 ...documentSpanFromSubstring ( rest ) ,
2122 isDefinition,
22- isWriteAccess : isDefinition ,
23+ isWriteAccess : ! ! isWriteAccess ,
2324 isInString : undefined ,
2425 } ;
26+ if ( isDefinition === undefined ) {
27+ delete result . isDefinition ;
28+ }
29+ return result ;
2530 }
2631
2732 function checkDeclarationFiles ( file : File , session : TestSession , expectedFiles : readonly File [ ] ) : void {
@@ -373,17 +378,18 @@ namespace ts.projectSystem {
373378 ] ) ;
374379 } ) ;
375380
376- const referenceATs = ( aTs : File ) : protocol . ReferencesResponseItem => makeReferenceItem ( {
381+ const referenceATs = ( aTs : File , isDefinition : true | undefined ) : protocol . ReferencesResponseItem => makeReferenceItem ( {
377382 file : aTs ,
378- isDefinition : true ,
383+ isDefinition,
384+ isWriteAccess : true ,
379385 text : "fnA" ,
380386 contextText : "export function fnA() {}" ,
381387 lineText : "export function fnA() {}"
382388 } ) ;
383- const referencesUserTs = ( userTs : File ) : readonly protocol . ReferencesResponseItem [ ] => [
389+ const referencesUserTs = ( userTs : File , isDefinition : false | undefined ) : readonly protocol . ReferencesResponseItem [ ] => [
384390 makeReferenceItem ( {
385391 file : userTs ,
386- isDefinition : false ,
392+ isDefinition,
387393 text : "fnA" ,
388394 lineText : "export function fnUser() { a.fnA(); b.fnB(); a.instanceA; }"
389395 } ) ,
@@ -394,7 +400,7 @@ namespace ts.projectSystem {
394400
395401 const response = executeSessionRequest < protocol . ReferencesRequest , protocol . ReferencesResponse > ( session , protocol . CommandTypes . References , protocolFileLocationFromSubstring ( userTs , "fnA()" ) ) ;
396402 assert . deepEqual < protocol . ReferencesResponseBody | undefined > ( response , {
397- refs : [ ...referencesUserTs ( userTs ) , referenceATs ( aTs ) ] ,
403+ refs : [ ...referencesUserTs ( userTs , /*isDefinition*/ undefined ) , referenceATs ( aTs , /*isDefinition*/ true ) ] , // Presently inconsistent across projects
398404 symbolName : "fnA" ,
399405 symbolStartOffset : protocolLocationFromSubstring ( userTs . content , "fnA()" ) . offset ,
400406 symbolDisplayString : "function fnA(): void" ,
@@ -408,7 +414,7 @@ namespace ts.projectSystem {
408414 openFilesForSession ( [ aTs ] , session ) ; // If it's not opened, the reference isn't found.
409415 const response = executeSessionRequest < protocol . ReferencesRequest , protocol . ReferencesResponse > ( session , protocol . CommandTypes . References , protocolFileLocationFromSubstring ( aTs , "fnA" ) ) ;
410416 assert . deepEqual < protocol . ReferencesResponseBody | undefined > ( response , {
411- refs : [ referenceATs ( aTs ) , ...referencesUserTs ( userTs ) ] ,
417+ refs : [ referenceATs ( aTs , /*isDefinition*/ true ) , ...referencesUserTs ( userTs , /*isDefinition*/ false ) ] ,
412418 symbolName : "fnA" ,
413419 symbolStartOffset : protocolLocationFromSubstring ( aTs . content , "fnA" ) . offset ,
414420 symbolDisplayString : "function fnA(): void" ,
@@ -448,8 +454,8 @@ namespace ts.projectSystem {
448454 ] ,
449455 } ,
450456 references : [
451- makeReferenceEntry ( { file : userTs , /*isDefinition*/ isDefinition : false , text : "fnA" } ) ,
452- makeReferenceEntry ( { file : aTs , /*isDefinition*/ isDefinition : true , text : "fnA" , contextText : "export function fnA() {}" } ) ,
457+ makeReferencedSymbolEntry ( { file : userTs , text : "fnA" } ) ,
458+ makeReferencedSymbolEntry ( { file : aTs , text : "fnA" , isDefinition : true , isWriteAccess : true , contextText : "export function fnA() {}" } ) ,
453459 ] ,
454460 } ,
455461 ] ) ;
@@ -502,16 +508,15 @@ namespace ts.projectSystem {
502508 name : "function f(): void" ,
503509 } ,
504510 references : [
505- makeReferenceEntry ( {
511+ makeReferencedSymbolEntry ( {
506512 file : aTs ,
507513 text : "f" ,
508514 options : { index : 1 } ,
509515 contextText : "function f() {}" ,
510- isDefinition : true
516+ isWriteAccess : true ,
511517 } ) ,
512518 {
513519 fileName : bTs . path ,
514- isDefinition : false ,
515520 isInString : undefined ,
516521 isWriteAccess : false ,
517522 textSpan : { start : 0 , length : 1 } ,
@@ -529,14 +534,13 @@ namespace ts.projectSystem {
529534 refs : [
530535 makeReferenceItem ( {
531536 file : bDts ,
532- isDefinition : true ,
537+ isWriteAccess : true ,
533538 text : "fnB" ,
534539 contextText : "export declare function fnB(): void;" ,
535540 lineText : "export declare function fnB(): void;"
536541 } ) ,
537542 makeReferenceItem ( {
538543 file : userTs ,
539- isDefinition : false ,
540544 text : "fnB" ,
541545 lineText : "export function fnUser() { a.fnA(); b.fnB(); a.instanceA; }"
542546 } ) ,
0 commit comments