func (e removePipelineRetain) Apply(ast *syntax.Ast) (int, error) {
	count := 0
	for _, target := range ast.Pipelines {
		if target.GetId() == e.Pipeline.Id &&
			target.File().FullPath == e.Pipeline.File().FullPath {
			e.remove(target)
			count++
		}
	}
	return count, nil
}
Apply removes an input parameter from a callable in the given AST object.

The first return value indicates the number places where a change was
made.

The AST is not required to have been compiled.
package refactoring
import (
	"strings"
	"github.com/martian-lang/martian/martian/syntax"
)
func RemoveOutputParam(callable syntax.Callable, param string, asts []*syntax.Ast) (Edit, error) {
	match := matchCallable(callable)
	return removeOutputParam(match, callable, param, asts, nil)
}
type (
	removePipelineRetain struct {
		Pipeline *syntax.Pipeline
		Ref      *syntax.RefExp
	}
	removeStageOutput struct {
		Stage *syntax.Stage
		Param string
	}
	removeMod struct {
		Pipeline *syntax.Pipeline
		Call     *syntax.CallStm
		Ref      *syntax.RefExp
	}
	editBinding struct {
		Pipeline *syntax.Pipeline
		Call     *syntax.CallStm
		Binding  *syntax.BindStm
		Mods     bool
		Exp      syntax.Exp
	}
)