From c7f7217c1032c46a47c0f84d6f0a7f0dbffdd68b Mon Sep 17 00:00:00 2001 From: Peter Zeller Date: Thu, 6 Sep 2018 23:09:32 +0200 Subject: [PATCH] improved outline view --- .../requests/DocumentSymbolRequest.java | 43 ++++++++++++------- .../languageserver/requests/HoverInfo.java | 34 +++++++-------- 2 files changed, 44 insertions(+), 33 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/DocumentSymbolRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/DocumentSymbolRequest.java index a3912a520..3a024c299 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/DocumentSymbolRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/DocumentSymbolRequest.java @@ -9,7 +9,6 @@ import org.jetbrains.annotations.NotNull; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -52,23 +51,29 @@ private void addSymbolsForPackage(List result, WPackage p) { String name = p.getName(); result.add(makeDocumentSymbol(p, SymbolKind.Package, name, children)); for (WEntity e : p.getElements()) { - addSymbolsForEntity(children, name, e); + addSymbolsForEntity(children, e); } } @NotNull private DocumentSymbol makeDocumentSymbol(Element p, SymbolKind kind, String name, List children) { - return new DocumentSymbol(name, kind, Convert.range(p), Convert.errorRange(p), "detail", children); + String detail = null; + if (p instanceof AstElementWithParameters) { + detail = "(" + HoverInfo.getParameterString((AstElementWithParameters) p) + ")"; + } + return new DocumentSymbol(name, kind, Convert.range(p), Convert.errorRange(p), detail, children); } - private void addSymbolsForEntity(List result, String containerName, WEntity e) { + private void addSymbolsForEntity(List result, WEntity e) { e.match(new WEntity.MatcherVoid() { private void add(String name, SymbolKind kind) { - result.add(makeDocumentSymbol(e, kind, name, Collections.emptyList())); + add(name, kind, Collections.emptyList()); } private void add(String name, SymbolKind kind, List children) { - result.add(makeDocumentSymbol(e, kind, name, children)); + if (!e.attrSource().isArtificial()) { + result.add(makeDocumentSymbol(e, kind, name, children)); + } } @Override @@ -87,10 +92,10 @@ public void case_InterfaceDef(InterfaceDef interfaceDef) { List children = new ArrayList<>(); add(name, SymbolKind.Interface, children); for (FuncDef f : interfaceDef.getMethods()) { - addSymbolsForEntity(children, containerName + "." + name, f); + addSymbolsForEntity(children, f); } for (GlobalVarDef v : interfaceDef.getVars()) { - addSymbolsForEntity(children, containerName + "." + name, v); + addSymbolsForEntity(children, v); } } @@ -146,19 +151,25 @@ public void case_ModuleDef(ModuleDef moduleDef) { case_ClassOrModule(moduleDef); } - public void case_ClassOrModule(ClassOrModule moduleDef) { - String name = moduleDef.getName(); + public void case_ClassOrModule(ClassOrModule def) { + String name = def.getName(); List children = new ArrayList<>(); add(name, SymbolKind.Class, children); - for (ClassDef c : moduleDef.getInnerClasses()) { - addSymbolsForEntity(children, containerName + "." + name, c); + for (ClassDef c : def.getInnerClasses()) { + addSymbolsForEntity(children, c); } - for (FuncDef f : moduleDef.getMethods()) { - addSymbolsForEntity(children, containerName + "." + name, f); + for (FuncDef f : def.getMethods()) { + addSymbolsForEntity(children, f); } - for (GlobalVarDef v : moduleDef.getVars()) { - addSymbolsForEntity(children, containerName + "." + name, v); + for (GlobalVarDef v : def.getVars()) { + addSymbolsForEntity(children, v); } + for (ConstructorDef c : def.getConstructors()) { + if (!c.attrSource().isArtificial()) { + children.add(makeDocumentSymbol(c, SymbolKind.Constructor, "construct", Collections.emptyList())); + } + } + } }); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/HoverInfo.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/HoverInfo.java index ba37a7865..0761181c8 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/HoverInfo.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/HoverInfo.java @@ -66,6 +66,23 @@ static String descriptionString(Element n) { return res.toString().trim(); } + public static String getParameterString(AstElementWithParameters f) { + StringBuilder descrhtml = new StringBuilder(); + boolean first = true; + for (WParameter p : f.getParameters()) { + if (!first) { + descrhtml.append(", "); + } + descrhtml.append(type(p.attrTyp())).append(" ").append(p.getName()); + first = false; + } + return descrhtml.toString(); + } + + private static String type(WurstType wurstType) { + return wurstType.toString(); + } + static class Description implements Element.Matcher>> { public List> description(FunctionDefinition f) { @@ -95,19 +112,6 @@ public List> description(FunctionDefinition f) { return result; } - public String getParameterString(AstElementWithParameters f) { - StringBuilder descrhtml = new StringBuilder(); - boolean first = true; - for (WParameter p : f.getParameters()) { - if (!first) { - descrhtml.append(", "); - } - descrhtml.append(type(p.attrTyp())).append(" ").append(p.getName()); - first = false; - } - return descrhtml.toString(); - } - private static String nearestScopeName(Element n) { if (n.attrNearestNamedScope() != null) { return Utils.printElement(n.attrNearestNamedScope()); @@ -326,10 +330,6 @@ private List> string(String s) { return Collections.singletonList(Either.forLeft(s)); } - private String type(WurstType wurstType) { - return wurstType.toString(); - } - @Override public List> case_StmtForRangeDown(StmtForRangeDown s) { return string("Do something for all " + s.getLoopVar().getName() + " counting from _ down to _");