This is primarily a refactor of SmithyProject to store raw model text in memory. Previously, we only stored file objects for the model, and gave those to the model assembler. There are two issues with this approach:
While a file is being editted, the source of truth for the file contents should be what the client sends back to the server in the didChange event, not whats actually in the file. To get around this, we've been using a temporary file that stores the contents of the file being editted, and giving that to the model assembler. When publishing diagnostics however, we needed to re-map the file location from the temporary file to the actual file on disk.
The language server needs literal text to provide some of its features, meaning we need to read in files frequently.
These changes update SmithyProject to store a map of URI -> String for each of the model files in the loaded model by walking the shapes and collecting all unique file locations. SmithyTDS is updated to use that when it needs to have literal text of the model for formatting, version diagnostics, and other features.
Various other updates were also made:
Added a list of errors to SmithyProject that store any errors that occur while loading the project. Previously, any "load" methods would return Either<Exception, SmithyProject>, which isn't very ergonomic to use. These errors represent failures in the project loading, not validation errors from loading the model.
SmithyProject's loading methods are reworked to provide 2 static methods: one for loading the project in a directory, one for loading from specific smithy-build config, and 2 instance methods: one for regular reloading, one for reloading with specific file changes. Previously, we had to manage the loading of the temporary file (or its removal). This also moves all the loading logic into SmithyProject.
This is primarily a refactor of SmithyProject to store raw model text in memory. Previously, we only stored file objects for the model, and gave those to the model assembler. There are two issues with this approach:
didChange
event, not whats actually in the file. To get around this, we've been using a temporary file that stores the contents of the file being editted, and giving that to the model assembler. When publishing diagnostics however, we needed to re-map the file location from the temporary file to the actual file on disk.These changes update SmithyProject to store a map of URI -> String for each of the model files in the loaded model by walking the shapes and collecting all unique file locations. SmithyTDS is updated to use that when it needs to have literal text of the model for formatting, version diagnostics, and other features.
Various other updates were also made:
Either<Exception, SmithyProject>
, which isn't very ergonomic to use. These errors represent failures in the project loading, not validation errors from loading the model.getCompletions
from SmithyProject.The following test updates were made:
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.