Skip to content

Reflect nullable variables in Terraform 1.1.0+ #894

Open
@radeksimko

Description

@radeksimko

Background

See hashicorp/terraform#29832 (landed in 1.1.0)

Proposal

hcl-lang

terraform-schema

  • Add nullable as a valid attribute within variable for the relevant Terraform versions
  • Ensure that we provide null as default = HERE in completion (probably via schema.LiteralValue), in addition to whatever we inferred from type
  • Ensure that module input completion also provides null as option

terraform-ls

  • Ensure that null is generally recognized as semantic token type
    func (te *TokenEncoder) resolveTokenType(token lang.SemanticToken) (semtok.TokenType, bool) {
    switch token.Type {
    case lang.TokenBlockType:
    return te.firstSupportedTokenType(
    semtok.TokenType(lang.TokenBlockType), semtok.TokenTypeType)
    case lang.TokenBlockLabel:
    return te.firstSupportedTokenType(
    semtok.TokenType(lang.TokenBlockLabel), semtok.TokenTypeEnumMember)
    case lang.TokenAttrName:
    return te.firstSupportedTokenType(
    semtok.TokenType(lang.TokenAttrName), semtok.TokenTypeProperty)
    case lang.TokenBool:
    return te.firstSupportedTokenType(
    semtok.TokenType(lang.TokenBool), semtok.TokenTypeKeyword)
    case lang.TokenNumber:
    return te.firstSupportedTokenType(
    semtok.TokenType(lang.TokenNumber), semtok.TokenTypeNumber)
    case lang.TokenString:
    return te.firstSupportedTokenType(
    semtok.TokenType(lang.TokenString), semtok.TokenTypeString)
    case lang.TokenObjectKey:
    return te.firstSupportedTokenType(
    semtok.TokenType(lang.TokenObjectKey), semtok.TokenTypeParameter)
    case lang.TokenMapKey:
    return te.firstSupportedTokenType(
    semtok.TokenType(lang.TokenMapKey), semtok.TokenTypeParameter)
    case lang.TokenKeyword:
    return te.firstSupportedTokenType(
    semtok.TokenType(lang.TokenKeyword), semtok.TokenTypeVariable)
    case lang.TokenTraversalStep:
    return te.firstSupportedTokenType(
    semtok.TokenType(lang.TokenTraversalStep), semtok.TokenTypeVariable)
    case lang.TokenTypeCapsule:
    return te.firstSupportedTokenType(
    semtok.TokenType(lang.TokenTypeCapsule), semtok.TokenTypeFunction)
    case lang.TokenTypePrimitive:
    return te.firstSupportedTokenType(
    semtok.TokenType(lang.TokenTypePrimitive), semtok.TokenTypeKeyword)
    }
    return "", false
    }

Implementation Notes

This snippet demonstrates how HCL parser parses null: https://go.dev/play/p/GfwVLgpCsWe

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestlanguage-parityEfforts to keep up with additions/changes to Terraform as a language

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions