Skip to content

Commit 3eac8a2

Browse files
committed
use target selection range microsoft#58649
1 parent 7a20791 commit 3eac8a2

3 files changed

Lines changed: 28 additions & 16 deletions

File tree

src/vs/editor/common/modes.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,6 +739,13 @@ export interface LocationLink {
739739
targetSelectionRange?: IRange;
740740
}
741741

742+
export function isLocationLink(thing: any): thing is LocationLink {
743+
return thing
744+
&& URI.isUri((thing as LocationLink).uri)
745+
&& Range.isIRange((thing as LocationLink).range)
746+
&& (Range.isIRange((thing as LocationLink).originSelectionRange) || Range.isIRange((thing as LocationLink).targetSelectionRange));
747+
}
748+
742749
export type Definition = Location | Location[] | LocationLink[];
743750

744751
/**

src/vs/editor/contrib/goToDefinition/goToDefinitionCommands.ts

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
1212
import { EditorAction, IActionOptions, registerEditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions';
1313
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
1414
import * as corePosition from 'vs/editor/common/core/position';
15-
import { Range } from 'vs/editor/common/core/range';
15+
import { Range, IRange } from 'vs/editor/common/core/range';
1616
import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
1717
import { ITextModel, IWordAtPosition } from 'vs/editor/common/model';
18-
import { LocationLink, Location } from 'vs/editor/common/modes';
18+
import { LocationLink, Location, isLocationLink } from 'vs/editor/common/modes';
1919
import { MessageController } from 'vs/editor/contrib/message/messageController';
2020
import { PeekContext } from 'vs/editor/contrib/referenceSearch/peekViewWidget';
2121
import { ReferencesController } from 'vs/editor/contrib/referenceSearch/referencesController';
@@ -29,7 +29,6 @@ import { IProgressService } from 'vs/platform/progress/common/progress';
2929
import { getDefinitionsAtPosition, getImplementationsAtPosition, getTypeDefinitionsAtPosition, getDeclarationsAtPosition } from './goToDefinition';
3030
import { CommandsRegistry } from 'vs/platform/commands/common/commands';
3131

32-
3332
export class DefinitionActionConfig {
3433

3534
constructor(
@@ -44,7 +43,7 @@ export class DefinitionActionConfig {
4443

4544
export class DefinitionAction extends EditorAction {
4645

47-
private _configuration: DefinitionActionConfig;
46+
private readonly _configuration: DefinitionActionConfig;
4847

4948
constructor(configuration: DefinitionActionConfig, opts: IActionOptions) {
5049
super(opts);
@@ -74,14 +73,10 @@ export class DefinitionAction extends EditorAction {
7473
if (!reference || !reference.range) {
7574
continue;
7675
}
77-
let { uri, range } = reference;
78-
let newLen = result.push({
79-
uri,
80-
range
81-
});
76+
const newLen = result.push(reference);
8277
if (this._configuration.filterCurrent
83-
&& uri.toString() === model.uri.toString()
84-
&& Range.containsPosition(range, pos)
78+
&& reference.uri.toString() === model.uri.toString()
79+
&& Range.containsPosition(reference.range, pos)
8580
&& idxOfCurrent === -1
8681
) {
8782
idxOfCurrent = newLen - 1;
@@ -145,11 +140,21 @@ export class DefinitionAction extends EditorAction {
145140
}
146141
}
147142

148-
private _openReference(editor: ICodeEditor, editorService: ICodeEditorService, reference: Location, sideBySide: boolean): Promise<ICodeEditor> {
143+
private _openReference(editor: ICodeEditor, editorService: ICodeEditorService, reference: Location | LocationLink, sideBySide: boolean): Promise<ICodeEditor> {
144+
// range is the target-selection-range when we have one
145+
// and the the fallback is the 'full' range
146+
let range: IRange = undefined;
147+
if (isLocationLink(reference)) {
148+
range = reference.targetSelectionRange;
149+
}
150+
if (!range) {
151+
range = reference.range;
152+
}
153+
149154
return editorService.openCodeEditor({
150155
resource: reference.uri,
151156
options: {
152-
selection: Range.collapseToStart(reference.range),
157+
selection: Range.collapseToStart(range),
153158
revealIfOpened: true,
154159
revealInCenterIfOutsideViewport: true
155160
}

src/vs/editor/contrib/referenceSearch/referencesModel.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import * as strings from 'vs/base/common/strings';
1111
import { URI } from 'vs/base/common/uri';
1212
import { defaultGenerator } from 'vs/base/common/idGenerator';
1313
import { Range, IRange } from 'vs/editor/common/core/range';
14-
import { Location } from 'vs/editor/common/modes';
14+
import { Location, LocationLink } from 'vs/editor/common/modes';
1515
import { ITextModelService, ITextEditorModel } from 'vs/editor/common/services/resolverService';
1616
import { Position } from 'vs/editor/common/core/position';
1717

@@ -170,7 +170,7 @@ export class ReferencesModel implements IDisposable {
170170
readonly _onDidChangeReferenceRange = new Emitter<OneReference>();
171171
readonly onDidChangeReferenceRange: Event<OneReference> = this._onDidChangeReferenceRange.event;
172172

173-
constructor(references: Location[]) {
173+
constructor(references: LocationLink[]) {
174174
this._disposables = [];
175175
// grouping and sorting
176176
references.sort(ReferencesModel._compareReferences);
@@ -187,7 +187,7 @@ export class ReferencesModel implements IDisposable {
187187
if (current.children.length === 0
188188
|| !Range.equalsRange(ref.range, current.children[current.children.length - 1].range)) {
189189

190-
let oneRef = new OneReference(current, ref.range);
190+
let oneRef = new OneReference(current, ref.targetSelectionRange || ref.range);
191191
this._disposables.push(oneRef.onRefChanged((e) => this._onDidChangeReferenceRange.fire(e)));
192192
this.references.push(oneRef);
193193
current.children.push(oneRef);

0 commit comments

Comments
 (0)