Просмотр исходного кода

Merge branch 'fix/completion_items' into 'wrdp'

优化代码提示功能

See merge request o2oa/o2oa!2504
胡起 5 лет назад
Родитель
Сommit
dbc5c74b76

+ 29 - 5
o2web/source/o2_core/o2/widget/JavascriptEditor.js

@@ -269,7 +269,8 @@ o2.widget.JavascriptEditor = new Class({
 
         if (textPrefix.lastIndexOf("=")!=-1) textPrefix = textPrefix.substr(textPrefix.lastIndexOf("=")+1);
         if (textPrefix.lastIndexOf(" new ")!=-1) textPrefix = textPrefix.substr(textPrefix.lastIndexOf(" new ")+5);
-
+        //if (preCode.lastIndexOf("{")!=-1) preCode = preCode.substr(preCode.lastIndexOf("{")+1);
+debugger;
         var codeObj = {
             "code": textPrefix,
             "preCode": preCode,
@@ -299,14 +300,28 @@ o2.widget.JavascriptEditor = new Class({
                                 startColumn: 1,
                                 startLineNumber: 1
                             };
-                            var preCode = model.getValueInRange(range);
+                            preCode = model.getValueInRange(range);
+
+                        }
+
+                        var sufCode = "";
+                        var lineCount = model.getLineCount();
+                        var nextLineNumber = position.lineNumber+1;
+                        if (nextLineNumber<=lineCount){
+                            range = {
+                                endColumn: model.getLineMaxColumn(lineCount),
+                                endLineNumber: lineCount,
+                                startColumn: 1,
+                                startLineNumber: nextLineNumber
+                            };
+                            sufCode = model.getValueInRange(range);
                         }
 
                         var word = model.getWordUntilPosition(position);
                         var insertRange = { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: word.startColumn, endColumn: word.endColumn };
 
                         return new Promise(function(s){
-                            this.getCompletionObject(textPrefix, preCode, insertRange, model.o2Editor.options.runtime, function(o){
+                            this.getCompletionObject(textPrefix, preCode+"\n"+sufCode, insertRange, model.o2Editor.options.runtime, function(o){
 
                                 // if (o) {
                                 //     var arr = [];
@@ -350,15 +365,24 @@ o2.widget.JavascriptEditor = new Class({
                     if (x){
                         var endLineNumber = (pos.row>0) ? pos.row-1 : -1;
                         var preCode = "";
-
                         if (endLineNumber>-1){
                             var range = session.getWordRange(0,0);
                             range.setEnd(endLineNumber, session.getLine(endLineNumber).length);
                             preCode = session.getTextRange(range);
                         }
 
+                        var sufCode = "";
+                        var lineCount = session.getLength()-1;
+                        var nextLineNumber = pos.row+1;
+                        if (nextLineNumber<=lineCount){
+                            var range = session.getWordRange(nextLineNumber,0);
+                            range.setEnd(lineCount, session.getLine(lineCount).length);
+                            sufCode = session.getTextRange(range);
+                        }
+
+
                         return new Promise(function(s){
-                            this.getCompletionObject(x, preCode, null, editor.o2Editor.options.runtime, function(o){
+                            this.getCompletionObject(x, preCode+"\n"+sufCode, null, editor.o2Editor.options.runtime, function(o){
                                 callback(null, o);
                                 if (s) s(o);
                             }.bind(this));

+ 4 - 4
o2web/source/o2_core/scriptWorker.js

@@ -2,8 +2,8 @@ window = self;
 window.addEvent = function(){};
 self.window = window;
 window.execScript = function(text){
-    return eval(text)
-}
+    return eval(text);
+};
 
 if (!this.document) document = {
     "window": self,
@@ -421,9 +421,9 @@ layout.addReady(function(){
 
                 code = "return "+code+";";
                 if (preCode){
-                    code = preCode+"\n"+code;
+                    code = "try{\n"+preCode+"\n}catch(e){}\n"+"try{\n"+code+"\n}catch(e){return null;}";
                 }
-                code = "try {\n"+code+"\n}catch(e){return null;}";
+                //code = "try {\n"+code+"\n}catch(e){return null;}";
                 var o = _worker.runtimeEnvironment[runtime].exec(code);
                 if (o) {
                     var completions = (type=="ace") ? _worker.getAceCompletions(o, range, codeText) : _worker.getMonacoCompletions(o ,range, codeText);