Improve for speed

This commit is contained in:
Geequlim
2017-01-09 23:14:33 +08:00
parent 7d4a6637a6
commit f42aafc2ae
7 changed files with 259 additions and 78 deletions

View File

@@ -35,37 +35,13 @@ class GDScriptCompletionItemProvider implements CompletionItemProvider {
}
provideCompletionItems(document : TextDocument, position : Position, token : CancellationToken) : CompletionItem[] | Thenable < CompletionItem[] > | CompletionList | Thenable < CompletionList > {
// console.log("[GodotTools]:provideCompletionItems");
// const request: CompleteRequest = {
// path: config.normalizePath(document.fileName),
// text: document.getText(),
// cursor: {
// row: position.line + 1,
// column: position.character + 1
// }
// };
// return new Promise((resolve, reject) => {
// requestGodot({
// action: "codecomplete",
// request
// }).then((data: any)=>{
// const result: CompletionResult = data.result;
// if(result && result.suggestions && result.suggestions.length > 0) {
// const items:CompletionItem[] = [];
// result.suggestions.map((label, i)=>{
// items.push(new CompletionItem(label, CompletionItemKind.Field));
// });
// resolve(items);
// }
// else
// reject("Nothing to complete");
// }).catch(e=>{
// reject(e);
// });
// });
let items:CompletionItem[] = config.getWorkspaceCompletionItems();
items = [...items, ...config.bintinSybmolInfoList];
return items;
return new Promise((resolve, reject) => {
let items:CompletionItem[] = config.getWorkspaceCompletionItems();
items = [...items, ...config.bintinSybmolInfoList];
resolve(items);
});
}
resolveCompletionItem(item : CompletionItem, token : CancellationToken) : CompletionItem | Thenable < CompletionItem > {

View File

@@ -63,18 +63,21 @@ class GDScriptDefinitionProivder implements DefinitionProvider {
}
};
let selStr = getSelectedContent(document, position);
if(selStr) {
// For strings
if(isStr(selStr)) {
selStr = getStrContent(selStr);
let fpath = path.join(path.dirname(document.uri.fsPath), selStr)
if(fs.existsSync(fpath) && fs.statSync(fpath).isFile())
selStr = fpath
return new Promise((resolve, reject) => {
let selStr = getSelectedContent(document, position);
if(selStr) {
// For strings
if(isStr(selStr)) {
selStr = getStrContent(selStr);
let fpath = path.join(path.dirname(document.uri.fsPath), selStr)
if(fs.existsSync(fpath) && fs.statSync(fpath).isFile())
selStr = fpath
}
resolve(getDefinitions(selStr));
}
return getDefinitions(selStr);
}
return null;
else
reject(new Error("Empty selection"));
});
}
}

View File

@@ -41,17 +41,18 @@ class GDScriptDiagnosticSeverity {
this._subscription.dispose()
}
validateScript(doc: vscode.TextDocument, script: any) {
async validateScript(doc: vscode.TextDocument, script: any) {
if(doc.languageId == 'gdscript') {
if(script) {
let diagnostics = [
...(this.validateExpression(doc)),
...(this.validateUnusedSymbols(doc, script)),
];
this._subscription.set(doc.uri, diagnostics);
return true;
}
}
return false;
}
private validateUnusedSymbols(doc: vscode.TextDocument,script) {

View File

@@ -35,29 +35,30 @@ class GDScriptDocumentContentProvider implements TextDocumentContentProvider{
const request = uri.authority;
let classname = request;
let membername = null;
if(request.indexOf(".") != -1) {
classname = request.substring(0, request.indexOf("."));
if(!request.endsWith("."))
membername = request.substring(request.indexOf(".")+1, request.length);
}
if(classname.length >= 1) {
for(let key of config.getBuiltinClassNameList()) {
if(key.toLowerCase() == classname) {
classname = key;
break;
const self = this;
return new Promise((resolve, reject) => {
if(request.indexOf(".") != -1) {
classname = request.substring(0, request.indexOf("."));
if(!request.endsWith("."))
membername = request.substring(request.indexOf(".")+1, request.length);
}
if(classname.length >= 1) {
for(let key of config.getBuiltinClassNameList()) {
if(key.toLowerCase() == classname) {
classname = key;
break;
}
}
}
}
console.log(classname, membername);
if(classname && classname.length > 0) {
if(membername && membername.length >0 )
return this.genMemberDoc(classname, membername);
else
return this.genClassDoc(config.getClass(classname));
}
return null;
if(classname && classname.length > 0) {
if(membername && membername.length >0 )
resolve(self.genMemberDoc(classname, membername)) ;
else
resolve(self.genClassDoc(config.getClass(classname)));
}
reject(new Error("Open Documentation Failed!"));
});
}
genMethodDoc(mDoc:any):string {

View File

@@ -40,7 +40,7 @@ class WindowWatcher {
if(window.activeTextEditor != undefined) {
const doc = window.activeTextEditor.document;
const script = config.loadSymbolsFromFile(doc.fileName);
this._diagnosticSeverity.validateScript(doc, script);
this._diagnosticSeverity.validateScript(doc, script).then(()=>{});
this._lastText = {path: doc.fileName, version: doc.version};
}
}
@@ -55,7 +55,7 @@ class WindowWatcher {
// Check content changed
if(this._lastText.path != curText.path || this._lastText.version != curText.version) {
const script = config.loadSymbolsFromFile(doc.fileName);
this._diagnosticSeverity.validateScript(doc, script);
this._diagnosticSeverity.validateScript(doc, script).then(()=>{});
this._lastText = curText;
}
}