fix error for symbol range parsing

add '()' to workspace function completion
remove '""' from signal completion
This commit is contained in:
Geequlim
2016-12-27 10:59:52 +08:00
parent 3470857f39
commit 1e7154f071
2 changed files with 11 additions and 6 deletions

View File

@@ -91,7 +91,7 @@ class Config {
methods.map(m=>parsMethod(m, CompletionItemKind.Method));
// signals
const signals = classdoc.signals;
signals.map(s=>parsMethod(s, CompletionItemKind.Interface, (name)=>`"${name}"`));
signals.map(s=>parsMethod(s, CompletionItemKind.Interface));
// constants
const constants = classdoc.constants;
constants.map(c=>{
@@ -121,18 +121,19 @@ class Config {
let items: CompletionItem[] = [];
for (let path of Object.keys(this.symbols)) {
const script = this.symbols[path];
const addScriptItems = (items, kind: CompletionItemKind, kindName:string = "Symbol")=>{
const addScriptItems = (items, kind: CompletionItemKind, kindName:string = "Symbol", insertText = (n)=>n)=>{
const _items: CompletionItem[] = [];
for (let name of Object.keys(items)) {
const item = new CompletionItem(name, kind);
item.detail = workspace.asRelativePath(path);
item.insertText = insertText(name);
item.documentation = `${kindName} defined in ${item.detail}`;
_items.push(item);
}
return _items;
}
items = [...items, ...addScriptItems(script.classes, CompletionItemKind.Class, "Class")];
items = [...items, ...addScriptItems(script.functions, CompletionItemKind.Method, "Method")];
items = [...items, ...addScriptItems(script.functions, CompletionItemKind.Method, "Method", (t)=>`${t}()`)];
items = [...items, ...addScriptItems(script.variables, CompletionItemKind.Variable, "Variable")];
items = [...items, ...addScriptItems(script.signals, CompletionItemKind.Interface, "Signal")];
items = [...items, ...addScriptItems(script.constants, CompletionItemKind.Enum, "Constant")];

View File

@@ -56,10 +56,14 @@ class GDScriptSymbolParser {
}
const determRange = (key:string, array: any): Range =>{
return new Range(array[key], lines[array[key]].indexOf(key), array[key], lines[array[key]].indexOf(key) + key.length);
let line = array[key];
let startAt = lines[line].indexOf(key);
if(line < 0) line = 0;
if(startAt < 0) startAt = 0;
return new Range(line, startAt, line, startAt + key.length);
};
let funcsnames = getMatches(text, /func\s+([_A-Za-z]+[_A-Za-z0-9]*)\s*\(/g, 1);
let funcsnames = getMatches(text, /func\s+([_A-Za-z]+[_A-Za-z0-9]*)\s*\(.*\)/g, 1);
const funcs = findLineRanges(funcsnames, "func\\s+$X$\\s*\\(.*\\)");
for (let key of Object.keys(funcs))
script.functions[key] = determRange(key, funcs);
@@ -68,7 +72,7 @@ class GDScriptSymbolParser {
const signals = findLineRanges(signalnames, "signal\\s+$X$\\s*\\(.*\\)");
for (let key of Object.keys(signals))
script.signals[key] = determRange(key, signals);
let varnames = getMatches(text, /var\s+([_A-Za-z]+[_A-Za-z0-9]*)\s*/g, 1);
const vars = findLineRanges(varnames, "var\\s+$X$\\s*");
for (let key of Object.keys(vars))