소스 검색

fix error for symbol range parsing
add '()' to workspace function completion
remove '""' from signal completion

Geequlim 8 년 전
부모
커밋
1e7154f071
2개의 변경된 파일11개의 추가작업 그리고 6개의 파일을 삭제
  1. 4 3
      src/config.ts
  2. 7 3
      src/gdscript/symbolparser.ts

+ 4 - 3
src/config.ts

@@ -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")];

+ 7 - 3
src/gdscript/symbolparser.ts

@@ -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))