Skip to content

Commit 7ff3353

Browse files
committed
feat: Show symbol detail for method calls (#973)
1 parent 6032611 commit 7ff3353

1 file changed

Lines changed: 38 additions & 0 deletions

File tree

gradle-language-server/src/main/java/com/microsoft/gradle/compile/DocumentSymbolVisitor.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,11 @@
2323
import org.codehaus.groovy.ast.expr.BinaryExpression;
2424
import org.codehaus.groovy.ast.expr.ConstantExpression;
2525
import org.codehaus.groovy.ast.expr.Expression;
26+
import org.codehaus.groovy.ast.expr.MapEntryExpression;
2627
import org.codehaus.groovy.ast.expr.MethodCallExpression;
28+
import org.codehaus.groovy.ast.expr.NamedArgumentListExpression;
2729
import org.codehaus.groovy.ast.expr.PropertyExpression;
30+
import org.codehaus.groovy.ast.expr.TupleExpression;
2831
import org.codehaus.groovy.ast.expr.VariableExpression;
2932
import org.codehaus.groovy.ast.stmt.BlockStatement;
3033
import org.codehaus.groovy.ast.stmt.ExpressionStatement;
@@ -104,6 +107,10 @@ private DocumentSymbol getDocumentSymbol(MethodCallExpression expression) {
104107
return null;
105108
}
106109
symbol.setName(name);
110+
String detail = getSymbolDetail(expression);
111+
if (detail != null) {
112+
symbol.setDetail(detail);
113+
}
107114
symbol.setSelectionRange(LSPUtils.toRange(expression));
108115
symbol.setRange(LSPUtils.toRange(expression));
109116
return symbol;
@@ -158,4 +165,35 @@ private String getSymbolName(PropertyExpression expression) {
158165
}
159166
return builder.toString();
160167
}
168+
169+
private String getSymbolDetail(MethodCallExpression expression) {
170+
Expression argument = expression.getArguments();
171+
if (argument instanceof ArgumentListExpression) {
172+
List<Expression> arguments = ((ArgumentListExpression) argument).getExpressions();
173+
if (!arguments.isEmpty() && arguments.get(0) instanceof ConstantExpression) {
174+
// if first arg is constantExpression, show it as detail
175+
return arguments.get(0).getText();
176+
}
177+
return null;
178+
} else if (argument instanceof TupleExpression) {
179+
// if argument is tupleExpression, show first argument as detail
180+
List<Expression> arguments = ((TupleExpression)argument).getExpressions();
181+
if (!arguments.isEmpty() && arguments.get(0) instanceof NamedArgumentListExpression) {
182+
NamedArgumentListExpression namedArgumentListExpression = (NamedArgumentListExpression)arguments.get(0);
183+
List<MapEntryExpression> mapEntryExpressions = namedArgumentListExpression.getMapEntryExpressions();
184+
if (!mapEntryExpressions.isEmpty()) {
185+
MapEntryExpression firstExpression = mapEntryExpressions.get(0);
186+
if (firstExpression.getValueExpression() instanceof ConstantExpression) {
187+
StringBuilder detail = new StringBuilder();
188+
detail.append(firstExpression.getKeyExpression().getText());
189+
detail.append(": ");
190+
detail.append(firstExpression.getValueExpression().getText());
191+
return detail.toString();
192+
}
193+
}
194+
return null;
195+
}
196+
}
197+
return null;
198+
}
161199
}

0 commit comments

Comments
 (0)