Skip to content

Commit 45986b8

Browse files
committed
fix #711
1 parent 328b5ea commit 45986b8

2 files changed

Lines changed: 25 additions & 22 deletions

File tree

src/client/providers/definitionProvider.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@ export class PythonDefinitionProvider implements vscode.DefinitionProvider {
1313
public constructor(context: vscode.ExtensionContext) {
1414
this.jediProxyHandler = new proxy.JediProxyHandler(context);
1515
}
16-
private static parseData(data: proxy.IDefinitionResult): vscode.Definition {
17-
if (data && data.definition) {
18-
const definition = data.definition;
16+
private static parseData(data: proxy.IDefinitionResult, possibleWord: string): vscode.Definition {
17+
if (data && Array.isArray(data.definitions) && data.definitions.length > 0) {
18+
const definitions = data.definitions.filter(d => d.text === possibleWord);
19+
const definition = definitions.length > 0 ? definitions[0] : data.definitions[data.definitions.length - 1];
1920
const definitionResource = vscode.Uri.file(definition.fileName);
2021
const range = new vscode.Range(
2122
definition.range.startLine, definition.range.startColumn,
@@ -44,8 +45,9 @@ export class PythonDefinitionProvider implements vscode.DefinitionProvider {
4445
if (document.isDirty) {
4546
cmd.source = document.getText();
4647
}
48+
let possibleWord = document.getText(range);
4749
return this.jediProxyHandler.sendCommand(cmd, token).then(data => {
48-
return PythonDefinitionProvider.parseData(data);
50+
return PythonDefinitionProvider.parseData(data, possibleWord);
4951
});
5052
}
5153
}

src/client/providers/jediProxy.ts

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -307,25 +307,26 @@ function spawnProcess(dir: string) {
307307
let defs = <any[]>response['results'];
308308
let defResult: IDefinitionResult = {
309309
requestId: cmd.id,
310-
definition: null
310+
definitions: []
311311
};
312312
if (defs.length > 0) {
313-
let def = defs[0];
314-
const originalType = def.type as string;
315-
defResult.definition = {
316-
fileName: def.fileName,
317-
text: def.text,
318-
rawType: originalType,
319-
type: getMappedVSCodeType(originalType),
320-
kind: getMappedVSCodeSymbol(originalType),
321-
container: def.container,
322-
range: {
323-
startLine: def.range.start_line,
324-
startColumn: def.range.start_column,
325-
endLine: def.range.end_line,
326-
endColumn: def.range.end_column
327-
}
328-
};
313+
defResult.definitions = defs.map(def => {
314+
const originalType = def.type as string;
315+
return {
316+
fileName: def.fileName,
317+
text: def.text,
318+
rawType: originalType,
319+
type: getMappedVSCodeType(originalType),
320+
kind: getMappedVSCodeSymbol(originalType),
321+
container: def.container,
322+
range: {
323+
startLine: def.range.start_line,
324+
startColumn: def.range.start_column,
325+
endLine: def.range.end_line,
326+
endColumn: def.range.end_column
327+
}
328+
};
329+
});
329330
}
330331

331332
cmd.deferred.resolve(defResult);
@@ -587,7 +588,7 @@ export interface IHoverResult extends ICommandResult {
587588
items: IHoverItem[];
588589
}
589590
export interface IDefinitionResult extends ICommandResult {
590-
definition: IDefinition;
591+
definitions: IDefinition[];
591592
}
592593
export interface IReferenceResult extends ICommandResult {
593594
references: IReference[];

0 commit comments

Comments
 (0)