smithy-lang / smithy

Smithy is a protocol-agnostic interface definition language and set of tools for generating clients, servers, and documentation for any programming language.
https://smithy.io
Apache License 2.0
1.78k stars 211 forks source link

Smithy-cli: ability to resolve fully a given shape by id #2385

Open ghostbuster91 opened 1 month ago

ghostbuster91 commented 1 month ago

Hi,

This is a feature request.

Use case

Sometimes shapes created in smithy are quite complex and it is not obvious at first glance how given shape looks like in the end without navigating to every mixin in the hierarchy.

Proposed solution

It would be if smithy-cli could resolve a given shape given its ID. This could be similar to what smithy-cli ast --flatten is doing but limited to only given shape id.

Another way to approach this would be to extend select command with an ability to return entire shapes not just IDs.

At first, this could return the json representation of the smithy model but ideally there would be an option to present it in a more user-friendly way. E.g. as a smithy shape.

Example: given:

@mixin
structure MyTrait {
   name: String
}

structure MyStruct with [MyTrait] {
    age: Int
}

would print:

structure MyStruct {
    name: String
    age: Int
}
JordonPhillips commented 1 week ago

Having Smithy CLI be able to print out the whole shape in IDL format would be really cool. It certainly would have been useful in some of my investigations of very large models.

We already have a --show param to select. We can always add more values to it. Like smithy select --show shape / smithy select --show flattened-shape. It might be a bit much to have multiple permutations if we want to do idl and ast though, so maybe a second format parameter would be needed.

Something you can do now is compose the ast command with jq or similar tools. It's a tad clunky since it writes out to a file though. You have to sandwich cat or something in between. It'd also be nice for ast to be able to just write to stdout instead so it composes better with tools like this