I propose we Enforce the correct use of AttributeTargets in the language and write a specification to document it.
The existing way of approaching this problem in F# is
In most cases just use interchangeably custom attributes with AttributeTargets and the compiler will not raise any errors.
open System
[<AttributeUsage(AttributeTargets.Method)>]
type MethodOnlyAttribute() =
inherit System.Attribute()
[<MethodOnly>]
let someFunction () = "abc"
[<MethodOnly>] // Should error with: This attribute is not valid for use on this language element
let someValue = "abc"
[<AttributeUsage(AttributeTargets.Field)>]
type FieldOnlyAttribute() =
inherit System.Attribute()
[<FieldOnly>] // Should error with: This attribute is not valid for use on this language element
let someFunction () = "abc"
[<FieldOnly>]
let someValue = "abc"
Note: The above snippet is just one of the many issues with AttributeTargets.
Pros and Cons
The advantages of making this adjustment to F# are
The compiler will raise errors when using an incorrect AttributeTargets
We will have a language specification about where and how this AttributeTargets are meant to used.
The disadvantages of making this adjustment to F# are
Any existing custom defined attribute that uses and incorrect AttributeTarget will get an error.
Extra information
**Estimated cost (XS, S, M, L, XL, XXL): M
Related suggestions: (put links to related suggestions here)
Affidavit (please submit!)
Please tick these items by placing a cross in the box:
[x] This is not a question (e.g. like one you might ask on StackOverflow) and I have searched StackOverflow for discussions of this issue
[x] This is a language change and not purely a tooling change (e.g. compiler bug, editor support, warning/error messages, new warning, non-breaking optimisation) belonging to the compiler and tooling repository
[x] This is not something which has obviously "already been decided" in previous versions of F#. If you're questioning a fundamental design decision that has obviously already been taken (e.g. "Make F# untyped") then please don't submit it
[ ] This is not a breaking change to the F# language design
[x] I or my company would be willing to help implement and/or test this
For Readers
If you would like to see this issue implemented, please click the :+1: emoji on this issue. These counts are used to generally order the suggestions by engagement.
I propose we Enforce the correct use of
AttributeTargets
in the language and write a specification to document it.The existing way of approaching this problem in F# is
In most cases just use interchangeably custom attributes with
AttributeTargets
and the compiler will not raise any errors.Note: The above snippet is just one of the many issues with
AttributeTargets
.Pros and Cons
The advantages of making this adjustment to F# are
AttributeTargets
AttributeTargets
are meant to used.The disadvantages of making this adjustment to F# are
AttributeTarget
will get an error.Extra information
**Estimated cost (XS, S, M, L, XL, XXL): M
Related suggestions: (put links to related suggestions here)
Affidavit (please submit!)
Please tick these items by placing a cross in the box:
Please tick all that apply:
For Readers
If you would like to see this issue implemented, please click the :+1: emoji on this issue. These counts are used to generally order the suggestions by engagement.