查看表达式信息
This commit is contained in:
parent
0b5216a3bf
commit
0bcd418dda
|
@ -163,6 +163,79 @@ func AutocompleteHandler(w http.ResponseWriter, r *http.Request) {
|
|||
w.Write(output)
|
||||
}
|
||||
|
||||
// 查看表达式信息.
|
||||
func GetExprInfoHandler(w http.ResponseWriter, r *http.Request) {
|
||||
data := map[string]interface{}{"succ": true}
|
||||
defer util.RetJSON(w, r, data)
|
||||
|
||||
session, _ := session.HTTPSession.Get(r, "wide-session")
|
||||
username := session.Values["username"].(string)
|
||||
|
||||
decoder := json.NewDecoder(r.Body)
|
||||
|
||||
var args map[string]interface{}
|
||||
if err := decoder.Decode(&args); err != nil {
|
||||
glog.Error(err)
|
||||
http.Error(w, err.Error(), 500)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
path := args["path"].(string)
|
||||
curDir := path[:strings.LastIndex(path, string(os.PathSeparator))]
|
||||
filename := path[strings.LastIndex(path, string(os.PathSeparator))+1:]
|
||||
|
||||
fout, err := os.Create(path)
|
||||
|
||||
if nil != err {
|
||||
glog.Error(err)
|
||||
data["succ"] = false
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
code := args["code"].(string)
|
||||
fout.WriteString(code)
|
||||
|
||||
if err := fout.Close(); nil != err {
|
||||
glog.Error(err)
|
||||
data["succ"] = false
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
line := int(args["cursorLine"].(float64))
|
||||
ch := int(args["cursorCh"].(float64))
|
||||
|
||||
offset := getCursorOffset(code, line, ch)
|
||||
glog.Infof("offset [%d]", offset)
|
||||
|
||||
// TODO: 目前是调用 liteide_stub 工具来查找声明,后续需要重新实现
|
||||
ide_stub := conf.Wide.GetIDEStub()
|
||||
argv := []string{"type", "-cursor", filename + ":" + strconv.Itoa(offset), "-info", "."}
|
||||
cmd := exec.Command(ide_stub, argv...)
|
||||
cmd.Dir = curDir
|
||||
|
||||
setCmdEnv(cmd, username)
|
||||
|
||||
output, err := cmd.CombinedOutput()
|
||||
if nil != err {
|
||||
glog.Error(err)
|
||||
http.Error(w, err.Error(), 500)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
exprInfo := strings.TrimSpace(string(output))
|
||||
if "" == exprInfo {
|
||||
data["succ"] = false
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
data["info"] = exprInfo
|
||||
}
|
||||
|
||||
// 查找声明.
|
||||
func FindDeclarationHandler(w http.ResponseWriter, r *http.Request) {
|
||||
data := map[string]interface{}{"succ": true}
|
||||
|
@ -208,7 +281,7 @@ func FindDeclarationHandler(w http.ResponseWriter, r *http.Request) {
|
|||
ch := int(args["cursorCh"].(float64))
|
||||
|
||||
offset := getCursorOffset(code, line, ch)
|
||||
// glog.Infof("offset [%d]", offset)
|
||||
glog.Infof("offset [%d]", offset)
|
||||
|
||||
// TODO: 目前是调用 liteide_stub 工具来查找声明,后续需要重新实现
|
||||
ide_stub := conf.Wide.GetIDEStub()
|
||||
|
@ -263,7 +336,7 @@ func FindUsagesHandler(w http.ResponseWriter, r *http.Request) {
|
|||
return
|
||||
}
|
||||
|
||||
filePath := args["file"].(string)
|
||||
filePath := args["path"].(string)
|
||||
curDir := filePath[:strings.LastIndex(filePath, string(os.PathSeparator))]
|
||||
filename := filePath[strings.LastIndex(filePath, string(os.PathSeparator))+1:]
|
||||
|
||||
|
|
1
main.go
1
main.go
|
@ -191,6 +191,7 @@ func main() {
|
|||
http.HandleFunc("/editor/ws", handlerWrapper(editor.WSHandler))
|
||||
http.HandleFunc("/go/fmt", handlerWrapper(editor.GoFmtHandler))
|
||||
http.HandleFunc("/autocomplete", handlerWrapper(editor.AutocompleteHandler))
|
||||
http.HandleFunc("/exprinfo", handlerWrapper(editor.GetExprInfoHandler))
|
||||
http.HandleFunc("/find/decl", handlerWrapper(editor.FindDeclarationHandler))
|
||||
http.HandleFunc("/find/usages", handlerWrapper(editor.FindUsagesHandler))
|
||||
http.HandleFunc("/html/fmt", handlerWrapper(editor.HTMLFmtHandler))
|
||||
|
|
|
@ -106,15 +106,29 @@ var editors = {
|
|||
if (autocompleteArray) {
|
||||
for (var i = 0; i < autocompleteArray.length; i++) {
|
||||
var displayText = '';
|
||||
if (autocompleteArray[i].class === 'type') {
|
||||
|
||||
switch (autocompleteArray[i].class) {
|
||||
case "type":
|
||||
case "const":
|
||||
case "var":
|
||||
case "package":
|
||||
displayText = '<span class="fn-clear">'// + autocompleteArray[i].class
|
||||
+ '<b class="fn-left">' + autocompleteArray[i].name + '</b>'
|
||||
+ '<b class="fn-left">' + autocompleteArray[i].name + '</b> '
|
||||
+ autocompleteArray[i].type + '</span>';
|
||||
} else {
|
||||
|
||||
break;
|
||||
case "func":
|
||||
displayText = '<span>'// + autocompleteArray[i].class
|
||||
+ '<b>' + autocompleteArray[i].name + '</b> '
|
||||
+ '<b>' + autocompleteArray[i].name + '</b>'
|
||||
+ autocompleteArray[i].type.substring(4) + '</span>';
|
||||
|
||||
break;
|
||||
default:
|
||||
console.warn("Can't handle autocomplete [" + autocompleteArray[i].class + "]");
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
autocompleteHints[i] = {
|
||||
// TODO: 添加类型、图标
|
||||
|
||||
|
@ -150,6 +164,31 @@ var editors = {
|
|||
CodeMirror.commands.doNothing = function (cm) {
|
||||
};
|
||||
|
||||
CodeMirror.commands.exprInfo = function (cm) {
|
||||
var cur = wide.curEditor.getCursor();
|
||||
|
||||
var request = newWideRequest();
|
||||
request.path = $(".edit-panel .tabs .current > span:eq(0)").attr("title");
|
||||
request.code = wide.curEditor.getValue();
|
||||
request.cursorLine = cur.line;
|
||||
request.cursorCh = cur.ch;
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/exprinfo',
|
||||
data: JSON.stringify(request),
|
||||
dataType: "json",
|
||||
success: function (data) {
|
||||
// TODO: V
|
||||
console.log(data);
|
||||
|
||||
if (!data.succ) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
CodeMirror.commands.jumpToDecl = function (cm) {
|
||||
var cur = wide.curEditor.getCursor();
|
||||
|
||||
|
@ -204,7 +243,7 @@ var editors = {
|
|||
var cur = wide.curEditor.getCursor();
|
||||
|
||||
var request = newWideRequest();
|
||||
request.file = wide.curNode.path;
|
||||
request.path = $(".edit-panel .tabs .current > span:eq(0)").attr("title");
|
||||
request.code = wide.curEditor.getValue();
|
||||
request.cursorLine = cur.line;
|
||||
request.cursorCh = cur.ch;
|
||||
|
@ -216,7 +255,7 @@ var editors = {
|
|||
dataType: "json",
|
||||
success: function (data) {
|
||||
console.log(data);
|
||||
|
||||
// TODO: V
|
||||
if (!data.succ) {
|
||||
return;
|
||||
}
|
||||
|
@ -272,6 +311,7 @@ var editors = {
|
|||
extraKeys: {
|
||||
"Ctrl-\\": "autocompleteAnyWord",
|
||||
".": "autocompleteAfterDot",
|
||||
"Ctrl-I": "exprInfo",
|
||||
"Ctrl-G": "gotoLine",
|
||||
"Ctrl-E": "deleteLine",
|
||||
"Ctrl-D": "doNothing", // 取消默认的 deleteLine
|
||||
|
|
Loading…
Reference in New Issue