func bodyCandidates()

in internal/langserver/handlers/tfschema/body_candidates.go [17:41]


func bodyCandidates(data []byte, filename string, block *hclsyntax.Block, attribute *hclsyntax.Attribute, pos hcl.Pos, property *Property) []lsp.CompletionItem {
	if attribute.Expr != nil {
		if _, ok := attribute.Expr.(*hclsyntax.LiteralValueExpr); ok && parser.ToLiteral(attribute.Expr) == nil {
			if property != nil {
				return property.ValueCandidatesFunc(nil, editRangeFromExprRange(attribute.Expr, pos))
			}
		}
	}

	bodyDef := BodyDefinitionFromBlock(block)
	if bodyDef == nil {
		return nil
	}

	hclNode := parser.JsonEncodeExpressionToHclNode(data, attribute.Expr)
	if hclNode == nil {
		tokens, _ := hclsyntax.LexExpression(data[attribute.Expr.Range().Start.Byte:attribute.Expr.Range().End.Byte], filename, attribute.Expr.Range().Start)
		hclNode = parser.BuildHclNode(tokens)
	}
	if hclNode == nil {
		return nil
	}

	return buildCandidates(hclNode, filename, pos, bodyDef)
}