earlydecoder/schema: Infer schema for local modules #126
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Depends on #125
Collecting reference origins in the context of a
module
block expects the underlying module files to be parsed and metadata to be also available, such that we can use it to construct the dependent schema for inputs.When walking through the hierarchy we practically cannot guarantee that one module will be indexed before another and re-indexing modules seems wasteful to provide such a guarantee. Prior to hashicorp/terraform-ls#997 we were just mostly lucky this didn't come up.
Therefore this PR proposes adding a "fallback" blind schema for any dependent module, where we don't try to be accurate with types, but essentially infer the schema from the raw configuration. Given that we always re-build the schema prior to completion/hover/etc., we can still provide more accurate schema if it's available.
The only downside is slightly less detailed origins after the collection which won't be re-collected unless something else triggers the re-collection. We could theoretically gather the type for each input as well, but I'm not entirely sure it's worth the effort/CPU given that we'll gather that later (again) anyway.