Skip to content

Commit

Permalink
Add hyperlinks to DAG preview (#69)
Browse files Browse the repository at this point in the history
Signed-off-by: Ben Sherman <[email protected]>
  • Loading branch information
bentsherman authored Nov 18, 2024
1 parent 6cc7fee commit ab8e4d5
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/
package nextflow.lsp.services.script.dag;

import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
Expand Down Expand Up @@ -111,7 +112,7 @@ public void visitWorkflow(WorkflowNode node) {
private void visitWorkflowTakes(WorkflowNode node, Map<String,Node> result) {
for( var stmt : asBlockStatements(node.takes) ) {
var name = asVarX(stmt).getName();
var dn = addNode(name, Node.Type.NAME);
var dn = addNode(name, Node.Type.NAME, stmt);
current.putSymbol(name, dn);
result.put(name, dn);
}
Expand Down Expand Up @@ -172,7 +173,7 @@ public void visitMethodCallExpression(MethodCallExpression node) {
var defNode = ASTUtils.getMethodFromCallExpression(node, astCache);
if( defNode instanceof WorkflowNode || defNode instanceof ProcessNode ) {
var preds = visitWithPreds(node.getArguments());
current.putSymbol(name, addNode(name, Node.Type.OPERATOR, preds));
current.putSymbol(name, addNode(name, Node.Type.OPERATOR, defNode, preds));
return;
}

Expand All @@ -197,7 +198,7 @@ private void visitAssignment(BinaryExpression node) {
var preds = visitWithPreds(node.getRightExpression());
var targets = getAssignmentTargets(node.getLeftExpression());
for( var name : targets ) {
var dn = addNode(name, Node.Type.NAME, preds);
var dn = addNode(name, Node.Type.NAME, null, preds);
current.putSymbol(name, dn);
}
}
Expand Down Expand Up @@ -237,7 +238,7 @@ private void visitPipeline(BinaryExpression node) {
if( defNode instanceof WorkflowNode || defNode instanceof ProcessNode ) {
var label = ((MethodNode) defNode).getName();
var preds = visitWithPreds(lhs);
current.putSymbol(label, addNode(label, Node.Type.OPERATOR, preds));
current.putSymbol(label, addNode(label, Node.Type.OPERATOR, defNode, preds));
return;
}
}
Expand All @@ -259,7 +260,7 @@ public void visitPropertyExpression(PropertyExpression node) {
if( isEntryParam(node) ) {
var name = node.getPropertyAsString();
if( !current.inputs.containsKey(name) )
current.inputs.put(name, addNode(name, Node.Type.NAME));
current.inputs.put(name, addNode(name, Node.Type.NAME, null));
var dn = current.inputs.get(name);
currentPreds().add(dn);
return;
Expand Down Expand Up @@ -307,17 +308,17 @@ else if( node.getObjectExpression() instanceof VariableExpression ve && "out".eq

private void visitProcessOut(ProcessNode process, String label, String propName) {
if( propName == null ) {
addOperatorPred(label);
addOperatorPred(label, process);
return;
}
asDirectives(process.outputs)
.filter((call) -> {
var emitName = getProcessEmitName(call);
return propName == null ? emitName == null : propName.equals(emitName);
return propName.equals(emitName);
})
.findFirst()
.ifPresent((call) -> {
addOperatorPred(label);
addOperatorPred(label, process);
});
}

Expand All @@ -337,18 +338,18 @@ private String getProcessEmitName(MethodCallExpression output) {

private void visitWorkflowOut(WorkflowNode workflow, String label, String propName) {
if( propName == null ) {
addOperatorPred(label);
addOperatorPred(label, workflow);
return;
}
asBlockStatements(workflow.emits).stream()
.map(stmt -> ((ExpressionStatement) stmt).getExpression())
.filter((emit) -> {
var emitName = getWorkflowEmitName(emit);
return propName == null ? emitName == null : propName.equals(emitName);
return propName.equals(emitName);
})
.findFirst()
.ifPresent((call) -> {
addOperatorPred(label);
addOperatorPred(label, workflow);
});
}

Expand All @@ -363,12 +364,12 @@ else if( emit instanceof AssignmentExpression assign ) {
return null;
}

private void addOperatorPred(String label) {
private void addOperatorPred(String label, ASTNode an) {
var dn = current.getSymbol(label);
if( dn != null )
currentPreds().add(dn);
else
current.putSymbol(label, addNode(label, Node.Type.OPERATOR));
current.putSymbol(label, addNode(label, Node.Type.OPERATOR, an));
}

@Override
Expand Down Expand Up @@ -405,14 +406,15 @@ private Node visitWithPred(ASTNode node) {
return visitWithPreds(node).stream().findFirst().orElse(null);
}

private Node addNode(String label, Node.Type type, Set<Node> preds) {
var dn = current.addNode(label, type, preds);
private Node addNode(String label, Node.Type type, ASTNode an, Set<Node> preds) {
var uri = astCache.getURI(an);
var dn = current.addNode(label, type, uri, preds);
currentPreds().add(dn);
return dn;
}

private Node addNode(String label, Node.Type type) {
return addNode(label, type, new HashSet<>());
private Node addNode(String label, Node.Type type, ASTNode an) {
return addNode(label, type, an, new HashSet<>());
}

}
Expand Down Expand Up @@ -461,9 +463,9 @@ public void putSymbol(String name, Node dn) {
scopes.get(0).put(name, dn);
}

public Node addNode(String label, Node.Type type, Set preds) {
public Node addNode(String label, Node.Type type, URI uri, Set preds) {
var id = nodes.size();
var dn = new Node(id, label, type, preds);
var dn = new Node(id, label, type, uri, preds);
nodes.put(id, dn);
return dn;
}
Expand All @@ -479,12 +481,14 @@ public enum Type {
public final int id;
public final String label;
public final Type type;
public final URI uri;
public final Set<Node> preds;

public Node(int id, String label, Type type, Set<Node> preds) {
public Node(int id, String label, Type type, URI uri, Set<Node> preds) {
this.id = id;
this.label = label;
this.type = type;
this.uri = uri;
this.preds = preds;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ public String render(String name, Graph graph) {
.replaceAll("\"", "\\\\\"");

lines.add(" " + renderNode(dn.id, label, dn.type));

if( dn.uri != null )
lines.add(String.format(" click v%d href \"%s\" _blank", dn.id, dn.uri.toString()));
}

// render outputs
Expand Down

0 comments on commit ab8e4d5

Please sign in to comment.