Skip to content

Commit ce248ee

Browse files
committed
handle responses from jedi even if it is empty
1 parent d572335 commit ce248ee

2 files changed

Lines changed: 63 additions & 59 deletions

File tree

src/client/providers/definitionProvider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export class PythonDefinitionProvider implements vscode.DefinitionProvider {
1515
this.jediProxyHandler = new proxy.JediProxyHandler(context, null, PythonDefinitionProvider.parseData);
1616
}
1717
private static parseData(data: proxy.IDefinitionResult): vscode.Definition {
18-
if (data) {
18+
if (data && data.definition) {
1919
var definitionResource = vscode.Uri.file(data.definition.fileName);
2020
var range = new vscode.Range(data.definition.lineIndex, data.definition.columnIndex, data.definition.lineIndex, data.definition.columnIndex);
2121

src/client/providers/jediProxy.ts

Lines changed: 62 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,12 @@ function spawnProcess(dir: string) {
230230
}
231231

232232
responses.forEach((response) => {
233+
// What's this, can't remember,
234+
// Great example of poorly written code (this whole file is a mess)
235+
// I think this needs to be removed, because this is misspelt, it is argments, 'U' is missing
236+
// And that case is handled further down
237+
// case CommandType.Arguments: {
238+
// Rewrite this mess to use stratergy..
233239
if (response["argments"]) {
234240
var index = commandQueue.indexOf(cmd.id);
235241
commandQueue.splice(index, 1);
@@ -256,84 +262,82 @@ function spawnProcess(dir: string) {
256262
switch (cmd.command) {
257263
case CommandType.Completions: {
258264
let results = <IAutoCompleteItem[]>response['results'];
259-
if (results.length > 0) {
260-
results.forEach(item => {
261-
const originalType = <string><any>item.type;
262-
item.type = getMappedVSCodeType(originalType);
263-
item.kind = getMappedVSCodeSymbol(originalType);
264-
});
265-
266-
let completionResult: ICompletionResult = {
267-
items: results,
268-
requestId: cmd.id
269-
}
270-
cmd.resolve(completionResult);
265+
results = Array.isArray(results) ? results : [];
266+
results.forEach(item => {
267+
const originalType = <string><any>item.type;
268+
item.type = getMappedVSCodeType(originalType);
269+
item.kind = getMappedVSCodeSymbol(originalType);
270+
});
271+
272+
let completionResult: ICompletionResult = {
273+
items: results,
274+
requestId: cmd.id
271275
}
276+
cmd.resolve(completionResult);
272277
break;
273278
}
274279
case CommandType.Definitions: {
275280
let defs = <any[]>response['results'];
281+
let defResult: IDefinitionResult = {
282+
requestId: cmd.id,
283+
definition: null
284+
};
276285
if (defs.length > 0) {
277286
let def = defs[0];
278287
const originalType = def.type as string;
279-
let defResult: IDefinitionResult = {
280-
requestId: cmd.id,
281-
definition: {
282-
columnIndex: Number(def.column),
283-
fileName: def.fileName,
284-
lineIndex: Number(def.line),
285-
text: def.text,
286-
type: getMappedVSCodeType(originalType),
287-
kind: getMappedVSCodeSymbol(originalType)
288-
}
288+
defResult.definition = {
289+
columnIndex: Number(def.column),
290+
fileName: def.fileName,
291+
lineIndex: Number(def.line),
292+
text: def.text,
293+
type: getMappedVSCodeType(originalType),
294+
kind: getMappedVSCodeSymbol(originalType)
289295
};
290-
291-
cmd.resolve(defResult);
292296
}
297+
298+
cmd.resolve(defResult);
293299
break;
294300
}
295301
case CommandType.Symbols: {
296302
var defs = <any[]>response['results'];
297-
if (defs.length > 0) {
298-
var defResults: ISymbolResult = {
299-
requestId: cmd.id,
300-
definitions: []
301-
}
302-
defResults.definitions = defs.map(def => {
303-
const originalType = def.type as string;
304-
return <IDefinition>{
305-
columnIndex: <number>def.column,
306-
fileName: <string>def.fileName,
307-
lineIndex: <number>def.line,
308-
text: <string>def.text,
309-
type: getMappedVSCodeType(originalType),
310-
kind: getMappedVSCodeSymbol(originalType)
311-
};
312-
});
313-
314-
cmd.resolve(defResults);
303+
defs = Array.isArray(defs) ? defs : [];
304+
var defResults: ISymbolResult = {
305+
requestId: cmd.id,
306+
definitions: []
315307
}
308+
defResults.definitions = defs.map(def => {
309+
const originalType = def.type as string;
310+
return <IDefinition>{
311+
columnIndex: <number>def.column,
312+
fileName: <string>def.fileName,
313+
lineIndex: <number>def.line,
314+
text: <string>def.text,
315+
type: getMappedVSCodeType(originalType),
316+
kind: getMappedVSCodeSymbol(originalType)
317+
};
318+
});
319+
320+
cmd.resolve(defResults);
316321
break;
317322
}
318323
case CommandType.Usages: {
319324
var defs = <any[]>response['results'];
320-
if (defs.length > 0) {
321-
var refResult: IReferenceResult = {
322-
requestId: cmd.id,
323-
references: defs.map(item => {
324-
return {
325-
columnIndex: item.column,
326-
fileName: item.fileName,
327-
lineIndex: item.line - 1,
328-
moduleName: item.moduleName,
329-
name: item.name
330-
};
331-
}
332-
)
333-
};
325+
defs = Array.isArray(defs) ? defs : [];
326+
var refResult: IReferenceResult = {
327+
requestId: cmd.id,
328+
references: defs.map(item => {
329+
return {
330+
columnIndex: item.column,
331+
fileName: item.fileName,
332+
lineIndex: item.line - 1,
333+
moduleName: item.moduleName,
334+
name: item.name
335+
};
336+
}
337+
)
338+
};
334339

335-
cmd.resolve(refResult);
336-
}
340+
cmd.resolve(refResult);
337341
break;
338342
}
339343
case CommandType.Arguments: {

0 commit comments

Comments
 (0)