Skip to content

Commit

Permalink
Adding line numbers to workflow definitions (broadinstitute#4938)
Browse files Browse the repository at this point in the history
Add line numbers to workflow definitions (broadinstitute#4938)
  • Loading branch information
orodeh authored and mcovarr committed May 15, 2019
1 parent 1fa4998 commit 077eb85
Show file tree
Hide file tree
Showing 19 changed files with 190 additions and 72 deletions.
8 changes: 4 additions & 4 deletions core/src/test/scala/cromwell/util/WomMocks.scala
Original file line number Diff line number Diff line change
Expand Up @@ -19,28 +19,28 @@ object WomMocks {
def mockTaskCall(identifier: WomIdentifier, definition: CommandTaskDefinition = EmptyTaskDefinition) = {
CommandCallNode(identifier, definition, Set.empty, List.empty, Set.empty, (_, localName) => WomIdentifier(localName = localName))
}

def mockWorkflowCall(identifier: WomIdentifier, definition: WorkflowDefinition = EmptyWorkflowDefinition) = {
WorkflowCallNode(identifier, definition, Set.empty, List.empty, Set.empty, (_, localName) => identifier.combine(localName))
}

def mockWorkflowDefinition(name: String) = {
WorkflowDefinition(name, Graph(Set.empty), Map.empty, Map.empty)
WorkflowDefinition(name, Graph(Set.empty), Map.empty, Map.empty, None)
}

def mockTaskDefinition(name: String) = {
CallableTaskDefinition(name, Function.const(List.empty.validNel), RuntimeAttributes(Map.empty),
Map.empty, Map.empty, List.empty, List.empty, Set.empty, Map.empty)
}

def mockOutputPort(name: String, womType: WomType = WomStringType): OutputPort = {
GraphNodeOutputPort(WomIdentifier(name, name), womType, null)
}

def mockOutputPort(outputDefinition: OutputDefinition): OutputPort = {
GraphNodeOutputPort(WomIdentifier(outputDefinition.name, outputDefinition.name), outputDefinition.womType, null)
}

def mockOutputExpectations(outputs: Map[String, WomValue]): CallOutputs = {
CallOutputs(outputs.map {
case (key, value) => WomMocks.mockOutputPort(key, value.womType) -> value
Expand Down
5 changes: 4 additions & 1 deletion cwl/src/main/scala/cwl/Workflow.scala
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import cwl.Workflow.{WorkflowInputParameter, WorkflowOutputParameter}
import cwl.command.ParentName
import shapeless._
import shapeless.syntax.singleton._
import wom.SourceFileLocation
import wom.callable.WorkflowDefinition
import wom.executable.Executable
import wom.expression.{IoFunctionSet, ValueAsAnExpression}
Expand Down Expand Up @@ -189,13 +190,15 @@ case class Workflow private(
val name: String = Paths.get(id).getFileName.toString
val meta: Map[String, String] = Map.empty
val paramMeta: Map[String, String] = Map.empty
val lexInfo : Option[SourceFileLocation] = None

womGraph(name, validator, expressionLib).map(graph =>
WorkflowDefinition(
name,
graph,
meta,
paramMeta
paramMeta,
lexInfo
)
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
package wdl.model.draft3.elements
import wom.SourceFileLocation

trait LanguageElement
trait LanguageElement {
val srcLoc : Option[SourceFileLocation] = None
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package wdl.model.draft3.elements
import wom.SourceFileLocation

final case class WorkflowDefinitionElement(name: String,
inputsSection: Option[InputsSectionElement],
graphElements: Set[WorkflowGraphElement],
outputsSection: Option[OutputsSectionElement],
metaSection: Option[MetaSectionElement],
parameterMetaSection: Option[ParameterMetaSectionElement]) extends FileBodyElement
parameterMetaSection: Option[ParameterMetaSectionElement],
override val srcLoc : Option[SourceFileLocation]) extends FileBodyElement
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import wom.types._
import wdl.model.draft3.elements.CommandPartElement.{PlaceholderCommandPartElement, StringCommandPartElement}
import wdl.model.draft3.elements._
import wdl.model.draft3.elements.ExpressionElement._
import wom.SourceFileLocation
import wom.values.WomInteger

class WdlFileToWdlomSpec extends FlatSpec with Matchers {
Expand Down Expand Up @@ -65,7 +66,9 @@ object WdlFileToWdlomSpec {
),
outputsSection = None,
metaSection = None,
parameterMetaSection = None)),
parameterMetaSection = None,
srcLoc = Some(SourceFileLocation(3)))
),
tasks = Vector(
TaskDefinitionElement(
name = "no_inputs",
Expand All @@ -92,7 +95,9 @@ object WdlFileToWdlomSpec {
outputsSection = Some(OutputsSectionElement(Vector(
OutputDeclarationElement(PrimitiveTypeElement(WomIntegerType), "out", IdentifierMemberAccess("in_n_out", "out", List.empty))))),
metaSection = None,
parameterMetaSection = None)),
parameterMetaSection = None,
srcLoc = Some(SourceFileLocation(14)))
),
tasks = Vector(TaskDefinitionElement(
name = "in_n_out",
inputsSection = Some(InputsSectionElement(Vector(
Expand Down Expand Up @@ -124,7 +129,9 @@ object WdlFileToWdlomSpec {
),
outputsSection = None,
metaSection = None,
parameterMetaSection = None)),
parameterMetaSection = None,
srcLoc = Some(SourceFileLocation(3)))
),
tasks = Vector(TaskDefinitionElement(
name = "foo",
inputsSection = Some(InputsSectionElement(Vector(
Expand Down Expand Up @@ -188,7 +195,8 @@ object WdlFileToWdlomSpec {
),
outputsSection = None,
metaSection = None,
parameterMetaSection = None
parameterMetaSection = None,
srcLoc = Some(SourceFileLocation(3))
)),
tasks = Vector.empty)
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,27 @@
package wdl.transforms.draft2.wdlom2wom

import common.validation.ErrorOr.ErrorOr
import wdl.draft2.model.WdlWorkflow
import wdl.draft2.model.{Scope, WdlWorkflow}
import wdl.draft2.model.{AstTools, Scope, WdlWorkflow}
import wdl.draft2.parser.WdlParser.Terminal
import wom.callable.WorkflowDefinition
import wom.transforms.WomWorkflowDefinitionMaker
import wom.transforms.WomGraphMaker.ops._
import wom.SourceFileLocation

object WdlDraft2WomWorkflowDefinitionMaker extends WomWorkflowDefinitionMaker[WdlWorkflow] {
override def toWomWorkflowDefinition(wdlWorkflow: WdlWorkflow, isASubworkflow: Boolean): ErrorOr[WorkflowDefinition] = {
// NB: We don't allow "OuterGraphInputNode"s when building this (the Map is empty), so preserveScatterForExternalLookups isn't ever actually used.

// Figure out the start line of the workflow in the source file
val t: Terminal = AstTools.findTerminals(wdlWorkflow.ast).head

(wdlWorkflow: Scope).toWomGraph(Set.empty, Map.empty, preserveIndexForOuterLookups = true, isASubworkflow: Boolean) map { wg =>
WorkflowDefinition(
wdlWorkflow.fullyQualifiedName,
wg,
wdlWorkflow.meta,
wdlWorkflow.parameterMeta)
wdlWorkflow.parameterMeta,
Some(SourceFileLocation(t.getLine)))
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
version 1.0






workflow Test {

call Echo as echo
Expand Down
2 changes: 2 additions & 0 deletions wdl/transforms/draft3/src/test/cases/simple_conditional.wdl
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
version 1.0



workflow simple_conditional {
Boolean bool = true

Expand Down
Loading

0 comments on commit 077eb85

Please sign in to comment.