microsoft / microsoft/typespec

Allow augment decorators to target less specifically

Open
#9,347 1 comment 0 reactions 0 assignees View on GitHub
compiler:core design:needed triaged:core
Dominant language
Java
Stars
5.9k
Forks
394
Avg merge
1d 23h
Merged PRs (30d)
104

Description

### Clear and concise description of the problem

I have encountered a scenario where I would like to target an augment decorator to all model properties within a namespace or model.

I would like to have multiple entry points that include modifications across a namespace without needing to maintain model property lists in addition to the models themselves.

Presently, if I have a model with a few fields:

```
model foo {
@visibility(Lifecycle.Read)
field1: string

@visibility(Lifecycle.Read)
field2: string

@visibility(Lifecycle.Read)
field2: string
}
```

and I want to have a second entrypoint where the visibility decorator needs to be expanded, I am required to specifically target each field.

```
@@visibility(foo.field1, Lifecycle.Read, Lifecycle.Create, Lifecycle.Update)
@@visibility(foo.field2, Lifecycle.Read, Lifecycle.Create, Lifecycle.Update)
@@visibility(foo.field3, Lifecycle.Read, Lifecycle.Create, Lifecycle.Update)
```

When this becomes a larger namespace, the list of augment decorators becomes a maintenance challenge in conjunction with maintenance of the models.

The suggestion would be to allow for either namespace, model, or wildcard pattern matching for fields to apply the decorator. E.g., any of the following as thought starters:

```
@@visibility(, Lifecycle.Read, Lifecycle.Create, Lifecycle.Update)

@@visibility(, Lifecycle.Read, Lifecycle.Create, Lifecycle.Update)

@@visibility("/* regex pattern */", Lifecycle.Read, Lifecycle.Create, Lifecycle.Update)
```

### Checklist

- [x] Follow our [Code of Conduct](https://github.com/microsoft/typespec/blob/main/CODE_OF_CONDUCT.md)
- [x] Read the [docs](https://typespec.io/docs/).
- [x] Check that there isn't already an issue that request the same feature to avoid creating a duplicate.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.