• Martin Atkins's avatar
    tfdiags: Contextual diagnostics · f17a582d
    Martin Atkins authored
    The usual usage of diagnostics requires us to pass around source location
    information to everywhere that might generate a diagnostic, and that is
    always the best way to get the most precise diagnostic source locations.
    
    However, it's impractical to require source location information to be
    retained in every Terraform subsystem, and so this new idea of "contextual
    diagnostics" allows us to separate the generation of a diagnostic from
    the resolution of its source location, instead resolving the location
    information as a post-processing step once the call stack unwinds to a
    place where there is enough context to find it.
    
    This is necessarily a less precise approach than reading the source ranges
    directly from the configuration AST, but gives us an alternative to no
    diagnostics at all in portions of Terraform where full location
    information is not available.
    
    This is a best-effort sort of thing which will get as precise as it can
    but may return a range in a parent block if the precise location of a
    particular attribute cannot be found. Diagnostics that rely on this
    mechanism should include some other contextual information in the detail
    message to make up for any loss of precision that results.
    f17a582d