Skip to content

Commit 8f714c0

Browse files
committed
WorkspaceSearcher + refactoring
1 parent 287d1ab commit 8f714c0

15 files changed

+788
-551
lines changed

.vscode/launch.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"request": "launch",
1212
"runtimeExecutable": "${execPath}",
1313
"args": [
14+
"--disable-extensions=1",
1415
"--extensionDevelopmentPath=${workspaceFolder}"
1516
],
1617
"outFiles": [

src/codeSearch.ts

Lines changed: 0 additions & 212 deletions
This file was deleted.

src/completionProvider.ts

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ import {
1010
TextDocument
1111
} from "vscode";
1212
import { TypeHintProvider, TypeHint } from "./typeHintProvider";
13-
import { paramHintTrigger, returnHintTrigger, TypeName } from "./python";
13+
import { paramHintTrigger, returnHintTrigger, PythonType } from "./python";
1414

1515

1616
abstract class CompletionProvider {
1717

18-
protected pushTypeNamesToItems(typeNames: TypeName[], completionItems: CompletionItem[]) {
18+
protected pushTypesToItems(typeNames: PythonType[], completionItems: CompletionItem[]) {
1919
for (const typeName of typeNames) {
2020
const item = new CompletionItem(typeName, CompletionItemKind.TypeParameter);
2121

@@ -38,19 +38,25 @@ export class ParamHintCompletionProvider extends CompletionProvider implements C
3838
token: CancellationToken,
3939
context: CompletionContext
4040
): Promise<CompletionList | null> {
41-
if (context.triggerCharacter !== paramHintTrigger) {
42-
return Promise.resolve(null);
43-
}
44-
const items: CompletionItem[] = [];
45-
const line = doc.lineAt(pos);
46-
const param = this.findParam(line, pos);
47-
const provider = new TypeHintProvider(doc);
48-
49-
if (param && param.length > 0) {
50-
this.pushEstimationsToItems(await provider.getTypeHints(param), items);
41+
if (context.triggerCharacter === paramHintTrigger) {
42+
const items: CompletionItem[] = [];
43+
const line = doc.lineAt(pos);
44+
45+
if (this.shouldProvideItems(line, pos)) {
46+
const param = this.findParam(line, pos);
47+
const provider = new TypeHintProvider(doc);
48+
49+
if (param && param.length > 0) {
50+
try {
51+
this.pushEstimationsToItems(await provider.getTypeHints(param), items);
52+
} catch (error) {
53+
}
54+
}
55+
this.pushTypesToItems(provider.getRemainingTypes(), items);
56+
return Promise.resolve(new CompletionList(items, false));
57+
}
5158
}
52-
this.pushTypeNamesToItems(provider.getRemainingTypes(), items);
53-
return Promise.resolve(new CompletionList(items, false));
59+
return Promise.resolve(null);
5460
}
5561

5662
/**
@@ -69,9 +75,9 @@ export class ParamHintCompletionProvider extends CompletionProvider implements C
6975
return param;
7076
}
7177

72-
protected pushEstimationsToItems(typeHints: TypeHint[], items: CompletionItem[]) {
78+
private pushEstimationsToItems(typeHints: TypeHint[], items: CompletionItem[]) {
7379

74-
if (typeHints) {
80+
if (typeHints.length > 0) {
7581
let typeHint = typeHints[0].type;
7682
let item = new CompletionItem(typeHint, CompletionItemKind.TypeParameter);
7783
item.sortText = `0${typeHint}`;
@@ -89,6 +95,14 @@ export class ParamHintCompletionProvider extends CompletionProvider implements C
8995

9096
}
9197
}
98+
99+
private shouldProvideItems(line: TextLine, pos: Position): boolean {
100+
101+
if (pos.character > 0) {
102+
return new RegExp("^[ \t]*def", "m").test(line.text);
103+
}
104+
return false;
105+
}
92106
}
93107

94108
/**
@@ -108,17 +122,17 @@ export class ReturnHintCompletionProvider extends CompletionProvider implements
108122
const items: CompletionItem[] = [];
109123
const line = doc.lineAt(pos);
110124

111-
if (this.shouldProvideReturnHint(line, pos)) {
112-
this.pushTypeNamesToItems(Object.values(TypeName), items);
125+
if (this.shouldProvideItems(line, pos)) {
126+
this.pushTypesToItems(Object.values(PythonType), items);
113127
}
114128
return Promise.resolve(new CompletionList(items, false));
115129
}
116130

117-
private shouldProvideReturnHint(line: TextLine, pos: Position): boolean {
131+
private shouldProvideItems(line: TextLine, pos: Position): boolean {
118132

119133
if (pos.character > 0 && line.text.substr(pos.character - 2, 2) === "->") {
120134

121-
return new RegExp("^[*\t]*def.*\\) *->[: ]*$", "m").test(line.text);
135+
return new RegExp("^[ \t]*def.*\\) *->[: ]*$", "m").test(line.text);
122136
}
123137
return false;
124138
}

src/python.ts

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,35 @@
11

2-
export const anyTypeName: string = "[a-zA-Z_][a-zA-Z0-9_.]*";
2+
export const anyClassOrFunctionName: string = "[a-zA-Z_][a-zA-Z0-9_.]*";
33

44
export const paramHintTrigger: string = ":";
55
export const returnHintTrigger: string = ">";
66

77
export class DataType {
8-
name: TypeName;
8+
name: PythonType;
99
category: TypeCategory;
1010

11-
constructor(name: TypeName, category: TypeCategory) {
11+
constructor(name: PythonType, category: TypeCategory) {
1212
this.name = name;
1313
this.category = category;
1414
}
1515
}
1616

17-
export interface DataTypes {
17+
export interface DataTypeContainer {
1818
[key: string]: DataType
1919
};
2020

21-
export const getDataTypes = (): DataTypes => {
21+
export const getDataTypeContainer = (): DataTypeContainer => {
2222
return {
23-
bool: new DataType(TypeName.Bool, typeCategories.bool),
24-
complex: new DataType(TypeName.Complex, typeCategories.complex),
25-
dict: new DataType(TypeName.Dict, typeCategories.dict),
26-
float: new DataType(TypeName.Float, typeCategories.float),
27-
int: new DataType(TypeName.Int, typeCategories.int),
28-
list: new DataType(TypeName.List, typeCategories.list),
29-
object: new DataType(TypeName.Object, typeCategories.object),
30-
set: new DataType(TypeName.Set, typeCategories.set),
31-
str: new DataType(TypeName.String, typeCategories.string),
32-
tuple: new DataType(TypeName.Tuple, typeCategories.tuple)
23+
bool: new DataType(PythonType.Bool, typeCategories.bool),
24+
complex: new DataType(PythonType.Complex, typeCategories.complex),
25+
dict: new DataType(PythonType.Dict, typeCategories.dict),
26+
float: new DataType(PythonType.Float, typeCategories.float),
27+
int: new DataType(PythonType.Int, typeCategories.int),
28+
list: new DataType(PythonType.List, typeCategories.list),
29+
object: new DataType(PythonType.Object, typeCategories.object),
30+
set: new DataType(PythonType.Set, typeCategories.set),
31+
str: new DataType(PythonType.String, typeCategories.string),
32+
tuple: new DataType(PythonType.Tuple, typeCategories.tuple)
3333
};
3434
};
3535

@@ -42,9 +42,9 @@ export enum Initialization {
4242
}
4343

4444
/**
45-
* Names of built-in Python types which can be hinted.
45+
* Built-in Python types.
4646
*/
47-
export enum TypeName {
47+
export enum PythonType {
4848
Bool = "bool",
4949
Complex = "complex",
5050
Dict = "dict",
@@ -67,7 +67,7 @@ export enum TypeCategory {
6767
}
6868

6969
/**
70-
* Type name keys with Type values.
70+
* Built-in Python type keys with Type category values.
7171
*/
7272
const typeCategories: { [key: string]: TypeCategory } = {
7373
bool: TypeCategory.Basic,

0 commit comments

Comments
 (0)