package hclsyntax

// Generated by expression_vars_get.go. DO NOT EDIT.
// Run 'go generate' on this package to update the set of functions here.

import (
	"github.com/hashicorp/hcl/v2"
)

func (e *AnonSymbolExpr) Variables() []hcl.Traversal {
	return Variables(e)
}

func (e *BinaryOpExpr) Variables() []hcl.Traversal {
	return Variables(e)
}

func (e *ConditionalExpr) Variables() []hcl.Traversal {
	return Variables(e)
}

func (e *ForExpr) Variables() []hcl.Traversal {
	return Variables(e)
}

func (e *FunctionCallExpr) Variables() []hcl.Traversal {
	return Variables(e)
}

func (e *IndexExpr) Variables() []hcl.Traversal {
	return Variables(e)
}

func (e *LiteralValueExpr) Variables() []hcl.Traversal {
	return Variables(e)
}

func (e *ObjectConsExpr) Variables() []hcl.Traversal {
	return Variables(e)
}

func (e *ObjectConsKeyExpr) Variables() []hcl.Traversal {
	return Variables(e)
}

func (e *RelativeTraversalExpr) Variables() []hcl.Traversal {
	return Variables(e)
}

func (e *ScopeTraversalExpr) Variables() []hcl.Traversal {
	return Variables(e)
}

func (e *SplatExpr) Variables() []hcl.Traversal {
	return Variables(e)
}

func (e *TemplateExpr) Variables() []hcl.Traversal {
	return Variables(e)
}

func (e *TemplateJoinExpr) Variables() []hcl.Traversal {
	return Variables(e)
}

func (e *TemplateWrapExpr) Variables() []hcl.Traversal {
	return Variables(e)
}

func (e *TupleConsExpr) Variables() []hcl.Traversal {
	return Variables(e)
}

func (e *UnaryOpExpr) Variables() []hcl.Traversal {
	return Variables(e)
}
