Skip to content

Commit 047f329

Browse files
committed
Move type checking utils to language server
Signed-off-by: Ben Sherman <[email protected]>
1 parent bd88aa9 commit 047f329

File tree

14 files changed

+5
-1611
lines changed

14 files changed

+5
-1611
lines changed

modules/nf-lang/src/main/java/nextflow/script/control/ScriptParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public void analyze() {
7979
new ScriptResolveVisitor(source, compiler.compilationUnit(), Types.DEFAULT_SCRIPT_IMPORTS, Collections.emptyList()).visit();
8080
if( source.getErrorCollector().hasErrors() )
8181
continue;
82-
new TypeCheckingVisitor(source, false).visit();
82+
new TypeCheckingVisitor(source).visit();
8383
}
8484
}
8585

modules/nf-lang/src/main/java/nextflow/script/control/TypeCheckingVisitor.java

Lines changed: 1 addition & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,13 @@
1616
package nextflow.script.control;
1717

1818
import nextflow.script.ast.ASTNodeMarker;
19-
import nextflow.script.ast.AssignmentExpression;
20-
import nextflow.script.ast.FeatureFlagNode;
2119
import nextflow.script.ast.ProcessNode;
2220
import nextflow.script.ast.ScriptNode;
2321
import nextflow.script.ast.ScriptVisitorSupport;
2422
import nextflow.script.ast.WorkflowNode;
25-
import nextflow.script.types.TypeChecker;
26-
import nextflow.script.types.Types;
2723
import org.codehaus.groovy.ast.ASTNode;
2824
import org.codehaus.groovy.ast.MethodNode;
29-
import org.codehaus.groovy.ast.Variable;
30-
import org.codehaus.groovy.ast.expr.BinaryExpression;
31-
import org.codehaus.groovy.ast.expr.DeclarationExpression;
32-
import org.codehaus.groovy.ast.expr.EmptyExpression;
33-
import org.codehaus.groovy.ast.expr.Expression;
3425
import org.codehaus.groovy.ast.expr.MethodCallExpression;
35-
import org.codehaus.groovy.ast.expr.PropertyExpression;
36-
import org.codehaus.groovy.ast.expr.VariableExpression;
37-
import org.codehaus.groovy.ast.stmt.ExpressionStatement;
3826
import org.codehaus.groovy.control.SourceUnit;
3927
import org.codehaus.groovy.control.messages.SyntaxErrorMessage;
4028
import org.codehaus.groovy.syntax.SyntaxException;
@@ -50,11 +38,8 @@ public class TypeCheckingVisitor extends ScriptVisitorSupport {
5038

5139
private SourceUnit sourceUnit;
5240

53-
private boolean experimental;
54-
55-
public TypeCheckingVisitor(SourceUnit sourceUnit, boolean experimental) {
41+
public TypeCheckingVisitor(SourceUnit sourceUnit) {
5642
this.sourceUnit = sourceUnit;
57-
this.experimental = experimental;
5843
}
5944

6045
@Override
@@ -68,33 +53,6 @@ public void visit() {
6853
visit(sn);
6954
}
7055

71-
// script declarations
72-
73-
@Override
74-
public void visitFeatureFlag(FeatureFlagNode node) {
75-
if( !experimental )
76-
return;
77-
var fn = node.target;
78-
if( fn == null )
79-
return;
80-
var expectedType = fn.getType();
81-
var actualType = node.value.getType();
82-
if( !Types.isAssignableFrom(expectedType, actualType) )
83-
addError("Type mismatch for feature flag '" + node.name + "' -- expected a " + Types.getName(expectedType) + " but received a " + Types.getName(actualType), node);
84-
}
85-
86-
// statements
87-
88-
@Override
89-
public void visitExpressionStatement(ExpressionStatement node) {
90-
var exp = node.getExpression();
91-
if( exp instanceof AssignmentExpression ae && ae.getNodeMetaData(ASTNodeMarker.IMPLICIT_DECLARATION) != null ) {
92-
applyDeclaration(ae);
93-
return;
94-
}
95-
super.visitExpressionStatement(node);
96-
}
97-
9856
// expressions
9957

10058
@Override
@@ -112,42 +70,6 @@ private void checkMethodCallArguments(MethodCallExpression node, MethodNode defN
11270
addError(String.format("Incorrect number of call arguments, expected %d but received %d", paramsCount, argsCount), node);
11371
}
11472

115-
@Override
116-
public void visitDeclarationExpression(DeclarationExpression node) {
117-
applyDeclaration(node);
118-
}
119-
120-
private void applyDeclaration(BinaryExpression node) {
121-
var target = node.getLeftExpression();
122-
var source = node.getRightExpression();
123-
if( source instanceof EmptyExpression )
124-
return;
125-
visit(target);
126-
visit(source);
127-
var sourceType = TypeChecker.getType(source);
128-
target.putNodeMetaData(ASTNodeMarker.INFERRED_TYPE, sourceType);
129-
}
130-
131-
@Override
132-
public void visitPropertyExpression(PropertyExpression node) {
133-
super.visitPropertyExpression(node);
134-
135-
if( TypeChecker.getType(node) == null ) {
136-
var mn = asMethodNamedOutput(node);
137-
var property = node.getPropertyAsString();
138-
if( mn instanceof ProcessNode pn )
139-
addError("Unrecognized output `" + property + "` for process `" + pn.getName() + "`", node);
140-
else if( mn instanceof WorkflowNode wn )
141-
addError("Unrecognized output `" + property + "` for workflow `" + wn.getName() + "`", node);
142-
}
143-
}
144-
145-
private static MethodNode asMethodNamedOutput(PropertyExpression node) {
146-
if( node.getObjectExpression() instanceof PropertyExpression pe )
147-
return asMethodOutput(pe);
148-
return null;
149-
}
150-
15173
@Override
15274
public void addError(String message, ASTNode node) {
15375
var cause = new TypeError(message, node);

modules/nf-lang/src/main/java/nextflow/script/types/TypeChecker.java

Lines changed: 0 additions & 198 deletions
This file was deleted.

0 commit comments

Comments
 (0)