Skip to content

Commit 3961b8e

Browse files
CopilotCopilot
andcommitted
Remove always-on LanguageFeature.NameOf flag (#20153)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent e631ed7 commit 3961b8e

22 files changed

Lines changed: 36 additions & 168 deletions

‎src/Compiler/Checking/CheckPatterns.fs‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -628,8 +628,7 @@ and TcPatLongIdentNewDef warnOnUpperForId warnOnUpper (cenv: cenv) env ad valRep
628628
| [] ->
629629
TcPat warnOnUpperForId cenv env valReprInfo vFlags patEnv ty (mkSynPatVar vis id)
630630

631-
| [arg]
632-
when g.langVersion.SupportsFeature LanguageFeature.NameOf && IsNameOf cenv env ad m id ->
631+
| [arg] when IsNameOf cenv env ad m id ->
633632
match TcNameOfExpr cenv env tpenv (ConvSynPatToSynExpr arg) with
634633
| Expr.Const(Const.String s, m, _) ->
635634
// Record the resolution of the `nameof` usage so that we can classify it correctly later.

‎src/Compiler/Checking/Expressions/CheckExpressions.fs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8990,7 +8990,7 @@ and TcApplicationThen (cenv: cenv) (overallTy: OverallTy) env tpenv mExprAndArg
89908990
checkHighPrecedenceFunctionApplicationToList [synArg] atomicFlag mExprAndArg
89918991

89928992
match leftExpr with
8993-
| ApplicableExpr(expr=NameOfExpr g _) when g.langVersion.SupportsFeature LanguageFeature.NameOf ->
8993+
| ApplicableExpr(expr=NameOfExpr g _) ->
89948994
let replacementExpr = TcNameOfExpr cenv env tpenv synArg
89958995
TcDelayed cenv overallTy env tpenv mExprAndArg (ApplicableExpr(cenv, replacementExpr, true, None)) g.string_ty ExprAtomicFlag.Atomic delayed
89968996
| _ ->
@@ -9726,7 +9726,7 @@ and TcValueItemThen cenv overallTy env vref tpenv mItem mItemIdent afterResoluti
97269726
// - it isn't a VSlotDirectCall (uses of base values do not take type arguments
97279727
// Allow `nameof<'T>` for a generic parameter
97289728
match vref with
9729-
| _ when isNameOfValRef g vref && g.langVersion.SupportsFeature LanguageFeature.NameOf ->
9729+
| _ when isNameOfValRef g vref ->
97309730
// Record the resolution of the `nameof` usage so that we can classify it correctly later.
97319731
do
97329732
match afterResolution with

‎src/Compiler/Checking/NameResolution.fs‎

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ type NameResolver(g: TcGlobals,
6060
member nr.g = g
6161
member nr.amap = amap
6262
member nr.InfoReader = infoReader
63-
member nr.languageSupportsNameOf = g.langVersion.SupportsFeature LanguageFeature.NameOf
6463

6564
//-------------------------------------------------------------------------
6665
// Helpers for unionconstrs and recdfields
@@ -3468,15 +3467,6 @@ let rec ResolveExprLongIdentPrim sink (ncenv: NameResolver) first fullyQualified
34683467

34693468
let lookupKind = LookupKind.Expr LookupIsInstance.No
34703469

3471-
let canSuggestThisItem (item:Item) =
3472-
// All items can be suggested except nameof when it comes from FSharp.Core.dll and the nameof feature is not enabled
3473-
match item with
3474-
| Item.Value v ->
3475-
let isNameOfOperator = valRefEq ncenv.g ncenv.g.nameof_vref v
3476-
if isNameOfOperator && not (ncenv.g.langVersion.SupportsFeature LanguageFeature.NameOf) then false
3477-
else true
3478-
| _ -> true
3479-
34803470
if first && id.idText = MangledGlobalName then
34813471
match rest with
34823472
| [] ->
@@ -3515,15 +3505,7 @@ let rec ResolveExprLongIdentPrim sink (ncenv: NameResolver) first fullyQualified
35153505

35163506
| true, res ->
35173507
let fresh = ResolveUnqualifiedItem ncenv nenv m res
3518-
match fresh with
3519-
| Item.Value value ->
3520-
let isNameOfOperator = valRefEq ncenv.g ncenv.g.nameof_vref value
3521-
if isNameOfOperator && not ncenv.languageSupportsNameOf then
3522-
// Do not resolve `nameof` if the feature is unsupported, even if it is FSharp.Core
3523-
None
3524-
else
3525-
Some (emptyEnclosingTypeInst, fresh, rest)
3526-
| _ -> Some (emptyEnclosingTypeInst, fresh, rest)
3508+
Some (emptyEnclosingTypeInst, fresh, rest)
35273509
| _ ->
35283510
None
35293511

@@ -3574,8 +3556,7 @@ let rec ResolveExprLongIdentPrim sink (ncenv: NameResolver) first fullyQualified
35743556

35753557
let suggestNamesAndTypes (addToBuffer: string -> unit) =
35763558
for e in nenv.eUnqualifiedItems do
3577-
if canSuggestThisItem e.Value then
3578-
addToBuffer e.Value.DisplayName
3559+
addToBuffer e.Value.DisplayName
35793560

35803561
for e in nenv.TyconsByDemangledNameAndArity fullyQualified do
35813562
if IsEntityAccessible ncenv.amap m ad e.Value then
@@ -3671,8 +3652,7 @@ let rec ResolveExprLongIdentPrim sink (ncenv: NameResolver) first fullyQualified
36713652
addToBuffer tcref.DisplayName
36723653

36733654
for KeyValue(_,item) in nenv.eUnqualifiedItems do
3674-
if canSuggestThisItem item then
3675-
addToBuffer item.DisplayName
3655+
addToBuffer item.DisplayName
36763656

36773657
match innerSearch with
36783658
| Exception (UndefinedName(0, _, id1, suggestionsF)) when equals id.idRange id1.idRange ->
@@ -4739,9 +4719,7 @@ let IsUnionCaseUnseen ad g amap m allowObsolete (ucref: UnionCaseRef) =
47394719

47404720
let ItemIsUnseen ad g amap m allowObsolete item =
47414721
match item with
4742-
| Item.Value x ->
4743-
let isUnseenNameOfOperator = valRefEq g g.nameof_vref x && not (g.langVersion.SupportsFeature LanguageFeature.NameOf)
4744-
isUnseenNameOfOperator || IsValUnseen ad g m allowObsolete x
4722+
| Item.Value x -> IsValUnseen ad g m allowObsolete x
47454723
| Item.UnionCase(x, _) -> IsUnionCaseUnseen ad g amap m allowObsolete x.UnionCaseRef
47464724
| Item.ExnCase x -> IsTyconUnseen ad g amap m allowObsolete x
47474725
| Item.ILField finfo -> not allowObsolete && ILFieldInfoIsUnseen finfo

‎src/Compiler/Checking/NameResolution.fsi‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ type NameResolver =
3030

3131
member g: TcGlobals
3232

33-
member languageSupportsNameOf: bool
34-
3533
/// Get the active pattern elements defined in a module, if any. Cache in the slot in the module type.
3634
val ActivePatternElemsOfModuleOrNamespace: g: TcGlobals -> ModuleOrNamespaceRef -> NameMap<ActivePatternElemRef>
3735

‎src/Compiler/FSComp.txt‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1559,7 +1559,6 @@ optsAlwaysInline,"Always inline 'inline' functions"
15591559
nativeResourceFormatError,"Stream does not begin with a null resource and is not in '.RES' format."
15601560
nativeResourceHeaderMalformed,"Resource header beginning at offset %s is malformed."
15611561
formatDashItem," - %s"
1562-
featureNameOf,"nameof"
15631562
featureDotlessFloat32Literal,"dotless float32 literal"
15641563
featurePackageManagement,"package management"
15651564
featureFromEndSlicing,"from-end slicing"
@@ -1788,7 +1787,7 @@ featurePreprocessorElif,"#elif preprocessor directive"
17881787
featureExtensionConstraintSolutions,"Allow extension members to participate in SRTP constraint resolution"
17891788
featureErrorOnBitwiseOpsOnNonIntegralEnums,"Error when bitwise operators are used on enums whose underlying type is not an integer type (e.g. char)."
17901789
3880,optsLangVersionOutOfSupport,"Language version '%s' is out of support. The last .NET SDK supporting it is available at https://dotnet.microsoft.com/en-us/download/dotnet/%s"
1791-
3881,optsUnrecognizedLanguageFeature,"Unrecognized language feature name: '%s'. Use a valid feature name such as 'NameOf' or 'StringInterpolation'."
1790+
3881,optsUnrecognizedLanguageFeature,"Unrecognized language feature name: '%s'. Use a valid feature name such as 'StringInterpolation' or 'FromEndSlicing'."
17921791
3882,lexHashElifMustBeFirst,"#elif directive must appear as the first non-whitespace character on a line"
17931792
3883,lexHashElifMustHaveIdent,"#elif directive should be immediately followed by an identifier"
17941793
3884,tcFunctionValueUsedAsInterpolatedStringArg,"This expression is a function value. When used in an interpolated string it will be formatted using its 'ToString' method, which is likely not the intended behavior. Consider applying the function to its arguments."

‎src/Compiler/Facilities/LanguageFeatures.fs‎

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ module internal FSharp.Compiler.Features
1616

1717
[<RequireQualifiedAccess>]
1818
type LanguageFeature =
19-
| NameOf
2019
| DotlessFloat32Literal
2120
| PackageManagement
2221
| FromEndSlicing
@@ -142,7 +141,6 @@ type LanguageVersion(versionText, ?disabledFeaturesArray: LanguageFeature array)
142141
LanguageFeature.DefaultInterfaceMemberConsumption, languageVersion50
143142
LanguageFeature.PackageManagement, languageVersion50
144143
LanguageFeature.WitnessPassing, languageVersion50
145-
LanguageFeature.NameOf, languageVersion50
146144
LanguageFeature.StringInterpolation, languageVersion50
147145

148146
// F# 6.0
@@ -328,7 +326,6 @@ type LanguageVersion(versionText, ?disabledFeaturesArray: LanguageFeature array)
328326
/// Get a string name for the given feature.
329327
static member GetFeatureString feature =
330328
match feature with
331-
| LanguageFeature.NameOf -> FSComp.SR.featureNameOf ()
332329
| LanguageFeature.DotlessFloat32Literal -> FSComp.SR.featureDotlessFloat32Literal ()
333330
| LanguageFeature.PackageManagement -> FSComp.SR.featurePackageManagement ()
334331
| LanguageFeature.FromEndSlicing -> FSComp.SR.featureFromEndSlicing ()

‎src/Compiler/Facilities/LanguageFeatures.fsi‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ module internal FSharp.Compiler.Features
66
/// LanguageFeature enumeration
77
[<RequireQualifiedAccess>]
88
type LanguageFeature =
9-
| NameOf
109
| DotlessFloat32Literal
1110
| PackageManagement
1211
| FromEndSlicing

‎src/Compiler/TypedTree/TypedTreeOps.Transforms.fs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2351,7 +2351,7 @@ module internal ConstantEvaluation =
23512351
| UncheckedDefaultOfExpr g _
23522352
| SizeOfExpr g _
23532353
| TypeOfExpr g _ -> true
2354-
| NameOfExpr g _ when g.langVersion.SupportsFeature LanguageFeature.NameOf -> true
2354+
| NameOfExpr g _ -> true
23552355
// All others are not simple constant expressions
23562356
| _ -> false
23572357

‎src/Compiler/xlf/FSComp.txt.cs.xlf‎

Lines changed: 2 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎src/Compiler/xlf/FSComp.txt.de.xlf‎

Lines changed: 2 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)