Skip to content

Commit

Permalink
Tag items in tooltips consistenly with respect to document classifica…
Browse files Browse the repository at this point in the history
…tion (such colors, much wow) (dotnet#9563)
  • Loading branch information
cartermp authored and nosami committed Feb 22, 2021
1 parent f86ff30 commit 30592af
Show file tree
Hide file tree
Showing 35 changed files with 1,794 additions and 3,305 deletions.
942 changes: 349 additions & 593 deletions src/fsharp/NicePrint.fs

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions src/fsharp/TcGlobals.fs
Expand Up @@ -1099,6 +1099,7 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d

member val system_Array_tcref = findSysTyconRef sys "Array"
member val system_Object_tcref = findSysTyconRef sys "Object"
member val system_Value_tcref = findSysTyconRef sys "ValueType"
member val system_Void_tcref = findSysTyconRef sys "Void"
member val system_IndexOutOfRangeException_tcref = findSysTyconRef sys "IndexOutOfRangeException"
member val system_Nullable_tcref = v_nullable_tcr
Expand Down
11 changes: 10 additions & 1 deletion src/fsharp/TypedTreeOps.fs
Expand Up @@ -1665,6 +1665,7 @@ let isArrayTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref, _) -> isA
let isArray1DTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref, _) -> tyconRefEq g tcref g.il_arr_tcr_map.[0] | _ -> false)
let isUnitTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref, _) -> tyconRefEq g g.unit_tcr_canon tcref | _ -> false)
let isObjTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref, _) -> tyconRefEq g g.system_Object_tcref tcref | _ -> false)
let isValueTypeTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref, _) -> tyconRefEq g g.system_Value_tcref tcref | _ -> false)
let isVoidTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref, _) -> tyconRefEq g g.system_Void_tcref tcref | _ -> false)
let isILAppTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref, _) -> tcref.IsILTycon | _ -> false)
let isNativePtrTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref, _) -> tyconRefEq g g.nativeptr_tcr tcref | _ -> false)
Expand Down Expand Up @@ -1825,6 +1826,10 @@ let isRefTy g ty =
(isAnonRecdTy g ty && not (isStructAnonRecdTy g ty))
)

let isForallFunctionTy g ty =
let _, tau = tryDestForallTy g ty
isFunTy g tau

// ECMA C# LANGUAGE SPECIFICATION, 27.2
// An unmanaged-type is any type that isn't a reference-type, a type-parameter, or a generic struct-type and
// contains no fields whose type is not an unmanaged-type. In other words, an unmanaged-type is one of the
Expand Down Expand Up @@ -2745,6 +2750,8 @@ type DisplayEnv =
showConstraintTyparAnnotations: bool
abbreviateAdditionalConstraints: bool
showTyparDefaultConstraints: bool
shrinkOverloads: bool
printVerboseSignatures : bool
g: TcGlobals
contextAccessibility: Accessibility
generatedValueLayout : (Val -> layout option) }
Expand Down Expand Up @@ -2776,6 +2783,8 @@ type DisplayEnv =
showTyparDefaultConstraints = false
shortConstraints = false
useColonForReturnType = false
shrinkOverloads = true
printVerboseSignatures = false
g = tcGlobals
contextAccessibility = taccessPublic
generatedValueLayout = (fun _ -> None) }
Expand Down Expand Up @@ -2844,7 +2853,7 @@ let tagEntityRefName (xref: EntityRef) name =
elif xref.IsFSharpDelegateTycon then tagDelegate name
elif xref.IsILEnumTycon || xref.IsFSharpEnumTycon then tagEnum name
elif xref.IsStructOrEnumTycon then tagStruct name
elif xref.IsFSharpInterfaceTycon then tagInterface name
elif isInterfaceTyconRef xref then tagInterface name
elif xref.IsUnionTycon then tagUnion name
elif xref.IsRecordTycon then tagRecord name
else tagClass name
Expand Down
8 changes: 8 additions & 0 deletions src/fsharp/TypedTreeOps.fsi
Expand Up @@ -979,6 +979,8 @@ type DisplayEnv =
showConstraintTyparAnnotations:bool
abbreviateAdditionalConstraints: bool
showTyparDefaultConstraints: bool
shrinkOverloads: bool
printVerboseSignatures : bool
g: TcGlobals
contextAccessibility: Accessibility
generatedValueLayout:(Val -> layout option) }
Expand Down Expand Up @@ -1506,6 +1508,9 @@ val isUnitTy : TcGlobals -> TType -> bool
/// Determine if a type is the System.Object type
val isObjTy : TcGlobals -> TType -> bool

/// Determine if a type is the System.ValueType type
val isValueTypeTy : TcGlobals -> TType -> bool

/// Determine if a type is the System.Void type
val isVoidTy : TcGlobals -> TType -> bool

Expand All @@ -1527,6 +1532,9 @@ val isInterfaceTy : TcGlobals -> TType -> bool
/// Determine if a type is a FSharpRef type
val isRefTy : TcGlobals -> TType -> bool

/// Determine if a type is a function (including generic). Not the same as isFunTy.
val isForallFunctionTy : TcGlobals -> TType -> bool

/// Determine if a type is a sealed type
val isSealedTy : TcGlobals -> TType -> bool

Expand Down
2 changes: 1 addition & 1 deletion src/fsharp/fsc.fs
Expand Up @@ -333,7 +333,7 @@ module InterfaceFileWriter =
for (TImplFile (_, _, mexpr, _, _, _)) in declaredImpls do
let denv = BuildInitialDisplayEnvForSigFileGeneration tcGlobals
writeViaBuffer os (fun os s -> Printf.bprintf os "%s\n\n" s)
(NicePrint.layoutInferredSigOfModuleExpr true denv infoReader AccessibleFromSomewhere range0 mexpr |> Display.squashTo 80 |> Layout.showL)
(NicePrint.layoutInferredSigOfModuleExpr true { denv with shrinkOverloads = false; printVerboseSignatures = true } infoReader AccessibleFromSomewhere range0 mexpr |> Display.squashTo 80 |> Layout.showL)

if tcConfig.printSignatureFile <> "" then os.Dispose()

Expand Down
1 change: 1 addition & 0 deletions src/fsharp/layout.fs
Expand Up @@ -62,6 +62,7 @@ module TaggedTextOps =
let tagMember = TaggedTextOps.mkTag LayoutTag.Member
let tagModule = TaggedTextOps.tagModule
let tagModuleBinding = TaggedTextOps.tagModuleBinding
let tagFunction = TaggedTextOps.tagFunction
let tagNamespace = TaggedTextOps.tagNamespace
let tagNumericLiteral = TaggedTextOps.tagNumericLiteral
let tagOperator = TaggedTextOps.tagOperator
Expand Down
1 change: 1 addition & 0 deletions src/fsharp/layout.fsi
Expand Up @@ -103,6 +103,7 @@ module TaggedTextOps =
val tagRecordField : (string -> TaggedText)
val tagModule : (string -> TaggedText)
val tagModuleBinding : (string -> TaggedText)
val tagFunction : (string -> TaggedText)
val tagMember : (string -> TaggedText)
val tagNamespace : (string -> TaggedText)
val tagNumericLiteral : (string -> TaggedText)
Expand Down
5 changes: 2 additions & 3 deletions src/fsharp/service/SemanticClassification.fs
Expand Up @@ -16,7 +16,6 @@ open FSharp.Compiler.Range
open FSharp.Compiler.TcGlobals
open FSharp.Compiler.TypedTree
open FSharp.Compiler.TypedTreeOps
open FSharp.Compiler.SourceCodeServices.SymbolHelpers

[<RequireQualifiedAccess>]
type SemanticClassificationType =
Expand Down Expand Up @@ -165,7 +164,7 @@ module TcResolutionsExtensions =
| Item.Value KeywordIntrinsicValue, ItemOccurence.Use, _, _, _, m ->
add m SemanticClassificationType.IntrinsicFunction

| (Item.Value vref), _, _, _, _, m when isFunction g vref.Type ->
| (Item.Value vref), _, _, _, _, m when isForallFunctionTy g vref.Type ->
if isDiscard vref.DisplayName then
add m SemanticClassificationType.Plaintext
elif valRefEq g g.range_op_vref vref || valRefEq g g.range_step_op_vref vref then
Expand Down Expand Up @@ -295,7 +294,7 @@ module TcResolutionsExtensions =
add m SemanticClassificationType.ValueType
elif isRefTupleTy g ty then
add m SemanticClassificationType.ReferenceType
elif isFunction g ty then
elif isForallFunctionTy g ty then
add m SemanticClassificationType.Function
elif isTyparTy g ty then
add m SemanticClassificationType.ValueType
Expand Down
13 changes: 4 additions & 9 deletions src/fsharp/symbols/SymbolHelpers.fs
Expand Up @@ -317,11 +317,6 @@ type CompletionItem =

[<AutoOpen>]
module internal SymbolHelpers =

let isFunction g ty =
let _, tau = tryDestForallTy g ty
isFunTy g tau

let OutputFullName isListItem ppF fnF r =
// Only display full names in quick info, not declaration lists or method lists
if not isListItem then
Expand Down Expand Up @@ -904,7 +899,7 @@ module internal SymbolHelpers =
| Item.AnonRecdField(anon, _argTys, i, _) -> anon.SortedNames.[i]
| Item.RecdField rfinfo -> fullDisplayTextOfRecdFieldRef rfinfo.RecdFieldRef
| Item.NewDef id -> id.idText
| Item.ILField finfo -> bufs (fun os -> NicePrint.outputILTypeRef denv os finfo.ILTypeRef; bprintf os ".%s" finfo.FieldName)
| Item.ILField finfo -> bufs (fun os -> NicePrint.outputType denv os finfo.ApparentEnclosingType; bprintf os ".%s" finfo.FieldName)
| Item.Event einfo -> bufs (fun os -> NicePrint.outputTyconRef denv os einfo.DeclaringTyconRef; bprintf os ".%s" einfo.EventName)
| Item.Property(_, (pinfo :: _)) -> bufs (fun os -> NicePrint.outputTyconRef denv os pinfo.DeclaringTyconRef; bprintf os ".%s" pinfo.PropertyName)
| Item.CustomOperation (customOpName, _, _) -> customOpName
Expand Down Expand Up @@ -1141,7 +1136,7 @@ module internal SymbolHelpers =
| Item.ILField finfo ->
let layout =
wordL (tagText (FSComp.SR.typeInfoField())) ^^
NicePrint.layoutILTypeRef denv finfo.ILTypeRef ^^
NicePrint.layoutType denv finfo.ApparentEnclosingAppType ^^
SepL.dot ^^
wordL (tagField finfo.FieldName) ^^
RightL.colon ^^
Expand Down Expand Up @@ -1528,8 +1523,8 @@ module internal SymbolHelpers =
| Item.NewDef _
| Item.ILField _ -> []
| Item.Event _ -> []
| Item.RecdField rfinfo -> if isFunction g rfinfo.FieldType then [item] else []
| Item.Value v -> if isFunction g v.Type then [item] else []
| Item.RecdField rfinfo -> if isForallFunctionTy g rfinfo.FieldType then [item] else []
| Item.Value v -> if isForallFunctionTy g v.Type then [item] else []
| Item.UnionCase(ucr, _) -> if not ucr.UnionCase.IsNullary then [item] else []
| Item.ExnCase ecr -> if isNil (recdFieldsOfExnDefRef ecr) then [] else [item]
| Item.Property(_, pinfos) ->
Expand Down
5 changes: 1 addition & 4 deletions src/fsharp/symbols/SymbolHelpers.fsi
Expand Up @@ -156,10 +156,7 @@ module public Tooltips =
val Map: f: ('T1 -> 'T2) -> a: Async<'T1> -> Async<'T2>

// Implementation details used by other code in the compiler
module internal SymbolHelpers =

val isFunction : TcGlobals -> TType -> bool

module internal SymbolHelpers =
val ParamNameAndTypesOfUnaryCustomOperation : TcGlobals -> MethInfo -> ParamNameAndType list

val GetXmlDocSigOfEntityRef : InfoReader -> range -> EntityRef -> (string option * string) option
Expand Down
2 changes: 1 addition & 1 deletion src/fsharp/symbols/Symbols.fs
Expand Up @@ -2059,7 +2059,7 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) =

member x.IsValue =
match d with
| V valRef -> not (SymbolHelpers.isFunction cenv.g valRef.Type)
| V valRef -> not (isForallFunctionTy cenv.g valRef.Type)
| _ -> false

override x.Equals(other: obj) =
Expand Down
66 changes: 33 additions & 33 deletions src/fsharp/utils/sformat.fs
Expand Up @@ -51,6 +51,7 @@ type LayoutTag =
| Method
| Member
| ModuleBinding
| Function
| Module
| Namespace
| NumericLiteral
Expand Down Expand Up @@ -124,40 +125,38 @@ module TaggedTextOps =
let toText (tt: TaggedText) = tt.Text

let tagAlias t = mkTag LayoutTag.Alias t
let keywordFunctions = Set ["raise"; "reraise"; "typeof"; "typedefof"; "sizeof"; "nameof"]
let keywordTypes =
let keywordFunctions =
[
"array"
"bigint"
"bool"
"byref"
"byte"
"char"
"decimal"
"double"
"float"
"float32"
"int"
"int8"
"int16"
"int32"
"int64"
"list"
"nativeint"
"obj"
"sbyte"
"seq"
"single"
"string"
"unit"
"uint"
"uint8"
"uint16"
"uint32"
"uint64"
"unativeint"
] |> Set.ofList
let tagClass name = if Set.contains name keywordTypes then mkTag LayoutTag.Keyword name else mkTag LayoutTag.Class name
"raise"
"reraise"
"typeof"
"typedefof"
"sizeof"
"nameof"
"char"
"decimal"
"double"
"float"
"float32"
"int"
"int8"
"int16"
"int32"
"int64"
"sbyte"
"seq" // 'seq x' when 'x' is a string works, strangely enough
"single"
"string"
"unit"
"uint"
"uint8"
"uint16"
"uint32"
"uint64"
"unativeint"
]
|> Set.ofList
let tagClass name = mkTag LayoutTag.Class name
let tagUnionCase t = mkTag LayoutTag.UnionCase t
let tagDelegate t = mkTag LayoutTag.Delegate t
let tagEnum t = mkTag LayoutTag.Enum t
Expand All @@ -172,6 +171,7 @@ module TaggedTextOps =
let tagMethod t = mkTag LayoutTag.Method t
let tagModule t = mkTag LayoutTag.Module t
let tagModuleBinding name = if keywordFunctions.Contains name then mkTag LayoutTag.Keyword name else mkTag LayoutTag.ModuleBinding name
let tagFunction t = mkTag LayoutTag.Function t
let tagNamespace t = mkTag LayoutTag.Namespace t
let tagNumericLiteral t = mkTag LayoutTag.NumericLiteral t
let tagOperator t = mkTag LayoutTag.Operator t
Expand Down
2 changes: 2 additions & 0 deletions src/fsharp/utils/sformat.fsi
Expand Up @@ -70,6 +70,7 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl
| Method
| Member
| ModuleBinding
| Function
| Module
| Namespace
| NumericLiteral
Expand Down Expand Up @@ -125,6 +126,7 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl
val tagLineBreak: string -> TaggedText
val tagMethod: string -> TaggedText
val tagModuleBinding: string -> TaggedText
val tagFunction : string -> TaggedText
val tagLocal: string -> TaggedText
val tagRecord: string -> TaggedText
val tagRecordField: string -> TaggedText
Expand Down
Expand Up @@ -19330,6 +19330,7 @@ FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.
FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagMethod()
FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagModule()
FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagModuleBinding()
FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagFunction()
FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagNamespace()
FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagNumericLiteral()
FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagOperator()
Expand Down Expand Up @@ -19363,6 +19364,7 @@ FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.
FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagMethod
FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagModule
FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagModuleBinding
FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagFunction
FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagNamespace
FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagNumericLiteral
FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagOperator
Expand Down Expand Up @@ -42194,6 +42196,7 @@ Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Member
Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Method
Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Module
Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 ModuleBinding
Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Function
Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Namespace
Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 NumericLiteral
Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Operator
Expand Down Expand Up @@ -42230,6 +42233,7 @@ Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsMember
Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsMethod
Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsModule
Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsModuleBinding
Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsFunction
Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsNamespace
Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsNumericLiteral
Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsOperator
Expand Down Expand Up @@ -42263,6 +42267,7 @@ Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsMember()
Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsMethod()
Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsModule()
Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsModuleBinding()
Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsFunction()
Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsNamespace()
Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsNumericLiteral()
Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsOperator()
Expand Down Expand Up @@ -42300,6 +42305,7 @@ Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredForm
Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Method
Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Module
Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag ModuleBinding
Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Function
Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Namespace
Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag NumericLiteral
Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Operator
Expand Down Expand Up @@ -42333,6 +42339,7 @@ Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredForm
Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Method()
Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Module()
Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_ModuleBinding()
Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Function()
Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Namespace()
Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_NumericLiteral()
Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Operator()
Expand Down Expand Up @@ -42400,6 +42407,7 @@ Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.Structured
Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagMethod(System.String)
Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagModule(System.String)
Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagModuleBinding(System.String)
Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagFunction(System.String)
Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagNamespace(System.String)
Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagNumericLiteral(System.String)
Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagOperator(System.String)
Expand Down

0 comments on commit 30592af

Please sign in to comment.