Open
Description
This is just a spitball idea to contribute feedback if it is maybe feasible, I might consider attempting a PR
Problem
Often when writing a pipeline you may pipe an incompatible type, and you won't find out until runtime.
Proposed solution
If the output type of a function can be explicitly determined by:
- Use the .OUTPUT comment based help section to define the output type of a function
- Take all explicit return keywords that explicitly cast to a type e.g.
return [MyType]@{}
or can be simply derived from a typed variable e.g.$f = [MyType]::new();return $f
And the function being called either to or from meets the following criteria:
- Has strictly typed non-primitive parameter or ValueFromPipeline
Then we should be able to safely issue a warning or error stating something like "MyFunction expected [MyType] but is receiving [WrongType] via the pipeline" as a static analysis.
#Issues
- Easily castable types like string we have to exclude, they will basically always match
- Probably should support/detect explicit casts or interfaces
Prior Art
How JSDoc can be used to test for type safety in normally-untyped javascript.