Correct node used for isDefinition calculation (#48499)

It should be adjusted as in `getReferencedSymbolsForNode`.  The baseline changes show that it was incorrectly returning false at keywords preceding definitions.
This commit is contained in:
Andrew Casey 2022-03-31 12:18:12 -07:00 committed by GitHub
parent 9cfa6e25af
commit 70585aa0c0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 78 additions and 72 deletions

View File

@ -206,9 +206,10 @@ namespace ts.FindAllReferences {
export function findReferencedSymbols(program: Program, cancellationToken: CancellationToken, sourceFiles: readonly SourceFile[], sourceFile: SourceFile, position: number): ReferencedSymbol[] | undefined {
const node = getTouchingPropertyName(sourceFile, position);
const referencedSymbols = Core.getReferencedSymbolsForNode(position, node, program, sourceFiles, cancellationToken, { use: FindReferencesUse.References });
const options = { use: FindReferencesUse.References };
const referencedSymbols = Core.getReferencedSymbolsForNode(position, node, program, sourceFiles, cancellationToken, options);
const checker = program.getTypeChecker();
const symbol = checker.getSymbolAtLocation(node);
const symbol = checker.getSymbolAtLocation(getAdjustedReferenceLocation(Core.getAdjustedNode(node, options)));
return !referencedSymbols || !referencedSymbols.length ? undefined : mapDefined<SymbolAndEntries, ReferencedSymbol>(referencedSymbols, ({ definition, references }) =>
// Only include referenced symbols that have a valid definition.
definition && {
@ -622,12 +623,7 @@ namespace ts.FindAllReferences {
export namespace Core {
/** Core find-all-references algorithm. Handles special cases before delegating to `getReferencedSymbolsForSymbol`. */
export function getReferencedSymbolsForNode(position: number, node: Node, program: Program, sourceFiles: readonly SourceFile[], cancellationToken: CancellationToken, options: Options = {}, sourceFilesSet: ReadonlySet<string> = new Set(sourceFiles.map(f => f.fileName))): readonly SymbolAndEntries[] | undefined {
if (options.use === FindReferencesUse.References) {
node = getAdjustedReferenceLocation(node);
}
else if (options.use === FindReferencesUse.Rename) {
node = getAdjustedRenameLocation(node);
}
node = getAdjustedNode(node, options);
if (isSourceFile(node)) {
const resolvedRef = GoToDefinition.getReferenceAtPosition(node, position, program);
if (!resolvedRef?.file) {
@ -695,6 +691,16 @@ namespace ts.FindAllReferences {
return mergeReferences(program, moduleReferences, references, moduleReferencesOfExportTarget);
}
export function getAdjustedNode(node: Node, options: Options) {
if (options.use === FindReferencesUse.References) {
node = getAdjustedReferenceLocation(node);
}
else if (options.use === FindReferencesUse.Rename) {
node = getAdjustedRenameLocation(node);
}
return node;
}
export function getReferencesForFileName(fileName: string, program: Program, sourceFiles: readonly SourceFile[], sourceFilesSet: ReadonlySet<string> = new Set(sourceFiles.map(f => f.fileName))): readonly Entry[] {
const moduleSymbol = program.getSourceFile(fileName)?.symbol;
if (moduleSymbol) {

View File

@ -271,7 +271,7 @@
"length": 16
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {

View File

@ -774,7 +774,7 @@
"length": 16
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {
@ -787,7 +787,7 @@
"length": 43
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {

View File

@ -132,7 +132,7 @@
"length": 13
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {
@ -220,7 +220,7 @@
"length": 25
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {
@ -329,7 +329,7 @@ undefined
"length": 21
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {
@ -342,7 +342,7 @@ undefined
"length": 11
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -440,7 +440,7 @@ undefined
"length": 21
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {
@ -453,7 +453,7 @@ undefined
"length": 11
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -523,7 +523,7 @@ undefined
"length": 29
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -593,7 +593,7 @@ undefined
"length": 13
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {
@ -703,7 +703,7 @@ undefined
"length": 12
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -773,7 +773,7 @@ undefined
"length": 10
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -843,7 +843,7 @@ undefined
"length": 15
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -913,7 +913,7 @@ undefined
"length": 12
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -1085,7 +1085,7 @@ undefined
"length": 6
},
"isWriteAccess": false,
"isDefinition": false
"isDefinition": true
}
]
}
@ -1167,7 +1167,7 @@ undefined
"length": 6
},
"isWriteAccess": false,
"isDefinition": false
"isDefinition": true
}
]
}
@ -1249,7 +1249,7 @@ undefined
"length": 12
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}

View File

@ -57,7 +57,7 @@
"length": 29
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {
@ -203,7 +203,7 @@
"length": 29
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {
@ -349,7 +349,7 @@
"length": 29
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {
@ -495,7 +495,7 @@
"length": 29
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {
@ -641,7 +641,7 @@
"length": 29
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {
@ -787,7 +787,7 @@
"length": 29
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {
@ -933,7 +933,7 @@
"length": 29
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {
@ -1079,7 +1079,7 @@
"length": 29
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {
@ -1253,7 +1253,7 @@
"length": 13
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {

View File

@ -54,7 +54,7 @@
"length": 105
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -116,7 +116,7 @@
"length": 105
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -206,7 +206,7 @@
"length": 9
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -296,7 +296,7 @@
"length": 11
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -386,7 +386,7 @@
"length": 9
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -476,7 +476,7 @@
"length": 12
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -566,7 +566,7 @@
"length": 10
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -636,7 +636,7 @@
"length": 16
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -730,7 +730,7 @@
"length": 22
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -792,7 +792,7 @@
"length": 26
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}

View File

@ -95,7 +95,7 @@
"length": 26
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -289,7 +289,7 @@
"length": 14
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -399,7 +399,7 @@
"length": 25
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
},
@ -555,7 +555,7 @@
"length": 25
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
},
@ -747,7 +747,7 @@
"length": 30
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -822,7 +822,7 @@
"length": 30
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -897,7 +897,7 @@
"length": 30
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -1078,7 +1078,7 @@
"length": 29
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
},
@ -1234,7 +1234,7 @@
"length": 29
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
},
@ -1545,7 +1545,7 @@ undefined
"length": 40
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -1904,7 +1904,7 @@ undefined
"length": 30
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -1979,7 +1979,7 @@ undefined
"length": 30
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -2054,7 +2054,7 @@ undefined
"length": 30
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -2235,7 +2235,7 @@ undefined
"length": 29
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
},
@ -2391,7 +2391,7 @@ undefined
"length": 29
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
},
@ -2702,7 +2702,7 @@ undefined
"length": 40
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -2806,7 +2806,7 @@ undefined
"length": 19
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -2910,7 +2910,7 @@ undefined
"length": 19
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -2989,7 +2989,7 @@ undefined
"length": 29
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -3058,7 +3058,7 @@ undefined
"length": 13
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {
@ -3140,7 +3140,7 @@ undefined
"length": 13
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {

View File

@ -50,7 +50,7 @@
"length": 14
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {
@ -165,7 +165,7 @@
},
"fileName": "/tests/cases/fourslash/referencesForTypeKeywords.ts",
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {
@ -232,7 +232,7 @@
},
"fileName": "/tests/cases/fourslash/referencesForTypeKeywords.ts",
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -298,7 +298,7 @@
"length": 12
},
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
}
]
}
@ -392,7 +392,7 @@
},
"fileName": "/tests/cases/fourslash/referencesForTypeKeywords.ts",
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {
@ -495,7 +495,7 @@
},
"fileName": "/tests/cases/fourslash/referencesForTypeKeywords.ts",
"isWriteAccess": true,
"isDefinition": false
"isDefinition": true
},
{
"textSpan": {