Skip to content

Commit

Permalink
Fix for #1000: set name range of simple lambda parameter
Browse files Browse the repository at this point in the history
  • Loading branch information
eric-milles committed Dec 11, 2019
1 parent 8642701 commit 658ace8
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -4025,6 +4025,7 @@ private LambdaExpression createLambda(StandardLambdaParametersContext standardLa
@Override
public Parameter[] visitStandardLambdaParameters(StandardLambdaParametersContext ctx) {
if (asBoolean(ctx.variableDeclaratorId())) {
/* GRECLIPSE edit
return new Parameter[]{
configureAST(
new Parameter(
Expand All @@ -4034,6 +4035,14 @@ public Parameter[] visitStandardLambdaParameters(StandardLambdaParametersContext
ctx.variableDeclaratorId()
)
};
*/
VariableExpression variable = this.visitVariableDeclaratorId(ctx.variableDeclaratorId());
Parameter parameter = new Parameter(ClassHelper.OBJECT_TYPE, variable.getName());
parameter.setNameStart(variable.getStart());
parameter.setNameEnd(variable.getEnd());
configureAST(parameter, variable);
return new Parameter[]{parameter};
// GRECLIPSE end
}

Parameter[] parameters = this.visitFormalParameters(ctx.formalParameters());
Expand Down Expand Up @@ -4108,7 +4117,7 @@ public Parameter[] visitFormalParameterList(FormalParameterListContext ctx) {
// GRECLIPSE edit
//.map(this::visitFormalParameter)
.map(formalParameterContext -> {
Parameter parameter = visitFormalParameter(formalParameterContext);
Parameter parameter = this.visitFormalParameter(formalParameterContext);
ASTNode nameNode = configureAST(new ConstantExpression(parameter.getName()), formalParameterContext.variableDeclaratorId());
parameter.setNameStart(nameNode.getStart());
parameter.setNameEnd(nameNode.getEnd());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1237,6 +1237,43 @@ final class SemanticHighlightingTests extends GroovyEclipseTestSuite {
new HighlightedTypedPosition(contents.indexOf('it'), 2, GROOVY_CALL))
}

@Test // https://github.com/groovy/groovy-eclipse/issues/1000
void testLambdaParams1() {
assumeTrue(isParrotParser())

String contents = 'def f = p -> p * "string"'

assertHighlighting(contents,
new HighlightedTypedPosition(contents.lastIndexOf('f'), 1, VARIABLE),
new HighlightedTypedPosition(contents.indexOf( 'p'), 1, PARAMETER),
new HighlightedTypedPosition(contents.lastIndexOf('p'), 1, PARAMETER))
}

@Test
void testLambdaParams2() {
assumeTrue(isParrotParser())

String contents = 'def f = (p) -> { p * "string" }'

assertHighlighting(contents,
new HighlightedTypedPosition(contents.lastIndexOf('f'), 1, VARIABLE),
new HighlightedTypedPosition(contents.indexOf( 'p'), 1, PARAMETER),
new HighlightedTypedPosition(contents.lastIndexOf('p'), 1, PARAMETER))
}

@Test
void testLambdaParams3() {
assumeTrue(isParrotParser())

String contents = 'def f = (Object p) -> { p * "string" }'

assertHighlighting(contents,
new HighlightedTypedPosition(contents.lastIndexOf('f'), 1, VARIABLE),
new HighlightedTypedPosition(contents.indexOf('Object'), 6, CLASS),
new HighlightedTypedPosition(contents.indexOf( 'p'), 1, PARAMETER),
new HighlightedTypedPosition(contents.lastIndexOf('p'), 1, PARAMETER))
}

@Test
void testVarKeyword1() {
String contents = '''\
Expand Down

0 comments on commit 658ace8

Please sign in to comment.